From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from list by lists.gnu.org with archive (Exim 4.71) id 1en51z-0001EQ-Ma for mharc-grub-devel@gnu.org; Sat, 17 Feb 2018 11:08:07 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54679) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1en3m4-0000cA-Q0 for grub-devel@gnu.org; Sat, 17 Feb 2018 09:47:40 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1en3lz-0006XM-Te for grub-devel@gnu.org; Sat, 17 Feb 2018 09:47:36 -0500 Received: from mail-pl0-x243.google.com ([2607:f8b0:400e:c01::243]:42844) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1en3lz-0006XD-Nc for grub-devel@gnu.org; Sat, 17 Feb 2018 09:47:31 -0500 Received: by mail-pl0-x243.google.com with SMTP id 31so3253587ple.9 for ; Sat, 17 Feb 2018 06:47:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:subject:message-id:mime-version:content-disposition :user-agent; bh=PPfdKmxmhLWDE9sm4asnbqOMJuYOIMtuNUHKTh6OGvo=; b=P7LNX3v/cBmM/Os+komIgPdA3fDvz+4YOd5rBnA4Du9GKqONOSvU8QfZrueTsX49BO qlco4UwJxJFG+gc4GWeyhp/AilGbvzHBhfgUhMwZbna2OEFY32PLTEmjbRPZewSN7cRX TDqySKEAEFL+FY44eGyTVtANMbPvMpfsOwuKyt4n9dISOeaEvDlGUnMWO7sJir9C2kAl OS9CXgWKlq7lw1oAW612BbQTM5tSTyCw2sue9JsIUiX78OYYvrp4gIntHUuDzSmOGWv1 oH0bk+Yxgwg5qxF6TxP/h2fWabdb82eZlMP80iGaaE7N/YP9ySILKoEZZkyjlbGE9tej N/sg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:subject:message-id:mime-version :content-disposition:user-agent; bh=PPfdKmxmhLWDE9sm4asnbqOMJuYOIMtuNUHKTh6OGvo=; b=C2wrqet2wglrWks4On8KBqToHCHC7xtcey0fAAp5XE4PjyC2sSPoGIQe0diQlpm9UQ 1DQ1aTHZtL3xdcVXNVos3X/VR3w0FbXZqafHmjtroEyptz7JYHekOqzvB2sTdIGjvtJg N/yExAXF3r54iFPyY8aDpmPL1Qr/T9pl4QlNTgcjNbS7CYbK80HYURSUykCCO9FIN+yD dkCkd+zcHCM2KOF5aaF8u00Asl0Io9d6KcMt2m0sYaqa2to08a97xNfSTIv/1Yxi6J8b 4laF7KBmSATR1uA0D4fmXaeNfx+VWg4PVRFF4mNdseWMbC7BekNTo8wls8g4YnrTvAY5 VhXw== X-Gm-Message-State: APf1xPAOfJK5ojk7MflFRBrLcaEgZMeiGe3BrHvZNJ/CR4Q0Qe8T6PQz rcmRasB8cfrhA3SL6BmYldUCyQ== X-Google-Smtp-Source: AH8x227HpkVMFKM3DTrYUVE6kPj4oh6xGWmygmbwscOqCRLE8M6fuQlqifQJEBvUPsrRGN8lnNPdxg== X-Received: by 2002:a17:902:34a:: with SMTP id 68-v6mr9166659pld.276.1518878850206; Sat, 17 Feb 2018 06:47:30 -0800 (PST) Received: from gnu-tools-1.localdomain (c-73-93-86-59.hsd1.ca.comcast.net. [73.93.86.59]) by smtp.gmail.com with ESMTPSA id g17sm57052105pfh.134.2018.02.17.06.47.29 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Sat, 17 Feb 2018 06:47:29 -0800 (PST) Received: by gnu-tools-1.localdomain (Postfix, from userid 1000) id 8894B21E38; Sat, 17 Feb 2018 06:47:28 -0800 (PST) Date: Sat, 17 Feb 2018 06:47:28 -0800 From: "H.J. Lu" To: grub-devel@gnu.org Subject: [PATCH] x86-64: Treat R_X86_64_PLT32 as R_X86_64_PC32 Message-ID: <20180217144728.GA8637@gmail.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.9.2 (2017-12-15) X-detected-operating-system: by eggs.gnu.org: Genre and OS details not recognized. X-Received-From: 2607:f8b0:400e:c01::243 X-Mailman-Approved-At: Sat, 17 Feb 2018 11:08:06 -0500 X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: The development of GNU GRUB List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 17 Feb 2018 14:47:40 -0000 Starting from binutils commit bd7ab16b4537788ad53521c45469a1bdae84ad4a: https://sourceware.org/git/?p=binutils-gdb.git;a=commit;h=bd7ab16b4537788ad53521c45469a1bdae84ad4a x86-64 assembler generates R_X86_64_PLT32, instead of R_X86_64_PC32, for 32-bit PC-relative branches. Grub2 should treat R_X86_64_PLT32 as R_X86_64_PC32. Signed-off-by: H.J. Lu --- grub-core/efiemu/i386/loadcore64.c | 1 + grub-core/kern/x86_64/dl.c | 1 + util/grub-mkimagexx.c | 1 + util/grub-module-verifier.c | 1 + 4 files changed, 4 insertions(+) diff --git a/grub-core/efiemu/i386/loadcore64.c b/grub-core/efiemu/i386/loadcore64.c index e49d0b6ff..18facf47f 100644 --- a/grub-core/efiemu/i386/loadcore64.c +++ b/grub-core/efiemu/i386/loadcore64.c @@ -98,6 +98,7 @@ grub_arch_efiemu_relocate_symbols64 (grub_efiemu_segment_t segs, break; case R_X86_64_PC32: + case R_X86_64_PLT32: err = grub_efiemu_write_value (addr, *addr32 + rel->r_addend + sym.off diff --git a/grub-core/kern/x86_64/dl.c b/grub-core/kern/x86_64/dl.c index 440690673..3a73e6e6c 100644 --- a/grub-core/kern/x86_64/dl.c +++ b/grub-core/kern/x86_64/dl.c @@ -70,6 +70,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr, break; case R_X86_64_PC32: + case R_X86_64_PLT32: { grub_int64_t value; value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value - diff --git a/util/grub-mkimagexx.c b/util/grub-mkimagexx.c index a2bb05439..39d7efb91 100644 --- a/util/grub-mkimagexx.c +++ b/util/grub-mkimagexx.c @@ -841,6 +841,7 @@ SUFFIX (relocate_addresses) (Elf_Ehdr *e, Elf_Shdr *sections, break; case R_X86_64_PC32: + case R_X86_64_PLT32: { grub_uint32_t *t32 = (grub_uint32_t *) target; *t32 = grub_host_to_target64 (grub_target_to_host32 (*t32) diff --git a/util/grub-module-verifier.c b/util/grub-module-verifier.c index 9179285a5..a79271f66 100644 --- a/util/grub-module-verifier.c +++ b/util/grub-module-verifier.c @@ -19,6 +19,7 @@ struct grub_module_verifier_arch archs[] = { -1 }, (int[]){ R_X86_64_PC32, + R_X86_64_PLT32, -1 } }, -- 2.14.3