Skip to content

Commit

Permalink
Fix PR19239 - Add support for generating debug info for functions wit…
Browse files Browse the repository at this point in the history
…hout 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
  • Loading branch information
timurrrr committed Mar 26, 2014
1 parent c61ec18 commit d4c442f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 16 deletions.
26 changes: 11 additions & 15 deletions lib/CodeGen/AsmPrinter/WinCodeViewLineTables.cpp
Expand Up @@ -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
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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;
}

Expand Down
2 changes: 1 addition & 1 deletion lib/CodeGen/AsmPrinter/WinCodeViewLineTables.h
Expand Up @@ -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;
Expand Down

0 comments on commit d4c442f

Please sign in to comment.