mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
[MC] Emit an error if cfi_startproc is used before a symbol is defined.
Currently, we bind those directives with the last symbol, so if none has been defined, this would lead to a crash of the compiler. <rdar://problem/15939159> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206236 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e8603c43f2
commit
67ed710684
@ -278,6 +278,10 @@ void MCStreamer::EmitCFIStartProcImpl(MCDwarfFrameInfo &Frame) {
|
||||
}
|
||||
|
||||
void MCStreamer::RecordProcStart(MCDwarfFrameInfo &Frame) {
|
||||
// Report an error if we haven't seen a symbol yet where we'd bind
|
||||
// .cfi_startproc.
|
||||
if (!LastSymbol)
|
||||
report_fatal_error("No symbol to start a frame");
|
||||
Frame.Function = LastSymbol;
|
||||
// We need to create a local symbol to avoid relocations.
|
||||
Frame.Begin = getContext().CreateTempSymbol();
|
||||
|
@ -1,6 +1,7 @@
|
||||
# RUN: llvm-mc < %s -triple=armv7-linux-gnueabi -filetype=obj -o - \
|
||||
# RUN: | llvm-dwarfdump - | FileCheck %s
|
||||
|
||||
_proc:
|
||||
.cfi_sections .debug_frame
|
||||
.cfi_startproc
|
||||
bx lr
|
||||
|
16
test/MC/AsmParser/cfi-invalid-startproc.s
Normal file
16
test/MC/AsmParser/cfi-invalid-startproc.s
Normal file
@ -0,0 +1,16 @@
|
||||
# RUN: not llvm-mc -triple=x86_64-apple-macosx10.8 -filetype=obj -o %t %s 2>&1 | FileCheck %s
|
||||
# Check that the cfi_startproc is declared after the beginning of
|
||||
# a procedure, otherwise it will reference an invalid symbol for
|
||||
# emitting the relocation.
|
||||
# <rdar://problem/15939159>
|
||||
|
||||
# CHECK: No symbol to start a frame
|
||||
.text
|
||||
.cfi_startproc
|
||||
.globl _someFunction
|
||||
_someFunction:
|
||||
.cfi_def_cfa_offset 16
|
||||
.cfi_offset %rbp, -16
|
||||
.cfi_def_cfa_register rbp
|
||||
ret
|
||||
.cfi_endproc
|
@ -3,6 +3,7 @@
|
||||
// Make sure MC can handle file level .cfi_startproc and .cfi_endproc that creates
|
||||
// an empty frame.
|
||||
// rdar://10017184
|
||||
_proc:
|
||||
.cfi_startproc
|
||||
.cfi_endproc
|
||||
|
||||
|
@ -7,6 +7,7 @@
|
||||
# RUN: llvm-mc -triple=powerpc64le-unknown-linux-gnu -filetype=obj -relocation-model=pic %s | \
|
||||
# RUN: llvm-readobj -s -sr -sd | FileCheck %s -check-prefix=PIC -check-prefix=PIC-LE
|
||||
|
||||
_proc:
|
||||
.cfi_startproc
|
||||
nop
|
||||
.cfi_endproc
|
||||
|
Loading…
Reference in New Issue
Block a user