sparc-getcontext-1.c

来自「用于进行gcc测试」· C语言 代码 · 共 119 行

C
119
字号
/* PR middle-end/22127 *//* Testcase by <akr@m17n.org> *//* { dg-do run { target *-*-solaris2.* } } *//* { dg-require-effective-target ilp32 } *//* { dg-options "-O" } */typedef unsigned int size_t;extern int printf(const char *, ...);typedef unsigned char uint8_t;typedef unsigned int uint32_t;typedef unsigned int uint_t;typedef char *caddr_t;typedef int greg_t;typedef greg_t gregset_t[19];struct rwindow { greg_t rw_local[8]; greg_t rw_in[8];};typedef struct gwindows { int wbcnt; greg_t *spbuf[31]; struct rwindow wbuf[31];} gwindows_t;struct fpu { union {  uint32_t fpu_regs[32];  double fpu_dregs[16]; } fpu_fr; struct fq *fpu_q; uint32_t fpu_fsr; uint8_t fpu_qcnt; uint8_t fpu_q_entrysize; uint8_t fpu_en;};typedef struct fpu fpregset_t;typedef struct { unsigned int xrs_id; caddr_t xrs_ptr;} xrs_t;typedef struct { gregset_t gregs; gwindows_t *gwins; fpregset_t fpregs; xrs_t xrs; long filler[19];} mcontext_t;typedef struct { unsigned int __sigbits[4];} sigset_t;typedef struct sigaltstack { void *ss_sp; size_t ss_size; int ss_flags;} stack_t;typedef struct ucontext ucontext_t;struct ucontext { uint_t uc_flags; ucontext_t *uc_link; sigset_t uc_sigmask; stack_t uc_stack; mcontext_t uc_mcontext; long uc_filler[23];};extern int getcontext(ucontext_t *);extern int setcontext(const ucontext_t *);int flag;ucontext_t cont;int pad[100];typedef void (*fun_t)(int);fun_t p0,p1,p2,p3,p4,p5,p6,p7,p8,p9,p10,p11,p12;int global;extern void abort(void);void h1(int v){  global = v;}void h2(int v){  if (v != 1)    abort();}void f(void){  flag = 1;  setcontext(&cont);}int g(void){  int ret;  flag = 0;  getcontext(&cont);  ret = flag;  if (ret == 0) {    h1 (flag);    p0 = p1 = p2 = p3 = p4 = p5 = p6 = p7 = p8 = h1;    f();    p0(ret); p1(ret); p2(ret); p3(ret); p4(ret); p5(ret); p6(ret); p7(ret); p8(ret);  }  else {    h2 (flag);  }  return ret;}int main(void){  g();  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?