mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2025-01-18 12:52:44 +01:00
Koen Zandberg
c1d81cfb56
With this the riscv start code jumps to the ROM start on boot when the ROM area doesn't start at address 0x0.
70 lines
1.2 KiB
ArmAsm
70 lines
1.2 KiB
ArmAsm
/*
|
|
* Copyright (C) 2017 JP Bonn, Ken Rabold
|
|
*
|
|
* This file is subject to the terms and conditions of the GNU Lesser
|
|
* General Public License v2.1. See the file LICENSE in the top level
|
|
* directory for more details.
|
|
*/
|
|
#include "vendor/riscv_csr.h"
|
|
|
|
.section .init
|
|
|
|
.globl _start
|
|
.type _start,@function
|
|
|
|
_start:
|
|
.cfi_startproc
|
|
.cfi_undefined ra
|
|
.option push
|
|
.option norelax
|
|
csrc CSR_MSTATUS, MSTATUS_MIE
|
|
la a0, _start
|
|
li a1, ROM_START_ADDR
|
|
bleu a1, a0, _start_real
|
|
la a0, _start_real
|
|
add a0, a0, a1
|
|
jr a0
|
|
|
|
_start_real:
|
|
la gp, __global_pointer$
|
|
.option pop
|
|
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:
|
|
|
|
/* Call global constructors */
|
|
call __libc_init_array
|
|
|
|
|
|
/* Initialize board and start kernel */
|
|
call board_init
|
|
call kernel_init
|
|
|
|
/* Loop forever (should never get here) */
|
|
1:
|
|
j 1b
|
|
|
|
.cfi_endproc
|