Skip to content

Commit 7d423c0

Browse files
committed
Sparc: Use mc::isRelocation and remove GOT fixup kinds that map to relocation types
Simplify code, which is enabled by 40789ce ("MCFixup: Move relocation values before FK_NONE")
1 parent b1f1329 commit 7d423c0

File tree

6 files changed

+21
-40
lines changed

6 files changed

+21
-40
lines changed

llvm/lib/Target/Sparc/MCTargetDesc/SparcAsmBackend.cpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -54,23 +54,20 @@ static unsigned adjustFixupValue(unsigned Kind, uint64_t Value) {
5454
return (~Value >> 10) & 0x3fffff;
5555

5656
case Sparc::fixup_sparc_pc22:
57-
case Sparc::fixup_sparc_got22:
5857
case Sparc::fixup_sparc_tls_gd_hi22:
5958
case Sparc::fixup_sparc_tls_ldm_hi22:
6059
case Sparc::fixup_sparc_tls_ie_hi22:
6160
case Sparc::fixup_sparc_hi22:
6261
case Sparc::fixup_sparc_lm:
6362
return (Value >> 10) & 0x3fffff;
6463

65-
case Sparc::fixup_sparc_got13:
6664
case Sparc::fixup_sparc_13:
6765
return Value & 0x1fff;
6866

6967
case Sparc::fixup_sparc_lox10:
7068
return (Value & 0x3ff) | 0x1c00;
7169

7270
case Sparc::fixup_sparc_pc10:
73-
case Sparc::fixup_sparc_got10:
7471
case Sparc::fixup_sparc_tls_gd_lo10:
7572
case Sparc::fixup_sparc_tls_ldm_lo10:
7673
case Sparc::fixup_sparc_tls_ie_lo10:
@@ -178,9 +175,6 @@ namespace {
178175
{ "fixup_sparc_lm", 10, 22, 0 },
179176
{ "fixup_sparc_pc22", 10, 22, MCFixupKindInfo::FKF_IsPCRel },
180177
{ "fixup_sparc_pc10", 22, 10, MCFixupKindInfo::FKF_IsPCRel },
181-
{ "fixup_sparc_got22", 10, 22, 0 },
182-
{ "fixup_sparc_got10", 22, 10, 0 },
183-
{ "fixup_sparc_got13", 19, 13, 0 },
184178
{ "fixup_sparc_wplt30", 2, 30, MCFixupKindInfo::FKF_IsPCRel },
185179
{ "fixup_sparc_tls_gd_hi22", 10, 22, 0 },
186180
{ "fixup_sparc_tls_gd_lo10", 22, 10, 0 },
@@ -224,9 +218,6 @@ namespace {
224218
{ "fixup_sparc_lm", 0, 22, 0 },
225219
{ "fixup_sparc_pc22", 0, 22, MCFixupKindInfo::FKF_IsPCRel },
226220
{ "fixup_sparc_pc10", 0, 10, MCFixupKindInfo::FKF_IsPCRel },
227-
{ "fixup_sparc_got22", 0, 22, 0 },
228-
{ "fixup_sparc_got10", 0, 10, 0 },
229-
{ "fixup_sparc_got13", 0, 13, 0 },
230221
{ "fixup_sparc_wplt30", 0, 30, MCFixupKindInfo::FKF_IsPCRel },
231222
{ "fixup_sparc_tls_gd_hi22", 0, 22, 0 },
232223
{ "fixup_sparc_tls_gd_lo10", 0, 10, 0 },

llvm/lib/Target/Sparc/MCTargetDesc/SparcELFObjectWriter.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,19 @@ unsigned SparcELFObjectWriter::getRelocType(MCContext &Ctx,
6666
break;
6767
}
6868

69+
// Extract the relocation type from the fixup kind, after applying STT_TLS as
70+
// needed.
71+
unsigned Kind = Fixup.getTargetKind();
72+
if (mc::isRelocation(Fixup.getKind()))
73+
return Kind;
74+
6975
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Fixup.getValue())) {
7076
if (SExpr->getSpecifier() == SparcMCExpr::VK_R_DISP32)
7177
return ELF::R_SPARC_DISP32;
7278
}
7379

7480
if (IsPCRel) {
75-
switch(Fixup.getTargetKind()) {
81+
switch (Kind) {
7682
default:
7783
llvm_unreachable("Unimplemented fixup -> relocation");
7884
case FK_Data_1: return ELF::R_SPARC_DISP8;
@@ -113,9 +119,6 @@ unsigned SparcELFObjectWriter::getRelocType(MCContext &Ctx,
113119
case Sparc::fixup_sparc_hh: return ELF::R_SPARC_HH22;
114120
case Sparc::fixup_sparc_hm: return ELF::R_SPARC_HM10;
115121
case Sparc::fixup_sparc_lm: return ELF::R_SPARC_LM22;
116-
case Sparc::fixup_sparc_got22: return ELF::R_SPARC_GOT22;
117-
case Sparc::fixup_sparc_got10: return ELF::R_SPARC_GOT10;
118-
case Sparc::fixup_sparc_got13: return ELF::R_SPARC_GOT13;
119122
case Sparc::fixup_sparc_tls_gd_hi22: return ELF::R_SPARC_TLS_GD_HI22;
120123
case Sparc::fixup_sparc_tls_gd_lo10: return ELF::R_SPARC_TLS_GD_LO10;
121124
case Sparc::fixup_sparc_tls_gd_add: return ELF::R_SPARC_TLS_GD_ADD;

llvm/lib/Target/Sparc/MCTargetDesc/SparcFixupKinds.h

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -62,15 +62,6 @@ namespace llvm {
6262
/// fixup_sparc_pc10 - 10-bit fixup corresponding to %pc10(foo)
6363
fixup_sparc_pc10,
6464

65-
/// fixup_sparc_got22 - 22-bit fixup corresponding to %got22(foo)
66-
fixup_sparc_got22,
67-
68-
/// fixup_sparc_got10 - 10-bit fixup corresponding to %got10(foo)
69-
fixup_sparc_got10,
70-
71-
/// fixup_sparc_got13 - 13-bit fixup corresponding to %got13(foo)
72-
fixup_sparc_got13,
73-
7465
/// fixup_sparc_wplt30
7566
fixup_sparc_wplt30,
7667

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCCodeEmitter.cpp

Lines changed: 8 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
#include "SparcMCTargetDesc.h"
1616
#include "llvm/ADT/SmallVector.h"
1717
#include "llvm/ADT/Statistic.h"
18+
#include "llvm/BinaryFormat/ELF.h"
1819
#include "llvm/MC/MCAsmInfo.h"
1920
#include "llvm/MC/MCCodeEmitter.h"
2021
#include "llvm/MC/MCContext.h"
@@ -128,8 +129,7 @@ getMachineOpValue(const MCInst &MI, const MCOperand &MO,
128129
assert(MO.isExpr());
129130
const MCExpr *Expr = MO.getExpr();
130131
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
131-
MCFixupKind Kind = (MCFixupKind)SExpr->getFixupKind();
132-
Fixups.push_back(MCFixup::create(0, Expr, Kind));
132+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
133133
return 0;
134134
}
135135

@@ -159,15 +159,13 @@ SparcMCCodeEmitter::getSImm13OpValue(const MCInst &MI, unsigned OpNo,
159159
if (const MCConstantExpr *CE = dyn_cast<MCConstantExpr>(Expr))
160160
return CE->getValue();
161161

162-
MCFixupKind Kind;
163162
if (const SparcMCExpr *SExpr = dyn_cast<SparcMCExpr>(Expr)) {
164-
Kind = MCFixupKind(SExpr->getFixupKind());
165-
} else {
166-
bool IsPic = Ctx.getObjectFileInfo()->isPositionIndependent();
167-
Kind = IsPic ? MCFixupKind(Sparc::fixup_sparc_got13)
168-
: MCFixupKind(Sparc::fixup_sparc_13);
163+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
164+
return 0;
169165
}
170-
166+
uint16_t Kind = Sparc::fixup_sparc_13;
167+
if (Ctx.getObjectFileInfo()->isPositionIndependent())
168+
Kind = ELF::R_SPARC_GOT13;
171169
Fixups.push_back(MCFixup::create(0, Expr, Kind));
172170
return 0;
173171
}
@@ -194,8 +192,7 @@ getCallTargetOpValue(const MCInst &MI, unsigned OpNo,
194192
return 0;
195193
}
196194

197-
MCFixupKind Kind = MCFixupKind(SExpr->getFixupKind());
198-
Fixups.push_back(MCFixup::create(0, Expr, Kind));
195+
Fixups.push_back(MCFixup::create(0, Expr, SExpr->getFixupKind()));
199196
return 0;
200197
}
201198

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -135,9 +135,9 @@ SparcMCExpr::Specifier SparcMCExpr::parseSpecifier(StringRef name) {
135135
.Default(VK_None);
136136
}
137137

138-
Sparc::Fixups SparcMCExpr::getFixupKind(SparcMCExpr::Specifier S) {
138+
uint16_t SparcMCExpr::getFixupKind() const {
139139
// clang-format off
140-
switch (S) {
140+
switch (specifier) {
141141
default: llvm_unreachable("Unhandled SparcMCExpr::Specifier");
142142
case VK_LO: return Sparc::fixup_sparc_lo10;
143143
case VK_HI: return Sparc::fixup_sparc_hi22;
@@ -149,9 +149,9 @@ Sparc::Fixups SparcMCExpr::getFixupKind(SparcMCExpr::Specifier S) {
149149
case VK_LM: return Sparc::fixup_sparc_lm;
150150
case VK_PC22: return Sparc::fixup_sparc_pc22;
151151
case VK_PC10: return Sparc::fixup_sparc_pc10;
152-
case VK_GOT22: return Sparc::fixup_sparc_got22;
153-
case VK_GOT10: return Sparc::fixup_sparc_got10;
154-
case VK_GOT13: return Sparc::fixup_sparc_got13;
152+
case VK_GOT22: return ELF::R_SPARC_GOT22;
153+
case VK_GOT10: return ELF::R_SPARC_GOT10;
154+
case VK_GOT13: return ELF::R_SPARC_GOT13;
155155
case VK_13: return Sparc::fixup_sparc_13;
156156
case VK_WPLT30: return Sparc::fixup_sparc_wplt30;
157157
case VK_WDISP30: return Sparc::fixup_sparc_call30;

llvm/lib/Target/Sparc/MCTargetDesc/SparcMCExpr.h

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ class SparcMCExpr : public MCTargetExpr {
8585

8686
Specifier getSpecifier() const { return specifier; }
8787
const MCExpr *getSubExpr() const { return Expr; }
88-
Sparc::Fixups getFixupKind() const { return getFixupKind(specifier); }
88+
uint16_t getFixupKind() const;
8989

9090
/// @}
9191
void printImpl(raw_ostream &OS, const MCAsmInfo *MAI) const override;
@@ -102,7 +102,6 @@ class SparcMCExpr : public MCTargetExpr {
102102

103103
static Specifier parseSpecifier(StringRef name);
104104
static bool printSpecifier(raw_ostream &OS, Specifier Kind);
105-
static Sparc::Fixups getFixupKind(Specifier Kind);
106105
};
107106

108107
} // end namespace llvm.

0 commit comments

Comments
 (0)