1 |
|
/* |
2 |
|
* sigregs.h - Extract machine registers from a signal frame |
3 |
|
* |
4 |
< |
* SheepShaver (C) 1997-2005 Christian Bauer and Marc Hellwig |
4 |
> |
* SheepShaver (C) 1997-2008 Christian Bauer and Marc Hellwig |
5 |
|
* |
6 |
|
* This program is free software; you can redistribute it and/or modify |
7 |
|
* it under the terms of the GNU General Public License as published by |
79 |
|
// Extract machine registers from Darwin signal frame |
80 |
|
#if defined(__APPLE__) && defined(__MACH__) |
81 |
|
#include <sys/signal.h> |
82 |
– |
extern "C" int sigaltstack(const struct sigaltstack *ss, struct sigaltstack *oss); |
82 |
|
|
84 |
– |
#include <sys/ucontext.h> |
83 |
|
#define MACHINE_REGISTERS(scp) ((machine_regs *)(((ucontext_t *)scp)->uc_mcontext)) |
84 |
|
|
85 |
+ |
#if __DARWIN_UNIX03 |
86 |
+ |
#define __(x) __CONCAT(__,x) |
87 |
+ |
#else |
88 |
+ |
#define __(x) x |
89 |
+ |
#endif |
90 |
+ |
|
91 |
+ |
#include <sys/ucontext.h> |
92 |
+ |
|
93 |
+ |
#if __DARWIN_UNIX03 |
94 |
+ |
struct machine_regs : public __darwin_mcontext |
95 |
+ |
#else |
96 |
|
struct machine_regs : public mcontext |
97 |
+ |
#endif |
98 |
|
{ |
99 |
< |
uint32 & cr() { return ss.cr; } |
100 |
< |
uint32 cr() const { return ss.cr; } |
101 |
< |
uint32 lr() const { return ss.lr; } |
102 |
< |
uint32 ctr() const { return ss.ctr; } |
103 |
< |
uint32 xer() const { return ss.xer; } |
104 |
< |
uint32 msr() const { return ss.srr1; } |
105 |
< |
uint32 dar() const { return es.dar; } |
106 |
< |
uint32 & pc() { return ss.srr0; } |
107 |
< |
uint32 pc() const { return ss.srr0; } |
108 |
< |
uint32 & gpr(int i) { return (&ss.r0)[i]; } |
109 |
< |
uint32 gpr(int i) const { return (&ss.r0)[i]; } |
99 |
> |
uint32 & cr() { return __(ss).__(cr); } |
100 |
> |
uint32 cr() const { return __(ss).__(cr); } |
101 |
> |
uint32 lr() const { return __(ss).__(lr); } |
102 |
> |
uint32 ctr() const { return __(ss).__(ctr); } |
103 |
> |
uint32 xer() const { return __(ss).__(xer); } |
104 |
> |
uint32 msr() const { return __(ss).__(srr1); } |
105 |
> |
uint32 dar() const { return __(es).__(dar); } |
106 |
> |
uint32 & pc() { return __(ss).__(srr0); } |
107 |
> |
uint32 pc() const { return __(ss).__(srr0); } |
108 |
> |
uint32 & gpr(int i) { return (&__(ss).__(r0))[i]; } |
109 |
> |
uint32 gpr(int i) const { return (&__(ss).__(r0))[i]; } |
110 |
|
}; |
111 |
|
#endif |
112 |
|
|