From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 2178) id 93EA63857BAB; Thu, 27 Oct 2022 09:36:59 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 93EA63857BAB DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1666863419; bh=TULH2CoFnSYwxLowku4u+s7XmIHeTZpSGK22QPUZp58=; h=From:To:Subject:Date:From; b=Yk9sDf5UzZ8bJDM/EXvnie31WPf+/tLlswEbYTDmNVoDUUr8V77pPmMNmGmgviwp+ fACUasS0JSTmZ/2x9lZk7JUurc4Oxh7Quz9/xbmR5YGyYAGtwy1yTMXo+hON263OZd 6PsE5Z/RmW3NdWArI0EjkYzISq6dKAfxvqCkyXWY= MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset="utf-8" From: Florian Weimer To: glibc-cvs@sourceware.org Subject: [glibc] scripts/localplt.awk: Handle DT_JMPREL with empty PLT (for C-SKY) X-Act-Checkin: glibc X-Git-Author: Florian Weimer X-Git-Refname: refs/heads/master X-Git-Oldrev: 11306df777e4355bb94f3581fcd2207a525d47dd X-Git-Newrev: 77db67c56b24bba3c735aac34a6f796c909b68c0 Message-Id: <20221027093659.93EA63857BAB@sourceware.org> Date: Thu, 27 Oct 2022 09:36:59 +0000 (GMT) List-Id: https://sourceware.org/git/gitweb.cgi?p=glibc.git;h=77db67c56b24bba3c735aac34a6f796c909b68c0 commit 77db67c56b24bba3c735aac34a6f796c909b68c0 Author: Florian Weimer Date: Thu Oct 27 11:36:44 2022 +0200 scripts/localplt.awk: Handle DT_JMPREL with empty PLT (for C-SKY) On csky-linux-gnuabiv2, binutils 2.33 produces a DT_JMPREL entry for the dynamic loader if it does not contain any PLT relocations: Dynamic section at offset 0x1df48 contains 19 entries: Tag Type Name/Value 0x0000000e (SONAME) Library soname: [ld-linux-cskyv2-hf.so.1] 0x00000004 (HASH) 0xd4 0x6ffffef5 (GNU_HASH) 0x1a8 0x00000005 (STRTAB) 0x4ac 0x00000006 (SYMTAB) 0x28c 0x0000000a (STRSZ) 527 (bytes) 0x0000000b (SYMENT) 16 (bytes) 0x00000003 (PLTGOT) 0x1f000 0x00000002 (PLTRELSZ) 0 (bytes) 0x00000014 (PLTREL) RELA 0x00000017 (JMPREL) 0xaa4 0x00000007 (RELA) 0x75c 0x00000008 (RELASZ) 840 (bytes) 0x00000009 (RELAENT) 12 (bytes) 0x6ffffffc (VERDEF) 0x700 0x6ffffffd (VERDEFNUM) 3 0x6ffffff0 (VERSYM) 0x6bc 0x6ffffff9 (RELACOUNT) 68 0x00000000 (NULL) 0x0 This confuses the script: Unexpected output from check-localplt: …/elf/ld.so.jmprel: *** DT_JMPREL does not match any section's address This commit changes the script to record the DT_PLTRELSZ value and reject DT_JMPREL values not a section boundary only if DT_PLTRELSZ is present with a non-zero value. Reviewed-by: Siddhesh Poyarekar Diff: --- scripts/localplt.awk | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/scripts/localplt.awk b/scripts/localplt.awk index beaa342922..fe79ca01ab 100644 --- a/scripts/localplt.awk +++ b/scripts/localplt.awk @@ -4,17 +4,25 @@ # It writes "NAME: SYMBOL" for each PLT entry in NAME that refers to a # symbol defined in the same object. -BEGIN { result = 0 } +BEGIN { + result = 0; + pltrelsize = -1; +} FILENAME != lastfile { if (lastfile && jmprel_offset == 0 && rela_offset == 0 && rel_offset == 0) { print FILENAME ": *** failed to find expected output (readelf -WSdr)"; result = 2; } + if (pltrelsz > 0 && jmprel_offset == -1) { + print FILENAME ": Could not find section for DT_JMPREL"; + result = 2; + } lastfile = FILENAME; jmprel_offset = 0; rela_offset = 0; rel_offset = 0; + pltrelsz = -1; delete section_offset_by_address; } @@ -82,12 +90,16 @@ $2 == "(JMPREL)" { if (jmprel_addr in section_offset_by_address) { jmprel_offset = section_offset_by_address[jmprel_addr]; } else { - print FILENAME ": *** DT_JMPREL does not match any section's address"; - result = 2; + jmprel_offset = -1 } next } +$2 == "(PLTRELSZ)" { + pltrelsz = strtonum($3); + next +} + $2 == "(RELA)" { rela_addr = strtonum($3); if (rela_addr in section_offset_by_address) {