我正在使用 gcc 标志 -ffunction-sections 编译一个 C 文件,以将每个函数移动到它自己的部分中。汇编程序抛出错误:
job_queue.s:2395: Error: operation combines symbols in different segments
此处给出了第 2395 行的编译器汇编输出:
.section .debug_ranges,info
.Ldebug_ranges0:
.4byte .LBB7-.Ltext0
符号 LBB7 位于名为“.text.add_event_handler”的函数(因此该节)中 符号 Ltext0 位于名为“.text”的(否则为空)节中
GCC --version 给出:
pic30-elf-gcc.exe (GCC) 4.0.3 (dsPIC30, Microchip v3_30) (B) Build date: Jun 29 2011
如果我使用编译器标志 -g0 (关闭调试信息),一切都会编译并完美运行。
我的问题:这个 GCC 输出明显错误吗?在我看来,GCC 应该从 .add_even_handler 部分而不是 .text 部分的开头计算符号 LBB7 的偏移量。
我怀疑我误解了什么,因为我在谷歌上找不到任何有同样困难的人。