@@ -904,6 +904,7 @@ class AArch64Operand : public MCParsedAsmOperand {
904
904
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
905
905
ELFRefKind == AArch64MCExpr::VK_GOTTPREL_LO12_NC ||
906
906
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
907
+ ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
907
908
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
908
909
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
909
910
ELFRefKind == AArch64MCExpr::VK_GOT_PAGE_LO15) {
@@ -1021,6 +1022,7 @@ class AArch64Operand : public MCParsedAsmOperand {
1021
1022
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
1022
1023
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
1023
1024
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
1025
+ ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
1024
1026
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12 ||
1025
1027
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12;
1026
1028
}
@@ -3314,7 +3316,8 @@ ParseStatus AArch64AsmParser::tryParseAdrpLabel(OperandVector &Operands) {
3314
3316
ELFRefKind != AArch64MCExpr::VK_GOT_AUTH_PAGE &&
3315
3317
ELFRefKind != AArch64MCExpr::VK_GOT_PAGE_LO15 &&
3316
3318
ELFRefKind != AArch64MCExpr::VK_GOTTPREL_PAGE &&
3317
- ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE) {
3319
+ ELFRefKind != AArch64MCExpr::VK_TLSDESC_PAGE &&
3320
+ ELFRefKind != AArch64MCExpr::VK_TLSDESC_AUTH_PAGE) {
3318
3321
// The operand must be an @page or @gotpage qualified symbolref.
3319
3322
return Error (S, " page or gotpage label reference expected" );
3320
3323
}
@@ -4398,56 +4401,59 @@ bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
4398
4401
return TokError (" expect relocation specifier in operand after ':'" );
4399
4402
4400
4403
std::string LowerCase = getTok ().getIdentifier ().lower ();
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);
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);
4451
4457
4452
4458
if (RefKind == AArch64MCExpr::VK_INVALID)
4453
4459
return TokError (" expect relocation specifier in operand after ':'" );
@@ -5821,6 +5827,7 @@ bool AArch64AsmParser::validateInstruction(MCInst &Inst, SMLoc &IDLoc,
5821
5827
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12 ||
5822
5828
ELFRefKind == AArch64MCExpr::VK_TPREL_LO12_NC ||
5823
5829
ELFRefKind == AArch64MCExpr::VK_TLSDESC_LO12 ||
5830
+ ELFRefKind == AArch64MCExpr::VK_TLSDESC_AUTH_LO12 ||
5824
5831
ELFRefKind == AArch64MCExpr::VK_SECREL_LO12 ||
5825
5832
ELFRefKind == AArch64MCExpr::VK_SECREL_HI12) &&
5826
5833
(Inst.getOpcode () == AArch64::ADDXri ||
0 commit comments