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] elf: Apply attribute_relro to pointers in elf/dl-minimal.c


* Joseph Myers:

> This change (commit 758599bc9dcc5764e862bd9e1613c5d1e6efc5d3) breaks the 
> build for alpha-linux-gnu with GCC and binutils mainline.  I get a series 
> of errors of the form (this is in the "compilers" glibc build):
>
> /scratch/jmyers/glibc/many10/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/elf/librtld.os: 
> in function `calloc':
> /scratch/jmyers/glibc/many10/src/glibc/elf/../include/rtld-malloc.h:44:(.text+0xd98): 
> relocation truncated to fit: GPREL16 against symbol `__rtld_calloc' 
> defined in .data.rel.ro section in 
> /scratch/jmyers/glibc/many10/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/elf/librtld.os
> /scratch/jmyers/glibc/many10/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/elf/librtld.os: 
> in function `malloc':
> /scratch/jmyers/glibc/many10/src/glibc/elf/../include/rtld-malloc.h:56:(.text+0x2978): 
> relocation truncated to fit: GPREL16 against symbol `__rtld_malloc' 
> defined in .data.rel.ro section in 
> /scratch/jmyers/glibc/many10/build/compilers/alpha-linux-gnu/glibc/alpha-linux-gnu/elf/librtld.os

I don't know much about alpha unfortunately.  Running this

$ objdump -d --reloc /lib/ld-linux.so.2  | grep -E  'lda\s.*gp,'

on a default build (not mainline, so successful) gives me what I
assume are GP-relative load instructions ranging from

    9ff4:       40 80 bd 23     lda     gp,-32704(gp)

to

    a040:       f4 7f bd 23     lda     gp,32756(gp)

That seems to be rather close to the 64 KiB displacement that alpha
apparently supports.

This suggests me that we aren't hitting a bug as such, but that we
were already rather near the limit before, and the additional PLT
avoidance that the patch brought finally moved us across the limit.

Would it be acceptable to switch from -fpic to -fPIC to fix this
(if it addresses the issue)?

diff --git a/sysdeps/alpha/Makefile b/sysdeps/alpha/Makefile
index da52c1d4d1..baf5d480e5 100644
--- a/sysdeps/alpha/Makefile
+++ b/sysdeps/alpha/Makefile
@@ -57,10 +57,6 @@ endif
 # "current" rounding mode, and it's easiest to set this with all of them.
 sysdep-CFLAGS += -mieee -mfp-rounding-mode=d
 
-# libc.so requires about 16k for the small data area, which is well
-# below the 64k maximum.
-pic-ccflag = -fpic
-
 #  Software floating-point emulation.
 
 ifeq ($(subdir),soft-fp)


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