A. *_* K. 2 llvm objdump objcopy llvm-ir bitcode
对于带有嵌入位码的二进制文件(即使用 编译-fembed-bitcode)。我怎样才能提取该部分,以便我可以像任何其他位码文件一样使用该位码文件,例如运行opt或llvm-dis
作为测试用例,我有这个 hello-world 程序:
// hello.cpp
#include<iostream>
int main() {
std::cout << "hello world";
return 0;
}
Run Code Online (Sandbox Code Playgroud)
编译为:clang++ -O2 test.cpp -o test.o -fembed-bitcode -c
显示其中objdump有一个__bitcode部分:
objdump -h test.o
test.o: file format Mach-O 64-bit x86-64
Sections:
Idx Name Size Address Type
0 __text 000002eb 0000000000000000 TEXT
1 __gcc_except_tab 00000068 00000000000002ec DATA
2 __cstring 0000000c 0000000000000354 DATA
3 __bitcode 00002bc0 0000000000000360 DATA
4 __cmdline 00000046 0000000000002f20 DATA
5 __compact_unwind 00000060 0000000000002f68 DATA
6 __eh_frame 000000d0 0000000000002fc8 DATA
Run Code Online (Sandbox Code Playgroud)
现在根据https://github.com/llvm/llvm-project/blob/master/llvm/test/tools/llvm-objcopy/MachO/dump-section.test,我正在尝试提取__bitcode部分以下方式:
# Take1
./bin/llvm-objcopy --dump-section=DATA,__bitcode=a.bc test.o
./bin/llvm-objcopy: error: 'test.o': section 'DATA,__bitcode' not found
# Take2
./bin/llvm-objcopy --dump-section=__bitcode=a.bc test.o
./bin/llvm-objcopy: error: 'test.o': section '__bitcode' not found
# Take3
./bin/llvm-objcopy --dump-section __DATA,__bitcode=a.bc test.o
./bin/llvm-objcopy: error: 'test.o': section '__DATA,__bitcode' not found
# Take4
./bin/llvm-objcopy --dump-section=__DATA,__bitcode=a.bc test.o
./bin/llvm-objcopy: error: 'test.o': section '__DATA,__bitcode' not found
Run Code Online (Sandbox Code Playgroud)
我在这里缺少什么?
实际上__bitcode是在LLVM部分。所以以下命令有效。
llvm-objcopy --dump-section=__LLVM,__bitcode=a.bc test.o
segedit test.o -extract __LLVM __bitcode a.bc
Run Code Online (Sandbox Code Playgroud)
似乎是一个错误objdump,它无法识别 LLVM 部分。
| 归档时间: |
|
| 查看次数: |
1304 次 |
| 最近记录: |