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