[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
This commit is contained in:
Fangrui Song 2020-01-09 11:59:28 -08:00
parent f17ae668a9
commit 2d077d6dfa
4 changed files with 5 additions and 9 deletions

View File

@ -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;

View File

@ -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; }

View File

@ -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 [

View File

@ -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 [