微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

GNU链接器-如何填充未使用的内存空间

如何解决GNU链接器-如何填充未使用的内存空间

程序中的某些部分位于内存中的不同位置,并且还有一些未使用的内存位置。以下是我程序的目标文件的一部分:

a0000128:   20cf8f93            addi    t6,t6,524 # a0000330 <region_1>
a000012c:   000f8067            jr  t6

disassembly of section .fill:

00000000a0000130 <_end-0x800290>:
    a0000130:   deaa                    sw  a0,124(sp)
    a0000132:   c0ad                    beqz    s1,a0000194 <_start+0x194>
    a0000134:   dede                    sw  s7,124(sp)
    a0000136:   c0ad                    beqz    s1,a0000198 <_start+0x198>
    ...

disassembly of section .s_region_1:

00000000a0000330 <region_1>:
    a0000330:   00400f97            auipc   t6,0x400
    a0000334:   00cf8f93            addi    t6,12 # a040033c <region_2>
    a0000338:   000f8067            jr  t6

如图所示,地址为0xa000012c的指令跳转到地址为0xa0000330的另一条指令。由于存在未使用的内存位置,因此在链接描述文件中使用了FILL命令。但是,相应的HEX文件(由objcopy -O verilog生成)不包含region_1的机器代码。也就是说,HEX文件仅包含.text节和用于填充未使用的内存区域的数据:

13 0F 00 00 9B 0F 10 00 93 9F FF 01 1B 08 F0 FF 
13 18 38 03 13 08 18 04 13 18 C8 00 13 08 98 12 
73 10 18 30 97 0F 00 00 93 8F CF 20 67 80 0F 00 
@A0000130
AA DE AD C0 DE DE AD C0 DE DE AD C0 DE DE AD C0 
DE DE AD C0 DE DE AD C0 DE DE AD C0 DE DE AD C0 
DE DE AD C0 DE DE AD C0 DE DE AD C0 DE DE AD C0 
DE DE AD C0 DE DE AD C0 DE DE AD C0 DE DE AD C0 
...

以下是链接描述文件内容

SECTIONS
{
  . = 0xA0000000;
  .text : { *(.text) }
.fill :
{
    FILL(0xDEADC0DE);
    BYTE(0xAA); 
    . = . + 0x1FF;
}
.s_region_1 : { *(s_region_1) }
.bss : { *(.bss) }
_end = .;
}

上面的链接描述脚本有什么问题?

这是我要生成的内存映射:

/*************************/





            .text





/*************************/



    /* EMPTY REGION */



/*************************/



        .section_1



/*************************/

解决方法

我注意到定义该节时必须在汇编代码中添加"aw" flags

?: (urls.E007) The custom handler500 view 'client_interface.views.errors.server_error_view.ServerErrorView' does not take the correct number of arguments (request).

添加“ aw”标志后,objcopy按预期生成了十六进制文件:

get

以下是我的链接器文件的最终版本:

get(request)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。