[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