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 v2] Improve IFUNC check


On 2020-02-10 11:14, Fangrui Song wrote:
> On 2020-02-08, Aurelien Jarno wrote:
> > On 2020-02-06 10:53, Fangrui Song wrote:
> > > On 2020-02-06, Aurelien Jarno wrote:
> > > > Hi,
> > > >
> > > > On 2020-02-04 22:09, Fangrui Song wrote:
> > > > > GNU ld's RISCV port does not support IFUNC. ld -no-pie produces no
> > > > > relocation and the test passed incorrectly. Be more rigid by testing
> > > > > IRELATIVE explicitly.
> > > >
> > > > Thanks for your patch and sorry for the time to answer, I was testing it
> > > > on many architectures. First of all I confirm it fixes the issue when
> > > > building glibc with PIE on mips* and riscv64. I also confirm it
> > > > introduces no regression on aarch64, armv5, armv7, hppa, m68k, powerpc,
> > > > ppc64, ppc64le, s390x and x86_64.
> > > >
> > > > However it wrongly detects that IFUNC is not supported on sparc64 when
> > > > PIE is not in use. Here is the output of of readelf for the non-PIE
> > > > case:
> > > >
> > > > | Relocation section '.rela.dyn' at offset 0x110 contains 1 entry:
> > > > |   Offset          Info           Type           Sym. Value    Sym. Name + Addend
> > > > | 000000200280  0000000000f8 R_SPARC_JMP_IREL                     100128
> > > 
> > > sparc64 -no-pie does not produce an R_SPARC_IRELATIVE. This looks weird.
> > > All other archs emit an R_*_IRELATIVE.
> > > 
> > > Can you dump the assembly (including .text and .[i]plt)?
> > > Or can someone with sparc64 experience answer why sparc64 is different
> > > here?
> > 
> > Here is the dump of the .iplt section:
> > Disassembly of section .iplt:
> > 
> > 0000000000200200 <.iplt>:
> >        ...
> >  200280:       03 00 00 80     sethi  %hi(0x20000), %g1
> >  200284:       30 6f ff e7     b,a   %xcc, 200220 <__start+0x1000f8>
> >  200288:       01 00 00 00     nop
> >  20028c:       01 00 00 00     nop
> >  200290:       01 00 00 00     nop
> >  200294:       01 00 00 00     nop
> >  200298:       01 00 00 00     nop
> >  20029c:       01 00 00 00     nop
> > 
> > There is no .text nor .plt section.
> > 
> > -- 
> > Aurelien Jarno                          GPG: 4096R/1DDD8C9B
> > aurelien@aurel32.net                 http://www.aurel32.net
> 
> Attached PATCH v2.
> 
> sparc64 has a non-conventional R_SPARC_JMP_IREL, along with conventional
> R_SPARC_IRELATIVE.

Thanks for the new version. I confirm it fixes the problem on sparc and
that it still works on other architectures.

Tested-by: Aurelien Jarno <aurelien@aurel32.net>

-- 
Aurelien Jarno                          GPG: 4096R/1DDD8C9B
aurelien@aurel32.net                 http://www.aurel32.net


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