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

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

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初始化方法:位置相关与无关


如何写位置无关码:



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值