@@ -69,7 +69,7 @@ EALIGN(STRNCAT, 4, 0)
beq cr0,L(done)
mr r31, r4 /* Save "s2" in r31 from r4. */
- bl STRLEN /* Call optimized strlen on s1; goto
+ bl strlen /* Call optimized strlen on s1; goto
end of s1. */
nop
cmpldi cr7, r29, 7 /* If s2 is <=7 process
And rebuilding it I see:
$ LC_ALL=C readelf -W -S -d -r libc.so | grep strlen
00000000001f2bc8 0000033b00000015 R_PPC64_JMP_SLOT strlen() strlen + 0
So below there is a slight modified patch to address it (I didn't add the ChangeLog).
What do you think ?
---
@@ -32,9 +32,15 @@ $1 == "Offset" && $2 == "Info" { in_relocs = 1; next }
NF == 0 { in_relocs = 0 }
in_relocs && relocs_offset == jmprel_offset && NF >= 5 {
- symval = strtonum("0x" $4);
- if (symval != 0)
+ # Relocations against GNU_IFUNC symbols are not shown as an hexadecimal
+ # value, but rather as the resolver symbol followed by ().
+ if ($4 ~ /\(\)/) {
print whatfile, $5
+ } else {
+ symval = strtonum("0x" $4);
+ if (symval != 0)
+ print whatfile, $5
+ }
}
in_relocs { next }