about summary refs log tree commit diff
path: root/sysdeps/unix/sysv/linux/i386/lowlevellock.h
diff options
context:
space:
mode:
authorH.J. Lu <hjl.tools@gmail.com>2018-02-23 11:29:27 -0800
committerH.J. Lu <hjl.tools@gmail.com>2018-02-23 11:29:39 -0800
commitf5d1f629c693bc30ccc8ff1246cb37986c1adb1c (patch)
tree7ab5aa175267326f4e8aeeb600034a52e3aaafbb /sysdeps/unix/sysv/linux/i386/lowlevellock.h
parent54412d20618b7b93f136a168e788573575f8a7a6 (diff)
downloadglibc-f5d1f629c693bc30ccc8ff1246cb37986c1adb1c.tar.gz
glibc-f5d1f629c693bc30ccc8ff1246cb37986c1adb1c.tar.xz
glibc-f5d1f629c693bc30ccc8ff1246cb37986c1adb1c.zip
Define GEN_AS_CONST_HEADERS when generating header files [BZ #22792]
Glibc build generates header files to define constants from special .sym
files.  If a .sym file includes the same header file which it generates,
it leads to circular dependency which may lead to build hang on a
many-core machine.  Define GEN_AS_CONST_HEADERS when generating header
files to avoid circular dependency.

<tcb-offsets.h> is needed for i686 and it isn't needed for x86-64 at
least since glibc 2.23.

Tested on i686 and x86-64.

	[BZ #22792]
	* Makerules ($(common-objpfx)%.h): Pass -DGEN_AS_CONST_HEADERS
	to $(CC).
	* sysdeps/unix/sysv/linux/i386/lowlevellock.h: Include
	<tcb-offsets.h> only if GEN_AS_CONST_HEADERS isn't defined.
	* sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Don't include
	<tcb-offsets.h>.
Diffstat (limited to 'sysdeps/unix/sysv/linux/i386/lowlevellock.h')
-rw-r--r--sysdeps/unix/sysv/linux/i386/lowlevellock.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/sysdeps/unix/sysv/linux/i386/lowlevellock.h b/sysdeps/unix/sysv/linux/i386/lowlevellock.h
index fb59b57934..38fbc2556f 100644
--- a/sysdeps/unix/sysv/linux/i386/lowlevellock.h
+++ b/sysdeps/unix/sysv/linux/i386/lowlevellock.h
@@ -26,7 +26,14 @@
 # include <sys/param.h>
 # include <bits/pthreadtypes.h>
 # include <kernel-features.h>
-# include <tcb-offsets.h>
+/* <tcb-offsets.h> is generated from tcb-offsets.sym to define offsets
+   and sizes of types in <tls.h> as well as <pthread.h> which includes
+   <lowlevellock.h> via nptl/descr.h.  Don't include <tcb-offsets.h>
+   when generating <tcb-offsets.h> to avoid circular dependency which
+   may lead to build hang on a many-core machine.  */
+# ifndef GEN_AS_CONST_HEADERS
+#  include <tcb-offsets.h>
+# endif
 
 # ifndef LOCK_INSTR
 #  ifdef UP