指定文本段

时间:2015-06-07 17:04:55

标签: linker lld blitzmax

如何告诉lld将代码置于特定位置或以上?

我有一个legacy piece of code依赖于一个相当可疑的逻辑:某个函数可以接收一个值,该值表示函数指针数组的索引,或者实际上是函数指针。该函数通过检查值是否小于0x10000来确定值的类型;如果是这样,它就是一个索引。如果没有,它就是一个函数指针。

就像我真的那样,我无法改变这段代码。

不幸的是,测试甚至不起作用:在OSX上(它还没有表现为其他任何人的问题),程序中的函数指针可以具有比该阈值低得多的地址,这意味着有问题的函数将它们检测为索引而不是指针,一切都出错了。

是否有一条指令我可以给链接器 - 在这种情况下为lld - 强制它将所有生成的代码置于0x10000或以上,以便这个问题消失,直到有人能修复荒谬的测试?

我尝试了-sectalign选项,但是出现以下错误:

  

ld:-sectalign的参数必须小于或等于0x8000

0x8000还不够;代码仍然放在它和0x10000之间的空间中,逻辑仍然失败。

我可以使用另一个选项吗?

1 个答案:

答案 0 :(得分:1)

您将需要编写一个链接描述文件。 LLD支持GNU LD style linker scripts。它们看起来像:

fread

此脚本会将.text部分放置在0x8000000。