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

Message ID 38c1b846-2ba6-4208-b452-55f004b09546@o2.pl
State New
Headers
Series H8/300: Start-up code cleanup for H8/300H and newer |

Commit Message

Jan Dubiec July 19, 2025, 9:56 a.m. UTC
  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  <jdx@o2.pl>

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.
newlib/libc/sys/h8300hms/crt0.S | 80 +++++++++++++++++------------------------
 1 file changed, 32 insertions(+), 48 deletions(-)
  

Comments

Corinna Vinschen July 21, 2025, 9:59 a.m. UTC | #1
Hi,

can somebody having insight or even using h8 have a look, please?

My last engagement in h8 was about 20 years ago...


Thanks,
Corinna


On Jul 19 11:56, Jan Dubiec wrote:
> 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  <jdx@o2.pl>
> 
> 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.

>  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
  
Jan Dubiec Aug. 17, 2025, 12:47 p.m. UTC | #2
BUMP
  
Jan Dubiec Nov. 3, 2025, 8:49 p.m. UTC | #3
BUMP
  
Jeff Johnston Nov. 3, 2025, 11:16 p.m. UTC | #4
Patch applied.

-- Jeff J.

On Sat, Jul 19, 2025 at 5:56 AM Jan Dubiec <jdx@o2.pl> wrote:

> 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  <jdx@o2.pl>
>
> 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.
>
  

Patch

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