如何告诉 lld 将代码放置在某个位置或上方?
我有一段遗留代码依赖于一段相当有问题的逻辑:某个函数可以接收一个值,该值要么表示函数指针数组的索引,要么实际上是函数指针。该函数通过检查值是否小于来确定值的类型0x10000
;如果是这样,它是一个索引。如果不是,它是一个函数指针。
尽管我真的很想,但我无法更改这段代码。
不幸的是,测试甚至不起作用:在 OSX 上(它还没有对其他地方的任何人造成问题),程序中的函数指针的地址可能比阈值低得多,这意味着有问题的函数可以检测到它们作为索引而不是指针,一切都会出错。
有没有我可以给链接器的指令——在这种情况下是 lld——强制它把所有生成的代码放在上面或上面0x10000
,这样这个问题就会消失,直到有人可以修复这个荒谬的测试?
我尝试了该-sectalign
选项,但这给出了以下错误:
ld:-sectalign 的参数必须小于或等于 0x8000
0x8000
还不够;代码仍然放置在它之间的空间中,0x10000
并且逻辑仍然失败。
我可以使用其他选项来执行此操作吗?