Browse Source

[MC] Fix -stack-size-section on ARM

Change symbol values in the stack_size section from being 8 bytes, to being a target dependent size.

Differential Revision: https://reviews.llvm.org/D42108

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@322619 91177308-0d34-0410-b5e6-96231b3b80d8
Sean Eveson 7 năm trước cách đây
mục cha
commit
a470b46d80

+ 1 - 1
docs/CodeGenerator.rst

@@ -1584,7 +1584,7 @@ Emitting function stack size information
 A section containing metadata on function stack sizes will be emitted when
 ``TargetLoweringObjectFile::StackSizesSection`` is not null, and
 ``TargetOptions::EmitStackSizeSection`` is set (-stack-size-section). The
-section will contain an array of pairs of function symbol references (8 byte)
+section will contain an array of pairs of function symbol values (pointer size)
 and stack sizes (unsigned LEB128). The stack size values only include the space
 allocated in the function prologue. Functions with dynamic stack allocations are
 not included.

+ 1 - 1
docs/CommandGuide/llc.rst

@@ -135,7 +135,7 @@ End-user Options
 .. option:: -stack-size-section
 
  Emit the .stack_sizes section which contains stack size metadata. The section
- contains an array of pairs of function symbol references (8 byte) and stack
+ contains an array of pairs of function symbol values (pointer size) and stack
  sizes (unsigned LEB128). The stack size values only include the space allocated
  in the function prologue. Functions with dynamic stack allocations are not
  included.

+ 1 - 2
lib/CodeGen/AsmPrinter/AsmPrinter.cpp

@@ -976,8 +976,7 @@ void AsmPrinter::emitStackSizeSection(const MachineFunction &MF) {
 
   const MCSymbol *FunctionSymbol = getSymbol(&MF.getFunction());
   uint64_t StackSize = FrameInfo.getStackSize();
-  OutStreamer->EmitValue(MCSymbolRefExpr::create(FunctionSymbol, OutContext),
-                         /* size = */ 8);
+  OutStreamer->EmitSymbolValue(FunctionSymbol, TM.getPointerSize());
   OutStreamer->EmitULEB128IntValue(StackSize);
 
   OutStreamer->PopSection();

+ 30 - 0
test/CodeGen/ARM/stack-size-section.ll

@@ -0,0 +1,30 @@
+; RUN: llc < %s -mtriple=armv7-linux -stack-size-section | FileCheck %s
+
+; CHECK-LABEL: func1:
+; CHECK: .section .stack_sizes,"",%progbits
+; CHECK-NEXT: .long func1
+; CHECK-NEXT: .byte 8
+define void @func1(i32, i32) #0 {
+  alloca i32, align 4
+  alloca i32, align 4
+  ret void
+}
+
+; CHECK-LABEL: func2:
+; CHECK: .section .stack_sizes,"",%progbits
+; CHECK-NEXT: .long func2
+; CHECK-NEXT: .byte 16
+define void @func2() #0 {
+  alloca i32, align 4
+  call void @func1(i32 1, i32 2)
+  ret void
+}
+
+; CHECK-LABEL: dynalloc:
+; CHECK-NOT: .section .stack_sizes
+define void @dynalloc(i32 %N) #0 {
+  alloca i32, i32 %N
+  ret void
+}
+
+attributes #0 = { "no-frame-pointer-elim"="true" }