Skip to content

Commit cf96e45

Browse files
committed
Do not emit .tlsdesccall for AUTH TLSDESC
1 parent a5209c7 commit cf96e45

File tree

2 files changed

+6
-20
lines changed

2 files changed

+6
-20
lines changed

llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2758,17 +2758,7 @@ void AArch64AsmPrinter::emitInstruction(const MachineInstr *MI) {
27582758
Add.addOperand(MCOperand::createImm(AArch64_AM::getShiftValue(0)));
27592759
EmitToStreamer(*OutStreamer, Add);
27602760

2761-
// Emit a relocation-annotation. This expands to no code, but requests
2762-
// the following instruction gets an R_AARCH64_TLSDESC_CALL.
2763-
// TODO: we probably don't need that for AUTH TLSDESC. Emit as for now for
2764-
// consistency with non-AUTH case.
2765-
MCInst TLSDescCall;
2766-
TLSDescCall.setOpcode(AArch64::TLSDESCCALL);
2767-
TLSDescCall.addOperand(Sym);
2768-
EmitToStreamer(*OutStreamer, TLSDescCall);
2769-
#ifndef NDEBUG
2770-
--InstsEmitted; // no code emitted
2771-
#endif
2761+
// Do not emit .tlsdesccall for AUTH TLSDESC.
27722762

27732763
MCInst Blraa;
27742764
Blraa.setOpcode(AArch64::BLRAA);

llvm/test/CodeGen/AArch64/ptrauth-arm64-tls-dynamics.ll

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,12 @@ define i32 @test_generaldynamic() {
1616
; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:general_dynamic_var
1717
; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var]
1818
; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:general_dynamic_var
19-
; CHECK-NEXT: .tlsdesccall general_dynamic_var
2019
; CHECK-NEXT: blraa x16, x0
2120

2221
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21
2322
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12
2423
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12
25-
; CHECK-OBJ: R_AARCH64_TLSDESC_CALL
24+
; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL
2625

2726
; CHECK-ERR: LLVM ERROR: cannot select: %1:gpr64sp(p0) = G_GLOBAL_VALUE @general_dynamic_var (in function: test_generaldynamic)
2827
}
@@ -35,7 +34,7 @@ define ptr @test_generaldynamic_addr() {
3534
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21
3635
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12
3736
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12
38-
; CHECK-OBJ: R_AARCH64_TLSDESC_CALL
37+
; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL
3938
}
4039

4140
@local_dynamic_var = external thread_local(localdynamic) global i32
@@ -49,15 +48,14 @@ define i32 @test_localdynamic() {
4948
; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:local_dynamic_var
5049
; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var]
5150
; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var
52-
; CHECK-NEXT: .tlsdesccall local_dynamic_var
5351
; CHECK-NEXT: blraa x16, x0
5452
; CHECK: mrs x[[TPIDR:[0-9]+]], TPIDR_EL0
5553
; CHECK: ldr w0, [x[[TPIDR]], x0]
5654

5755
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21
5856
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12
5957
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12
60-
; CHECK-OBJ: R_AARCH64_TLSDESC_CALL
58+
; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL
6159
}
6260

6361
define ptr @test_localdynamic_addr() {
@@ -68,15 +66,14 @@ define ptr @test_localdynamic_addr() {
6866
; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:local_dynamic_var
6967
; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var]
7068
; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:local_dynamic_var
71-
; CHECK-NEXT: .tlsdesccall local_dynamic_var
7269
; CHECK-NEXT: blraa x16, x0
7370
; CHECK: mrs x[[TPIDR:[0-9]+]], TPIDR_EL0
7471
; CHECK: add x0, x[[TPIDR]], x0
7572

7673
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21
7774
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12
7875
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12
79-
; CHECK-OBJ: R_AARCH64_TLSDESC_CALL
76+
; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL
8077
}
8178

8279
@extern_weak_var = extern_weak thread_local global i32
@@ -90,13 +87,12 @@ define i32 @test_extern_weak() {
9087
; CHECK: adrp x[[TLSDESC_HI:[0-9]+]], :tlsdesc_auth:extern_weak_var
9188
; CHECK-NEXT: ldr x16, [x[[TLSDESC_HI]], :tlsdesc_auth_lo12:extern_weak_var]
9289
; CHECK-NEXT: add x0, x[[TLSDESC_HI]], :tlsdesc_auth_lo12:extern_weak_var
93-
; CHECK-NEXT: .tlsdesccall extern_weak_var
9490
; CHECK-NEXT: blraa x16, x0
9591

9692
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADR_PAGE21
9793
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_LD64_LO12
9894
; CHECK-OBJ: R_AARCH64_AUTH_TLSDESC_ADD_LO12
99-
; CHECK-OBJ: R_AARCH64_TLSDESC_CALL
95+
; CHECK-OBJ-NOT: R_AARCH64_TLSDESC_CALL
10096
; CHECK-OBJ: 0000000000000000 0 TLS WEAK DEFAULT UND extern_weak_var
10197
}
10298

0 commit comments

Comments
 (0)