public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI
@ 2016-11-07 13:47 Florian Weimer
  2016-11-07 19:21 ` Torvald Riegel
  0 siblings, 1 reply; 2+ messages in thread
From: Florian Weimer @ 2016-11-07 13:47 UTC (permalink / raw)
  To: GNU C Library

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

I started composing a lengthy email about why we should align 
pthread_mutex_t layout on i386 and x86_64 (because cross-process 
compatibility is of more practical importance these days than 
LinuxThreads backwards compatibility).  But then I realized that we 
don't have this choice due to the static initializers, which have __kind 
at different offsets.

The attached patch makes this more explicit in the relevant header files.

Thanks,
Florian

[-- Attachment #2: mutex-kind.patch --]
[-- Type: text/x-patch, Size: 9261 bytes --]

nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI

2016-11-07  Florian Weimer  <fweimer@redhat.com>

	* sysdeps/aarch64/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Document ABI exposure of the __kind offset.
	* sysdeps/arm/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Mention reason for the __kind offset exposure in the ABI.
	* sysdeps/hppa/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/ia64/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/m68k/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/microblaze/nptl/bits/pthreadtypes.h
	(struct __pthread_mutex_s): Likewise.
	* sysdeps/mips/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/nios2/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/s390/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/sh/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/sparc/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/tile/nptl/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.
	* sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
	(struct __pthread_mutex_s): Likewise.
	* sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
	(struct __pthread_mutex_s): Likewise.
	* sysdeps/x86/bits/pthreadtypes.h (struct __pthread_mutex_s):
	Likewise.

diff --git a/sysdeps/aarch64/nptl/bits/pthreadtypes.h b/sysdeps/aarch64/nptl/bits/pthreadtypes.h
index 13984a7..c376e64 100644
--- a/sysdeps/aarch64/nptl/bits/pthreadtypes.h
+++ b/sysdeps/aarch64/nptl/bits/pthreadtypes.h
@@ -65,6 +65,8 @@ typedef union
     unsigned int __count;
     int __owner;
     unsigned int __nusers;
+    /* KIND must stay at this position in the structure to maintain
+       binary compatibility with static initializers.  */
     int __kind;
     int __spins;
     __pthread_list_t __list;
diff --git a/sysdeps/arm/nptl/bits/pthreadtypes.h b/sysdeps/arm/nptl/bits/pthreadtypes.h
index afb5392..645207b 100644
--- a/sysdeps/arm/nptl/bits/pthreadtypes.h
+++ b/sysdeps/arm/nptl/bits/pthreadtypes.h
@@ -64,7 +64,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     unsigned int __nusers;
     __extension__ union
diff --git a/sysdeps/hppa/nptl/bits/pthreadtypes.h b/sysdeps/hppa/nptl/bits/pthreadtypes.h
index 540802a..d0c1d58 100644
--- a/sysdeps/hppa/nptl/bits/pthreadtypes.h
+++ b/sysdeps/hppa/nptl/bits/pthreadtypes.h
@@ -71,7 +71,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     /* The old 4-word 16-byte aligned lock. This is initalized
        to all ones by the Linuxthreads PTHREAD_MUTEX_INITIALIZER.
diff --git a/sysdeps/ia64/nptl/bits/pthreadtypes.h b/sysdeps/ia64/nptl/bits/pthreadtypes.h
index f2e6dac..0e83883 100644
--- a/sysdeps/ia64/nptl/bits/pthreadtypes.h
+++ b/sysdeps/ia64/nptl/bits/pthreadtypes.h
@@ -64,7 +64,7 @@ typedef union
     int __owner;
     unsigned int __nusers;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     int __spins;
     __pthread_list_t __list;
diff --git a/sysdeps/m68k/nptl/bits/pthreadtypes.h b/sysdeps/m68k/nptl/bits/pthreadtypes.h
index d8faa7a..d195492 100644
--- a/sysdeps/m68k/nptl/bits/pthreadtypes.h
+++ b/sysdeps/m68k/nptl/bits/pthreadtypes.h
@@ -64,7 +64,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     unsigned int __nusers;
     __extension__ union
diff --git a/sysdeps/microblaze/nptl/bits/pthreadtypes.h b/sysdeps/microblaze/nptl/bits/pthreadtypes.h
index 9e9e307..2a1ca0a 100644
--- a/sysdeps/microblaze/nptl/bits/pthreadtypes.h
+++ b/sysdeps/microblaze/nptl/bits/pthreadtypes.h
@@ -63,7 +63,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     unsigned int __nusers;
     __extension__ union
diff --git a/sysdeps/mips/nptl/bits/pthreadtypes.h b/sysdeps/mips/nptl/bits/pthreadtypes.h
index 68ed94b..c7533a8 100644
--- a/sysdeps/mips/nptl/bits/pthreadtypes.h
+++ b/sysdeps/mips/nptl/bits/pthreadtypes.h
@@ -87,7 +87,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #if _MIPS_SIM == _ABI64
     int __spins;
diff --git a/sysdeps/nios2/nptl/bits/pthreadtypes.h b/sysdeps/nios2/nptl/bits/pthreadtypes.h
index 76076d0..ee8b7ba 100644
--- a/sysdeps/nios2/nptl/bits/pthreadtypes.h
+++ b/sysdeps/nios2/nptl/bits/pthreadtypes.h
@@ -64,7 +64,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     unsigned int __nusers;
     __extension__ union
diff --git a/sysdeps/s390/nptl/bits/pthreadtypes.h b/sysdeps/s390/nptl/bits/pthreadtypes.h
index 40d10fe..21d13bd 100644
--- a/sysdeps/s390/nptl/bits/pthreadtypes.h
+++ b/sysdeps/s390/nptl/bits/pthreadtypes.h
@@ -86,7 +86,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #if __WORDSIZE == 64
 # ifdef ENABLE_LOCK_ELISION
diff --git a/sysdeps/sh/nptl/bits/pthreadtypes.h b/sysdeps/sh/nptl/bits/pthreadtypes.h
index 13fbd73..5354f78 100644
--- a/sysdeps/sh/nptl/bits/pthreadtypes.h
+++ b/sysdeps/sh/nptl/bits/pthreadtypes.h
@@ -64,7 +64,7 @@ typedef union
     unsigned int __count;
     int __owner;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     unsigned int __nusers;
     __extension__ union
diff --git a/sysdeps/sparc/nptl/bits/pthreadtypes.h b/sysdeps/sparc/nptl/bits/pthreadtypes.h
index d45cb61..e781a25 100644
--- a/sysdeps/sparc/nptl/bits/pthreadtypes.h
+++ b/sysdeps/sparc/nptl/bits/pthreadtypes.h
@@ -87,7 +87,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #if __WORDSIZE == 64
     int __spins;
diff --git a/sysdeps/tile/nptl/bits/pthreadtypes.h b/sysdeps/tile/nptl/bits/pthreadtypes.h
index 7d68650..b14b1c6 100644
--- a/sysdeps/tile/nptl/bits/pthreadtypes.h
+++ b/sysdeps/tile/nptl/bits/pthreadtypes.h
@@ -87,7 +87,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #if __WORDSIZE == 64
     int __spins;
diff --git a/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
index 1a1779b..b7af038 100644
--- a/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/alpha/bits/pthreadtypes.h
@@ -63,7 +63,7 @@ typedef union
     int __owner;
     unsigned int __nusers;
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
     int __spins;
     __pthread_list_t __list;
diff --git a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
index 345e79a..d230ac9 100644
--- a/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
+++ b/sysdeps/unix/sysv/linux/powerpc/bits/pthreadtypes.h
@@ -87,7 +87,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #if __WORDSIZE == 64
     short __spins;
diff --git a/sysdeps/x86/bits/pthreadtypes.h b/sysdeps/x86/bits/pthreadtypes.h
index 16b8f4f..c641a40 100644
--- a/sysdeps/x86/bits/pthreadtypes.h
+++ b/sysdeps/x86/bits/pthreadtypes.h
@@ -98,7 +98,7 @@ typedef union
     unsigned int __nusers;
 #endif
     /* KIND must stay at this position in the structure to maintain
-       binary compatibility.  */
+       binary compatibility with static initializers.  */
     int __kind;
 #ifdef __x86_64__
     short __spins;

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

* Re: [PATCH] nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI
  2016-11-07 13:47 [PATCH] nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI Florian Weimer
@ 2016-11-07 19:21 ` Torvald Riegel
  0 siblings, 0 replies; 2+ messages in thread
From: Torvald Riegel @ 2016-11-07 19:21 UTC (permalink / raw)
  To: Florian Weimer; +Cc: GNU C Library

On Mon, 2016-11-07 at 14:47 +0100, Florian Weimer wrote:
> I started composing a lengthy email about why we should align 
> pthread_mutex_t layout on i386 and x86_64 (because cross-process 
> compatibility is of more practical importance these days than 
> LinuxThreads backwards compatibility).  But then I realized that we 
> don't have this choice due to the static initializers, which have __kind 
> at different offsets.
> 
> The attached patch makes this more explicit in the relevant header files.

OK.

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

end of thread, other threads:[~2016-11-07 19:21 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-11-07 13:47 [PATCH] nptl: Document the reason why __kind in pthread_mutex_t is part of the ABI Florian Weimer
2016-11-07 19:21 ` Torvald Riegel

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 read-only IMAP folder(s) and NNTP newsgroup(s).