Skip to content

Commit 297de3d

Browse files
committed
picocrt/lm32: Split out _start to an asm file
This avoids problems if the compiler decides to use the stack before we've gotten it initialized, as happens when building without optimization. Signed-off-by: Keith Packard <[email protected]>
1 parent e16e5d0 commit 297de3d

File tree

3 files changed

+54
-15
lines changed

3 files changed

+54
-15
lines changed

picocrt/machine/lm32/crt0.S

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* SPDX-License-Identifier: BSD-3-Clause
3+
*
4+
* Copyright © 2025 Keith Packard
5+
*
6+
* Redistribution and use in source and binary forms, with or without
7+
* modification, are permitted provided that the following conditions
8+
* are met:
9+
*
10+
* 1. Redistributions of source code must retain the above copyright
11+
* notice, this list of conditions and the following disclaimer.
12+
*
13+
* 2. Redistributions in binary form must reproduce the above
14+
* copyright notice, this list of conditions and the following
15+
* disclaimer in the documentation and/or other materials provided
16+
* with the distribution.
17+
*
18+
* 3. Neither the name of the copyright holder nor the names of its
19+
* contributors may be used to endorse or promote products derived
20+
* from this software without specific prior written permission.
21+
*
22+
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
23+
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
24+
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
25+
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
26+
* COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27+
* INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28+
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29+
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30+
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
31+
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
32+
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
33+
* OF THE POSSIBILITY OF SUCH DAMAGE.
34+
*/
35+
36+
// Defined in crt0.c
37+
.global _cstart
38+
.type cstart, %function
39+
40+
// _start: Main entry point function, sets up the hardware to the point where
41+
// we can execute C code.
42+
.section .text.init.enter, "ax", %progbits
43+
.global _start
44+
.type _start, %function
45+
_start:
46+
# Initialize r0
47+
xor r0, r0, r0
48+
mvhi sp, hi(__stack-8)
49+
ori sp, sp, lo(__stack-8)
50+
51+
/* Branch to C code */
52+
bi _cstart

picocrt/machine/lm32/crt0.c

Lines changed: 1 addition & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,21 +35,8 @@
3535

3636
#include "../../crt0.h"
3737

38-
static void __attribute__((used)) __section(".init")
38+
void __section(".init")
3939
_cstart(void)
4040
{
4141
__start();
4242
}
43-
44-
extern char __stack[];
45-
46-
void __section(".init") __attribute__((used))
47-
_start(void)
48-
{
49-
/* Initialize stack pointer */
50-
__asm__("mvhi sp, hi(%0)" : : "i" (__stack));
51-
__asm__("ori sp, sp, lo(%0)" : : "i" (__stack));
52-
53-
/* Branch to C code */
54-
__asm__("bi %0" : : "i" (_cstart));
55-
}

picocrt/machine/lm32/meson.build

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,4 @@
3232
# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
3333
# OF THE POSSIBILITY OF SUCH DAMAGE.
3434
#
35-
src_picocrt += files('crt0.c')
35+
src_picocrt += files('crt0.c', 'crt0.S')

0 commit comments

Comments
 (0)