Github messages for voidlinux
 help / color / mirror / Atom feed
* [PR PATCH] musl: random patches to get chromiums jit working
@ 2024-10-20 17:22 Johnnynator
  2024-10-20 17:29 ` [PR PATCH] [Updated] " Johnnynator
                   ` (5 more replies)
  0 siblings, 6 replies; 7+ messages in thread
From: Johnnynator @ 2024-10-20 17:22 UTC (permalink / raw)
  To: ml

[-- Attachment #1: Type: text/plain, Size: 351 bytes --]

There is a new pull request by Johnnynator against master on the void-packages repository

https://github.com/Johnnynator/void-packages musl-pthread
https://github.com/void-linux/void-packages/pull/52706

musl: random patches to get chromiums jit working
None

A patch file from https://github.com/void-linux/void-packages/pull/52706.patch is attached

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: github-pr-musl-pthread-52706.patch --]
[-- Type: text/x-diff, Size: 28410 bytes --]

From 9dc855dc22160eae3e0619b1e39c051404f42ad3 Mon Sep 17 00:00:00 2001
From: John <me@johnnynator.dev>
Date: Sun, 20 Oct 2024 19:20:06 +0200
Subject: [PATCH] musl: pthread for chromium

---
 .../z_0001-make-h_errno-thread-local.patch    |  47 +++
 ...DJ-logic-out-of-each-arch-replace-wi.patch | 255 ++++++++++++
 ...hread_self-thread-pointer-adjustment.patch | 368 ++++++++++++++++++
 ...-pthread-struct-members-repeated-for.patch | 165 ++++++++
 srcpkgs/musl/template                         |   2 +-
 5 files changed, 836 insertions(+), 1 deletion(-)
 create mode 100644 srcpkgs/musl/patches/z_0001-make-h_errno-thread-local.patch
 create mode 100644 srcpkgs/musl/patches/z_0002-deduplicate-TP_ADJ-logic-out-of-each-arch-replace-wi.patch
 create mode 100644 srcpkgs/musl/patches/z_0002-deduplicate-__pthread_self-thread-pointer-adjustment.patch
 create mode 100644 srcpkgs/musl/patches/z_0003-remove-redundant-pthread-struct-members-repeated-for.patch

diff --git a/srcpkgs/musl/patches/z_0001-make-h_errno-thread-local.patch b/srcpkgs/musl/patches/z_0001-make-h_errno-thread-local.patch
new file mode 100644
index 00000000000000..a27e73bf87b065
--- /dev/null
+++ b/srcpkgs/musl/patches/z_0001-make-h_errno-thread-local.patch
@@ -0,0 +1,47 @@
+From 9d0b8b92a508c328e7eac774847f001f80dfb5ff Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 24 Aug 2020 21:38:49 -0400
+Subject: [PATCH 1/5] make h_errno thread-local
+
+the framework to do this always existed but it was deemed unnecessary
+because the only [ex-]standard functions using h_errno were not
+thread-safe anyway. however, some of the nonstandard res_* functions
+are also supposed to set h_errno to indicate the cause of error, and
+were unable to do so because it was not thread-safe. this change is a
+prerequisite for fixing them.
+---
+ src/internal/pthread_impl.h | 1 +
+ src/network/h_errno.c       | 6 ++----
+ 2 files changed, 3 insertions(+), 4 deletions(-)
+
+diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
+index 5742dfc5..5749a336 100644
+--- a/src/internal/pthread_impl.h
++++ b/src/internal/pthread_impl.h
+@@ -43,6 +43,7 @@ struct pthread {
+ 		long off;
+ 		volatile void *volatile pending;
+ 	} robust_list;
++	int h_errno_val;
+ 	volatile int timer_id;
+ 	locale_t locale;
+ 	volatile int killlock[1];
+diff --git a/src/network/h_errno.c b/src/network/h_errno.c
+index 4f700cea..8677a92b 100644
+--- a/src/network/h_errno.c
++++ b/src/network/h_errno.c
+@@ -1,9 +1,7 @@
+ #include <netdb.h>
+-
+-#undef h_errno
+-int h_errno;
++#include "pthread_impl.h"
+ 
+ int *__h_errno_location(void)
+ {
+-	return &h_errno;
++	return &__pthread_self()->h_errno_val;
+ }
+-- 
+2.47.0
+
diff --git a/srcpkgs/musl/patches/z_0002-deduplicate-TP_ADJ-logic-out-of-each-arch-replace-wi.patch b/srcpkgs/musl/patches/z_0002-deduplicate-TP_ADJ-logic-out-of-each-arch-replace-wi.patch
new file mode 100644
index 00000000000000..61f5e8482d8fbe
--- /dev/null
+++ b/srcpkgs/musl/patches/z_0002-deduplicate-TP_ADJ-logic-out-of-each-arch-replace-wi.patch
@@ -0,0 +1,255 @@
+From ea71a9004e08030a15d45186e263fd2b0c51cc25 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 24 Aug 2020 22:04:52 -0400
+Subject: [PATCH 3/5] deduplicate TP_ADJ logic out of each arch, replace with
+ TP_OFFSET
+
+the only part of TP_ADJ that was not uniquely determined by
+TLS_ABOVE_TP was the 0x7000 adjustment used mainly on mips and powerpc
+variants.
+---
+ arch/aarch64/pthread_arch.h    |  1 -
+ arch/arm/pthread_arch.h        |  1 -
+ arch/i386/pthread_arch.h       |  2 --
+ arch/m68k/pthread_arch.h       |  2 +-
+ arch/microblaze/pthread_arch.h |  2 --
+ arch/mips/pthread_arch.h       |  2 +-
+ arch/mips64/pthread_arch.h     |  2 +-
+ arch/mipsn32/pthread_arch.h    |  2 +-
+ arch/or1k/pthread_arch.h       |  1 -
+ arch/powerpc/pthread_arch.h    |  2 +-
+ arch/powerpc64/pthread_arch.h  |  2 +-
+ arch/riscv64/pthread_arch.h    |  1 -
+ arch/s390x/pthread_arch.h      |  2 --
+ arch/sh/pthread_arch.h         |  1 -
+ arch/x32/pthread_arch.h        |  2 --
+ arch/x86_64/pthread_arch.h     |  2 --
+ src/internal/pthread_impl.h    | 10 ++++++++++
+ 17 files changed, 16 insertions(+), 21 deletions(-)
+
+diff --git a/arch/aarch64/pthread_arch.h b/arch/aarch64/pthread_arch.h
+index e64b126d..f3c005c7 100644
+--- a/arch/aarch64/pthread_arch.h
++++ b/arch/aarch64/pthread_arch.h
+@@ -7,6 +7,5 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 16
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
+ 
+ #define MC_PC pc
+diff --git a/arch/arm/pthread_arch.h b/arch/arm/pthread_arch.h
+index e689ea21..48640985 100644
+--- a/arch/arm/pthread_arch.h
++++ b/arch/arm/pthread_arch.h
+@@ -28,6 +28,5 @@ static inline pthread_t __pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 8
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
+ 
+ #define MC_PC arm_pc
+diff --git a/arch/i386/pthread_arch.h b/arch/i386/pthread_arch.h
+index 6f600b9e..32570a17 100644
+--- a/arch/i386/pthread_arch.h
++++ b/arch/i386/pthread_arch.h
+@@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
+ 	return self;
+ }
+ 
+-#define TP_ADJ(p) (p)
+-
+ #define MC_PC gregs[REG_EIP]
+diff --git a/arch/m68k/pthread_arch.h b/arch/m68k/pthread_arch.h
+index 02d5b8a0..7c9990c2 100644
+--- a/arch/m68k/pthread_arch.h
++++ b/arch/m68k/pthread_arch.h
+@@ -6,8 +6,8 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ #define MC_PC gregs[R_PC]
+diff --git a/arch/microblaze/pthread_arch.h b/arch/microblaze/pthread_arch.h
+index f6ba8de9..c327f4eb 100644
+--- a/arch/microblaze/pthread_arch.h
++++ b/arch/microblaze/pthread_arch.h
+@@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
+ 	return self;
+ }
+ 
+-#define TP_ADJ(p) (p)
+-
+ #define MC_PC regs.pc
+diff --git a/arch/mips/pthread_arch.h b/arch/mips/pthread_arch.h
+index 1e7839ea..c22eb34d 100644
+--- a/arch/mips/pthread_arch.h
++++ b/arch/mips/pthread_arch.h
+@@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ #define MC_PC pc
+diff --git a/arch/mips64/pthread_arch.h b/arch/mips64/pthread_arch.h
+index 1e7839ea..c22eb34d 100644
+--- a/arch/mips64/pthread_arch.h
++++ b/arch/mips64/pthread_arch.h
+@@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ #define MC_PC pc
+diff --git a/arch/mipsn32/pthread_arch.h b/arch/mipsn32/pthread_arch.h
+index 1e7839ea..c22eb34d 100644
+--- a/arch/mipsn32/pthread_arch.h
++++ b/arch/mipsn32/pthread_arch.h
+@@ -12,8 +12,8 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ #define MC_PC pc
+diff --git a/arch/or1k/pthread_arch.h b/arch/or1k/pthread_arch.h
+index 1b806f89..76d0a8bc 100644
+--- a/arch/or1k/pthread_arch.h
++++ b/arch/or1k/pthread_arch.h
+@@ -13,6 +13,5 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
+ 
+ #define MC_PC regs.pc
+diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h
+index ae0f28d6..9697046b 100644
+--- a/arch/powerpc/pthread_arch.h
++++ b/arch/powerpc/pthread_arch.h
+@@ -7,8 +7,8 @@ static inline struct pthread *__pthread_self()
+                         
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ // the kernel calls the ip "nip", it's the first saved value after the 32
+diff --git a/arch/powerpc64/pthread_arch.h b/arch/powerpc64/pthread_arch.h
+index 79c3ecd8..e9dba43f 100644
+--- a/arch/powerpc64/pthread_arch.h
++++ b/arch/powerpc64/pthread_arch.h
+@@ -7,8 +7,8 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + 0x7000)
+ 
++#define TP_OFFSET 0x7000
+ #define DTP_OFFSET 0x8000
+ 
+ // the kernel calls the ip "nip", it's the first saved value after the 32
+diff --git a/arch/riscv64/pthread_arch.h b/arch/riscv64/pthread_arch.h
+index db414b17..50f0868d 100644
+--- a/arch/riscv64/pthread_arch.h
++++ b/arch/riscv64/pthread_arch.h
+@@ -7,7 +7,6 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 0
+-#define TP_ADJ(p) ((char *)p + sizeof(struct pthread))
+ 
+ #define DTP_OFFSET 0x800
+ 
+diff --git a/arch/s390x/pthread_arch.h b/arch/s390x/pthread_arch.h
+index e2251f1f..5d22546b 100644
+--- a/arch/s390x/pthread_arch.h
++++ b/arch/s390x/pthread_arch.h
+@@ -9,6 +9,4 @@ static inline struct pthread *__pthread_self()
+ 	return self;
+ }
+ 
+-#define TP_ADJ(p) (p)
+-
+ #define MC_PC psw.addr
+diff --git a/arch/sh/pthread_arch.h b/arch/sh/pthread_arch.h
+index 3ee9c1a9..c2252908 100644
+--- a/arch/sh/pthread_arch.h
++++ b/arch/sh/pthread_arch.h
+@@ -7,7 +7,6 @@ static inline struct pthread *__pthread_self()
+ 
+ #define TLS_ABOVE_TP
+ #define GAP_ABOVE_TP 8
+-#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread))
+ 
+ #define MC_PC sc_pc
+ 
+diff --git a/arch/x32/pthread_arch.h b/arch/x32/pthread_arch.h
+index f640a1a1..fa452839 100644
+--- a/arch/x32/pthread_arch.h
++++ b/arch/x32/pthread_arch.h
+@@ -5,8 +5,6 @@ static inline struct pthread *__pthread_self()
+ 	return self;
+ }
+ 
+-#define TP_ADJ(p) (p)
+-
+ #define MC_PC gregs[REG_RIP]
+ 
+ #define CANARY canary2
+diff --git a/arch/x86_64/pthread_arch.h b/arch/x86_64/pthread_arch.h
+index 65e880c6..1c64a840 100644
+--- a/arch/x86_64/pthread_arch.h
++++ b/arch/x86_64/pthread_arch.h
+@@ -5,6 +5,4 @@ static inline struct pthread *__pthread_self()
+ 	return self;
+ }
+ 
+-#define TP_ADJ(p) (p)
+-
+ #define MC_PC gregs[REG_RIP]
+diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
+index 5749a336..3c2bd767 100644
+--- a/src/internal/pthread_impl.h
++++ b/src/internal/pthread_impl.h
+@@ -105,10 +105,20 @@ struct __timer {
+ #define CANARY canary
+ #endif
+ 
++#ifndef TP_OFFSET
++#define TP_OFFSET 0
++#endif
++
+ #ifndef DTP_OFFSET
+ #define DTP_OFFSET 0
+ #endif
+ 
++#ifdef TLS_ABOVE_TP
++#define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + TP_OFFSET)
++#else
++#define TP_ADJ(p) (p)
++#endif
++
+ #ifndef tls_mod_off_t
+ #define tls_mod_off_t size_t
+ #endif
+-- 
+2.47.0
+
diff --git a/srcpkgs/musl/patches/z_0002-deduplicate-__pthread_self-thread-pointer-adjustment.patch b/srcpkgs/musl/patches/z_0002-deduplicate-__pthread_self-thread-pointer-adjustment.patch
new file mode 100644
index 00000000000000..cdc62a054db7ae
--- /dev/null
+++ b/srcpkgs/musl/patches/z_0002-deduplicate-__pthread_self-thread-pointer-adjustment.patch
@@ -0,0 +1,368 @@
+From 3a5b9ae7cf656648c80fe155a5239d9b4fb4c485 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 24 Aug 2020 22:23:08 -0400
+Subject: [PATCH 1/2] deduplicate __pthread_self thread pointer adjustment out
+ of each arch
+
+the adjustment made is entirely a function of TLS_ABOVE_TP and
+TP_OFFSET. aside from avoiding repetition of the TP_OFFSET value and
+arithmetic, this change makes pthread_arch.h independent of the
+definition of struct __pthread from pthread_impl.h. this in turn will
+allow inclusion of pthread_arch.h to be moved to the top of
+pthread_impl.h so that it can influence the definition of the
+structure.
+
+previously, arch files were very inconsistent about the type used for
+the thread pointer. this change unifies the new __get_tp interface to
+always use uintptr_t, which is the most correct when performing
+arithmetic that may involve addresses outside the actual pointed-to
+object (due to TP_OFFSET).
+---
+ arch/aarch64/pthread_arch.h    |  8 ++++----
+ arch/arm/pthread_arch.h        | 16 ++++++++--------
+ arch/i386/pthread_arch.h       |  8 ++++----
+ arch/m68k/pthread_arch.h       |  5 ++---
+ arch/microblaze/pthread_arch.h |  8 ++++----
+ arch/mips/pthread_arch.h       |  8 ++++----
+ arch/mips64/pthread_arch.h     |  8 ++++----
+ arch/mipsn32/pthread_arch.h    |  8 ++++----
+ arch/or1k/pthread_arch.h       |  9 ++++-----
+ arch/powerpc/pthread_arch.h    |  6 +++---
+ arch/powerpc64/pthread_arch.h  |  6 +++---
+ arch/riscv64/pthread_arch.h    |  6 +++---
+ arch/s390x/pthread_arch.h      |  8 ++++----
+ arch/sh/pthread_arch.h         |  8 ++++----
+ arch/x32/pthread_arch.h        |  8 ++++----
+ arch/x86_64/pthread_arch.h     |  8 ++++----
+ src/internal/pthread_impl.h    |  2 ++
+ 17 files changed, 65 insertions(+), 65 deletions(-)
+
+diff --git a/arch/aarch64/pthread_arch.h b/arch/aarch64/pthread_arch.h
+index f3c005c7..3909616c 100644
+--- a/arch/aarch64/pthread_arch.h
++++ b/arch/aarch64/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	char *self;
+-	__asm__ ("mrs %0,tpidr_el0" : "=r"(self));
+-	return (void*)(self - sizeof(struct pthread));
++	uintptr_t tp;
++	__asm__ ("mrs %0,tpidr_el0" : "=r"(tp));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/arm/pthread_arch.h b/arch/arm/pthread_arch.h
+index 48640985..157e2eae 100644
+--- a/arch/arm/pthread_arch.h
++++ b/arch/arm/pthread_arch.h
+@@ -1,11 +1,11 @@
+ #if ((__ARM_ARCH_6K__ || __ARM_ARCH_6KZ__ || __ARM_ARCH_6ZK__) && !__thumb__) \
+  || __ARM_ARCH_7A__ || __ARM_ARCH_7R__ || __ARM_ARCH >= 7
+ 
+-static inline pthread_t __pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	char *p;
+-	__asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(p) );
+-	return (void *)(p-sizeof(struct pthread));
++	uintptr_t tp;
++	__asm__ ( "mrc p15,0,%0,c13,c0,3" : "=r"(tp) );
++	return tp;
+ }
+ 
+ #else
+@@ -16,12 +16,12 @@ static inline pthread_t __pthread_self()
+ #define BLX "blx"
+ #endif
+ 
+-static inline pthread_t __pthread_self()
++static inline uintptr_t __get_tp()
+ {
+ 	extern hidden uintptr_t __a_gettp_ptr;
+-	register uintptr_t p __asm__("r0");
+-	__asm__ ( BLX " %1" : "=r"(p) : "r"(__a_gettp_ptr) : "cc", "lr" );
+-	return (void *)(p-sizeof(struct pthread));
++	register uintptr_t tp __asm__("r0");
++	__asm__ ( BLX " %1" : "=r"(tp) : "r"(__a_gettp_ptr) : "cc", "lr" );
++	return tp;
+ }
+ 
+ #endif
+diff --git a/arch/i386/pthread_arch.h b/arch/i386/pthread_arch.h
+index 32570a17..a639c382 100644
+--- a/arch/i386/pthread_arch.h
++++ b/arch/i386/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	struct pthread *self;
+-	__asm__ ("movl %%gs:0,%0" : "=r" (self) );
+-	return self;
++	uintptr_t tp;
++	__asm__ ("movl %%gs:0,%0" : "=r" (tp) );
++	return tp;
+ }
+ 
+ #define MC_PC gregs[REG_EIP]
+diff --git a/arch/m68k/pthread_arch.h b/arch/m68k/pthread_arch.h
+index 7c9990c2..5bea4e1a 100644
+--- a/arch/m68k/pthread_arch.h
++++ b/arch/m68k/pthread_arch.h
+@@ -1,7 +1,6 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	uintptr_t tp = __syscall(SYS_get_thread_area);
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return __syscall(SYS_get_thread_area);
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/microblaze/pthread_arch.h b/arch/microblaze/pthread_arch.h
+index c327f4eb..ff26624e 100644
+--- a/arch/microblaze/pthread_arch.h
++++ b/arch/microblaze/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	struct pthread *self;
+-	__asm__ ("ori %0, r21, 0" : "=r" (self) );
+-	return self;
++	uintptr_t tp;
++	__asm__ ("ori %0, r21, 0" : "=r" (tp) );
++	return tp;
+ }
+ 
+ #define MC_PC regs.pc
+diff --git a/arch/mips/pthread_arch.h b/arch/mips/pthread_arch.h
+index c22eb34d..c45347ab 100644
+--- a/arch/mips/pthread_arch.h
++++ b/arch/mips/pthread_arch.h
+@@ -1,13 +1,13 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+ #if __mips_isa_rev < 2
+-	register char *tp __asm__("$3");
++	register uintptr_t tp __asm__("$3");
+ 	__asm__ (".word 0x7c03e83b" : "=r" (tp) );
+ #else
+-	char *tp;
++	uintptr_t tp;
+ 	__asm__ ("rdhwr %0, $29" : "=r" (tp) );
+ #endif
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/mips64/pthread_arch.h b/arch/mips64/pthread_arch.h
+index c22eb34d..c45347ab 100644
+--- a/arch/mips64/pthread_arch.h
++++ b/arch/mips64/pthread_arch.h
+@@ -1,13 +1,13 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+ #if __mips_isa_rev < 2
+-	register char *tp __asm__("$3");
++	register uintptr_t tp __asm__("$3");
+ 	__asm__ (".word 0x7c03e83b" : "=r" (tp) );
+ #else
+-	char *tp;
++	uintptr_t tp;
+ 	__asm__ ("rdhwr %0, $29" : "=r" (tp) );
+ #endif
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/mipsn32/pthread_arch.h b/arch/mipsn32/pthread_arch.h
+index c22eb34d..c45347ab 100644
+--- a/arch/mipsn32/pthread_arch.h
++++ b/arch/mipsn32/pthread_arch.h
+@@ -1,13 +1,13 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+ #if __mips_isa_rev < 2
+-	register char *tp __asm__("$3");
++	register uintptr_t tp __asm__("$3");
+ 	__asm__ (".word 0x7c03e83b" : "=r" (tp) );
+ #else
+-	char *tp;
++	uintptr_t tp;
+ 	__asm__ ("rdhwr %0, $29" : "=r" (tp) );
+ #endif
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/or1k/pthread_arch.h b/arch/or1k/pthread_arch.h
+index 76d0a8bc..f75ea7e4 100644
+--- a/arch/or1k/pthread_arch.h
++++ b/arch/or1k/pthread_arch.h
+@@ -1,14 +1,13 @@
+-/* or1k use variant I, but with the twist that tp points to the end of TCB */
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+ #ifdef __clang__
+-	char *tp;
++	uintptr_t tp;
+ 	__asm__ ("l.ori %0, r10, 0" : "=r" (tp) );
+ #else
+-	register char *tp __asm__("r10");
++	register uintptr_t tp __asm__("r10");
+ 	__asm__ ("" : "=r" (tp) );
+ #endif
+-	return (struct pthread *) (tp - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h
+index 9697046b..a0947763 100644
+--- a/arch/powerpc/pthread_arch.h
++++ b/arch/powerpc/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	register char *tp __asm__("r2");
++	register uintptr_t tp __asm__("r2");
+ 	__asm__ ("" : "=r" (tp) );
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return tp;
+ }
+                         
+ #define TLS_ABOVE_TP
+diff --git a/arch/powerpc64/pthread_arch.h b/arch/powerpc64/pthread_arch.h
+index e9dba43f..08a557d2 100644
+--- a/arch/powerpc64/pthread_arch.h
++++ b/arch/powerpc64/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	register char *tp __asm__("r13");
++	register uintptr_t tp __asm__("r13");
+ 	__asm__ ("" : "=r" (tp) );
+-	return (pthread_t)(tp - 0x7000 - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/riscv64/pthread_arch.h b/arch/riscv64/pthread_arch.h
+index 50f0868d..a20d7fba 100644
+--- a/arch/riscv64/pthread_arch.h
++++ b/arch/riscv64/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	char *tp;
++	uintptr_t tp;
+ 	__asm__ __volatile__("mv %0, tp" : "=r"(tp));
+-	return (void *)(tp - sizeof(struct pthread));
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/s390x/pthread_arch.h b/arch/s390x/pthread_arch.h
+index 5d22546b..e54fec3f 100644
+--- a/arch/s390x/pthread_arch.h
++++ b/arch/s390x/pthread_arch.h
+@@ -1,12 +1,12 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	struct pthread *self;
++	uintptr_t tp;
+ 	__asm__ (
+ 		"ear  %0, %%a0\n"
+ 		"sllg %0, %0, 32\n"
+ 		"ear  %0, %%a1\n"
+-		: "=r"(self));
+-	return self;
++		: "=r"(tp));
++	return tp;
+ }
+ 
+ #define MC_PC psw.addr
+diff --git a/arch/sh/pthread_arch.h b/arch/sh/pthread_arch.h
+index c2252908..0fcf70d2 100644
+--- a/arch/sh/pthread_arch.h
++++ b/arch/sh/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	char *self;
+-	__asm__ ("stc gbr,%0" : "=r" (self) );
+-	return (struct pthread *) (self - sizeof(struct pthread));
++	uintptr_t tp;
++	__asm__ ("stc gbr,%0" : "=r" (tp) );
++	return tp;
+ }
+ 
+ #define TLS_ABOVE_TP
+diff --git a/arch/x32/pthread_arch.h b/arch/x32/pthread_arch.h
+index fa452839..6e2495da 100644
+--- a/arch/x32/pthread_arch.h
++++ b/arch/x32/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	struct pthread *self;
+-	__asm__ ("mov %%fs:0,%0" : "=r" (self) );
+-	return self;
++	uintptr_t tp;
++	__asm__ ("mov %%fs:0,%0" : "=r" (tp) );
++	return tp;
+ }
+ 
+ #define MC_PC gregs[REG_RIP]
+diff --git a/arch/x86_64/pthread_arch.h b/arch/x86_64/pthread_arch.h
+index 1c64a840..c8c63f2e 100644
+--- a/arch/x86_64/pthread_arch.h
++++ b/arch/x86_64/pthread_arch.h
+@@ -1,8 +1,8 @@
+-static inline struct pthread *__pthread_self()
++static inline uintptr_t __get_tp()
+ {
+-	struct pthread *self;
+-	__asm__ ("mov %%fs:0,%0" : "=r" (self) );
+-	return self;
++	uintptr_t tp;
++	__asm__ ("mov %%fs:0,%0" : "=r" (tp) );
++	return tp;
+ }
+ 
+ #define MC_PC gregs[REG_RIP]
+diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
+index 3c2bd767..58e06136 100644
+--- a/src/internal/pthread_impl.h
++++ b/src/internal/pthread_impl.h
+@@ -115,8 +115,10 @@ struct __timer {
+ 
+ #ifdef TLS_ABOVE_TP
+ #define TP_ADJ(p) ((char *)(p) + sizeof(struct pthread) + TP_OFFSET)
++#define __pthread_self() ((pthread_t)(__get_tp() - sizeof(struct __pthread) - TP_OFFSET))
+ #else
+ #define TP_ADJ(p) (p)
++#define __pthread_self() ((pthread_t)__get_tp())
+ #endif
+ 
+ #ifndef tls_mod_off_t
+-- 
+2.47.0
+
diff --git a/srcpkgs/musl/patches/z_0003-remove-redundant-pthread-struct-members-repeated-for.patch b/srcpkgs/musl/patches/z_0003-remove-redundant-pthread-struct-members-repeated-for.patch
new file mode 100644
index 00000000000000..f0616241933700
--- /dev/null
+++ b/srcpkgs/musl/patches/z_0003-remove-redundant-pthread-struct-members-repeated-for.patch
@@ -0,0 +1,165 @@
+From 57f6e85c9de417fef5eece2a5b00c1104321f543 Mon Sep 17 00:00:00 2001
+From: Rich Felker <dalias@aerifal.cx>
+Date: Mon, 24 Aug 2020 22:45:51 -0400
+Subject: [PATCH 2/2] remove redundant pthread struct members repeated for
+ layout purposes
+
+dtv_copy, canary2, and canary_at_end existed solely to match multiple
+ABI and asm-accessed layouts simultaneously. now that pthread_arch.h
+can be included before struct __pthread is defined, the struct layout
+can depend on macros defined by pthread_arch.h.
+---
+ arch/powerpc/pthread_arch.h   |  2 --
+ arch/powerpc64/pthread_arch.h |  2 --
+ arch/x32/pthread_arch.h       |  2 +-
+ ldso/dynlink.c                |  2 +-
+ src/env/__init_tls.c          |  2 +-
+ src/env/__stack_chk_fail.c    |  2 +-
+ src/internal/pthread_impl.h   | 23 ++++++++++++++---------
+ src/thread/pthread_create.c   |  2 +-
+ 8 files changed, 19 insertions(+), 18 deletions(-)
+
+diff --git a/arch/powerpc/pthread_arch.h b/arch/powerpc/pthread_arch.h
+index a0947763..42e88b07 100644
+--- a/arch/powerpc/pthread_arch.h
++++ b/arch/powerpc/pthread_arch.h
+@@ -14,5 +14,3 @@ static inline uintptr_t __get_tp()
+ // the kernel calls the ip "nip", it's the first saved value after the 32
+ // GPRs.
+ #define MC_PC gregs[32]
+-
+-#define CANARY canary_at_end
+diff --git a/arch/powerpc64/pthread_arch.h b/arch/powerpc64/pthread_arch.h
+index 08a557d2..1b7b9079 100644
+--- a/arch/powerpc64/pthread_arch.h
++++ b/arch/powerpc64/pthread_arch.h
+@@ -14,5 +14,3 @@ static inline uintptr_t __get_tp()
+ // the kernel calls the ip "nip", it's the first saved value after the 32
+ // GPRs.
+ #define MC_PC gp_regs[32]
+-
+-#define CANARY canary_at_end
+diff --git a/arch/x32/pthread_arch.h b/arch/x32/pthread_arch.h
+index 6e2495da..c1e7716d 100644
+--- a/arch/x32/pthread_arch.h
++++ b/arch/x32/pthread_arch.h
+@@ -7,6 +7,6 @@ static inline uintptr_t __get_tp()
+ 
+ #define MC_PC gregs[REG_RIP]
+ 
+-#define CANARY canary2
++#define CANARY_PAD
+ 
+ #define tls_mod_off_t unsigned long long
+diff --git a/ldso/dynlink.c b/ldso/dynlink.c
+index d3d4ddd2..f7474743 100644
+--- a/ldso/dynlink.c
++++ b/ldso/dynlink.c
+@@ -1579,7 +1579,7 @@ static void install_new_tls(void)
+ 
+ 	/* Install new dtv for each thread. */
+ 	for (j=0, td=self; !j || td!=self; j++, td=td->next) {
+-		td->dtv = td->dtv_copy = newdtv[j];
++		td->dtv = newdtv[j];
+ 	}
+ 
+ 	__tl_unlock();
+diff --git a/src/env/__init_tls.c b/src/env/__init_tls.c
+index 772baba3..a93141ed 100644
+--- a/src/env/__init_tls.c
++++ b/src/env/__init_tls.c
+@@ -67,7 +67,7 @@ void *__copy_tls(unsigned char *mem)
+ 	}
+ #endif
+ 	dtv[0] = libc.tls_cnt;
+-	td->dtv = td->dtv_copy = dtv;
++	td->dtv = dtv;
+ 	return td;
+ }
+ 
+diff --git a/src/env/__stack_chk_fail.c b/src/env/__stack_chk_fail.c
+index e32596d1..bf5a280a 100644
+--- a/src/env/__stack_chk_fail.c
++++ b/src/env/__stack_chk_fail.c
+@@ -9,7 +9,7 @@ void __init_ssp(void *entropy)
+ 	if (entropy) memcpy(&__stack_chk_guard, entropy, sizeof(uintptr_t));
+ 	else __stack_chk_guard = (uintptr_t)&__stack_chk_guard * 1103515245;
+ 
+-	__pthread_self()->CANARY = __stack_chk_guard;
++	__pthread_self()->canary = __stack_chk_guard;
+ }
+ 
+ void __stack_chk_fail(void)
+diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
+index 58e06136..4d709bbc 100644
+--- a/src/internal/pthread_impl.h
++++ b/src/internal/pthread_impl.h
+@@ -11,16 +11,25 @@
+ #include "atomic.h"
+ #include "futex.h"
+ 
++#include "pthread_arch.h"
++
+ #define pthread __pthread
+ 
+ struct pthread {
+ 	/* Part 1 -- these fields may be external or
+ 	 * internal (accessed via asm) ABI. Do not change. */
+ 	struct pthread *self;
++#ifndef TLS_ABOVE_TP
+ 	uintptr_t *dtv;
++#endif
+ 	struct pthread *prev, *next; /* non-ABI */
+ 	uintptr_t sysinfo;
+-	uintptr_t canary, canary2;
++#ifndef TLS_ABOVE_TP
++#ifdef CANARY_PAD
++	uintptr_t canary_pad;
++#endif
++	uintptr_t canary;
++#endif
+ 
+ 	/* Part 2 -- implementation details, non-ABI. */
+ 	int tid;
+@@ -52,8 +61,10 @@ struct pthread {
+ 
+ 	/* Part 3 -- the positions of these fields relative to
+ 	 * the end of the structure is external and internal ABI. */
+-	uintptr_t canary_at_end;
+-	uintptr_t *dtv_copy;
++#ifdef TLS_ABOVE_TP
++	uintptr_t canary;
++	uintptr_t *dtv;
++#endif
+ };
+ 
+ enum {
+@@ -99,12 +110,6 @@ struct __timer {
+ #define _b_waiters2 __u.__vi[4]
+ #define _b_inst __u.__p[3]
+ 
+-#include "pthread_arch.h"
+-
+-#ifndef CANARY
+-#define CANARY canary
+-#endif
+-
+ #ifndef TP_OFFSET
+ #define TP_OFFSET 0
+ #endif
+diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
+index 10f1b7d8..55744155 100644
+--- a/src/thread/pthread_create.c
++++ b/src/thread/pthread_create.c
+@@ -314,7 +314,7 @@ int __pthread_create(pthread_t *restrict res, const pthread_attr_t *restrict att
+ 		new->detach_state = DT_JOINABLE;
+ 	}
+ 	new->robust_list.head = &new->robust_list.head;
+-	new->CANARY = self->CANARY;
++	new->canary = self->canary;
+ 	new->sysinfo = self->sysinfo;
+ 
+ 	/* Setup argument structure for the new thread on its stack.
+-- 
+2.47.0
+
diff --git a/srcpkgs/musl/template b/srcpkgs/musl/template
index 02a1f4e02a501f..66e5cf056e9624 100644
--- a/srcpkgs/musl/template
+++ b/srcpkgs/musl/template
@@ -2,7 +2,7 @@
 pkgname=musl
 reverts="1.2.0_1"
 version=1.1.24
-revision=21
+revision=22
 archs="*-musl"
 bootstrap=yes
 build_style=gnu-configure

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2024-10-23 19:18 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-10-20 17:22 [PR PATCH] musl: random patches to get chromiums jit working Johnnynator
2024-10-20 17:29 ` [PR PATCH] [Updated] " Johnnynator
2024-10-22 20:32 ` Johnnynator
2024-10-22 20:56 ` Johnnynator
2024-10-22 20:58 ` Johnnynator
2024-10-22 21:15 ` Johnnynator
2024-10-23 19:18 ` [PR PATCH] [Merged]: musl: update struct_pthread to musl 1.2 layout Johnnynator

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).