blob: e8a758c9b6c244b8637534e60c2d338c77fd6492 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/* This file is lisenced under LGPL
2 * Copyright (C) 2002-2003, George Thanos <george.thanos@gdt.gr>
3 * Yannis Mitsos <yannis.mitsos@gdt.gr>
4 */
5
6#include <setjmp.h>
7#include <stdio.h>
8#include <signal.h>
9
10
11int setjmp( jmp_buf state)
12{
13 __asm__ __volatile__( "mov %0, G3\n\t"
14 "mov %1, G4\n\t"
15 :"=l"(state->__jmpbuf->G3),
16 "=l"(state->__jmpbuf->G4)
17 :/*no input*/
18 :"%G3", "%G4" );
19
20 __asm__ __volatile__( "setadr %0\n\t"
21 "mov %1, L1\n\t"
22 "mov %2, L2\n\t"
23 :"=l"(state->__jmpbuf->SavedSP),
24 "=l"(state->__jmpbuf->SavedPC),
25 "=l"(state->__jmpbuf->SavedSR)
26 :/*no input*/);
27 return 0;
28}
29
30int sigsetjmp( sigjmp_buf state , int savesigs)
31{
32
33 if(savesigs) {
34 state->__mask_was_saved = 1;
35 /* how arg in <sigprocmask> is not significant */
36 sigprocmask(SIG_SETMASK, NULL, &state->__saved_mask);
37 } else
38 state->__mask_was_saved = 0;
39
40 __asm__ __volatile__( "mov %0, G3\n\t"
41 "mov %1, G4\n\t"
42 :"=l"(state->__jmpbuf->G3),
43 "=l"(state->__jmpbuf->G4)
44 :/*no input*/
45 :"%G3", "%G4" );
46
47 __asm__ __volatile__( "setadr %0\n\t"
48 "mov %1, L2\n\t"
49 "mov %2, L3\n\t"
50 :"=l"(state->__jmpbuf->SavedSP),
51 "=l"(state->__jmpbuf->SavedPC),
52 "=l"(state->__jmpbuf->SavedSR)
53 :/*no input*/);
54 return 0;
55}