Tôi đang cố gắng chạy example sau để Biên dịch, Lắp ráp và Tháo rời một chương trình nhỏ bằng chuỗi công cụ LLVM.Biên dịch, Lắp ráp và Tháo rời Sử dụng Chuỗi Công cụ LLVM
Mục đích của tôi là tìm hiểu cách hoạt động của nó để cố gắng hơn nữa tôi có thể thực hiện một số kiểm tra hiệu suất bằng cách thay đổi và/hoặc sắp xếp lại các hướng dẫn của trình điều khiển.
Để bắt đầu, đầu tiên tôi nhận được mã cắn của một chương trình giả:
% llvm-gcc -O3 -emit-llvm hello.c -c -o hello.bc
Khi tôi có mã cắn, tôi cố gắng để sử dụng llvm-dis tiện ích để có một cái nhìn tại đại hội LLVM mã và llc để biên dịch chương trình trở lại lắp ráp tự nhiên bằng cách sử dụng bộ tạo mã LLC (chỉ dành cho rung cố gắng):
% llvm-dis < hello.bc | less
% llc hello.bc -o hello.s
Nhưng trong cả hai trường hợp tôi nhận được lỗi sau:
llvm-dis: Invalid MODULE_CODE_GLOBALVAR record
Bất kỳ ý tưởng nào về cách giải quyết vấn đề này?
Tôi đã googled và tôi chưa tìm thấy giải pháp. Tôi cũng đã cố gắng sử dụng
otool -tV hello
Nhưng đầu ra không tương thích với llvm. Thay vì nhận được định dạng lắp ráp sau:
.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
tôi nhận được:
__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
nào không có giá trị đối với tôi như tôi mèo biên dịch assembly sau với ví dụ:
% gcc hello.s -o hello.native
Cảm ơn trước.
llvm-gcc bị phản đối. Bạn có thể thử clang? – arrowd
Tôi có vấn đề tương tự. Bạn đã giải quyết nó bằng cách nào đó ??? – Cartesius00