[PATCH] H8/300: Start-up code cleanup for H8/300H and newer

Jan Dubiec <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
This patch has been started as an attempt to fix assembler message about 
missing stack section attributes:
   CPPAS    libc/sys/h8300hms/crt0.o
../../../combosrc/newlib/libc/sys/h8300hms/crt0.S: Assembler messages:
../../../combosrc/newlib/libc/sys/h8300hms/crt0.S:64: Warning: new 
section '.stack' defined without attributes - this might cause problems

In the process I have noticed that H8/300H, H8/300S and H8SX code does 
not support normal mode. So the patch does a few things: declares stack 
section in a proper way, merges H8/300H and H8/300S/SX parts of code 
into one and adds support for normal mode.

2025-07-19  Jan Dubiec  <[email protected]>

newlib/ChangeLog:

     * libc/sys/h8300hms/crt0.S: General cleanup: declare stack section
     in a proper way, merge H8/300H and H8/300S/SX parts of code into
     one, add support for normal mode.
h8_crt0.patch (text/plain, 2.3 KB)
 newlib/libc/sys/h8300hms/crt0.S | 80 +++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 48 deletions(-)

diff --git a/newlib/libc/sys/h8300hms/crt0.S b/newlib/libc/sys/h8300hms/crt0.S
index 05634113c..757fb0477 100644
--- a/newlib/libc/sys/h8300hms/crt0.S
+++ b/newlib/libc/sys/h8300hms/crt0.S
@@ -1,4 +1,4 @@
-; h8/300 and h8/300h start up file.
+; H8/300, H8/300H, H8/300S and H8SX start up file.
 
 #include "setarch.h"
 
@@ -10,90 +10,74 @@ _start:
 	mov.w	#_stack,sp
 	mov.w	#_edata,r0
 	mov.w	#_end,r2
-	sub.w   r1,r1
+	sub.w	r1,r1
 	sub.w	r0,r2
 	jsr	@_memset
 #ifdef __ELF__
-	mov.l   #__fini,r0
-	jsr     @_atexit
+	mov.w	#__fini,r0
+	jsr	@_atexit
 #ifdef __SIMULATOR__
-        jsr     @0xcc
+	jsr	@0xcc
 #endif
-	jsr     @__init
+	jsr	@__init
 #else
 #ifdef __SIMULATOR__
-        jsr     @0xcc
+	jsr	@0xcc
 #endif
 	jsr	@___main
 #endif
 	jsr	@_main
 	jsr	@_exit
 
-	.section .stack
-_stack:	.word 	1
+	.section .stack, "aw", @nobits
+_stack:	.space	2
 
 #endif
 
-#ifdef __H8300H__
+#if defined (__H8300H__) || defined (__H8300S__) || defined (__H8300SX__)
 
 	.section .text
 	.global	_start
 _start:
+#ifdef __NORMAL_MODE__
+	mov.w	#_stack,sp
+	mov.w	#_edata,r0
+	mov.w	#_end,r2
+	sub.l	er1,er1
+	sub.w	r0,r2
+#else
 	mov.l	#_stack,sp
 	mov.l	#_edata,er0
 	mov.l	#_end,er2
-	sub.w   r1,r1
+	sub.l	er1,er1
 	sub.l	er0,er2
+#endif
 	jsr	@_memset
 #ifdef __ELF__
-	mov.l   #__fini,er0
-	jsr     @_atexit
-#ifdef __SIMULATOR__
-        jsr     @0xcc
-#endif
-	jsr     @__init
+#ifdef __NORMAL_MODE__
+	mov.w	#__fini,r0
 #else
-#ifdef __SIMULATOR__
-        jsr     @0xcc
-#endif
-	jsr	@___main
+	mov.l	#__fini,er0
 #endif
-	jsr	@_main
-	jsr	@_exit
-
-	.section .stack
-_stack:	.long 	1
-
-#endif
-
-#if defined (__H8300S__) || defined (__H8300SX__)
-
-	.section .text
-	.global	_start
-_start:
-	mov.l	#_stack,sp
-	mov.l	#_edata,er0
-	mov.l	#_end,er2
-	sub.w   r1,r1
-	sub.l	er0,er2
-	jsr	@_memset
-#ifdef __ELF__
-	mov.l   #__fini,er0
-	jsr     @_atexit
+	jsr	@_atexit
 #ifdef __SIMULATOR__
-        jsr     @0xcc
+	jsr	@0xcc
 #endif
-	jsr     @__init
+	jsr	@__init
 #else
 #ifdef __SIMULATOR__
-        jsr     @0xcc
+	jsr	@0xcc
 #endif
 	jsr	@___main
 #endif
 	jsr	@_main
 	jsr	@_exit
 
-	.section .stack
-_stack:	.long 	1
+	.section .stack, "aw", @nobits
+#ifdef __NORMAL_MODE__
+_stack:	.space	2
+#else
+_stack:	.space	4
+#endif
 
 #endif
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.