diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2000-03-17 16:45:18 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2000-03-17 16:45:18 +0000 |
commit | b1fa3c7002497bd0246aff7ec056378aa31c88a7 (patch) | |
tree | b919cc2ea13603302f69ccf156b8e2cf82e60e70 /asmrun/signals.c | |
parent | 485d38567d396b3c9460b8c634d3b6b74ffb90a4 (diff) |
Portage AIX 4.3
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@2973 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'asmrun/signals.c')
-rw-r--r-- | asmrun/signals.c | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/asmrun/signals.c b/asmrun/signals.c index 11e53dd0c..21fae51e4 100644 --- a/asmrun/signals.c +++ b/asmrun/signals.c @@ -35,6 +35,18 @@ (((unsigned long *)((ctx)->sc_regs))[2 + (regno)]) #endif +#if defined(TARGET_power) && defined(SYS_aix) +#ifdef _AIXVERSION_430 +#define STRUCT_SIGCONTEXT struct __sigcontext +#define CONTEXT_GPR(ctx, regno) \ + ((ctx)->__sc_jmpbuf.__jmp_context.__gpr[regno]) +#else +#define STRUCT_SIGCONTEXT struct sigcontext +#define CONTEXT_GPR(ctx, regno) \ + ((ctx)->sc_jmpbuf.jmp_context.gpr[regno]) +#endif +#endif + volatile int async_signal_mode = 0; volatile int pending_signal = 0; volatile int force_major_slice = 0; @@ -127,7 +139,7 @@ void leave_blocking_section(void) #if defined(TARGET_alpha) || defined(TARGET_mips) void handle_signal(int sig, int code, struct sigcontext * context) #elif defined(TARGET_power) && defined(SYS_aix) -void handle_signal(int sig, int code, struct sigcontext * context) +void handle_signal(int sig, int code, STRUCT_SIGCONTEXT * context) #elif defined(TARGET_power) && defined(SYS_elf) void handle_signal(int sig, struct sigcontext * context) #elif defined(TARGET_power) && defined(SYS_rhapsody) @@ -165,7 +177,7 @@ void handle_signal(int sig) #endif #if defined(TARGET_power) && defined(SYS_aix) /* Cached in register 30 */ - context->sc_jmpbuf.jmp_context.gpr[30] = (ulong_t) young_limit; + CONTEXT_GPR(context, 30) = (ulong_t) young_limit; #endif #if defined(TARGET_power) && defined(SYS_elf) /* Cached in register 30 */ @@ -367,7 +379,7 @@ static void trap_handler(int sig) #endif #if defined(TARGET_power) && defined(SYS_aix) -static void trap_handler(int sig, int code, struct sigcontext * context) +static void trap_handler(int sig, int code, STRUCT_SIGCONTEXT * context) { /* Unblock SIGTRAP */ sigset_t mask; @@ -375,8 +387,8 @@ static void trap_handler(int sig, int code, struct sigcontext * context) sigaddset(&mask, SIGTRAP); sigprocmask(SIG_UNBLOCK, &mask, NULL); /* Recover young_ptr and caml_exception_pointer from registers 31 and 29 */ - caml_exception_pointer = (char *) context->sc_jmpbuf.jmp_context.gpr[29]; - young_ptr = (char *) context->sc_jmpbuf.jmp_context.gpr[31]; + caml_exception_pointer = (char *) CONTEXT_GPR(context, 29); + young_ptr = (char *) CONTEXT_GPR(context, 31); array_bound_error(); } #endif |