gfiber / toolchains / bruno / 8de23b38d01176b71345861e51063957995966e0 / . / usr / mipsel-buildroot-linux-uclibc / sysroot / usr / include / sys / ucontext.h

/* Copyright (C) 1997, 1998, 2000, 2003, 2004, 2006 Free Software | |

Foundation, Inc. This file is part of the GNU C Library. | |

The GNU C Library is free software; you can redistribute it and/or | |

modify it under the terms of the GNU Lesser General Public | |

License as published by the Free Software Foundation; either | |

version 2.1 of the License, or (at your option) any later version. | |

The GNU C Library is distributed in the hope that it will be useful, | |

but WITHOUT ANY WARRANTY; without even the implied warranty of | |

MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |

Lesser General Public License for more details. | |

You should have received a copy of the GNU Lesser General Public | |

License along with the GNU C Library; if not, see | |

<http://www.gnu.org/licenses/>. */ | |

/* Don't rely on this, the interface is currently messed up and may need to | |

be broken to be fixed. */ | |

#ifndef _SYS_UCONTEXT_H | |

#define _SYS_UCONTEXT_H 1 | |

#include <features.h> | |

#include <sgidefs.h> | |

#include <signal.h> | |

/* We need the signal context definitions even if they are not used | |

included in <signal.h>. */ | |

#include <bits/sigcontext.h> | |

/* Type for general register. Even in o32 we assume 64-bit registers, | |

like the kernel. */ | |

__extension__ typedef unsigned long long int greg_t; | |

/* Number of general registers. */ | |

#define NGREG 32 | |

#define NFPREG 32 | |

/* Container for all general registers. */ | |

typedef greg_t gregset_t[NGREG]; | |

/* Container for all FPU registers. */ | |

typedef struct fpregset { | |

union { | |

double fp_dregs[NFPREG]; | |

struct { | |

float _fp_fregs; | |

unsigned int _fp_pad; | |

} fp_fregs[NFPREG]; | |

} fp_r; | |

} fpregset_t; | |

/* Context to describe whole processor state. */ | |

#if _MIPS_SIM == _ABIO32 | |

/* Earlier versions of glibc for mips had an entirely different | |

definition of mcontext_t, that didn't even resemble the | |

corresponding kernel data structure. Since all legitimate uses of | |

ucontext_t in glibc mustn't have accessed anything beyond | |

uc_mcontext and, even then, taking a pointer to it, casting it to | |

sigcontext_t, and accessing it as such, which is what it has always | |

been, this can still be rectified. Fortunately, makecontext, | |

[gs]etcontext et all have never been implemented. */ | |

typedef struct | |

{ | |

unsigned int regmask; | |

unsigned int status; | |

greg_t pc; | |

gregset_t gregs; | |

fpregset_t fpregs; | |

unsigned int fp_owned; | |

unsigned int fpc_csr; | |

unsigned int fpc_eir; | |

unsigned int used_math; | |

unsigned int dsp; | |

greg_t mdhi; | |

greg_t mdlo; | |

unsigned long hi1; | |

unsigned long lo1; | |

unsigned long hi2; | |

unsigned long lo2; | |

unsigned long hi3; | |

unsigned long lo3; | |

} mcontext_t; | |

#else | |

typedef struct | |

{ | |

gregset_t gregs; | |

fpregset_t fpregs; | |

greg_t mdhi; | |

greg_t hi1; | |

greg_t hi2; | |

greg_t hi3; | |

greg_t mdlo; | |

greg_t lo1; | |

greg_t lo2; | |

greg_t lo3; | |

greg_t pc; | |

unsigned int fpc_csr; | |

unsigned int used_math; | |

unsigned int dsp; | |

unsigned int reserved; | |

} mcontext_t; | |

#endif | |

/* Userlevel context. */ | |

typedef struct ucontext | |

{ | |

unsigned long int uc_flags; | |

struct ucontext *uc_link; | |

stack_t uc_stack; | |

mcontext_t uc_mcontext; | |

__sigset_t uc_sigmask; | |

} ucontext_t; | |

#endif /* sys/ucontext.h */ |