crt0.s

来自「用于嵌入式Linux系统的标准C的库函数」· S 代码 · 共 76 行

S
76
字号
; ARC start up file; In the absence of a custom linker script, go with something simple.; We do not support passing arguments to "main", but this is an embedded; system anyway.;; We call init/fini here without cpu prefixes because there is always; only one .init/.fini section per image.	.section .text	.align 4	.global	startstart:	mov	sp,end		; Round "sp" up to page after "end".	add	sp,sp,4095	and	sp,sp,-4096	ld	r8,[stack_size]	; Add stack size to "sp".	add	sp,sp,r8	st	sp,[sbrk_start]	; Initialize malloc heap.	st	sp,[sbrk_loc]	sub	sp,sp,16	; callee expects 16 bytes already "pushed".	mov	fp,0		; Top of stack frame indicator.	mov	r0,edata	; Zero bss.	mov	r2,end	sub	r2,r2,r0	mov	r1,0#ifdef __base__	bl.nd	_memset	bl.nd	init		; .init section entry point.	mov	r0,%st(fini)	; .fini section entry point.	bl.nd	_atexit	mov	r0,0		; argc	mov	r1,0		; argv	bl.nd	_main	bl.nd	_exit#endif#ifdef __host__	bl.nd	_host_memset	bl.nd	init		; .init section entry point.	mov	r0,%st(fini)	; .fini section entry point.	bl.nd	_host_atexit	mov	r0,0		; argc	mov	r1,0		; argv	bl.nd	_host_main	bl.nd	_host_exit#endif#ifdef __graphics__	bl.nd	_graphics_memset	bl.nd	init		; .init section entry point.	mov	r0,%st(fini)	; .fini section entry point.	bl.nd	_graphics_atexit	mov	r0,0		; argc	mov	r1,0		; argv	bl.nd	_graphics_main	bl.nd	_graphics_exit#endif#ifdef __audio__	bl.nd	_audio_memset	bl.nd	init		; .init section entry point.	mov	r0,%st(fini)	; .fini section entry point.	bl.nd	_audio_atexit	mov	r0,0		; argc	mov	r1,0		; argv	bl.nd	_audio_main	bl.nd	_audio_exit#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?