Use local symbols for creating .stack-size.
authorRafael Espindola <rafael.espindola@gmail.com>
Mon, 26 Mar 2018 20:40:22 +0000 (20:40 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Mon, 26 Mar 2018 20:40:22 +0000 (20:40 +0000)
llvm-svn: 328581

llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
llvm/test/CodeGen/ARM/stack-size-section.ll
llvm/test/CodeGen/SystemZ/stack-size-section.ll
llvm/test/CodeGen/X86/stack-size-section.ll

index f117771..6b35d01 100644 (file)
@@ -978,7 +978,7 @@ void AsmPrinter::emitStackSizeSection(const MachineFunction &MF) {
   OutStreamer->PushSection();
   OutStreamer->SwitchSection(StackSizeSection);
 
-  const MCSymbol *FunctionSymbol = getSymbol(&MF.getFunction());
+  const MCSymbol *FunctionSymbol = getFunctionBegin();
   uint64_t StackSize = FrameInfo.getStackSize();
   OutStreamer->EmitSymbolValue(FunctionSymbol, TM.getProgramPointerSize());
   OutStreamer->EmitULEB128IntValue(StackSize);
@@ -1506,7 +1506,8 @@ void AsmPrinter::SetupMachineFunction(MachineFunction &MF) {
   CurrentFnBegin = nullptr;
   CurExceptionSym = nullptr;
   bool NeedsLocalForSize = MAI->needsLocalForSize();
-  if (needFuncLabelsForEHOrDebugInfo(MF, MMI) || NeedsLocalForSize) {
+  if (needFuncLabelsForEHOrDebugInfo(MF, MMI) || NeedsLocalForSize ||
+      MF.getTarget().Options.EmitStackSizeSection) {
     CurrentFnBegin = createTempSymbol("func_begin");
     if (NeedsLocalForSize)
       CurrentFnSymForSize = CurrentFnBegin;
index c1d7976..142261a 100644 (file)
@@ -1,8 +1,9 @@
 ; RUN: llc < %s -mtriple=armv7-linux -stack-size-section | FileCheck %s
 
 ; CHECK-LABEL: func1:
+; CHECK-NEXT: .Lfunc_begin0:
 ; CHECK: .section .stack_sizes,"",%progbits
-; CHECK-NEXT: .long func1
+; CHECK-NEXT: .long .Lfunc_begin0
 ; CHECK-NEXT: .byte 8
 define void @func1(i32, i32) #0 {
   alloca i32, align 4
@@ -11,8 +12,9 @@ define void @func1(i32, i32) #0 {
 }
 
 ; CHECK-LABEL: func2:
+; CHECK-NEXT: .Lfunc_begin1:
 ; CHECK: .section .stack_sizes,"",%progbits
-; CHECK-NEXT: .long func2
+; CHECK-NEXT: .long .Lfunc_begin1
 ; CHECK-NEXT: .byte 16
 define void @func2() #0 {
   alloca i32, align 4
index 52dffc8..f0e421f 100644 (file)
@@ -1,16 +1,18 @@
 ; RUN: llc < %s -mtriple=s390x-linux-gnu -stack-size-section | FileCheck %s
 
 ; CHECK-LABEL: func1:
+; CHECK-NEXT: .Lfunc_begin0:
 ; CHECK: .section .stack_sizes,"",@progbits
-; CHECK-NEXT: .quad func1
+; CHECK-NEXT: .quad .Lfunc_begin0
 ; CHECK-NEXT: .byte 0
 define void @func1(i32, i32) #0 {
   ret void
 }
 
 ; CHECK-LABEL: func2:
+; CHECK-NEXT: .Lfunc_begin1:
 ; CHECK: .section .stack_sizes,"",@progbits
-; CHECK-NEXT: .quad func2
+; CHECK-NEXT: .quad .Lfunc_begin1
 ; CHECK-NEXT: .ascii  "\250\001"
 define void @func2(i32, i32) #0 {
   alloca i32, align 4
@@ -19,8 +21,9 @@ define void @func2(i32, i32) #0 {
 }
 
 ; CHECK-LABEL: func3:
+; CHECK-NEXT: .Lfunc_begin2:
 ; CHECK: .section .stack_sizes,"",@progbits
-; CHECK-NEXT: .quad func3
+; CHECK-NEXT: .quad .Lfunc_begin2
 ; CHECK-NEXT: .ascii  "\250\001"
 define void @func3() #0 {
   alloca i32, align 4
index 28b26ae..80fa2cc 100644 (file)
@@ -1,8 +1,9 @@
 ; RUN: llc < %s -mtriple=x86_64-linux -stack-size-section | FileCheck %s
 
 ; CHECK-LABEL: func1:
+; CHECK-NEXT: .Lfunc_begin0:
 ; CHECK: .section .stack_sizes,"",@progbits
-; CHECK-NEXT: .quad func1
+; CHECK-NEXT: .quad .Lfunc_begin0
 ; CHECK-NEXT: .byte 8
 define void @func1(i32, i32) #0 {
   alloca i32, align 4
@@ -11,8 +12,9 @@ define void @func1(i32, i32) #0 {
 }
 
 ; CHECK-LABEL: func2:
+; CHECK-NEXT: .Lfunc_begin1:
 ; CHECK: .section .stack_sizes,"",@progbits
-; CHECK-NEXT: .quad func2
+; CHECK-NEXT: .quad .Lfunc_begin1
 ; CHECK-NEXT: .byte 24
 define void @func2() #0 {
   alloca i32, align 4