pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/32722: fixes for smlnj on i386



>Number:         32722
>Category:       pkg
>Synopsis:       lang/smlnj doesn't compile on i386
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Fri Feb 03 23:20:00 +0000 2006
>Originator:     David A. Holland <dholland%eecs.harvard.edu@localhost>
>Release:        NetBSD 3.99.10 (-20051026) pkgsrc-20060203
>Organization:
   Harvard EECS
>Environment:
System: NetBSD tanaqui 3.99.10 NetBSD 3.99.10 (TANAQUI) #3: Wed Oct 26 18:52:27 
EDT 2005 root@tanaqui:/usr/src/sys/arch/i386/compile/TANAQUI i386
Architecture: i386
Machine: i386
>Description:
        lang/smlnj compile fails in the runtime because of signal issues.
        Some investigation shows that the NetBSD signal handling code is
        a trifle dated; it was using sigvec and other fun stuff and
        refers to a kernel bug in 1.0.

>How-To-Repeat:
        cd lang/smlnj && make

>Fix:

        Update for the century of the fruitbat. Patches follow.

        It builds and seems to work with these changes, although I
        haven't tested it extensively or anything.

        I also haven't tried any of the other targets as I don't have
        the toolchains handy. They are probably still broken.

--- src/runtime/include/ml-unixdep.h.orig       2002-10-11 21:03:50.000000000 
-0400
+++ src/runtime/include/ml-unixdep.h    2006-02-03 17:36:51.000000000 -0500
@@ -309,14 +309,14 @@
 #elif defined(OPSYS_NETBSD)
 #  define OS_NAME      "BSD"
 #  define HAS_POSIX_LIBRARIES
-#  define HAS_BSD_SIGS
+#  define HAS_POSIX_SIGS
 #  define HAS_GETRUSAGE
 #  define HAS_SETITIMER
 #  define HAS_MMAP
 #  define HAS_SELECT
 #  define HAS_SCALBN
 #  define HAS_ILOGB
-#  define HAS_SIGCONTEXT
+#  define HAS_UCONTEXT
 #  define HAS_STRERROR
 
 #endif

--- src/runtime/mach-dep/signal-sysdep.h~       2006-02-03 17:22:27.000000000 
-0500
+++ src/runtime/mach-dep/signal-sysdep.h        2006-02-03 17:47:14.000000000 
-0500
@@ -476,35 +476,18 @@
 
 #  elif defined(OPSYS_NETBSD)
     /** x86, NetBSD **/
-/* NetBSD (including versions 1.0 and 1.1) generates SIGBUS rather
-   than SIGFPE for overflows.  The real fix is a trivial change to
-   kernel sources, which has already been reported (NetBSD internal
-   problem identification "port-i386/1833"). 
-
-   If you want to fix this on your NetBSD system.  Edit machdep.c in
-   directory /sys/arch/i386/i386, and find the line
-
-        setgate(&idt[  4], &IDTVEC(ofl),     0, SDT_SYS386TGT, SEL_KPL);
-
-   Change SEL_KPL to SEL_UPL.  With SEL_KPL, the int overflow trap is
-   not accessible at user level, and a protection fault occurs instead
-   (thus the seg fault).  SEL_UPL will allow user processes to generate
-   this trap.
 
-   For the change to take effect, recompile your kernel, install it
-   and reboot. */
+/* this is partly guesswork but should be ok */
+
 #    define SIG_FAULT1         SIGFPE
-#    define SIG_FAULT2         SIGBUS
-#    define INT_DIVZERO(s, c)  0
-#    define INT_OVFLW(s, c)    (((s) == SIGFPE) || ((s) == SIGBUS))
+#    define INT_DIVZERO(s, c)  ((s) == SIGFPE)
+#    define INT_OVFLW(s, c)    ((s) == SIGFPE)
 
-#    define SIG_GetCode(info, scp)     (info)
-#    define SIG_GetPC(scp)             ((scp)->sc_pc)
-#    define SIG_SetPC(scp, addr)       { (scp)->sc_pc = (long)(addr); }
+#    define SIG_GetCode(info, scp)     (0)
+#    define SIG_GetPC(scp)             ((scp)->uc_mcontext.__gregs[_REG_EIP])
+#    define SIG_SetPC(scp, addr)       {(scp)->uc_mcontext.__gregs[_REG_EIP] = 
(long)(addr); }
 #    define SIG_ZeroLimitPtr(scp)      { ML_X86Frame[LIMITPTR_X86OFFSET] = 0; }
 
-     typedef void SigReturn_t;
-
 #  elif defined(OPSYS_SOLARIS)
      /** x86, Solaris */
 




Home | Main Index | Thread Index | Old Index