[96403] trunk/dports/lang/sbcl

easieste at macports.org easieste at macports.org
Wed Aug 8 15:12:17 PDT 2012


Revision: 96403
          https://trac.macports.org/changeset/96403
Author:   easieste at macports.org
Date:     2012-08-08 15:12:16 -0700 (Wed, 08 Aug 2012)
Log Message:
-----------
lang/sbcl: update to 1.0.58.

Now builds under OS X 10.8.

Modified Paths:
--------------
    trunk/dports/lang/sbcl/Portfile

Removed Paths:
-------------
    trunk/dports/lang/sbcl/files/patch-osx-10.8.diff

Modified: trunk/dports/lang/sbcl/Portfile
===================================================================
--- trunk/dports/lang/sbcl/Portfile	2012-08-08 21:27:29 UTC (rev 96402)
+++ trunk/dports/lang/sbcl/Portfile	2012-08-08 22:12:16 UTC (rev 96403)
@@ -5,7 +5,7 @@
 
 name		sbcl
 
-version		      1.0.57
+version		      1.0.58
 revision          0
 set subrevision	  ""
 
@@ -38,9 +38,9 @@
 distname	${name}-${version}-source${subrevision}
 worksrcdir	${name}-${version}
 
-checksums           sbcl-1.0.57-source.tar.bz2 \
-                    rmd160  c52bcec4d43a8e0d6ab385d7cc7ba12b827f1a91 \
-                    sha256  a140862014bdcdd73821a8a0534ff68b0ec89eb6539acfcd35fd2a0ab07771ef \
+checksums           sbcl-1.0.58-source.tar.bz2 \
+                    rmd160  127a35a849ba096dd59304367cf8813594410e53 \
+                    sha256  817972d3f0be2c37ef29a9ea4858e6772cccf87cfcc5b36361a5abe2a149d945 \
                     sbcl-1.0.48-x86-darwin-binary.tar.bz2 \
                     md5     5a3fe53829c6c9f589f17db31210e2ce \
                     sha1    c4c6aa31e58767364c36ca509e06cf92c7b2e293 \

Deleted: trunk/dports/lang/sbcl/files/patch-osx-10.8.diff
===================================================================
--- trunk/dports/lang/sbcl/files/patch-osx-10.8.diff	2012-08-08 21:27:29 UTC (rev 96402)
+++ trunk/dports/lang/sbcl/files/patch-osx-10.8.diff	2012-08-08 22:12:16 UTC (rev 96403)
@@ -1,205 +0,0 @@
-# HG changeset patch
-# User Paul Khuong <pvk at pvk.ca>
-# Date 1343858434 14400
-# Node ID 755947db369e40e31a470dadfb12a8d9646d60a4
-# Parent  21dbb1f9c54ef0590aaf0d559137048d3c23ffd9
-Fix threads on Darwin 10.8
-
- * We used to pun (64-bit) addresses into 32-bit mach_port_name.
-
- * We used to assume arbitrary 32-bit addresses were always
-   acceptable mach port names.
-
- * Stop doing that. Instead, allocate small descriptors until one's
-   address is an acceptable port name (inspired by CCL).
-
- * Also, keep a lock-free free-list of descriptors to skip the previous
-   loop in common cases.
-
- * There are still some strange issues, but I can't tell if they're new,
-   and they seem preferable to consistently lose-ing when spawning threads.
-
-diff --git a/src/runtime/darwin-os.c b/src/runtime/darwin-os.c
---- a/src/runtime/darwin-os.c
-+++ b/src/runtime/darwin-os.c
-@@ -27,6 +27,8 @@
- 
- #ifdef LISP_FEATURE_MACH_EXCEPTION_HANDLER
- #include <mach/mach.h>
-+#include <libkern/OSAtomic.h>
-+#include <stdlib.h>
- #endif
- 
- char *
-@@ -96,23 +98,80 @@
-     return mach_exception_handling_thread;
- }
- 
-+struct exception_port_record
-+{
-+    struct thread * thread;
-+    struct exception_port_record * next;
-+};
-+
-+static OSQueueHead free_records = OS_ATOMIC_QUEUE_INIT;
-+
-+/* We can't depend on arbitrary addresses to be accepted as mach port
-+ * names, particularly not on 64-bit platforms.  Instead, we allocate
-+ * records that point to the thread struct, and loop until one is accepted
-+ * as a port name.
-+ *
-+ * Threads are mapped to exception ports with a slot in the thread struct,
-+ * and exception ports are casted to records that point to the corresponding
-+ * thread.
-+ *
-+ * The lock-free free-list above is used as a cheap fast path.
-+ */
-+static mach_port_t
-+find_receive_port(struct thread * thread)
-+{
-+    mach_port_t ret;
-+    struct exception_port_record * curr, * to_free = NULL;
-+    unsigned long i;
-+    for (i = 1;; i++) {
-+        curr = OSAtomicDequeue(&free_records, offsetof(struct exception_port_record, next));
-+        if (curr == NULL) {
-+            curr = calloc(1, sizeof(struct exception_port_record));
-+            if (curr == NULL)
-+                lose("unable to allocate exception_port_record\n");
-+        }
-+#ifdef LISP_FEATURE_X86_64
-+        if ((mach_port_t)curr != (unsigned long)curr)
-+            goto skip;
-+#endif
-+
-+        if (mach_port_allocate_name(current_mach_task,
-+                                    MACH_PORT_RIGHT_RECEIVE,
-+                                    (mach_port_t)curr))
-+            goto skip;
-+        curr->thread = thread;
-+        ret = (mach_port_t)curr;
-+        break;
-+        skip:
-+        curr->next = to_free;
-+        to_free = curr;
-+        if ((i % 1024) == 0)
-+            FSHOW((stderr, "Looped %lu times trying to allocate an exception port\n"));
-+    }
-+    while (to_free != NULL) {
-+        struct exception_port_record * current = to_free;
-+        to_free = to_free->next;
-+        free(current);
-+    }
-+
-+    FSHOW((stderr, "Allocated exception port %x for thread %p\n", ret, thread));
-+
-+    return ret;
-+}
-+
- /* tell the kernel that we want EXC_BAD_ACCESS exceptions sent to the
-    exception port (which is being listened to do by the mach
-    exception handling thread). */
- kern_return_t
--mach_thread_init(mach_port_t thread_exception_port)
-+mach_lisp_thread_init(struct thread * thread)
- {
-     kern_return_t ret;
--    mach_port_t current_mach_thread;
-+    mach_port_t current_mach_thread, thread_exception_port;
- 
-     /* allocate a named port for the thread */
--    FSHOW((stderr, "Allocating mach port %x\n", thread_exception_port));
--    ret = mach_port_allocate_name(current_mach_task,
--                                  MACH_PORT_RIGHT_RECEIVE,
--                                  thread_exception_port);
--    if (ret) {
--        lose("mach_port_allocate_name failed with return_code %d\n", ret);
--    }
-+    thread_exception_port
-+        = thread->mach_port_name
-+        = find_receive_port(thread);
- 
-     /* establish the right for the thread_exception_port to send messages */
-     ret = mach_port_insert_right(current_mach_task,
-@@ -149,31 +208,24 @@
- }
- 
- kern_return_t
--mach_lisp_thread_init(struct thread *thread) {
--    mach_port_t port = (mach_port_t) thread;
-+mach_lisp_thread_destroy(struct thread *thread) {
-     kern_return_t ret;
--    ret = mach_thread_init(port);
--    thread->mach_port_name = port;
-+    mach_port_t port = thread->mach_port_name;
-+    FSHOW((stderr, "Deallocating mach port %x\n", port));
-+    mach_port_move_member(current_mach_task, port, MACH_PORT_NULL);
-+    mach_port_deallocate(current_mach_task, port);
-+
-+    ret = mach_port_destroy(current_mach_task, port);
-+    ((struct exception_port_record*)port)->thread = NULL;
-+    OSAtomicEnqueue(&free_records, (void*)port, offsetof(struct exception_port_record, next));
- 
-     return ret;
- }
- 
--kern_return_t
--mach_lisp_thread_destroy(struct thread *thread) {
--    mach_port_t port = (mach_port_t) thread;
--
--    FSHOW((stderr, "Deallocating mach port %x\n", port));
--    mach_port_move_member(current_mach_task, port, MACH_PORT_NULL);
--    mach_port_deallocate(current_mach_task, port);
--
--    return mach_port_destroy(current_mach_task, port);
--}
--
- void
- setup_mach_exceptions() {
--    mach_port_t port = (mach_port_t) all_threads;
-     setup_mach_exception_handling_thread();
--    mach_thread_init(port);
-+    mach_lisp_thread_init(all_threads);
- }
- 
- pid_t
-diff --git a/src/runtime/x86-64-darwin-os.c b/src/runtime/x86-64-darwin-os.c
---- a/src/runtime/x86-64-darwin-os.c
-+++ b/src/runtime/x86-64-darwin-os.c
-@@ -325,9 +325,10 @@
- 
-     os_vm_address_t addr;
- 
--    struct thread *th = (struct thread*) exception_port;
-+    struct thread *th;
- 
-     FSHOW((stderr,"/entering catch_exception_raise with exception: %d\n", exception));
-+    th = *(struct thread**)exception_port;
- 
-     switch (exception) {
- 
-@@ -346,8 +347,6 @@
-                                (thread_state_t)&exception_state,
-                                &exception_state_count);
-         addr = (void*)exception_state.faultvaddr;
--
--
-         /* note the os_context hackery here.  When the signal handler returns,
-          * it won't go back to what it was doing ... */
-         if(addr >= CONTROL_STACK_GUARD_PAGE(th) &&
-diff --git a/src/runtime/x86-darwin-os.c b/src/runtime/x86-darwin-os.c
---- a/src/runtime/x86-darwin-os.c
-+++ b/src/runtime/x86-darwin-os.c
-@@ -395,10 +395,10 @@
-     siginfo_t siginfo;
-     kern_return_t ret, dealloc_ret;
- 
--    struct thread *th = (struct thread*) exception_port;
-+    struct thread *th;
- 
-     FSHOW((stderr,"/entering catch_exception_raise with exception: %d\n", exception));
--
-+    th = *(struct thread**)exception_port;
-     /* Get state and info */
-     state_count = x86_THREAD_STATE32_COUNT;
-     if ((ret = thread_get_state(thread,
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macports-changes/attachments/20120808/1c321a40/attachment.html>


More information about the macports-changes mailing list