您好我有一个链接描述文件,我在其中找到了代码“__exidx_start = .;
”,它将标签值设置为位置计数器“.
”的值。此标签不会在同一个链接描述文件中的任何位置使用。
有一个类似的标签定义了第一个下方的几行,它的定义方式与“__exidx_end = .;
”相同。
这两个标签是.text
和.rodata
部分的边界,但我不知道如果未在链接描述文件中使用它们,为什么会有人定义这两个?
答案 0 :(得分:2)
它们未在链接描述文件中使用,但它们被声明为外部变量并在gcc库中使用。拿出来,这就是:
.../gcc/config/arm/unwind-arm.c:614: undefined reference to `__exidx_start' .../gcc/config/arm/unwind-arm.c:614: undefined reference to `__exidx_end'
答案 1 :(得分:2)
这些符号由GCC中的调用链展开机制在内部使用,该机制在异常处理阶段进行控制。例如,unwind-arm-common.inc:104中有一个示例,其中获取异常处理表的边界作为指向这些符号的指针。
对于.ARM.exidx*
-符号所包围的条目,它们形成了一个异常处理索引表,该表是C ++ ARM Exception Handling ABI (in sect. 4.4.1)的一部分。