This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] Compile elf/rtld.c with -fno-tree-loop-distribute-patterns.


* Sandra Loosemore:

> 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.
> ---
>  elf/Makefile | 6 ++++++
>  1 file changed, 6 insertions(+)
>
> diff --git a/elf/Makefile b/elf/Makefile
> index 0668818..b05af5c 100644
> --- a/elf/Makefile
> +++ b/elf/Makefile
> @@ -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.

I've pushed this now, given that Adhemerval had not objections either,
and it's a solution we have available today.  Thanks.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]