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
: +// CHECK: 0: bf00 nop +// CHECK: 2: f000 b800 b.w 0x6 @ imm = #0x0 +// CHECK: 00000002: IMAGE_REL_ARM_BRANCH24T .Ltarget +// CHECK: 6: f000 b800 b.w 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 : +// 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