mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Assume .cfi_startproc is the first thing in a function. If the function is
externally visable, create a local symbol to use in the CFE. If not, use the function label itself. Fixes PR10420. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@136716 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
6cdc1f43e6
commit
49cb9b8886
@ -64,7 +64,7 @@ namespace llvm {
|
||||
void setCurrentW64UnwindInfo(MCWin64EHUnwindInfo *Frame);
|
||||
void EnsureValidW64UnwindInfo();
|
||||
|
||||
const MCSymbol* LastNonPrivate;
|
||||
MCSymbol* LastSymbol;
|
||||
|
||||
/// SectionStack - This is stack of current and previous section
|
||||
/// values saved by PushSection.
|
||||
|
@ -171,10 +171,7 @@ void MCStreamer::EmitLabel(MCSymbol *Symbol) {
|
||||
assert(!Symbol->isVariable() && "Cannot emit a variable symbol!");
|
||||
assert(getCurrentSection() && "Cannot emit before setting section!");
|
||||
Symbol->setSection(*getCurrentSection());
|
||||
|
||||
StringRef Prefix = getContext().getAsmInfo().getPrivateGlobalPrefix();
|
||||
if (!Symbol->getName().startswith(Prefix))
|
||||
LastNonPrivate = Symbol;
|
||||
LastSymbol = Symbol;
|
||||
}
|
||||
|
||||
void MCStreamer::EmitCompactUnwindEncoding(uint32_t CompactUnwindEncoding) {
|
||||
@ -194,9 +191,19 @@ void MCStreamer::EmitCFIStartProc() {
|
||||
if (CurFrame && !CurFrame->End)
|
||||
report_fatal_error("Starting a frame before finishing the previous one!");
|
||||
MCDwarfFrameInfo Frame;
|
||||
Frame.Begin = getContext().CreateTempSymbol();
|
||||
Frame.Function = LastNonPrivate;
|
||||
EmitLabel(Frame.Begin);
|
||||
|
||||
Frame.Function = LastSymbol;
|
||||
|
||||
// If the function is externally visible, we need to create a local
|
||||
// symbol to avoid relocations.
|
||||
StringRef Prefix = getContext().getAsmInfo().getPrivateGlobalPrefix();
|
||||
if (LastSymbol->getName().startswith(Prefix)) {
|
||||
Frame.Begin = LastSymbol;
|
||||
} else {
|
||||
Frame.Begin = getContext().CreateTempSymbol();
|
||||
EmitLabel(Frame.Begin);
|
||||
}
|
||||
|
||||
FrameInfos.push_back(Frame);
|
||||
}
|
||||
|
||||
|
21
test/CodeGen/X86/pr10420.ll
Normal file
21
test/CodeGen/X86/pr10420.ll
Normal file
@ -0,0 +1,21 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-macosx -disable-cfi | FileCheck %s
|
||||
|
||||
define private void @foo() {
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @bar() {
|
||||
call void @foo()
|
||||
ret void;
|
||||
}
|
||||
|
||||
; CHECK: _bar: ## @bar
|
||||
; CHECK-NEXT: Ltmp2:
|
||||
|
||||
; CHECK: Ltmp12:
|
||||
; CHECK-NEXT: Ltmp13 = L_foo-Ltmp12 ## FDE initial location
|
||||
; CHECK-NEXT: .quad Ltmp13
|
||||
|
||||
; CHECK: Ltmp19:
|
||||
; CHECK-NEXT: Ltmp20 = Ltmp2-Ltmp19 ## FDE initial location
|
||||
; CHECK-NEXT: .quad Ltmp20
|
Loading…
x
Reference in New Issue
Block a user