Commit d397abbdbe68715ec86b4392e4e6384db64d029d
1 parent
d39bb24a
BSD user: add support for OpenBSD/amd64 host
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@7066 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
19 additions
and
11 deletions
cpu-exec.c
| @@ -1207,14 +1207,20 @@ int cpu_signal_handler(int host_signum, void *pinfo, | @@ -1207,14 +1207,20 @@ int cpu_signal_handler(int host_signum, void *pinfo, | ||
| 1207 | #elif defined(__x86_64__) | 1207 | #elif defined(__x86_64__) |
| 1208 | 1208 | ||
| 1209 | #ifdef __NetBSD__ | 1209 | #ifdef __NetBSD__ |
| 1210 | -#define REG_ERR _REG_ERR | ||
| 1211 | -#define REG_TRAPNO _REG_TRAPNO | ||
| 1212 | - | ||
| 1213 | -#define QEMU_UC_MCONTEXT_GREGS(uc, reg) (uc)->uc_mcontext.__gregs[(reg)] | ||
| 1214 | -#define QEMU_UC_MACHINE_PC(uc) _UC_MACHINE_PC(uc) | 1210 | +#define PC_sig(context) _UC_MACHINE_PC(context) |
| 1211 | +#define TRAP_sig(context) ((context)->uc_mcontext.__gregs[_REG_TRAPNO]) | ||
| 1212 | +#define ERROR_sig(context) ((context)->uc_mcontext.__gregs[_REG_ERR]) | ||
| 1213 | +#define MASK_sig(context) ((context)->uc_sigmask) | ||
| 1214 | +#elif defined(__OpenBSD__) | ||
| 1215 | +#define PC_sig(context) ((context)->sc_rip) | ||
| 1216 | +#define TRAP_sig(context) ((context)->sc_trapno) | ||
| 1217 | +#define ERROR_sig(context) ((context)->sc_err) | ||
| 1218 | +#define MASK_sig(context) ((context)->sc_mask) | ||
| 1215 | #else | 1219 | #else |
| 1216 | -#define QEMU_UC_MCONTEXT_GREGS(uc, reg) (uc)->uc_mcontext.gregs[(reg)] | ||
| 1217 | -#define QEMU_UC_MACHINE_PC(uc) QEMU_UC_MCONTEXT_GREGS(uc, REG_RIP) | 1220 | +#define PC_sig(context) ((context)->uc_mcontext.gregs[REG_RIP]) |
| 1221 | +#define TRAP_sig(context) ((context)->uc_mcontext.gregs[REG_TRAPNO]) | ||
| 1222 | +#define ERROR_sig(context) ((context)->uc_mcontext.gregs[REG_ERR]) | ||
| 1223 | +#define MASK_sig(context) ((context)->uc_sigmask) | ||
| 1218 | #endif | 1224 | #endif |
| 1219 | 1225 | ||
| 1220 | int cpu_signal_handler(int host_signum, void *pinfo, | 1226 | int cpu_signal_handler(int host_signum, void *pinfo, |
| @@ -1224,15 +1230,17 @@ int cpu_signal_handler(int host_signum, void *pinfo, | @@ -1224,15 +1230,17 @@ int cpu_signal_handler(int host_signum, void *pinfo, | ||
| 1224 | unsigned long pc; | 1230 | unsigned long pc; |
| 1225 | #ifdef __NetBSD__ | 1231 | #ifdef __NetBSD__ |
| 1226 | ucontext_t *uc = puc; | 1232 | ucontext_t *uc = puc; |
| 1233 | +#elif defined(__OpenBSD__) | ||
| 1234 | + struct sigcontext *uc = puc; | ||
| 1227 | #else | 1235 | #else |
| 1228 | struct ucontext *uc = puc; | 1236 | struct ucontext *uc = puc; |
| 1229 | #endif | 1237 | #endif |
| 1230 | 1238 | ||
| 1231 | - pc = QEMU_UC_MACHINE_PC(uc); | 1239 | + pc = PC_sig(uc); |
| 1232 | return handle_cpu_signal(pc, (unsigned long)info->si_addr, | 1240 | return handle_cpu_signal(pc, (unsigned long)info->si_addr, |
| 1233 | - QEMU_UC_MCONTEXT_GREGS(uc, REG_TRAPNO) == 0xe ? | ||
| 1234 | - (QEMU_UC_MCONTEXT_GREGS(uc, REG_ERR) >> 1) & 1 : 0, | ||
| 1235 | - &uc->uc_sigmask, puc); | 1241 | + TRAP_sig(uc) == 0xe ? |
| 1242 | + (ERROR_sig(uc) >> 1) & 1 : 0, | ||
| 1243 | + &MASK_sig(uc), puc); | ||
| 1236 | } | 1244 | } |
| 1237 | 1245 | ||
| 1238 | #elif defined(_ARCH_PPC) | 1246 | #elif defined(_ARCH_PPC) |