URL
https://opencores.org/ocsvn/or1k_old/or1k_old/trunk
Subversion Repositories or1k_old
[/] [or1k_old/] [trunk/] [linux/] [uClibc/] [libc/] [sysdeps/] [linux/] [e1/] [setjmp.c] - Rev 1782
Compare with Previous | Blame | View Log
/* This file is lisenced under LGPL * Copyright (C) 2002-2003, George Thanos <george.thanos@gdt.gr> * Yannis Mitsos <yannis.mitsos@gdt.gr> */ #include <setjmp.h> #include <stdio.h> #include <signal.h> 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 <sigprocmask> 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; }