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]

[PATCH] m68k: restore handling of R_68K_NONE in elf_machine_lazy_rel()


From: Sergei Trofimovich <siarheit@google.com>

elf_machine_lazy_rel() used to support _NONE relocation
since it's initial merge:

  commit 01f3e03bcd992cc2917f5d228e763ef3d65e67ad
  Author: Roland McGrath <roland@gnu.org>
  Date:   Tue Feb 13 09:26:53 1996 +0000

Then it was (accidentally?) removed in

  commit 96e1bff2513873062233a13c7fd1eea57bb8db24
  Author: Roland McGrath <roland@gnu.org>
  Date:   Wed Jul 17 18:00:33 1996 +0000

I've noticed this error when tested ghc-HEAD dynamic executable
in qemu:

  ghc-m68k $ LD_DEBUG=reloc bash -x inplace/bin/ghc-stage2 --info
  ...
  5599:     relocation processing: .../compiler/stage2/build/libHSghc-8.1-ghc8.1.20161028.so (lazy)
  5599:     relocation processing: /lib/libncurses.so.6 (lazy)
  5599:     relocation processing: .../libraries/terminfo/dist-install/build/libHSterminfo-0.4.0.2-ghc8.1.20161028.so (lazy)
  5599:     relocation processing: .../libraries/haskeline/dist-install/build/libHShaskeline-0.7.2.3-ghc8.1.20161028.so (lazy)
  5599:     relocation processing: .../inplace/lib/bin/ghc-stage2 (lazy)
  .../inplace/lib/bin/ghc-stage2: error while loading shared libraries: unexpected PLT reloc type 0x00

ghc-HEAD used to work in March 2016.

  $ m68k-unknown-linux-gnu-objdump -rR inplace/lib/bin/ghc-stage2

  DYNAMIC RELOCATION RECORDS
  OFFSET   TYPE              VALUE
  00000000 R_68K_NONE        *ABS*
  00000000 R_68K_NONE        *ABS*
  ...

https://lists.debian.org/debian-68k/2003/02/msg00009.html
suggests it's somewhat known problem in bintuils.

I don't know yet how to force toolchain to binaries with
such relocations.

This change makes ghc-stage2 load and run fine on the following
toolchain version:

    gcc-5.4.0
    binutils-2.26.1
    glibc-2.23

CC: Andreas Schwab <schwab@linux-m68k.org>
CC: Roland McGrath <roland@hack.frob.com>

Signed-off-by: Sergei Trofimovich <siarheit@google.com>
---
 sysdeps/m68k/dl-machine.h | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/sysdeps/m68k/dl-machine.h b/sysdeps/m68k/dl-machine.h
index 41c179c..1b6b6a4 100644
--- a/sysdeps/m68k/dl-machine.h
+++ b/sysdeps/m68k/dl-machine.h
@@ -312,6 +312,8 @@ elf_machine_lazy_rel (struct link_map *map,
   Elf32_Addr *const reloc_addr = (void *) (l_addr + reloc->r_offset);
   if (ELF32_R_TYPE (reloc->r_info) == R_68K_JMP_SLOT)
     *reloc_addr += l_addr;
+  else if (ELF32_R_TYPE (reloc->r_info) == R_68K_NONE)
+    return;
   else
     _dl_reloc_bad_type (map, ELF32_R_TYPE (reloc->r_info), 1);
 }
-- 
2.10.1


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