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>.
This commit is contained in:
parent
54412d2061
commit
f5d1f629c6
10
ChangeLog
10
ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2018-02-23 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
|
[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>.
|
||||||
|
|
||||||
2018-02-23 Joseph Myers <joseph@codesourcery.com>
|
2018-02-23 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
[BZ #15105]
|
[BZ #15105]
|
||||||
|
@ -276,10 +276,17 @@ ifdef gen-as-const-headers
|
|||||||
# Generating headers for assembly constants.
|
# Generating headers for assembly constants.
|
||||||
# We need this defined early to get into before-compile before
|
# We need this defined early to get into before-compile before
|
||||||
# it's used in sysd-rules, below.
|
# it's used in sysd-rules, below.
|
||||||
|
# Define GEN_AS_CONST_HEADERS to avoid circular dependency [BZ #22792].
|
||||||
|
# NB: <tcb-offsets.h> is generated from tcb-offsets.sym to define
|
||||||
|
# offsets and sizes of types in <tls.h> and maybe <pthread.h> which
|
||||||
|
# may include <tcb-offsets.h>. Target header files can check if
|
||||||
|
# GEN_AS_CONST_HEADERS is defined to avoid circular dependency which
|
||||||
|
# may lead to build hang on a many-core machine.
|
||||||
$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk \
|
$(common-objpfx)%.h $(common-objpfx)%.h.d: $(..)scripts/gen-as-const.awk \
|
||||||
%.sym $(common-before-compile)
|
%.sym $(common-before-compile)
|
||||||
$(AWK) -f $< $(filter %.sym,$^) \
|
$(AWK) -f $< $(filter %.sym,$^) \
|
||||||
| $(CC) -S -o $(@:.h.d=.h)T3 $(CFLAGS) $(CPPFLAGS) -x c - \
|
| $(CC) -S -o $(@:.h.d=.h)T3 $(CFLAGS) $(CPPFLAGS) \
|
||||||
|
-DGEN_AS_CONST_HEADERS -x c - \
|
||||||
-MD -MP -MF $(@:.h=.h.d)T -MT '$(@:.h=.h.d) $(@:.h.d=.h)'
|
-MD -MP -MF $(@:.h=.h.d)T -MT '$(@:.h=.h.d) $(@:.h.d=.h)'
|
||||||
sed -n 's/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$$/#define \1 \2/p' \
|
sed -n 's/^.*@@@name@@@\([^@]*\)@@@value@@@[^0-9Xxa-fA-F-]*\([0-9Xxa-fA-F-][0-9Xxa-fA-F-]*\).*@@@end@@@.*$$/#define \1 \2/p' \
|
||||||
$(@:.h.d=.h)T3 > $(@:.h.d=.h)T
|
$(@:.h.d=.h)T3 > $(@:.h.d=.h)T
|
||||||
|
@ -26,7 +26,14 @@
|
|||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
# include <bits/pthreadtypes.h>
|
# include <bits/pthreadtypes.h>
|
||||||
# include <kernel-features.h>
|
# include <kernel-features.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>
|
# include <tcb-offsets.h>
|
||||||
|
# endif
|
||||||
|
|
||||||
# ifndef LOCK_INSTR
|
# ifndef LOCK_INSTR
|
||||||
# ifdef UP
|
# ifdef UP
|
||||||
|
@ -26,7 +26,6 @@
|
|||||||
# include <sys/param.h>
|
# include <sys/param.h>
|
||||||
# include <bits/pthreadtypes.h>
|
# include <bits/pthreadtypes.h>
|
||||||
# include <kernel-features.h>
|
# include <kernel-features.h>
|
||||||
# include <tcb-offsets.h>
|
|
||||||
|
|
||||||
# ifndef LOCK_INSTR
|
# ifndef LOCK_INSTR
|
||||||
# ifdef UP
|
# ifdef UP
|
||||||
|
Loading…
x
Reference in New Issue
Block a user