mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-24 14:00:30 +00:00
Compile elf/rtld.c with -fno-tree-loop-distribute-patterns.
In GCC 10, the default at -O2 is now -ftree-loop-distribute-patterns. This optimization causes GCC to "helpfully" convert the hand-written loop in _dl_start into a call to memset, which is not available that early in program startup. Similar problems in other places in GLIBC have been addressed by explicitly building with -fno-tree-loop-distribute-patterns, but this one may have been overlooked previously because it only affects targets where HAVE_BUILTIN_MEMSET is not defined. This patch fixes a bug observed on nios2-linux-gnu target that caused all programs to segv on startup.
This commit is contained in:
parent
cc0e0b097c
commit
c72e5cd87d
@ -65,6 +65,12 @@ CFLAGS-dl-runtime.c += -fexceptions -fasynchronous-unwind-tables
|
||||
CFLAGS-dl-lookup.c += -fexceptions -fasynchronous-unwind-tables
|
||||
CFLAGS-dl-iterate-phdr.c += $(uses-callbacks)
|
||||
|
||||
# On targets without __builtin_memset, rtld.c uses a hand-coded loop
|
||||
# in _dl_start. Make sure this isn't turned into a call to regular memset.
|
||||
ifeq (yes,$(have-loop-to-function))
|
||||
CFLAGS-rtld.c += -fno-tree-loop-distribute-patterns
|
||||
endif
|
||||
|
||||
# Compile rtld itself without stack protection.
|
||||
# Also compile all routines in the static library that are elided from
|
||||
# the shared libc because they are in libc.a in the same way.
|
||||
|
Loading…
Reference in New Issue
Block a user