This is the mail archive of the newlib@sources.redhat.com mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

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


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]