aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Rossi <nathan@nathanrossi.com>2017-07-28 09:21:14 -0300
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>2017-07-28 09:21:14 -0300
commitd95fcb2df478efbf4f8537ba898374043ac4561f (patch)
tree709f7967ffda4ca9ae7b9f1296f8f10dce183052
parent0aab054a92d5b49723ba5343bc1bc2475a289c95 (diff)
downloadglibc-d95fcb2df478efbf4f8537ba898374043ac4561f.zip
glibc-d95fcb2df478efbf4f8537ba898374043ac4561f.tar.gz
glibc-d95fcb2df478efbf4f8537ba898374043ac4561f.tar.bz2
microblaze: Resolve non-relocatable branch in pt-vfork.S (BZ#21779)
The relative branch directly to __libc_vfork results in an relocation that cannot be resolved. Specifically a R_MICROBLAZE_64_PCREL relocation is created for this branch, however for MicroBlaze R_MICROBLAZE_64_PCREL type relocations symbols are not resolved. Additionally due to the branch being located in the .text section the instruction cannot be rewritten as the section is not writable, and causes a segfault at runtime when loading libpthread. To resolve this issue, ensure the branch is done using PLT. This removes the need to modify the instruction and trades the R_MICROBLAZE_64_PCREL for a more common R_MICROBLAZE_JUMP via the PLT. [BZ #21779] * sysdeps/unix/sysv/linux/microblaze/pt-vfork.S: Branch using PLT.
-rw-r--r--ChangeLog3
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/pt-vfork.S2
2 files changed, 4 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 8b76a6d..4cec993 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,8 @@
2017-07-23 Nathan Rossi <nathan@nathanrossi.com>
+ [BZ #21779]
+ * sysdeps/unix/sysv/linux/microblaze/pt-vfork.S: Branch using PLT.
+
* sysdeps/microblaze/libm-test-ulps: Update.
2017-07-28 Chung-Lin Tang <cltang@codesourcery.com>
diff --git a/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S b/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S
index f201f04..d8339f2 100644
--- a/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S
+++ b/sysdeps/unix/sysv/linux/microblaze/pt-vfork.S
@@ -34,7 +34,7 @@
|| SHLIB_COMPAT (libpthread, GLIBC_2_1_2, GLIBC_2_20))
ENTRY (vfork_compat)
- bri __libc_vfork
+ bri __libc_vfork@PLT
END (vfork_compat)
#endif