【问题标题】:GCC: Section names containing the / characterGCC:包含 / 字符的部分名称
【发布时间】:2014-10-17 21:17:28
【问题描述】:

这个问题的答案:

gcc/ld: Allow Code Placement And Removal of Unused Functions

似乎是一个非常好的。但是,在尝试使用它时,我发现只要遇到斜杠 (/) 字符,部分名称就会被截断。

__FILE__ 包含文件的路径,因此包含 / 字符。链接器在创建节名时删除 / 字符后面的所有内容,例如:

#define SEC_TEXT __attribute__((section(".mytext.bl/ah.c")))                                                                                                                                                                                                                                                    
unsigned char SEC_TEXT poll(void)

我最终得到了这个部分名称:

  [ 8] .mytext.bl        PROGBITS        00000000 000120 00003d 00      0   0  1

如果我使用你的答案,使用__LINE____FILE__

#define __S(s) #s
#define _S(s) __S(s)
#define SECTION __FILE__ "." _S(__LINE__)                                                                                                                                                                                                                                                                                      
#define SEC_MYTEXT __attribute__((section(".mytext." SECTION)))
unsigned char SEC_MYTEXT poll(void)

我明白了:

  [ 8] .mytext.          PROGBITS        00000000 000120 00003d 00      0   0  1

但是你可以从预处理器的输出中看到它应该给我一个包含文件和行的部分名称:

unsigned char __attribute__((section(".mytext." "/path/to/mycode/poll.c" "." "250"))) poll

有什么办法可以解决这个问题?

【问题讨论】:

    标签: gcc linker ld sections


    【解决方案1】:

    嗯,只有免费的 Mentor Graphics Intel (x86) 编译器在 4.6.3 和 4.7.2 中都显示了这种行为。带有 Ubuntu 14.04 的 GCC 4.8.2 可以处理部分名称中的斜杠。 Mentor ARM 编译器 4.6.3 也是如此。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多