public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* [PATCH] m68k: restore handling of R_68K_NONE in elf_machine_lazy_rel()
@ 2016-10-29 13:48 slyich
  2016-10-29 15:37 ` Andreas Schwab
  0 siblings, 1 reply; 7+ messages in thread
From: slyich @ 2016-10-29 13:48 UTC (permalink / raw)
  To: libc-alpha; +Cc: Sergei Trofimovich, Andreas Schwab, Roland McGrath

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

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2016-11-08 23:56 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-10-29 13:48 [PATCH] m68k: restore handling of R_68K_NONE in elf_machine_lazy_rel() slyich
2016-10-29 15:37 ` Andreas Schwab
2016-10-29 16:15   ` Sergei Trofimovich
2016-10-29 17:11     ` Andreas Schwab
2016-10-30 10:13       ` Sergei Trofimovich
2016-10-30 11:05         ` Andreas Schwab
2016-11-08 23:56           ` Sergei Trofimovich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).