From c7757f181f0bd52206059f2685a5197113aca76f Mon Sep 17 00:00:00 2001 From: Eric Andersen Date: Wed, 8 Oct 2003 18:15:50 +0000 Subject: Patch from George Thanos adding support for the "e1" architecture. --- libc/sysdeps/linux/e1/setjmp.c | 54 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 libc/sysdeps/linux/e1/setjmp.c (limited to 'libc/sysdeps/linux/e1/setjmp.c') diff --git a/libc/sysdeps/linux/e1/setjmp.c b/libc/sysdeps/linux/e1/setjmp.c new file mode 100644 index 000000000..2942cb193 --- /dev/null +++ b/libc/sysdeps/linux/e1/setjmp.c @@ -0,0 +1,54 @@ +/* This file is lisenced under LGPL + * Copyright (C) 2002-2003, George Thanos + * Yannis Mitsos + */ + +#include +#include +#include + +int setjmp( jmp_buf state) +{ + asm volatile( "mov %0, G3\n\t" + "mov %1, G4\n\t" + :"=l"(state->__jmpbuf->G3), + "=l"(state->__jmpbuf->G4) + :/*no input*/ + :"%G3", "%G4" ); + + asm volatile( "setadr %0\n\t" + "mov %1, L1\n\t" + "mov %2, L2\n\t" + :"=l"(state->__jmpbuf->SavedSP), + "=l"(state->__jmpbuf->SavedPC), + "=l"(state->__jmpbuf->SavedSR) + :/*no input*/); + return 0; +} + +int sigsetjmp( sigjmp_buf state , int savesigs) +{ + + if(savesigs) { + state->__mask_was_saved = 1; + /* how arg in is not significant */ + sigprocmask(SIG_SETMASK, NULL, &state->__saved_mask); + } else + state->__mask_was_saved = 0; + + asm volatile( "mov %0, G3\n\t" + "mov %1, G4\n\t" + :"=l"(state->__jmpbuf->G3), + "=l"(state->__jmpbuf->G4) + :/*no input*/ + :"%G3", "%G4" ); + + asm volatile( "setadr %0\n\t" + "mov %1, L2\n\t" + "mov %2, L3\n\t" + :"=l"(state->__jmpbuf->SavedSP), + "=l"(state->__jmpbuf->SavedPC), + "=l"(state->__jmpbuf->SavedSR) + :/*no input*/); + return 0; +} -- cgit v1.2.3