标题:如何在第一个和第二个区域都应用“RW 数据压缩”时使 arm 链接器解压缩第二个加载区域?
我有一个下面的分散文件(我的复杂分散文件的简单版本)
LOAD_REGION_01 0x0
{
EXECUTION_REGION_01 0x0
{
ABC.o (+RO,+RW)
}
}
LOAD_REGION_02 +0x0
{
EXECUTION_REGION_02 0x100
{
DEF.o (+RO,+RW)
}
}
RW 数据压缩是自动应用的,我得到了一个大小为 0x40 的二进制文件(对于 LOAD_REGION_01 为 0x20,对于 LOAD_REGION_02 为 0x20),得到了如下 MAP 文件的 link.info。
Load Region LOAD_REGION_01 (Base: 0x0, Size: 0x30, Max: 0x000000a0, ABSOLUTE)
Execution Region EXECUTION_REGION_01 (Base:0x0,Size:0x30,Max:0xffffffff,ABSOLUTE, COMPRESSED[0x20])
Load Region LOAD_REGION_02 (Base: 0x30, Size: 0x30, Max: 0x000000a0, ABSOLUTE)
Execution Region EXECUTION_REGION_02 (Base:0x0,Size:0x30,Max:0xffffffff,ABSOLUTE, COMPRESSED[0x20])
我发现压缩后加载区域的大小是0x20,但是第二个加载区域的起始地址是0x30!并且,第一个区域的解压缩工作正常,但是 arm 尝试从地址“0x30”而不是“0x20”解压缩第二个区域。
因此,会产生错误的解压结果。如何使arm链接器正确解压第二个?或者我如何为第二个加载区域 LOAD_REGION_02 的加载地址分配属性 +0 (因为大小加载区域 1 可能会改变......)?
我阅读了所有用户手册,但没有答案...