1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 12:41:49 +01:00

[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

llvm-svn: 322619
This commit is contained in:
Sean Eveson 2018-01-17 09:01:29 +00:00
parent 94bc93e190
commit b01a058fa6
4 changed files with 33 additions and 4 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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();

View File

@ -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" }