From 2d077d6dfa7909a21293ebdac81488367628e0fa Mon Sep 17 00:00:00 2001 From: Fangrui Song Date: Thu, 9 Jan 2020 11:59:28 -0800 Subject: [PATCH] [ELF] Make TargetInfo::writeIgotPlt a no-op RELA targets don't read initial .got.plt entries. REL targets (ARM, x86-32) write the address of the IFUNC resolver to the entry (`write32le(buf, s.getVA())`). The default writeIgotPlt() is not meaningful. Make it a no-op. AArch64 and x86-64 will have 0 as initial .got.plt entries associated with IFUNC. Reviewed By: peter.smith Differential Revision: https://reviews.llvm.org/D72474 --- lld/ELF/Target.cpp | 4 ---- lld/ELF/Target.h | 2 +- lld/test/ELF/aarch64-gnu-ifunc-plt.s | 4 ++-- lld/test/ELF/gnu-ifunc-plt.s | 4 ++-- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/lld/ELF/Target.cpp b/lld/ELF/Target.cpp index aaae89b..70a68fd 100644 --- a/lld/ELF/Target.cpp +++ b/lld/ELF/Target.cpp @@ -150,10 +150,6 @@ bool TargetInfo::inBranchRange(RelType type, uint64_t src, uint64_t dst) const { return true; } -void TargetInfo::writeIgotPlt(uint8_t *buf, const Symbol &s) const { - writeGotPlt(buf, s); -} - RelExpr TargetInfo::adjustRelaxExpr(RelType type, const uint8_t *data, RelExpr expr) const { return expr; diff --git a/lld/ELF/Target.h b/lld/ELF/Target.h index 7284bfd..7206736 100644 --- a/lld/ELF/Target.h +++ b/lld/ELF/Target.h @@ -32,7 +32,7 @@ public: virtual void writeGotPltHeader(uint8_t *buf) const {} virtual void writeGotHeader(uint8_t *buf) const {} virtual void writeGotPlt(uint8_t *buf, const Symbol &s) const {}; - virtual void writeIgotPlt(uint8_t *buf, const Symbol &s) const; + virtual void writeIgotPlt(uint8_t *buf, const Symbol &s) const {} virtual int64_t getImplicitAddend(const uint8_t *buf, RelType type) const; virtual int getTlsGdRelaxSkip(RelType type) const { return 1; } diff --git a/lld/test/ELF/aarch64-gnu-ifunc-plt.s b/lld/test/ELF/aarch64-gnu-ifunc-plt.s index 08a6c49..91e8129 100644 --- a/lld/test/ELF/aarch64-gnu-ifunc-plt.s +++ b/lld/test/ELF/aarch64-gnu-ifunc-plt.s @@ -23,8 +23,8 @@ // GOTPLT: Contents of section .got.plt: // GOTPLT-NEXT: 230440 00000000 00000000 00000000 00000000 // GOTPLT-NEXT: 230450 00000000 00000000 f0022100 00000000 -// GOTPLT-NEXT: 230460 f0022100 00000000 f0022100 00000000 -// GOTPLT-NEXT: 230470 f0022100 00000000 +// GOTPLT-NEXT: 230460 f0022100 00000000 00000000 00000000 +// GOTPLT-NEXT: 230470 00000000 00000000 // Check that the PLTRELSZ tag does not include the IRELATIVE relocations // CHECK: DynamicSection [ diff --git a/lld/test/ELF/gnu-ifunc-plt.s b/lld/test/ELF/gnu-ifunc-plt.s index 2fad0b1..3d0cec0 100644 --- a/lld/test/ELF/gnu-ifunc-plt.s +++ b/lld/test/ELF/gnu-ifunc-plt.s @@ -25,8 +25,8 @@ // GOTPLT: Contents of section .got.plt: // GOTPLT-NEXT: 203430 40232000 00000000 00000000 00000000 // GOTPLT-NEXT: 203440 00000000 00000000 06132000 00000000 -// GOTPLT-NEXT: 203450 16132000 00000000 26132000 00000000 -// GOTPLT-NEXT: 203460 36132000 00000000 +// GOTPLT-NEXT: 203450 16132000 00000000 00000000 00000000 +// GOTPLT-NEXT: 203460 00000000 00000000 // Check that the PLTRELSZ tag does not include the IRELATIVE relocations // CHECK: DynamicSection [ -- 2.7.4