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:
parent
94bc93e190
commit
b01a058fa6
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
test/CodeGen/ARM/stack-size-section.ll
Normal file
30
test/CodeGen/ARM/stack-size-section.ll
Normal 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" }
|
Loading…
x
Reference in New Issue
Block a user