67 lines
		
	
	
		
			962 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			962 B
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| #include "encoding.h"
 | |
| // See LICENSE for license details.
 | |
| 
 | |
| 	.section .init
 | |
| 	.globl _start
 | |
| 	.type _start,@function
 | |
| 
 | |
| _start:
 | |
| .option push
 | |
| .option norelax
 | |
| .option norvc
 | |
| 	j 1f
 | |
| 	.2byte	0x4e4d
 | |
| 	.2byte	0x5352
 | |
| 	.4byte  0x669
 | |
| 1:
 | |
|     la gp, __global_pointer$
 | |
| .option pop
 | |
| 	la sp, _sp
 | |
|     la t0, trap_entry
 | |
|     csrw mtvec, t0
 | |
| 	/* Load data section */
 | |
| 	la a0, _data_lma
 | |
| 	la a1, _data
 | |
| 	la a2, _edata
 | |
| 	bgeu a1, a2, 2f
 | |
| 1:
 | |
| 	lw t0, (a0)
 | |
| 	addi a0, a0, 4
 | |
| 	sw t0, (a1)
 | |
| 	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:
 | |
| 
 | |
| 	/* Call global constructors */
 | |
| #ifndef HAVE_NO_INIT_FINI
 | |
| 	la a0, __libc_fini_array
 | |
| 	call atexit
 | |
| 	call __libc_init_array
 | |
| #endif
 | |
| #ifndef __riscv_float_abi_soft
 | |
| 	/* Enable FPU */
 | |
| 	li t0, MSTATUS_FS
 | |
| 	csrs mstatus, t0
 | |
| 	csrr t1, mstatus
 | |
| 	and t1, t1, t0
 | |
| 	beqz t1, 1f
 | |
| 	fssr x0
 | |
| 1:
 | |
| #endif
 | |
| 
 | |
| 	/* argc = argv = 0 */
 | |
| 	li a0, 0
 | |
| 	li a1, 0
 | |
| 	call main
 | |
| 	tail _exit
 |