mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-12 03:32:10 +00:00
Fix PR19239 - Add support for generating debug info for functions without lexical scopes and/or debug info at all
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@204790 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c61ec18f1b
commit
d4c442f12a
@ -131,9 +131,12 @@ void WinCodeViewLineTables::emitDebugInfoForFunction(const Function *GV) {
|
||||
// For each function there is a separate subsection
|
||||
// which holds the PC to file:line table.
|
||||
const MCSymbol *Fn = Asm->getSymbol(GV);
|
||||
const FunctionInfo &FI = FnDebugInfo[GV];
|
||||
assert(Fn);
|
||||
assert(FI.Instrs.size() > 0);
|
||||
|
||||
const FunctionInfo &FI = FnDebugInfo[GV];
|
||||
if (FI.Instrs.empty())
|
||||
return;
|
||||
assert(FI.End && "Don't know where the function ends?");
|
||||
|
||||
// PCs/Instructions are grouped into segments sharing the same filename.
|
||||
// Pre-calculate the lengths (in instructions) of these segments and store
|
||||
@ -264,12 +267,6 @@ void WinCodeViewLineTables::beginFunction(const MachineFunction *MF) {
|
||||
if (!Asm || !Asm->MMI->hasDebugInfo())
|
||||
return;
|
||||
|
||||
// Grab the lexical scopes for the function, if we don't have any of those
|
||||
// then we're not going to be able to do anything.
|
||||
LScopes.initialize(*MF);
|
||||
if (LScopes.empty())
|
||||
return;
|
||||
|
||||
const Function *GV = MF->getFunction();
|
||||
assert(FnDebugInfo.count(GV) == false);
|
||||
VisitedFunctions.push_back(GV);
|
||||
@ -311,13 +308,12 @@ void WinCodeViewLineTables::endFunction(const MachineFunction *) {
|
||||
if (!Asm || !CurFn) // We haven't created any debug info for this function.
|
||||
return;
|
||||
|
||||
if (CurFn->Instrs.empty())
|
||||
llvm_unreachable("Can this ever happen?");
|
||||
|
||||
// Define end label for subprogram.
|
||||
MCSymbol *FunctionEndSym = Asm->OutStreamer.getContext().CreateTempSymbol();
|
||||
Asm->OutStreamer.EmitLabel(FunctionEndSym);
|
||||
CurFn->End = FunctionEndSym;
|
||||
if (!CurFn->Instrs.empty()) {
|
||||
// Define end label for subprogram.
|
||||
MCSymbol *FunctionEndSym = Asm->OutStreamer.getContext().CreateTempSymbol();
|
||||
Asm->OutStreamer.EmitLabel(FunctionEndSym);
|
||||
CurFn->End = FunctionEndSym;
|
||||
}
|
||||
CurFn = 0;
|
||||
}
|
||||
|
||||
|
@ -32,13 +32,13 @@ namespace llvm {
|
||||
class WinCodeViewLineTables : public AsmPrinterHandler {
|
||||
AsmPrinter *Asm;
|
||||
DebugLoc PrevInstLoc;
|
||||
LexicalScopes LScopes;
|
||||
|
||||
// For each function, store a vector of labels to its instructions, as well as
|
||||
// to the end of the function.
|
||||
struct FunctionInfo {
|
||||
SmallVector<MCSymbol *, 10> Instrs;
|
||||
MCSymbol *End;
|
||||
FunctionInfo() : End(0) {}
|
||||
} *CurFn;
|
||||
|
||||
typedef DenseMap<const Function *, FunctionInfo> FnDebugInfoTy;
|
||||
|
Loading…
x
Reference in New Issue
Block a user