43 lines
		
	
	
		
			672 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			672 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
 | 
						|
    .section .init
 | 
						|
    .globl _start
 | 
						|
    .type _start,@function
 | 
						|
 | 
						|
.extern main
 | 
						|
# .extern trap_handler
 | 
						|
.extern SW_handler
 | 
						|
.extern entry
 | 
						|
_start:
 | 
						|
 | 
						|
    la sp, _sp
 | 
						|
 | 
						|
    /* Load data section */
 | 
						|
    la a0, _data_lma
 | 
						|
    la a1, _data
 | 
						|
    la a2, _edata
 | 
						|
    bgeu a1, a2, 2f
 | 
						|
1:
 | 
						|
    lw t0, (a0)
 | 
						|
    sw t0, (a1)
 | 
						|
    addi a0, a0, 4
 | 
						|
    addi a1, a1, 4
 | 
						|
    bltu a1, a2, 1b
 | 
						|
2:
 | 
						|
 | 
						|
    /* Clear bss section */
 | 
						|
    la a0, __bss_start
 | 
						|
    la a1, _end
 | 
						|
    bgeu a0, a1, 2f
 | 
						|
1:
 | 
						|
    sw zero, (a0)
 | 
						|
    addi a0, a0, 4
 | 
						|
    bltu a0, a1, 1b
 | 
						|
2:
 | 
						|
    la a0, SW_handler
 | 
						|
    csrw mtvec, a0
 | 
						|
 | 
						|
    /* Call global constructors */
 | 
						|
    # la a0, __libc_fini_array
 | 
						|
    # call __libc_init_array
 | 
						|
    # j main
 | 
						|
    j entry |