如何告诉lld将代码置于特定位置或以上?
我有一个legacy piece of code依赖于一个相当可疑的逻辑:某个函数可以接收一个值,该值表示函数指针数组的索引,或者实际上是函数指针。该函数通过检查值是否小于0x10000
来确定值的类型;如果是这样,它就是一个索引。如果没有,它就是一个函数指针。
就像我真的那样,我无法改变这段代码。
不幸的是,测试甚至不起作用:在OSX上(它还没有表现为其他任何人的问题),程序中的函数指针可以具有比该阈值低得多的地址,这意味着有问题的函数将它们检测为索引而不是指针,一切都出错了。
是否有一条指令我可以给链接器 - 在这种情况下为lld - 强制它将所有生成的代码置于0x10000
或以上,以便这个问题消失,直到有人能修复荒谬的测试?
我尝试了-sectalign
选项,但是出现以下错误:
ld:-sectalign的参数必须小于或等于0x8000
0x8000
还不够;代码仍然放在它和0x10000
之间的空间中,逻辑仍然失败。
我可以使用另一个选项吗?
答案 0 :(得分:1)