summaryrefslogtreecommitdiff
path: root/lang/modula-3-lib/files/extra-patch-new-sigset-ab
diff options
context:
space:
mode:
Diffstat (limited to 'lang/modula-3-lib/files/extra-patch-new-sigset-ab')
-rw-r--r--lang/modula-3-lib/files/extra-patch-new-sigset-ab32
1 files changed, 32 insertions, 0 deletions
diff --git a/lang/modula-3-lib/files/extra-patch-new-sigset-ab b/lang/modula-3-lib/files/extra-patch-new-sigset-ab
new file mode 100644
index 000000000000..0df8efb0987e
--- /dev/null
+++ b/lang/modula-3-lib/files/extra-patch-new-sigset-ab
@@ -0,0 +1,32 @@
+--- m3/m3core/src/runtime/FreeBSD2/RTHeapDep.m3.orig Fri Jan 20 09:41:09 1995
++++ m3/m3core/src/runtime/FreeBSD2/RTHeapDep.m3 Wed Oct 6 15:22:49 1999
+@@ -101,25 +101,11 @@
+ PROCEDURE Fault (sig : Ctypes.int;
+ code: Ctypes.int;
+ scp : UNTRACED REF Usignal.struct_sigcontext) =
+- VAR sf_addr_addr: UNTRACED REF ARRAY[0..1] OF ADDRESS;
+- sf_addr : ADDRESS;
+- (*
+- * Signal frame of FreeBSD 1.1.5
+- *
+- * struct sigframe {
+- * int sf_signum;
+- * int sf_code;
+- * struct sigcontext *sf_scp;
+- * char *sf_addr; <-- this is the faulting address
+- * sig_t sf_handler;
+- * struct sigcontext sf_sc; <-- this address is passed in scp
+- * };
+- *)
+-
++ VAR
++ sf_addr := LOOPHOLE(scp.sc_err, ADDRESS);
++
+ BEGIN
+- sf_addr_addr := scp - ( 2 * BYTESIZE(ADDRESS));
+- sf_addr := sf_addr_addr[0];
+- IF scp # NIL AND RTHeapRep.Fault(sf_addr) THEN
++ IF RTHeapRep.Fault(sf_addr) THEN
+ RETURN;
+ END;
+ IF defaultSIGSEGV = Usignal.SIG_IGN THEN RETURN; END;