This is the mail archive of the binutils@sourceware.org mailing list for the binutils 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: [AArch64] Use SYMBOL_REFERENCES_LOCAL in one symbol check


On 20/06/17 23:50, Steve Ellcey wrote:
Some new information, I see that when building the dynamic
linker/loader (part of the glibc build), when using your patch I get
this error that I did not get before.

aarch64-linux-gnu-gcc -mabi=lp64   -nostdlib -nostartfiles -shared -o /home/sellcey/toolchain/obj/glibc64/elf/ld.so.new            \
           -Wl,-z,combreloc -Wl,-z,relro -Wl,--hash-style=both -Wl,-z,defs       \
           /home/sellcey/toolchain/obj/glibc64/elf/librtld.os -Wl,--version-script=/home/sellcey/toolchain/obj/glibc64/ld.map          \
           -Wl,-soname=ld-linux-aarch64.so.1                     \
           -Wl,-defsym=_begin=0
/home/sellcey/toolchain/install/lib/gcc/aarch64-linux-gnu/8.0.0/../../../../aarch64-linux-gnu/bin/ld: /home/sellcey/toolchain/obj/glibc64/elf/librtld.os: relocation R_AARCH64_ADR_PREL_PG_HI21 against symbol `_dl_argv' which may bind externally can not be used when making a shared object; recompile with -fPIC


Hi Steve,
This is because my patch actually tighten the symbol check under PIC mode.

  For this particular case, it's because some hand-written assembly

  GLIBC/sysdep/aarch64/dl-machine.h: RTLD_START_1

   ...
   adrp    x3, _dl_argv                                       \n\
   str     " PTR "2, [x3, #:lo12:_dl_argv]                    \n\
   ...

  is exactly reference a normal global visibility symbol "_dl_argv" for which if
in usual userspace then might be overriden, so a warning was given here.

  However that hand written assembly is a RTLD hook for which I think the symbol
can't be overridden, so use ADRP is fine there, but the assembly ought to mark
the symbol's visibility correctly, I feel hidden it make sense here.
So, I think we should fix AArch64 glibc code, to use _GI__dl_argv instead of
_dl_argv,
...
   adrp    x3, __GI__dl_argv                                       \n\
   str     " PTR "2, [x3, #:lo12:__GI__dl_argv]                    \n\
   ...
This seems to me is the correct way, and I verified glibc build should be OK after
this change.



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