最近遇到一个问题,就是需要从编译好的 ELF 里提取出编译时的参数,比如 Wall,Werror 一类的。GCC 下很容易,有一个 section 叫.GCC.command.line
。但是 Clang 编译出的 ELF 里没有类似的 section 。
请问哪位有点思路?我应该怎么去找。谢谢
1
secondwtq 2020-09-04 01:14:40 +08:00 1
我还不知道有这个功能 ...
查了一下发现 GCC 有个 flag 叫 -frecord-gcc-switches,不写好像是不会有这个 section 的。楼主该不会是哪个发行版默认打开了吧 然后 Clang 一般是和 GCC 兼容的,直接找对应的 flag 就行了 https://reviews.llvm.org/rL299037 https://reviews.llvm.org/D54487 |
2
dangyuluo OP |
3
ivan_wl 2020-09-04 10:39:34 +08:00
1. 把编译参数写入一个文本文件
2. 生成一个.S 汇编,定义全局符号,用.incbin 包含刚才的文本文件,结尾再加个.byte 0,这样就定义了一个字符串 3. 带着这个.S 一起编译就行了,c 代码中可以用.S 定义的全局符号访问这个字符串了 |
4
secondwtq 2020-09-04 19:45:53 +08:00
-g 是调试信息 flag, -grecord-gcc-switches 是把参数存进调试信息,不是 .GCC.command.line 。GCC 也有 -grecord-gcc-switches 。
我说是兼容的就是名字是一样的。当然实现可能会塞点私货。 你要是没有 -frecord-gcc-switches 那估计是版本老了点。 |