mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
76f6362292
Picolibc makes atexit state per-thread instead of global, so we can't register destructors with atexit in a non-thread context as we won't have any TLS space initialized. Signed-off-by: Keith Packard <keithp@keithp.com>
58 lines
1003 B
ArmAsm
58 lines
1003 B
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.
|
|
*/
|
|
.section .init
|
|
.globl _start
|
|
.type _start,@function
|
|
|
|
_start:
|
|
.cfi_startproc
|
|
.cfi_undefined ra
|
|
.option push
|
|
.option norelax
|
|
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
|