summaryrefslogblamecommitdiff
path: root/experimental/sbcl/musl-libc.patch
blob: 1aa5cb557340f5df83f9409e8396e4728cdcc5a7 (plain) (tree)



















































































































































































                                                                                                                                                                                                             
diff --git a/contrib/sb-bsd-sockets/constants.lisp b/contrib/sb-bsd-sockets/constants.lisp
index 88f5bb7c4..23fd87277 100644
--- a/contrib/sb-bsd-sockets/constants.lisp
+++ b/contrib/sb-bsd-sockets/constants.lisp
@@ -93,8 +93,8 @@
  (:integer EAFNOSUPPORT "EAFNOSUPPORT")
  (:integer EINPROGRESS "EINPROGRESS")
 
- (:integer NETDB-INTERNAL #+hpux "h_NETDB_INTERNAL" #-hpux "NETDB_INTERNAL" "See errno.")
- (:integer NETDB-SUCCESS #+hpux "h_NETDB_SUCCESS" #-hpux "NETDB_SUCCESS" "No problem.")
+ (:integer-no-check NETDB-INTERNAL #-os-provides-netdb-internal "-1" #+(and os-provides-netdb-internal hpux) "h_NETDB_INTERNAL" #+(and os-provides-netdb-internal (not hpux)) "NETDB_INTERNAL" "See errno.")
+ (:integer-no-check NETDB-SUCCESS #-os-provides-netdb-internal "0" #+(and os-provides-netdb-internal hpux) "h_NETDB_SUCCESS" #+(and os-provides-netdb-internal (not hpux)) "NETDB_SUCCESS" "No problem.")
  (:integer HOST-NOT-FOUND "HOST_NOT_FOUND" "Authoritative Answer Host not found.")
  (:integer TRY-AGAIN "TRY_AGAIN" "Non-Authoritative Host not found, or SERVERFAIL.")
  (:integer NO-RECOVERY "NO_RECOVERY" "Non recoverable errors, FORMERR, REFUSED, NOTIMP.")
diff --git a/src/runtime/linux-os.c b/src/runtime/linux-os.c
index fa4f5e490..60b5fea4e 100644
--- a/src/runtime/linux-os.c
+++ b/src/runtime/linux-os.c
@@ -187,8 +187,15 @@ isnptl (void)
       if (strstr (buf, "NPTL")) {
           return 1;
       }
+      else {
+          return 0;
+      }
+  }
+  else {
+      /* If the configuration variable is empty, just assume we have a
+       * good enough thread implementation. */
+      return 1;
   }
-  return 0;
 }
 #endif
 
diff --git a/tests/foreign.test.sh b/tests/foreign.test.sh
index 7fb757813..9ba8ed3cf 100755
--- a/tests/foreign.test.sh
+++ b/tests/foreign.test.sh
@@ -248,16 +248,23 @@ cat > $TEST_FILESTEM.test.lisp <<EOF
   (assert (= 13 foo))
   (assert (= 42 (bar)))
   (note "/original definitions ok")
-  (rename-file "$TEST_FILESTEM-b.so" "$TEST_FILESTEM-b.bak")
-  (rename-file "$TEST_FILESTEM-b2.so" "$TEST_FILESTEM-b.so")
-  (load-shared-object (truename "$TEST_FILESTEM-b.so"))
-  (note "/reloading ok")
-  (assert (= 42 foo))
-  (assert (= 13 (bar)))
-  (note "/redefined versions ok")
-  (rename-file "$TEST_FILESTEM-b.so" "$TEST_FILESTEM-b2.so")
-  (rename-file "$TEST_FILESTEM-b.bak" "$TEST_FILESTEM-b.so")
-  (note "/renamed back to originals")
+  ;; test late resolution
+  (eval-when (:compile-toplevel :load-toplevel :execute)
+   (setq *features* (union *features* sb-impl:+internal-features+)))
+  #+dlclose-is-noop
+  (note "/skipping reloading tests")
+  #-dlclose-is-noop
+  (progn
+    (rename-file "$TEST_FILESTEM-b.so" "$TEST_FILESTEM-b.bak")
+    (rename-file "$TEST_FILESTEM-b2.so" "$TEST_FILESTEM-b.so")
+    (load-shared-object (truename "$TEST_FILESTEM-b.so"))
+    (note "/reloading ok")
+    (assert (= 42 foo))
+    (assert (= 13 (bar)))
+    (note "/redefined versions ok")
+    (rename-file "$TEST_FILESTEM-b.so" "$TEST_FILESTEM-b2.so")
+    (rename-file "$TEST_FILESTEM-b.bak" "$TEST_FILESTEM-b.so")
+    (note "/renamed back to originals"))
 
   ;; test late resolution
   #+linkage-table
@@ -274,13 +278,17 @@ cat > $TEST_FILESTEM.test.lisp <<EOF
     (load-shared-object (truename "$TEST_FILESTEM-c.so"))
     (assert (= 43 late-foo))
     (assert (= 14 (late-bar)))
-    (unload-shared-object (truename "$TEST_FILESTEM-c.so"))
-    (multiple-value-bind (val err) (ignore-errors late-foo)
-      (assert (not val))
-      (assert (typep err 'undefined-alien-error)))
-    (multiple-value-bind (val err) (ignore-errors (late-bar))
-      (assert (not val))
-      (assert (typep err 'undefined-alien-error)))
+    #+dlclose-is-noop
+    (note "/skipping unloading tests")
+    #-dlclose-is-noop
+    (progn
+      (unload-shared-object (truename "$TEST_FILESTEM-c.so"))
+      (multiple-value-bind (val err) (ignore-errors late-foo)
+        (assert (not val))
+        (assert (typep err 'undefined-alien-error)))
+      (multiple-value-bind (val err) (ignore-errors (late-bar))
+        (assert (not val))
+        (assert (typep err 'undefined-alien-error))))
     (note "/linkage table ok"))
 
   (sb-ext:exit :code $EXIT_LISP_WIN) ; success convention for Lisp program
diff --git a/tools-for-build/Makefile b/tools-for-build/Makefile
index 3f6e4ecf9..39bab2b92 100644
--- a/tools-for-build/Makefile
+++ b/tools-for-build/Makefile
@@ -16,6 +16,9 @@ LDLIBS:=$(OS_LIBS)
 
 all: grovel-headers determine-endianness where-is-mcontext
 
+dlclose-is-noop-test-helper.so: dlclose-is-noop-test-helper.c
+	@$(CC) $(LDFLAGS) -shared $< -o $@ $(LOADLIBES) $(LDLIBS)
+
 clean:
 	rm -f *.o grovel-headers determine-endianness where-is-mcontext
 	rm -f *.exe
diff --git a/tools-for-build/dlclose-is-noop-test-helper.c b/tools-for-build/dlclose-is-noop-test-helper.c
new file mode 100644
index 000000000..4be7a8e5b
--- /dev/null
+++ b/tools-for-build/dlclose-is-noop-test-helper.c
@@ -0,0 +1 @@
+int sbcl_dl_close_test = 42;
diff --git a/tools-for-build/dlclose-is-noop-test.c b/tools-for-build/dlclose-is-noop-test.c
new file mode 100644
index 000000000..f4eab26a5
--- /dev/null
+++ b/tools-for-build/dlclose-is-noop-test.c
@@ -0,0 +1,19 @@
+/* test to build and run so that we know if we have a noop dlclose
+ */
+
+#include <dlfcn.h>
+#include <stddef.h>
+
+int main ()
+{
+   void * handle = dlopen("./dlclose-is-noop-test-helper.so", RTLD_NOW | RTLD_GLOBAL);
+   dlclose(handle);
+
+   handle = dlopen("./dlclose-is-noop-test-helper.so", RTLD_NOW | RTLD_NOLOAD);
+
+   if (handle != NULL) {
+       return 104;
+   } else {
+       return 0;
+   }
+}
diff --git a/tools-for-build/grovel-features.sh b/tools-for-build/grovel-features.sh
index ffc4307eb..bf1448a6a 100644
--- a/tools-for-build/grovel-features.sh
+++ b/tools-for-build/grovel-features.sh
@@ -36,3 +36,12 @@
 if [ "$sbcl_arch" = arm ] ; then
    featurep arm-softfp
 fi
+
+featurep os-provides-netdb-internal
+
+# We need a helper shared library to test dlclose-is-noop
+$GNUMAKE dlclose-is-noop-test-helper.so > /dev/null 2>&1
+
+featurep dlclose-is-noop
+
+rm -f dlclose-is-noop-test-helper.so
diff --git a/tools-for-build/os-provides-netdb-internal-test.c b/tools-for-build/os-provides-netdb-internal-test.c
new file mode 100644
index 000000000..cab08cc41
--- /dev/null
+++ b/tools-for-build/os-provides-netdb-internal-test.c
@@ -0,0 +1,12 @@
+#include <netdb.h>
+
+int main ()
+{
+#if defined NETDB_INTERNAL && defined NETDB_SUCCESS
+    return 104;
+#elif defined h_NETDB_INTERNAL && defined h_NETDB_SUCCESS
+    return 104;
+#else
+    return 0;
+#endif
+}