在编写内核时,我正在尝试调试我遇到的链接器问题。
问题是我有一个SCAN_CODE_MAPPING
无法使用的变量——它似乎是空的或什么的。我可以通过更改链接程序的方式来解决此问题,但我不知道为什么。
当我使用 来查看生成的二进制文件objdump
时,变量的数据肯定在那里,所以只是对它的引用有问题。
这是链接器脚本和两个文件之间不同的符号表部分的要点。
让我感到困惑的是,两个符号表都具有相同的符号,它们的长度都相同,而且它们似乎包含正确的数据。我能看到的唯一区别是它们的顺序不同。
到目前为止我已经尝试过
- 检查
SCAN_CODE_MAPPING
内存位置以确保它具有我期望的数据并且没有被归零 - 检查所有符号是否相同
- 检查所有符号内容的长度是否相同
- 查看
.data.rel.ro.local
以确保它具有数据的地址
一个可能的线索是这个警告:
warning: uninitialized space declared in non-BSS section `.text': zeroing
我在损坏的情况下和正确的情况下都得到了。
接下来我应该尝试什么?