[llvm-branch-commits] [llvm] release/19.x: [ARM] [Windows] Use IMAGE_SYM_CLASS_STATIC for private functions (#101828) (PR #101904)
via llvm-branch-commits
llvm-branch-commits at lists.llvm.org
Sun Aug 4 13:26:50 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-arm
@llvm/pr-subscribers-mc
Author: None (llvmbot)
<details>
<summary>Changes</summary>
Backport 8dd065d5bc81b0c8ab57f365bb169a5d92928f25
Requested by: @<!-- -->mstorsjo
---
Full diff: https://github.com/llvm/llvm-project/pull/101904.diff
3 Files Affected:
- (modified) llvm/lib/Target/ARM/ARMAsmPrinter.cpp (+3-3)
- (added) llvm/test/CodeGen/ARM/Windows/private-func.ll (+17)
- (added) llvm/test/MC/ARM/Windows/branch-reloc-offset.s (+57)
``````````diff
diff --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index 642739a29d6b0..96d7074e6ef37 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -153,9 +153,9 @@ bool ARMAsmPrinter::runOnMachineFunction(MachineFunction &MF) {
OptimizationGoals = 0;
if (Subtarget->isTargetCOFF()) {
- bool Internal = F.hasInternalLinkage();
- COFF::SymbolStorageClass Scl = Internal ? COFF::IMAGE_SYM_CLASS_STATIC
- : COFF::IMAGE_SYM_CLASS_EXTERNAL;
+ bool Local = F.hasLocalLinkage();
+ COFF::SymbolStorageClass Scl =
+ Local ? COFF::IMAGE_SYM_CLASS_STATIC : COFF::IMAGE_SYM_CLASS_EXTERNAL;
int Type = COFF::IMAGE_SYM_DTYPE_FUNCTION << COFF::SCT_COMPLEX_TYPE_SHIFT;
OutStreamer->beginCOFFSymbolDef(CurrentFnSym);
diff --git a/llvm/test/CodeGen/ARM/Windows/private-func.ll b/llvm/test/CodeGen/ARM/Windows/private-func.ll
new file mode 100644
index 0000000000000..2d030ae3fabbb
--- /dev/null
+++ b/llvm/test/CodeGen/ARM/Windows/private-func.ll
@@ -0,0 +1,17 @@
+; RUN: llc -mtriple thumbv7-windows -filetype asm -o - %s | FileCheck %s
+
+define dso_local void @func1() {
+entry:
+ call void @func2()
+ ret void
+}
+
+define private void @func2() {
+entry:
+ ret void
+}
+
+; CHECK: .def .Lfunc2;
+; CHECK-NEXT: .scl 3;
+; CHECK-NEXT: .type 32;
+; CHECK-NEXT: .endef
diff --git a/llvm/test/MC/ARM/Windows/branch-reloc-offset.s b/llvm/test/MC/ARM/Windows/branch-reloc-offset.s
new file mode 100644
index 0000000000000..2e70a723ccf78
--- /dev/null
+++ b/llvm/test/MC/ARM/Windows/branch-reloc-offset.s
@@ -0,0 +1,57 @@
+// RUN: llvm-mc -triple thumbv7-windows-gnu -filetype obj %s -o - | llvm-objdump -D -r - | FileCheck %s
+
+ .text
+main:
+ nop
+ b .Ltarget
+ b .Lother_target
+
+// A private label target in the same section
+ .def .Ltarget
+ .scl 3
+ .type 32
+ .endef
+ .p2align 2
+.Ltarget:
+ bx lr
+
+// A private label target in another section
+ .section "other", "xr"
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ nop
+ .def .Lother_target
+ .scl 3
+ .type 32
+ .endef
+ .p2align 2
+.Lother_target:
+ bx lr
+
+// Check that both branches have a relocation with a zero offset.
+//
+// CHECK: 00000000 <main>:
+// CHECK: 0: bf00 nop
+// CHECK: 2: f000 b800 b.w 0x6 <main+0x6> @ imm = #0x0
+// CHECK: 00000002: IMAGE_REL_ARM_BRANCH24T .Ltarget
+// CHECK: 6: f000 b800 b.w 0xa <main+0xa> @ imm = #0x0
+// CHECK: 00000006: IMAGE_REL_ARM_BRANCH24T .Lother_target
+// CHECK: a: bf00 nop
+// CHECK: 0000000c <.Ltarget>:
+// CHECK: c: 4770 bx lr
+// CHECK: 00000000 <other>:
+// CHECK: 0: bf00 nop
+// CHECK: 2: bf00 nop
+// CHECK: 4: bf00 nop
+// CHECK: 6: bf00 nop
+// CHECK: 8: bf00 nop
+// CHECK: a: bf00 nop
+// CHECK: c: bf00 nop
+// CHECK: e: bf00 nop
+// CHECK: 00000010 <.Lother_target>:
+// CHECK: 10: 4770 bx lr
``````````
</details>
https://github.com/llvm/llvm-project/pull/101904
More information about the llvm-branch-commits
mailing list