summaryrefslogtreecommitdiffstats
path: root/asmrun/signals.c
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2000-03-17 16:45:18 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2000-03-17 16:45:18 +0000
commitb1fa3c7002497bd0246aff7ec056378aa31c88a7 (patch)
treeb919cc2ea13603302f69ccf156b8e2cf82e60e70 /asmrun/signals.c
parent485d38567d396b3c9460b8c634d3b6b74ffb90a4 (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.c22
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