forked from ariadne/libucontext
x86: add freestanding port
parent
9c0ffd8fbb
commit
131e825f50
|
@ -26,7 +26,7 @@ Adding support for new architectures is easy, but you need to know assembly lang
|
||||||
| ppc64 | ✓ | ✓ | |
|
| ppc64 | ✓ | ✓ | |
|
||||||
| riscv64 | ✓ | | |
|
| riscv64 | ✓ | | |
|
||||||
| s390x | ✓ | | |
|
| s390x | ✓ | | |
|
||||||
| x86 | ✓ | | |
|
| x86 | ✓ | | ✓ |
|
||||||
| x86_64 | ✓ | | ✓ |
|
| x86_64 | ✓ | | ✓ |
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,48 @@
|
||||||
|
#ifndef LIBUCONTEXT_BITS_H
|
||||||
|
#define LIBUCONTEXT_BITS_H
|
||||||
|
|
||||||
|
#define REG_GS (0)
|
||||||
|
#define REG_FS (1)
|
||||||
|
#define REG_ES (2)
|
||||||
|
#define REG_DS (3)
|
||||||
|
#define REG_EDI (4)
|
||||||
|
#define REG_ESI (5)
|
||||||
|
#define REG_EBP (6)
|
||||||
|
#define REG_ESP (7)
|
||||||
|
#define REG_EBX (8)
|
||||||
|
#define REG_EDX (9)
|
||||||
|
#define REG_ECX (10)
|
||||||
|
#define REG_EAX (11)
|
||||||
|
#define REG_EIP (14)
|
||||||
|
|
||||||
|
typedef int libucontext_greg_t, libucontext_gregset_t[19];
|
||||||
|
|
||||||
|
typedef struct libucontext_fpstate {
|
||||||
|
unsigned long cw, sw, tag, ipoff, cssel, dataoff, datasel;
|
||||||
|
struct {
|
||||||
|
unsigned short significand[4], exponent;
|
||||||
|
} _st[8];
|
||||||
|
unsigned long status;
|
||||||
|
} *libucontext_fpregset_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
libucontext_gregset_t gregs;
|
||||||
|
libucontext_fpregset_t fpregs;
|
||||||
|
unsigned long oldmask, cr2;
|
||||||
|
} libucontext_mcontext_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
void *ss_sp;
|
||||||
|
int ss_flags;
|
||||||
|
size_t ss_size;
|
||||||
|
} libucontext_stack_t;
|
||||||
|
|
||||||
|
typedef struct libucontext_ucontext {
|
||||||
|
unsigned long uc_flags;
|
||||||
|
struct libucontext_ucontext *uc_link;
|
||||||
|
libucontext_stack_t uc_stack;
|
||||||
|
libucontext_mcontext_t uc_mcontext;
|
||||||
|
} libucontext_ucontext_t;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue