Sto tentando di eseguire il seguente example per compilare, assemblare e disassemblare un piccolo programma utilizzando la catena di strumenti LLVM.Compilare, assemblare e smontare utilizzando la catena di utensili LLVM
La mia intenzione è di imparare come funziona, quindi, in ulteriori prove, potrei fare un test delle prestazioni cambiando e/o riordinando le istruzioni di assmbly.
Per cominciare, in primo luogo ho ottenere il codice morso di un programma fittizio:
% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc
Una volta che ho il codice morso, cerco di utilizzare la LLVM-dis utility per dare un'occhiata all'assemblea LLVM codice e llc per compilare il programma torna al montaggio nativo utilizzando il generatore di codice LLC (solo per la scossa di cercare):
% llvm-dis < hello.bc | less
% llc hello.bc -o hello.s
Ma in entrambi i casi ottengo il seguente errore:
llvm-dis: Invalid MODULE_CODE_GLOBALVAR record
Qualche idea su come risolvere questo problema?
Ho cercato su Google e non ho trovato una soluzione. Ho anche provato a usare
otool -tV hello
Ma l'uscita non è compatibile con llvm. Invece di ottenere il seguente formato di montaggio:
.section __TEXT,__text,regular,pure_instructions
.globl _main
.align 4, 0x90
_main:
Leh_func_begin1:
pushq %rbp
Ltmp0:
movq %rsp, %rbp
Ltmp1:
subq $16, %rsp
Ltmp2:
leaq L_.str(%rip), %rax
ottengo:
__TEXT,__text) section
start:
0000000100000eb0 pushq $0x00
0000000100000eb2 movq %rsp,%rbp
0000000100000eb5 andq $0xf0,%rsp
0000000100000eb9 movq 0x08(%rbp),%rdi
0000000100000ebd leaq 0x10(%rbp),%rsi
0000000100000ec1 movl %edi,%edx
0000000100000ec3 addl $0x01,%edx
Il che non è valido per me come io gatto compilare il secondo montaggio con ad esempio:
% gcc hello.s -o hello.native
Grazie in anticipo.
LLVM-GCC è deprecato. Puoi provare clang? – arrowd
Ho il problema simile. L'hai risolto in qualche modo ??? – Cartesius00