[PATCH] D42108: [MC] Fix -fstack-size-section on ARM

Sean Eveson via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Jan 16 08:56:29 PST 2018


seaneveson created this revision.
seaneveson added a reviewer: MatzeB.
Herald added subscribers: kristof.beyls, javed.absar, aemerson.

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

This simplifies reading the section for architectures with 32 bit symbols, and fixes an issue with an ARM target where the assembler didn't have a 64 bit data directive.

Thanks.


https://reviews.llvm.org/D42108

Files:
  docs/CodeGenerator.rst
  docs/CommandGuide/llc.rst
  lib/CodeGen/AsmPrinter/AsmPrinter.cpp
  test/CodeGen/ARM/stack-size-section.ll


Index: test/CodeGen/ARM/stack-size-section.ll
===================================================================
--- test/CodeGen/ARM/stack-size-section.ll
+++ 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" }
Index: lib/CodeGen/AsmPrinter/AsmPrinter.cpp
===================================================================
--- lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -976,8 +976,7 @@
 
   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();
Index: docs/CommandGuide/llc.rst
===================================================================
--- docs/CommandGuide/llc.rst
+++ docs/CommandGuide/llc.rst
@@ -135,7 +135,7 @@
 .. 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.
Index: docs/CodeGenerator.rst
===================================================================
--- docs/CodeGenerator.rst
+++ docs/CodeGenerator.rst
@@ -1584,7 +1584,7 @@
 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.


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D42108.129967.patch
Type: text/x-patch
Size: 2933 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180116/18f3640d/attachment.bin>


More information about the llvm-commits mailing list