From 8fe8843f2371e31db54a660f318fd3a9488dd367 Mon Sep 17 00:00:00 2001
From: Andreas Wacknitz <A.Wacknitz@gmx.de>
Date: Tue, 31 Oct 2023 17:57:27 +0100
Subject: [PATCH] sbcl: update to 2.3.10

---
 components/runtime/sbcl/patches/04-rename-mutex.patch |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 components/runtime/sbcl/Makefile                      |    4 ++--
 2 files changed, 58 insertions(+), 2 deletions(-)

diff --git a/components/runtime/sbcl/Makefile b/components/runtime/sbcl/Makefile
index 2f012c5..50b4708 100644
--- a/components/runtime/sbcl/Makefile
+++ b/components/runtime/sbcl/Makefile
@@ -17,12 +17,12 @@
 include ../../../make-rules/shared-macros.mk
 
 COMPONENT_NAME=		sbcl
-COMPONENT_VERSION=	2.3.8
+COMPONENT_VERSION=	2.3.10
 COMPONENT_SUMMARY=	sbcl - Steel Bank Common Lisp
 COMPONENT_PROJECT_URL=	https://sbcl.sourceforge.io/
 COMPONENT_SRC=		$(COMPONENT_NAME)-$(COMPONENT_VERSION)
 COMPONENT_ARCHIVE=	$(COMPONENT_SRC)-source.tar.bz2
-COMPONENT_ARCHIVE_HASH=	sha256:421571b2ac916e58be8ebcea5ef4abf8d7902863db6a1d0a5efa9500adca0d29
+COMPONENT_ARCHIVE_HASH=	sha256:358033315d07e4c5a6c838ee7f22cfc4d49e94848eb71ec1389d494bc32dd2ab
 COMPONENT_ARCHIVE_URL=	https://downloads.sourceforge.net/project/sbcl/sbcl/$(COMPONENT_VERSION)/$(COMPONENT_ARCHIVE)
 COMPONENT_FMRI=		runtime/sbcl
 COMPONENT_CLASSIFICATION=	Development/Other Languages
diff --git a/components/runtime/sbcl/patches/04-rename-mutex.patch b/components/runtime/sbcl/patches/04-rename-mutex.patch
new file mode 100644
index 0000000..0ed349d
--- /dev/null
+++ b/components/runtime/sbcl/patches/04-rename-mutex.patch
@@ -0,0 +1,56 @@
+Patch imported from https://sourceforge.net/p/sbcl/sbcl/ci/8fc35f2c2a3d794bc90556b85fa7eb0fa6b220e9/
+
+--- a/src/compiler/generic/genesis.lisp
++++ b/src/compiler/generic/genesis.lisp
+@@ -3373,7 +3373,7 @@
+   (write-structure-object (layout-info (find-layout 'sb-thread::thread))
+                           *standard-output* "thread_instance" nil)
+   (write-structure-object (layout-info (find-layout 'sb-thread::mutex))
+-                          *standard-output* "mutex" nil)
++                          *standard-output* "lispmutex" nil)
+   ;; The os_thread field is either pthread_t or lispobj.
+   ;; If no threads, then it's lispobj. #+win32 uses lispobj too
+   ;; but it gets cast to HANDLE upon use.
+--- a/src/runtime/backtrace.c
++++ b/src/runtime/backtrace.c
+@@ -721,7 +721,7 @@
+             // and a mutex have a name at the same slot offset (if #+sb-futex).
+             // So to reiterate the comment from linux-os.c -
+             // "Use this only if you know what you're doing"
+-            struct mutex* lispmutex = (void*)native_pointer(lispthread->waiting_for);
++            struct lispmutex* lispmutex = (void*)native_pointer(lispthread->waiting_for);
+             if (lispmutex->name != NIL) {
+                 fprintf(stderr, " (MUTEX:\"");
+                 print_string(VECTOR(lispmutex->name), stderr);
+--- a/src/runtime/linux-os.c
++++ b/src/runtime/linux-os.c
+@@ -125,7 +125,7 @@
+         rel_time.tv_sec -= basetime.tv_sec;
+         rel_time.tv_nsec -= basetime.tv_nsec;
+         if (rel_time.tv_nsec<0) rel_time.tv_nsec += 1000 * 1000 * 1000, rel_time.tv_sec--;
+-        lispobj threadname = ti->name;
++        lispobj threadname = ti->_name;
+         if (events[i].timeout >= 0) // must also have mutex_name in this case
+             fprintf(stderr, "[%d.%09ld] %s: %s '%s' timeout %ld\n",
+                     (int)rel_time.tv_sec, rel_time.tv_nsec,
+@@ -216,8 +216,8 @@
+   int t;
+ 
+ #ifdef MUTEX_EVENTRECORDING
+-    struct mutex* m = (void*)((char*)lock_word - offsetof(struct mutex,state));
+-    char *name = m->name != NIL ? vector_sap((m->name) : "(unnamed)";
++    struct lispmutex* m = (void*)((char*)lock_word - offsetof(struct lispmutex,uw_state));
++    char *name = m->name != NIL ? vector_sap(m->name) : "(unnamed)";
+ #endif
+   if (sec<0) {
+       lisp_mutex_event1("start futex wait", name);
+@@ -245,7 +245,7 @@
+ futex_wake(int *lock_word, int n)
+ {
+ #ifdef MUTEX_EVENTRECORDING
+-    struct mutex* m = (void*)((char*)lock_word - offsetof(struct mutex,state));
++    struct lispmutex* m = (void*)((char*)lock_word - offsetof(struct lispmutex,uw_state));
+     char *name = m->name != NIL ? vector_sap(m->name) : "(unnamed)";
+     lisp_mutex_event1("waking futex", name);
+ #endif
+

--
Gitblit v1.9.3