From patchwork Sat Oct 29 13:48:01 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sergei Trofimovich X-Patchwork-Id: 16941 Received: (qmail 64966 invoked by alias); 29 Oct 2016 13:48:37 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 64898 invoked by uid 89); 29 Oct 2016 13:48:32 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.5 required=5.0 tests=BAYES_20, FREEMAIL_FROM, RP_MATCHES_RCVD, SPF_PASS autolearn=ham version=3.3.2 spammy=H*Ad:U*roland, March, schwab, Feb X-HELO: smtp.gentoo.org From: slyich@gmail.com To: libc-alpha@sourceware.org Cc: Sergei Trofimovich , Andreas Schwab , Roland McGrath Subject: [PATCH] m68k: restore handling of R_68K_NONE in elf_machine_lazy_rel() Date: Sat, 29 Oct 2016 14:48:01 +0100 Message-Id: <20161029134801.15082-1-slyich@gmail.com> From: Sergei Trofimovich elf_machine_lazy_rel() used to support _NONE relocation since it's initial merge: commit 01f3e03bcd992cc2917f5d228e763ef3d65e67ad Author: Roland McGrath Date: Tue Feb 13 09:26:53 1996 +0000 Then it was (accidentally?) removed in commit 96e1bff2513873062233a13c7fd1eea57bb8db24 Author: Roland McGrath 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 CC: Roland McGrath Signed-off-by: Sergei Trofimovich --- 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); }