S5PV210汇编代码重定位

S5PV210汇编代码重定位:
链接脚本:
SECTIONS
{
. = 0xd0024000;

.text : {
	start.o
	* (.text)
}
		
.data : {
	* (.data)
}

bss_start = .; 
.bss : {
	* (.bss)
}

bss_end  = .;	

}
汇编重定位代码:
adr r0, _start //the running addr
ldr r1, =_start //the link addr
ldr r2, =bss_start //the link addr
cmp r0, r1
beq clear_bss //if (r0 == r1) the running addr equal to link addr
//just need to clear bss
//copy all segment except bss, bss segment just need to clear
copy:
ldr r3, [r0], #4
str r3, [r1], #4
cmp r1, r2
bne copy

clear_bss:
ldr r0, =bss_start
ldr r1, =bss_end
cmp r0, r1 //if (sizeof(bss) == 0) not need to clear
beq run_relocate_sram //if not copy,running addr equal to link addr
//led_blink is only one
//if copy, running addr not equal to link addr
//led_blink is two
//so run_relocate_sram to link addr
mov r2, #0x0
clear_bss_loop:
str r2, [r0], #4
cmp r0, r1
bne clear_bss_loop

run_relocate_sram:
ldr pc, =led_blink
b .
我们的链接地址和运行地址是不同的,那么怎么办呢?
把运行地址处的代码拷贝到链接地址处,再跳到链接地址处去运行,这样就能保证有位置有关代码的时候,运行地址和链接地址相同。
ldr pc, =led_blink 是长跳转,有两份led_blink,它会跳转到远的地址去。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值