/* Copyright (C) 1997, 1999, 2001 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
. */
/* System V/blackfin ABI compliant context switching support. */
#ifndef _SYS_UCONTEXT_H
#define _SYS_UCONTEXT_H 1
#include
#include
/* Type for general register. */
typedef int greg_t;
/* Number of general registers. */
#define NGREG 47
/* Container for all general registers. */
typedef greg_t gregset_t[NGREG];
/* There is no user thread context implementation for bfin, avoid
clashing with gcc symbols, see:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=47779
*/
#if 0
/* Number of each register is the `gregset_t' array. */
enum
{
REG_R0 = 0,
#define REG_R0 REG_R0
REG_R1 = 1,
#define REG_R1 REG_R1
REG_R2 = 2,
#define REG_R2 REG_R2
REG_R3 = 3,
#define REG_R3 REG_R3
REG_R4 = 4,
#define REG_R4 REG_R4
REG_R5 = 5,
#define REG_R5 REG_R5
REG_R6 = 6,
#define REG_R6 REG_R6
REG_R7 = 7,
#define REG_R7 REG_R7
REG_P0 = 8,
#define REG_P0 REG_P0
REG_P1 = 9,
#define REG_P1 REG_P1
REG_P2 = 10,
#define REG_P2 REG_P2
REG_P3 = 11,
#define REG_P3 REG_P3
REG_P4 = 12,
#define REG_P4 REG_P4
REG_P5 = 13,
#define REG_P5 REG_P5
REG_USP = 14,
#define REG_USP REG_USP
REG_A0W = 15,
#define REG_A0W REG_A0W
REG_A1W = 16,
#define REG_A1W REG_A1W
REG_A0X = 17,
#define REG_A0X REG_A0X
REG_A1X = 18,
#define REG_A1X REG_A1X
REG_ASTAT = 19,
#define REG_ASTAT REG_ASTAT
REG_RETS = 20,
#define REG_RETS REG_RETS
REG_PC= 21,
#define REG_PC REG_PC
REG_RETX = 22,
#define REG_RETX REG_RETX
REG_FP = 23,
#define REG_FP REG_FP
REG_I0 = 24,
#define REG_I0 REG_I0
REG_I1 = 25,
#define REG_I1 REG_I1
REG_I2 = 26,
#define REG_I2 REG_I2
REG_I3 = 27,
#define REG_I3 REG_I3
REG_M0 = 28,
#define REG_M0 REG_M0
REG_M1 = 29,
#define REG_M1 REG_M1
REG_M2 = 30,
#define REG_M2 REG_M2
REG_M3 = 31,
#define REG_M3 REG_M3
REG_L0 = 32,
#define REG_L0 REG_L0
REG_L1 = 33,
#define REG_L1 REG_L1
REG_L2 = 34,
#define REG_L2 REG_L2
REG_L3 = 35,
#define REG_L3 REG_L3
REG_B_0 = 36,
#define REG_B0 REG_B0
REG_B1 = 37,
#define REG_B1 REG_B1
REG_B2 = 38,
#define REG_B2 REG_B2
REG_B3 = 39,
#define REG_B3 REG_B3
REG_LC0 = 40,
#define REG_LC0 REG_LC0
REG_LC1 = 41,
#define REG_LC1 REG_LC1
REG_LT0 = 42,
#define REG_LT0 REG_LT0
REG_LT1 = 43,
#define REG_LT1 REG_LT1
REG_LB0 = 44,
#define REG_LB0 REG_LB0
REG_LB1 = 45,
#define REG_LB1 REG_LB1
REG_SEQSTAT = 46
#define REG_SEQSTAT REG_SEQSTAT
};
#endif
/* Context to describe whole processor state. */
typedef struct
{
gregset_t gregs;
} mcontext_t;
/* 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 */