链接脚本之bss段的清空

链接脚本与BSS段清空
链接脚本

每一个链接的过程都叫链接脚本,,一般是以lds作为后缀名,链接脚本规定把输入文件放到输出文件中,主要是用于空间布局的,我们这里就是利用链接脚本来清空bss段
:编译器有默认的链接脚本,用ld-verbose查看,同时使用-T来指定自己的链接脚本

源代码
OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm",
	      "elf32-littlearm") //选择大端序或者小端絮
OUTPUT_ARCH(arm) //arm架构
ENTRY(_start) //从标号_start开始
SECTIONS
{
	. =0x50000000; //将地址定位到50000000
	
	.text :{
		head.o(.text) //指定代码段开始为head.o
		*(.text) //所有的.text段在后面
	}
	. =ALIGN(4);//四字节对齐
	
	.data :{  //紧挨着上面text段
		*(.data) //所有data段
	}
	. = ALIGN(4);
	
	start_bss = .; //定义一个类似于标号值,来记录bss段的开始
	.bss :{
		*(.bss) //所有bss段
	}
	. = ALIGN(4);
	end_bss = .; //bss段的结束
}

在汇编中定义

start_bss_: //定义连接脚本的标号
	.word start_bss
end_bss_://定义连接脚本的标号
	.word end_bss
clr_bss:
	stmfd sp!, {r0-r12,lr}
	mov r2,#0

	ldr r0,start_bss_
	ldr r1,end_bss_
	
	clr_loop: //bss清空
		cmp r0,r1
		bge clrover
		str r2,[r0],#4
	b clr_loop

	clrover:
	
	ldmfd sp!, {r0-r12,pc}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值