Может ли LLVM выполнять биткод на iOS (arm64)? ⇐ IOS
Может ли LLVM выполнять биткод на iOS (arm64)?
Я пытаюсь выполнить биткод LLVM на устройстве iOS. Я скомпилировал файл биткода, используя clang -emit-llvm -S -c ./test.cpp -o .test.ll -target Arm64-apple-ios7.1, ориентированный на устройство Arm64. Начиная с версии LLVM/Clang 3.5 поддерживаются устройства iOS Arm64. Затем я пытаюсь вызвать код с помощью MCJit'ter и получаю исключение: http://llvm.org/bugs/show_bug.cgi?id=21012
Это ограничение ОС/устройства iOS или ошибка LLVM/Clang? Я тестирую iPad Air с iOS 7.1.
ПС. Биткод выглядит правильно и нацелен на правильную цель:
; ModuleID = './test.cpp' целевой datalayout = "e-m:e-i64:64-i128:128-n32:64-S128" целевой тройной = "arm64-apple0ios7.1" @.str = частная константа безымянного_адреса [12 x i8] c"hello world\00", выравнивание 1 ; Атрибуты функции: nounwind define i32 @main(i32 %argc, i8** %argv) #0 { вход: %retval = alloca i32, выровнять 4 %argc.addr = alloca i32, выровнять 4 %argv.addr = alloca i8**, выровнять 8 %c = alloca i8*, выровнять 8 %a = alloca i32, выровнять 4 %b = выделить i32, выровнять 4 сохранить i32 0, i32* %retval сохранить i32 %argc, i32* %argc.addr, выровнять 4 сохранить i8** %argv, i8*** %argv.addr, выровнять 8 сохранить входящие входы i8* getelementptr ([12 x i8]* @.str, i32 0, i32 0), i8** %c, align 8 сохранить i32 1, i32* %a, выровнять 4 %0 = загрузить i32* %a, выровнять 4 %add = добавить nsw i32 %0, 6 сохранить i32 %add, i32* %b, выровнять 4 вернуть i32 3 } атрибуты #0 = { nounwind "less-precision-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp- math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float" ="ложь" } !llvm.ident = !{!0} !0 = метаданные !{метаданные !"clang версия 3.6.0 (транк 218116) (llvm/trunk 218115)"}
Он был скомпилирован LLVM/Clang (транк после выпуска 3.5) из простого исходного кода:
int main(int argc, const char **argv) { const char *c = «Привет, мир»; интервал а = 1; интервал б = а + 6; возврат 3; } ППС. Код интерпретатора — это почти код инструмента lli со следующими аргументами:
return llvm_interpret( Входной файл, std::vector(), // argv ложь, // ForceInterpreter правда, // UseMCJIT ложь, // ОтладкаIR ложь, // RemoteMCJIT "", //ДочернийExecPath ' ', // Уровень выбора std::string(/*"arm64-apple-ios7.1"*/), // TargetTriple std::string(/*"arm64"*/), // МАРТ std::string("generic"), // MCPU std::vector(), // MAttrs "основной", // EntryFunc std::vector(), // Дополнительные модули std::vector(), // Дополнительные объекты std::vector(), // Экстраархивы ложь, // EnableCacheManager std::string(), // ObjectCacheDir std::string(), // FakeArgv0 ложь, // ОтключитьCoreFiles ложь, // NoLazyCompilation Reloc::Static, // RelocModel (по умолчанию Reloc::PIC_) CodeModel::JITDefault, // CMModel (по умолчанию — CodeModel::JITDefault) ложь, // GenerateSoftFloatCalls FloatABI::Default, // FloatABIForCalls ложь, // EmitJitDebugInfo ложь // EmitJitDebugInfoToDisk ); Исключение:
rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue(), (char **)GVTOP(ArgValues[1]))); 0x4a18000: .long 0xd10083ff; неизвестный код операции 0x4a18004: stmdbhs r3, {r5, r6, r7, r8, r9, r10, r11, r12, sp, lr} 0x4a18008: .long 0xf9000be1; неизвестный код операции 0x4a1800c: и ls r0, r0, r8 0x4a18010: .long 0xf9401908; неизвестный код операции 0x4a18014: andlo r0, r0, #0xa4000003 0x4a18018: andlo r0, r0, #0x3a800 0x4a1801c: andlo r0, r0, #0x3800000
Я пытаюсь выполнить биткод LLVM на устройстве iOS. Я скомпилировал файл биткода, используя clang -emit-llvm -S -c ./test.cpp -o .test.ll -target Arm64-apple-ios7.1, ориентированный на устройство Arm64. Начиная с версии LLVM/Clang 3.5 поддерживаются устройства iOS Arm64. Затем я пытаюсь вызвать код с помощью MCJit'ter и получаю исключение: http://llvm.org/bugs/show_bug.cgi?id=21012
Это ограничение ОС/устройства iOS или ошибка LLVM/Clang? Я тестирую iPad Air с iOS 7.1.
ПС. Биткод выглядит правильно и нацелен на правильную цель:
; ModuleID = './test.cpp' целевой datalayout = "e-m:e-i64:64-i128:128-n32:64-S128" целевой тройной = "arm64-apple0ios7.1" @.str = частная константа безымянного_адреса [12 x i8] c"hello world\00", выравнивание 1 ; Атрибуты функции: nounwind define i32 @main(i32 %argc, i8** %argv) #0 { вход: %retval = alloca i32, выровнять 4 %argc.addr = alloca i32, выровнять 4 %argv.addr = alloca i8**, выровнять 8 %c = alloca i8*, выровнять 8 %a = alloca i32, выровнять 4 %b = выделить i32, выровнять 4 сохранить i32 0, i32* %retval сохранить i32 %argc, i32* %argc.addr, выровнять 4 сохранить i8** %argv, i8*** %argv.addr, выровнять 8 сохранить входящие входы i8* getelementptr ([12 x i8]* @.str, i32 0, i32 0), i8** %c, align 8 сохранить i32 1, i32* %a, выровнять 4 %0 = загрузить i32* %a, выровнять 4 %add = добавить nsw i32 %0, 6 сохранить i32 %add, i32* %b, выровнять 4 вернуть i32 3 } атрибуты #0 = { nounwind "less-precision-fpmad"="false" "no-frame-pointer-elim"="true" "no-frame-pointer-elim-non-leaf" "no-infs-fp- math"="false" "no-nans-fp-math"="false" "stack-protector-buffer-size"="8" "unsafe-fp-math"="false" "use-soft-float" ="ложь" } !llvm.ident = !{!0} !0 = метаданные !{метаданные !"clang версия 3.6.0 (транк 218116) (llvm/trunk 218115)"}
Он был скомпилирован LLVM/Clang (транк после выпуска 3.5) из простого исходного кода:
int main(int argc, const char **argv) { const char *c = «Привет, мир»; интервал а = 1; интервал б = а + 6; возврат 3; } ППС. Код интерпретатора — это почти код инструмента lli со следующими аргументами:
return llvm_interpret( Входной файл, std::vector(), // argv ложь, // ForceInterpreter правда, // UseMCJIT ложь, // ОтладкаIR ложь, // RemoteMCJIT "", //ДочернийExecPath ' ', // Уровень выбора std::string(/*"arm64-apple-ios7.1"*/), // TargetTriple std::string(/*"arm64"*/), // МАРТ std::string("generic"), // MCPU std::vector(), // MAttrs "основной", // EntryFunc std::vector(), // Дополнительные модули std::vector(), // Дополнительные объекты std::vector(), // Экстраархивы ложь, // EnableCacheManager std::string(), // ObjectCacheDir std::string(), // FakeArgv0 ложь, // ОтключитьCoreFiles ложь, // NoLazyCompilation Reloc::Static, // RelocModel (по умолчанию Reloc::PIC_) CodeModel::JITDefault, // CMModel (по умолчанию — CodeModel::JITDefault) ложь, // GenerateSoftFloatCalls FloatABI::Default, // FloatABIForCalls ложь, // EmitJitDebugInfo ложь // EmitJitDebugInfoToDisk ); Исключение:
rv.IntVal = APInt(32, PF(ArgValues[0].IntVal.getZExtValue(), (char **)GVTOP(ArgValues[1]))); 0x4a18000: .long 0xd10083ff; неизвестный код операции 0x4a18004: stmdbhs r3, {r5, r6, r7, r8, r9, r10, r11, r12, sp, lr} 0x4a18008: .long 0xf9000be1; неизвестный код операции 0x4a1800c: и ls r0, r0, r8 0x4a18010: .long 0xf9401908; неизвестный код операции 0x4a18014: andlo r0, r0, #0xa4000003 0x4a18018: andlo r0, r0, #0x3a800 0x4a1801c: andlo r0, r0, #0x3800000
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как включить или отключить биткод для конкретной библиотеки или SDK в проекте Xcode
Anonymous » » в форуме IOS - 0 Ответы
- 15 Просмотры
-
Последнее сообщение Anonymous
-