Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions llvm/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4659,6 +4659,7 @@ bool AArch64AsmParser::parseSymbolicImmVal(const MCExpr *&ImmVal) {
.Case("prel_g1_nc", AArch64::S_PREL_G1_NC)
.Case("prel_g0", AArch64::S_PREL_G0)
.Case("prel_g0_nc", AArch64::S_PREL_G0_NC)
.Case("dtprel", AArch64::S_DTPREL)
.Case("dtprel_g2", AArch64::S_DTPREL_G2)
.Case("dtprel_g1", AArch64::S_DTPREL_G1)
.Case("dtprel_g1_nc", AArch64::S_DTPREL_G1_NC)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,8 @@ unsigned AArch64ELFObjectWriter::getRelocType(const MCFixup &Fixup,
}
if (RefKind == AArch64::S_AUTH || RefKind == AArch64::S_AUTHADDR)
return ELF::R_AARCH64_AUTH_ABS64;
if (RefKind == AArch64::S_DTPREL)
return ELF::R_AARCH64_TLS_DTPREL64;
if (RefKind == AArch64::S_FUNCINIT)
return ELF::R_AARCH64_FUNCINIT64;
return ELF::R_AARCH64_ABS64;
Expand Down Expand Up @@ -465,6 +467,8 @@ unsigned AArch64ELFObjectWriter::getRelocType(const MCFixup &Fixup,
return R_CLS(MOVW_PREL_G0);
if (RefKind == AArch64::S_PREL_G0_NC)
return R_CLS(MOVW_PREL_G0_NC);
if (RefKind == AArch64::S_DTPREL)
return ELF::R_AARCH64_TLS_DTPREL64;
if (RefKind == AArch64::S_DTPREL_G2)
return ELF::R_AARCH64_TLSLD_MOVW_DTPREL_G2;
if (RefKind == AArch64::S_DTPREL_G1)
Expand Down
2 changes: 2 additions & 0 deletions llvm/lib/Target/AArch64/MCTargetDesc/AArch64MCAsmInfo.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,7 @@ StringRef AArch64::getSpecifierName(AArch64::Specifier S) {

case AArch64::S_GOTPCREL: return "%gotpcrel";
case AArch64::S_PLT: return "%pltpcrel";
case AArch64::S_DTPREL: return "%dtprel";
case AArch64::S_FUNCINIT: return "%funcinit";
default:
llvm_unreachable("Invalid relocation specifier");
Expand All @@ -125,6 +126,7 @@ AArch64::Specifier AArch64::parsePercentSpecifierName(StringRef name) {
return StringSwitch<AArch64::Specifier>(name)
.Case("pltpcrel", AArch64::S_PLT)
.Case("gotpcrel", AArch64::S_GOTPCREL)
.Case("dtprel", AArch64::S_DTPREL)
.Case("funcinit", AArch64::S_FUNCINIT)
.Default(0);
}
Expand Down
27 changes: 27 additions & 0 deletions llvm/test/MC/AArch64/tls-dtprel64.s
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// RUN: llvm-mc -triple=aarch64 -show-encoding < %s | FileCheck %s
// RUN: llvm-mc -filetype=obj -triple=aarch64 %s | llvm-readobj -r - | FileCheck --check-prefix=CHECK-ELF %s

# CHECK: .xword %dtprel(var)
# CHECK: .xword %dtprel(var+1)
# CHECK: .xword %dtprel(.tdata)
# CHECK: .xword %dtprel(.tdata+1)

# CHECK-ELF: Relocations [
# CHECK-ELF: Section (5) .rela.debug_info {
# CHECK-ELF: 0x0 R_AARCH64_TLS_DTPREL64 var 0x0
# CHECK-ELF: 0x8 R_AARCH64_TLS_DTPREL64 var 0x1
# CHECK-ELF: 0x10 R_AARCH64_TLS_DTPREL64 .tdata 0x0
# CHECK-ELF: 0x18 R_AARCH64_TLS_DTPREL64 .tdata 0x1
# CHECK-ELF: }

.section .tdata,"awT",@progbits
.skip 8
.globl var
var:
.word 0

.section .debug_info,"",@progbits
.xword %dtprel(var)
.xword %dtprel(var+1)
.xword %dtprel(.tdata)
.xword %dtprel(.tdata+1)