setjmp()/longjmp() bug on h8300-hms

J. Johnston jjohnstn@redhat.com
Wed Nov 20 09:29:00 GMT 2002


Your patch has been checked in.  Thanks.

-- Jeff J.

Ryo Tsuruta wrote:
> Hello,
> 
> The following is a bug report for newlib-1.10.0 on h8300-hms target.
> 
> setjmp()/longjmp() always return 16-bit value, so problem is occurred when
> compiling with -mint32 flag.
> 
> Now my program is working fine after I applied the patch below.
> 
> Thank you,
> Ryo Tsuruta <ryo@kitanet.ne.jp>
> 
> --- newlib-1.10.0/newlib/libc/machine/h8300/setjmp.S.orig	2002-02-02 08:27:14.000000000 +0900
> +++ newlib-1.10.0/newlib/libc/machine/h8300/setjmp.S	2002-11-17 03:10:07.000000000 +0900
> @@ -12,21 +12,14 @@
>  	.align	2
>  	.global	_setjmp
>  _setjmp:
> -#ifdef __H8300H__
> -	mov.l	er7,@er0
> -	mov.l	er6,@(4,er0)
> -	mov.l	er5,@(8,er0)
> -	mov.l	er4,@(12,er0)
> -	mov.l	@sp,er1
> -	mov.l	er1,@(16,er0)
> -#else
> -#ifdef __H8300S__
> +#if defined(__H8300H__) || defined(__H8300S__)
>  	mov.l	er7,@er0
>  	mov.l	er6,@(4,er0)
>  	mov.l	er5,@(8,er0)
>  	mov.l	er4,@(12,er0)
>  	mov.l	@sp,er1
>  	mov.l	er1,@(16,er0)
> +	sub.l   er0,er0
>  #else
>  	mov.w	r7,@r0
>  	mov.w	r6,@(2,r0)
> @@ -34,28 +27,27 @@
>  	mov.w	r4,@(6,r0)
>  	mov.w   @sp,r1
>  	mov.w	r1,@(8,r0)
> -#endif
> -#endif
>  	sub.w	r0,r0
> +#endif
>  	rts
>  
>  	.global	_longjmp
>  _longjmp:
> -#ifdef __H8300H__
> +#if defined(__H8300H__) || defined (__H8300S__)
>  	mov.l	@er0+,er7
>  	mov.l	@er0+,er6
>  	mov.l	@er0+,er5
>  	mov.l	@er0+,er4
>  	mov.l	@er0,er2
>  	mov.l	er2,@sp
> +#if (__INT_MAX__ <= 32767)
> +	mov.w	r1,r0
>  #else
> -#ifdef __H8300S__
> -	mov.l	@er0+,er7
> -	mov.l	@er0+,er6
> -	mov.l	@er0+,er5
> -	mov.l	@er0+,er4
> -	mov.l	@er0,er2
> -	mov.l	er2,@sp
> +        mov.l   er1,er0
> +#endif
> +	bne	.L1
> +	sub	er0,er0
> +	adds	#1,er0
>  #else
>  	mov.w	@r0+,r7
>  	mov.w	@r0+,r6
> @@ -63,10 +55,9 @@
>  	mov.w	@r0+,r4
>  	mov.w	@r0,r2
>  	mov.w	r2,@sp
> -#endif
> -#endif
>  	mov.w	r1,r0
>  	bne	.L1
>  	mov.w	#1,r0
> +#endif
>  .L1:
>  	rts




More information about the Newlib mailing list