summaryrefslogtreecommitdiff
path: root/lang/ocaml
diff options
context:
space:
mode:
authorgdt <gdt>2015-03-14 15:17:14 +0000
committergdt <gdt>2015-03-14 15:17:14 +0000
commit2a4291c264b613c69d6e64dc712c252e0a99d955 (patch)
treeaf7ccd932e67b21c685240bc8bfcc85f9ca926b3 /lang/ocaml
parent3e201b787b3a0891a5a68219955009b4fdfb657a (diff)
downloadpkgsrc-2a4291c264b613c69d6e64dc712c252e0a99d955.tar.gz
Fix i386 signal handler.
ocaml has a twisty maze of ifdefs to define signal handler types and obtain the faulting address. NetBSD no longer has sigcontext (available to user space) and instead the more POSIXy ucontext; this commit changes the patch to use that. Fixes build on i386, and the resulting package can run unison. In theory !i386 is unchanged.
Diffstat (limited to 'lang/ocaml')
-rw-r--r--lang/ocaml/distinfo4
-rw-r--r--lang/ocaml/patches/patch-asmrun_signals_osdep.h41
2 files changed, 34 insertions, 11 deletions
diff --git a/lang/ocaml/distinfo b/lang/ocaml/distinfo
index 2397a6de4b9..a2afc1953df 100644
--- a/lang/ocaml/distinfo
+++ b/lang/ocaml/distinfo
@@ -1,4 +1,4 @@
-$NetBSD: distinfo,v 1.80 2015/01/26 14:46:51 jaapb Exp $
+$NetBSD: distinfo,v 1.81 2015/03/14 15:17:14 gdt Exp $
SHA1 (ocaml-4.02.1.tar.gz) = 6af8c67f2badece81d8e1d1ce70568a16e42313e
RMD160 (ocaml-4.02.1.tar.gz) = fcb30200e9675d92e402b4b7101a032f918f80c1
@@ -9,7 +9,7 @@ SHA1 (patch-asmcomp_power_emit.mlp) = 726e09e4902b96f4790c7a8093eb245dd7028bf4
SHA1 (patch-asmrun_Makefile) = b6301628b71e3fe3553f32342805ae90159cc773
SHA1 (patch-asmrun_arm.S) = af62872815fd9cb996f3ce6a1fbaec5b568b70d1
SHA1 (patch-asmrun_power-bsd.S) = 5428a486835a0254a1768b3157b6b1fdf5ae8dd3
-SHA1 (patch-asmrun_signals_osdep.h) = aff4c999cb21240b7d99f34cb482fe32efcd356e
+SHA1 (patch-asmrun_signals_osdep.h) = 0ff83333dd75ecfe8f262b7523231832169986a7
SHA1 (patch-byterun_Makefile) = 2b88b35e5ffcccc315542cb814b9e826126acb54
SHA1 (patch-config_auto__aux_gethostbyaddr.c) = ce724831e93081d3e51a122fef14b17543c3221c
SHA1 (patch-config_auto__aux_gethostbyname.c) = f05a6026a18ca7557558383103c6a2fc08caee28
diff --git a/lang/ocaml/patches/patch-asmrun_signals_osdep.h b/lang/ocaml/patches/patch-asmrun_signals_osdep.h
index 33c887d7e7b..68ececdf664 100644
--- a/lang/ocaml/patches/patch-asmrun_signals_osdep.h
+++ b/lang/ocaml/patches/patch-asmrun_signals_osdep.h
@@ -1,19 +1,42 @@
-$NetBSD: patch-asmrun_signals_osdep.h,v 1.3 2015/01/26 14:46:51 jaapb Exp $
+$NetBSD: patch-asmrun_signals_osdep.h,v 1.4 2015/03/14 15:17:15 gdt Exp $
Use correct data structures for power architecture; also do signal
-handling correctly for i386
+handling correctly for i386/NetBSD.
+
+First hunk taken from upstream tracker at:
+ http://caml.inria.fr/mantis/view.php?id=6772
+
--- asmrun/signals_osdep.h.orig 2014-09-28 19:46:24.000000000 +0000
+++ asmrun/signals_osdep.h
-@@ -161,7 +161,7 @@
+@@ -163,14 +163,24 @@
+
+ #elif defined(TARGET_i386) && defined(SYS_bsd_elf)
+
+- #define DECLARE_SIGNAL_HANDLER(name) \
+- static void name(int sig, siginfo_t * info, struct sigcontext * context)
++ #if defined (__NetBSD__)
++ #include <ucontext.h>
++ #define DECLARE_SIGNAL_HANDLER(name) \
++ static void name(int sig, siginfo_t * info, ucontext_t * context)
++ #else
++ #define DECLARE_SIGNAL_HANDLER(name) \
++ static void name(int sig, siginfo_t * info, struct sigcontext * context)
++ #endif
- /****************** I386, BSD_ELF */
+ #define SET_SIGACT(sigact,name) \
+ sigact.sa_sigaction = (void (*)(int,siginfo_t *,void *)) (name); \
+ sigact.sa_flags = SA_SIGINFO
--#elif defined(TARGET_i386) && defined(SYS_bsd_elf)
-+#elif defined(TARGET_i386) && defined(SYS_bsd_elf) && !defined(__NetBSD__)
+- #define CONTEXT_PC (context->sc_eip)
++ #if defined (__NetBSD__)
++ #define CONTEXT_PC (_UC_MACHINE_PC(context))
++ #else
++ #define CONTEXT_PC (context->sc_eip)
++ #endif
+ #define CONTEXT_FAULTING_ADDRESS ((char *) info->si_addr)
- #define DECLARE_SIGNAL_HANDLER(name) \
- static void name(int sig, siginfo_t * info, struct sigcontext * context)
-@@ -278,12 +278,21 @@
+ /****************** I386, BSD */
+@@ -278,12 +294,21 @@
sigact.sa_handler = (void (*)(int)) (name); \
sigact.sa_flags = 0