谁决定了ARM中符号的位置

时间:2012-11-30 09:28:29

标签: linux-kernel kernel arm embedded-linux odroid

我正在linux kerenl中查看arch / arm / boot / compressed / head.S。

我的主板是odroid-S,当我看到我从readelf -S arch / arm / boot / compressed / vmlinux获得的符号表时,我看到了这些代码。

    LC0:  .word LC0         @ r1 
    .word   __bss_start     @ r2 
    .word   _end            @ r3 
    .word   zreladdr        @ r4 
    .word   _start          @ r5 
    .word   _got_start      @ r6 
    .word   _got_end        @ ip 
    .word   user_stack+4096     @ sp `

但是他们所拥有的每个地址都没有排序。 例如,LC0值为0000013c 但__bss_start是0031a734。

有人能告诉我什么证实了这些符号的价值???

1 个答案:

答案 0 :(得分:3)

在编译像操作系统或引导加载程序这样的软件的裸机实现时,会有一个特定于平台的linker script将指定每个部分将进入的地址。链接器脚本将根据平台的内存映射进行编写。

当操作系统加载可执行文件时,加载的操作系统将读取elf文件中的各个部分,并确保每个部分都放入进程内存映射的正确部分。然后,OS加载程序将根据需要修复任何未链接的地址。