[PATCH] fix for z8k setjmp.S
J. Johnston
jjohnstn@redhat.com
Tue Feb 18 22:42:00 GMT 2003
Patch checked in.
-- Jeff J.
Christian Groessler wrote:
> Hi,
>
> the following patch fixes setjmp/longjmp for z8001 segmented mode.
>
> regards,
> chris
>
>
> Index: setjmp.S
> ===================================================================
> RCS file: /net/soft/src/CVSdepot/m20newlib/newlib/libc/machine/z8k/setjmp.S,v
> retrieving revision 1.1.1.1
> retrieving revision 1.3
> diff -u -r1.1.1.1 -r1.3
> --- setjmp.S 2001/08/16 15:30:34 1.1.1.1
> +++ setjmp.S 2002/07/10 23:07:03 1.3
> @@ -3,27 +3,62 @@
> segm
>
> .global _setjmp
> + .globl _longjmp
> +
> +#ifdef __STD_CALL__
> +
> +_setjmp:
> + ldl rr6,rr14(#4) ! get argument
> + ldl rr2,@rr14 ! fetch pc
> + ldl @rr6,rr2 ! save it
> + ldl rr6(#16),rr8
> + ldl rr6(#4),rr10
> + ldl rr6(#8),rr12 ! remember frame pointer
> + ldl rr6(#12),rr14 ! remember stack pointer
> + ldk r7,#0
> + ret t
> +
> +_longjmp:
> + ldl rr4,rr14(#4) ! get first argument
> + ld r7,rr14(#8) ! get return value
> + ldl rr8,rr4(#16)
> + ldl rr10,rr4(#4)
> + ldl rr12,rr4(#8) ! restore old frame pointer
> + ldl rr14,rr4(#12) ! restore old stack pointer
> + ldl rr4,@rr4 ! return address
> + inc r15,#4
> + jp @rr4
> +
> +#else /* above __STD_CALL_, below not */
> +
> _setjmp:
> ldl rr2,@rr14 ! fetch pc
> ldl @rr6,rr2 ! save it
> + ldl rr6(16),rr8
> ldl rr6(4),rr10
> ldl rr6(8),rr12 ! and the other special regs
> ldl rr6(12),rr14
> ldk r2,#0
> ret t
> -
> - .globl _longjmp
>
> _longjmp:
> ld r2,r5 ! get return value
> ldl rr4,rr6(0)
> + ldl rr8,rr6(16)
> ldl rr10,rr6(4)
> ldl rr12,rr6(8)
> ldl rr14,rr6(12)
> + inc r15,#4
> jp @rr4
> -#else
> +
> +#endif /* not __STD_CALL__ */
> +#else /* above Z8001, below Z8002 */
> unseg
>
> +#ifdef __STD_CALL__
> +#warning Z8002 std call not implemented!
> +#endif
> +
> .global _setjmp
> _setjmp:
> ld r2,@r15 ! fetch pc
> @@ -44,6 +79,4 @@
> ldl rr14,rr7(12)
> jp @rr4
>
> -#endif
> -
> -
> +#endif /* Z8002 version */
>
More information about the Newlib
mailing list