Skip to content

Commit 027e655

Browse files
committed
Move MC support to different patch
1 parent a6df50b commit 027e655

File tree

7 files changed

+138
-218
lines changed

7 files changed

+138
-218
lines changed

llvm/lib/Target/AArch64/AArch64MCInstLower.cpp

Lines changed: 7 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -194,16 +194,12 @@ MCOperand AArch64MCInstLower::lowerSymbolOperandELF(const MachineOperand &MO,
194194
} else if (MO.getTargetFlags() & AArch64II::MO_TLS) {
195195
TLSModel::Model Model;
196196
if (MO.isGlobal()) {
197-
const MachineFunction *MF = MO.getParent()->getParent()->getParent();
198-
if (MF->getInfo<AArch64FunctionInfo>()->hasELFSignedGOT()) {
197+
const GlobalValue *GV = MO.getGlobal();
198+
Model = Printer.TM.getTLSModel(GV);
199+
if (!EnableAArch64ELFLocalDynamicTLSGeneration &&
200+
Model == TLSModel::LocalDynamic)
199201
Model = TLSModel::GeneralDynamic;
200-
} else {
201-
const GlobalValue *GV = MO.getGlobal();
202-
Model = Printer.TM.getTLSModel(GV);
203-
if (!EnableAArch64ELFLocalDynamicTLSGeneration &&
204-
Model == TLSModel::LocalDynamic)
205-
Model = TLSModel::GeneralDynamic;
206-
}
202+
207203
} else {
208204
assert(MO.isSymbol() &&
209205
StringRef(MO.getSymbolName()) == "_TLS_MODULE_BASE_" &&
@@ -222,18 +218,10 @@ MCOperand AArch64MCInstLower::lowerSymbolOperandELF(const MachineOperand &MO,
222218
case TLSModel::LocalDynamic:
223219
RefFlags |= AArch64MCExpr::VK_DTPREL;
224220
break;
225-
case TLSModel::GeneralDynamic: {
226-
// TODO: it's probably better to introduce MO_TLS_AUTH or smth and avoid
227-
// running hasELFSignedGOT() every time, but existing flags already
228-
// cover all 12 bits of SubReg_TargetFlags field in MachineOperand, and
229-
// making the field wider breaks static assertions.
230-
const MachineFunction *MF = MO.getParent()->getParent()->getParent();
231-
RefFlags |= MF->getInfo<AArch64FunctionInfo>()->hasELFSignedGOT()
232-
? AArch64MCExpr::VK_TLSDESC_AUTH
233-
: AArch64MCExpr::VK_TLSDESC;
221+
case TLSModel::GeneralDynamic:
222+
RefFlags |= AArch64MCExpr::VK_TLSDESC;
234223
break;
235224
}
236-
}
237225
} else if (MO.getTargetFlags() & AArch64II::MO_PREL) {
238226
RefFlags |= AArch64MCExpr::VK_PREL;
239227
} else {

llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp

Lines changed: 51 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -904,7 +904,6 @@ class AArch64Operand : public MCParsedAsmOperand {
904904
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
905905
ELFRefKind == AArch64MCExpr::VK_GOTTPREL_LO12_NC ||
906906
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
907-
ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
908907
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
909908
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
910909
ELFRefKind == AArch64MCExpr::VK_GOT_PAGE_LO15) {
@@ -1022,7 +1021,6 @@ class AArch64Operand : public MCParsedAsmOperand {
10221021
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
10231022
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
10241023
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
1025-
ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
10261024
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
10271025
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12;
10281026
}
@@ -3316,8 +3314,7 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
33163314
ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
33173315
ELFRefKind != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
33183316
ELFRefKind != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3319-
ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE &&
3320-
ELFRefKind != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
3317+
ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE) {
33213318
// The operand must be an @page or @gotpage qualified symbolref.
33223319
return Error(S, "page or gotpage label reference expected");
33233320
}
@@ -4401,59 +4398,56 @@ bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
44014398
return TokError("expect relocation specifier in operand after ':'");
44024399

44034400
std::string LowerCase = getTok().getIdentifier().lower();
4404-
RefKind =
4405-
StringSwitch<AArch64MCExpr::VariantKind>(LowerCase)
4406-
.Case("lo12", AArch64MCExpr::VK_LO12)
4407-
.Case("abs_g3", AArch64MCExpr::VK_ABS_G3)
4408-
.Case("abs_g2", AArch64MCExpr::VK_ABS_G2)
4409-
.Case("abs_g2_s", AArch64MCExpr::VK_ABS_G2_S)
4410-
.Case("abs_g2_nc", AArch64MCExpr::VK_ABS_G2_NC)
4411-
.Case("abs_g1", AArch64MCExpr::VK_ABS_G1)
4412-
.Case("abs_g1_s", AArch64MCExpr::VK_ABS_G1_S)
4413-
.Case("abs_g1_nc", AArch64MCExpr::VK_ABS_G1_NC)
4414-
.Case("abs_g0", AArch64MCExpr::VK_ABS_G0)
4415-
.Case("abs_g0_s", AArch64MCExpr::VK_ABS_G0_S)
4416-
.Case("abs_g0_nc", AArch64MCExpr::VK_ABS_G0_NC)
4417-
.Case("prel_g3", AArch64MCExpr::VK_PREL_G3)
4418-
.Case("prel_g2", AArch64MCExpr::VK_PREL_G2)
4419-
.Case("prel_g2_nc", AArch64MCExpr::VK_PREL_G2_NC)
4420-
.Case("prel_g1", AArch64MCExpr::VK_PREL_G1)
4421-
.Case("prel_g1_nc", AArch64MCExpr::VK_PREL_G1_NC)
4422-
.Case("prel_g0", AArch64MCExpr::VK_PREL_G0)
4423-
.Case("prel_g0_nc", AArch64MCExpr::VK_PREL_G0_NC)
4424-
.Case("dtprel_g2", AArch64MCExpr::VK_DTPREL_G2)
4425-
.Case("dtprel_g1", AArch64MCExpr::VK_DTPREL_G1)
4426-
.Case("dtprel_g1_nc", AArch64MCExpr::VK_DTPREL_G1_NC)
4427-
.Case("dtprel_g0", AArch64MCExpr::VK_DTPREL_G0)
4428-
.Case("dtprel_g0_nc", AArch64MCExpr::VK_DTPREL_G0_NC)
4429-
.Case("dtprel_hi12", AArch64MCExpr::VK_DTPREL_HI12)
4430-
.Case("dtprel_lo12", AArch64MCExpr::VK_DTPREL_LO12)
4431-
.Case("dtprel_lo12_nc", AArch64MCExpr::VK_DTPREL_LO12_NC)
4432-
.Case("pg_hi21_nc", AArch64MCExpr::VK_ABS_PAGE_NC)
4433-
.Case("tprel_g2", AArch64MCExpr::VK_TPREL_G2)
4434-
.Case("tprel_g1", AArch64MCExpr::VK_TPREL_G1)
4435-
.Case("tprel_g1_nc", AArch64MCExpr::VK_TPREL_G1_NC)
4436-
.Case("tprel_g0", AArch64MCExpr::VK_TPREL_G0)
4437-
.Case("tprel_g0_nc", AArch64MCExpr::VK_TPREL_G0_NC)
4438-
.Case("tprel_hi12", AArch64MCExpr::VK_TPREL_HI12)
4439-
.Case("tprel_lo12", AArch64MCExpr::VK_TPREL_LO12)
4440-
.Case("tprel_lo12_nc", AArch64MCExpr::VK_TPREL_LO12_NC)
4441-
.Case("tlsdesc_lo12", AArch64MCExpr::VK_TLSDESC_LO12)
4442-
.Case("tlsdesc_auth_lo12", AArch64MCExpr::VK_TLSDESC_AUTH_LO12)
4443-
.Case("got", AArch64MCExpr::VK_GOT_PAGE)
4444-
.Case("gotpage_lo15", AArch64MCExpr::VK_GOT_PAGE_LO15)
4445-
.Case("got_lo12", AArch64MCExpr::VK_GOT_LO12)
4446-
.Case("got_auth", AArch64MCExpr::VK_GOT_AUTH_PAGE)
4447-
.Case("got_auth_lo12", AArch64MCExpr::VK_GOT_AUTH_LO12)
4448-
.Case("gottprel", AArch64MCExpr::VK_GOTTPREL_PAGE)
4449-
.Case("gottprel_lo12", AArch64MCExpr::VK_GOTTPREL_LO12_NC)
4450-
.Case("gottprel_g1", AArch64MCExpr::VK_GOTTPREL_G1)
4451-
.Case("gottprel_g0_nc", AArch64MCExpr::VK_GOTTPREL_G0_NC)
4452-
.Case("tlsdesc", AArch64MCExpr::VK_TLSDESC_PAGE)
4453-
.Case("tlsdesc_auth", AArch64MCExpr::VK_TLSDESC_AUTH_PAGE)
4454-
.Case("secrel_lo12", AArch64MCExpr::VK_SECREL_LO12)
4455-
.Case("secrel_hi12", AArch64MCExpr::VK_SECREL_HI12)
4456-
.Default(AArch64MCExpr::VK_INVALID);
4401+
RefKind = StringSwitch<AArch64MCExpr::VariantKind>(LowerCase)
4402+
.Case("lo12", AArch64MCExpr::VK_LO12)
4403+
.Case("abs_g3", AArch64MCExpr::VK_ABS_G3)
4404+
.Case("abs_g2", AArch64MCExpr::VK_ABS_G2)
4405+
.Case("abs_g2_s", AArch64MCExpr::VK_ABS_G2_S)
4406+
.Case("abs_g2_nc", AArch64MCExpr::VK_ABS_G2_NC)
4407+
.Case("abs_g1", AArch64MCExpr::VK_ABS_G1)
4408+
.Case("abs_g1_s", AArch64MCExpr::VK_ABS_G1_S)
4409+
.Case("abs_g1_nc", AArch64MCExpr::VK_ABS_G1_NC)
4410+
.Case("abs_g0", AArch64MCExpr::VK_ABS_G0)
4411+
.Case("abs_g0_s", AArch64MCExpr::VK_ABS_G0_S)
4412+
.Case("abs_g0_nc", AArch64MCExpr::VK_ABS_G0_NC)
4413+
.Case("prel_g3", AArch64MCExpr::VK_PREL_G3)
4414+
.Case("prel_g2", AArch64MCExpr::VK_PREL_G2)
4415+
.Case("prel_g2_nc", AArch64MCExpr::VK_PREL_G2_NC)
4416+
.Case("prel_g1", AArch64MCExpr::VK_PREL_G1)
4417+
.Case("prel_g1_nc", AArch64MCExpr::VK_PREL_G1_NC)
4418+
.Case("prel_g0", AArch64MCExpr::VK_PREL_G0)
4419+
.Case("prel_g0_nc", AArch64MCExpr::VK_PREL_G0_NC)
4420+
.Case("dtprel_g2", AArch64MCExpr::VK_DTPREL_G2)
4421+
.Case("dtprel_g1", AArch64MCExpr::VK_DTPREL_G1)
4422+
.Case("dtprel_g1_nc", AArch64MCExpr::VK_DTPREL_G1_NC)
4423+
.Case("dtprel_g0", AArch64MCExpr::VK_DTPREL_G0)
4424+
.Case("dtprel_g0_nc", AArch64MCExpr::VK_DTPREL_G0_NC)
4425+
.Case("dtprel_hi12", AArch64MCExpr::VK_DTPREL_HI12)
4426+
.Case("dtprel_lo12", AArch64MCExpr::VK_DTPREL_LO12)
4427+
.Case("dtprel_lo12_nc", AArch64MCExpr::VK_DTPREL_LO12_NC)
4428+
.Case("pg_hi21_nc", AArch64MCExpr::VK_ABS_PAGE_NC)
4429+
.Case("tprel_g2", AArch64MCExpr::VK_TPREL_G2)
4430+
.Case("tprel_g1", AArch64MCExpr::VK_TPREL_G1)
4431+
.Case("tprel_g1_nc", AArch64MCExpr::VK_TPREL_G1_NC)
4432+
.Case("tprel_g0", AArch64MCExpr::VK_TPREL_G0)
4433+
.Case("tprel_g0_nc", AArch64MCExpr::VK_TPREL_G0_NC)
4434+
.Case("tprel_hi12", AArch64MCExpr::VK_TPREL_HI12)
4435+
.Case("tprel_lo12", AArch64MCExpr::VK_TPREL_LO12)
4436+
.Case("tprel_lo12_nc", AArch64MCExpr::VK_TPREL_LO12_NC)
4437+
.Case("tlsdesc_lo12", AArch64MCExpr::VK_TLSDESC_LO12)
4438+
.Case("got", AArch64MCExpr::VK_GOT_PAGE)
4439+
.Case("gotpage_lo15", AArch64MCExpr::VK_GOT_PAGE_LO15)
4440+
.Case("got_lo12", AArch64MCExpr::VK_GOT_LO12)
4441+
.Case("got_auth", AArch64MCExpr::VK_GOT_AUTH_PAGE)
4442+
.Case("got_auth_lo12", AArch64MCExpr::VK_GOT_AUTH_LO12)
4443+
.Case("gottprel", AArch64MCExpr::VK_GOTTPREL_PAGE)
4444+
.Case("gottprel_lo12", AArch64MCExpr::VK_GOTTPREL_LO12_NC)
4445+
.Case("gottprel_g1", AArch64MCExpr::VK_GOTTPREL_G1)
4446+
.Case("gottprel_g0_nc", AArch64MCExpr::VK_GOTTPREL_G0_NC)
4447+
.Case("tlsdesc", AArch64MCExpr::VK_TLSDESC_PAGE)
4448+
.Case("secrel_lo12", AArch64MCExpr::VK_SECREL_LO12)
4449+
.Case("secrel_hi12", AArch64MCExpr::VK_SECREL_HI12)
4450+
.Default(AArch64MCExpr::VK_INVALID);
44574451

44584452
if (RefKind == AArch64MCExpr::VK_INVALID)
44594453
return TokError("expect relocation specifier in operand after ':'");
@@ -5827,7 +5821,6 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
58275821
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
58285822
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
58295823
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
5830-
ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
58315824
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
58325825
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12) &&
58335826
(Inst.getOpcode() == AArch64::ADDXri ||

llvm/lib/Target/AArch64/MCTargetDesc/AArch64ELFObjectWriter.cpp

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -187,15 +187,6 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
187187
return R_CLS(TLSIE_ADR_GOTTPREL_PAGE21);
188188
if (SymLoc == AArch64MCExpr::VK_TLSDESC && !IsNC)
189189
return R_CLS(TLSDESC_ADR_PAGE21);
190-
if (SymLoc == AArch64MCExpr::VK_TLSDESC_AUTH && !IsNC) {
191-
if (IsILP32) {
192-
Ctx.reportError(Fixup.getLoc(),
193-
"ILP32 ADRP AUTH relocation not supported "
194-
"(LP64 eqv: AUTH_TLSDESC_ADR_PAGE21)");
195-
return ELF::R_AARCH64_NONE;
196-
}
197-
return ELF::R_AARCH64_AUTH_TLSDESC_ADR_PAGE21;
198-
}
199190
Ctx.reportError(Fixup.getLoc(),
200191
"invalid symbol kind for ADRP relocation");
201192
return ELF::R_AARCH64_NONE;
@@ -276,15 +267,6 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
276267
return R_CLS(TLSLE_ADD_TPREL_LO12);
277268
if (RefKind == AArch64MCExpr::VK_TLSDESC_LO12)
278269
return R_CLS(TLSDESC_ADD_LO12);
279-
if (RefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12) {
280-
if (IsILP32) {
281-
Ctx.reportError(Fixup.getLoc(),
282-
"ILP32 ADD AUTH relocation not supported "
283-
"(LP64 eqv: AUTH_TLSDESC_ADD_LO12)");
284-
return ELF::R_AARCH64_NONE;
285-
}
286-
return ELF::R_AARCH64_AUTH_TLSDESC_ADD_LO12;
287-
}
288270
if (RefKind == AArch64MCExpr::VK_GOT_AUTH_LO12 && IsNC) {
289271
if (IsILP32) {
290272
Ctx.reportError(Fixup.getLoc(),
@@ -429,14 +411,6 @@ unsigned AArch64ELFObjectWriter::getRelocType(MCContext &Ctx,
429411
"TLSDESC_LD64_LO12)");
430412
return ELF::R_AARCH64_NONE;
431413
}
432-
if (SymLoc == AArch64MCExpr::VK_TLSDESC_AUTH) {
433-
if (!IsILP32)
434-
return ELF::R_AARCH64_AUTH_TLSDESC_LD64_LO12;
435-
Ctx.reportError(Fixup.getLoc(), "ILP32 64-bit load/store AUTH "
436-
"relocation not supported (LP64 eqv: "
437-
"AUTH_TLSDESC_LD64_LO12)");
438-
return ELF::R_AARCH64_NONE;
439-
}
440414
Ctx.reportError(Fixup.getLoc(),
441415
"invalid fixup for 64-bit load/store instruction");
442416
return ELF::R_AARCH64_NONE;

llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCExpr.cpp

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,6 @@ StringRef AArch64MCExpr::getVariantKindName() const {
6868
case VK_TPREL_LO12: return ":tprel_lo12:";
6969
case VK_TPREL_LO12_NC: return ":tprel_lo12_nc:";
7070
case VK_TLSDESC_LO12: return ":tlsdesc_lo12:";
71-
case VK_TLSDESC_AUTH_LO12: return ":tlsdesc_auth_lo12:";
7271
case VK_ABS_PAGE: return "";
7372
case VK_ABS_PAGE_NC: return ":pg_hi21_nc:";
7473
case VK_GOT: return ":got:";
@@ -82,8 +81,6 @@ StringRef AArch64MCExpr::getVariantKindName() const {
8281
case VK_GOTTPREL_G0_NC: return ":gottprel_g0_nc:";
8382
case VK_TLSDESC: return "";
8483
case VK_TLSDESC_PAGE: return ":tlsdesc:";
85-
case VK_TLSDESC_AUTH: return "";
86-
case VK_TLSDESC_AUTH_PAGE: return ":tlsdesc_auth:";
8784
case VK_SECREL_LO12: return ":secrel_lo12:";
8885
case VK_SECREL_HI12: return ":secrel_hi12:";
8986
case VK_GOT_AUTH: return ":got_auth:";
@@ -157,7 +154,6 @@ void AArch64MCExpr::fixELFSymbolsInTLSFixups(MCAssembler &Asm) const {
157154
case VK_GOTTPREL:
158155
case VK_TPREL:
159156
case VK_TLSDESC:
160-
case VK_TLSDESC_AUTH:
161157
break;
162158
}
163159

0 commit comments

Comments
 (0)