S3C2440链接脚本与位置无关码分析

    xiaoxiao2021-03-25  7

    串口裸机程序中有如下链接脚本

    SECTIONS { . = 0x30000000; .text : { *(.text) } .rodata ALIGN(4) : {*(.rodata)} .data ALIGN(4) : { *(.data) } .bss ALIGN(4) : { *(.bss) *(COMMON) } }

        .= 0x30000000;

    这个程序应该放置在0x30000000。

    但是为什么这个程序上来可以执行呢?

    位置无关码:可以执行

    Bl相对位置跳转指令  是一种位置无关码(不管代码位置在哪,都可以执行)。

    位置无关码的PC值如下:

    PC值:

    PC(新)=P(当前)+偏移(与BL指令有关)

    PC=4+8(4+8当前位置+8)+0x28=0x34

    BL会把返回地址保存到LR寄存器中

    ldr 位置相关码,因为SDRAM上来还没有初始化,所以还不能使用0x30000034

    两种SDRAM初始化方法:位置相关与无关

    如何写位置无关码:

    转载请注明原文地址: https://ju.6miu.com/read-200114.html

    最新回复(0)