void DebugInfoFinder::processLocation(const Module &M, DILocation Loc) { if (!Loc) return; InitializeTypeMap(M); processScope(Loc.getScope()); processLocation(M, Loc.getOrigLocation()); }
/// processLocation - Process DILocation. void DebugInfoFinder::processLocation(DILocation Loc) { if (!Loc.Verify()) return; DIDescriptor S(Loc.getScope()); if (S.isCompileUnit()) addCompileUnit(DICompileUnit(S)); else if (S.isSubprogram()) processSubprogram(DISubprogram(S)); else if (S.isLexicalBlock()) processLexicalBlock(DILexicalBlock(S)); processLocation(Loc.getOrigLocation()); }
/// processLocation - Process DILocation. void DebugInfoFinder::processLocation(DILocation Loc) { if (Loc.isNull()) return; DIScope S(Loc.getScope().getNode()); if (S.isNull()) return; if (S.isCompileUnit()) addCompileUnit(DICompileUnit(S.getNode())); else if (S.isSubprogram()) processSubprogram(DISubprogram(S.getNode())); else if (S.isLexicalBlock()) processLexicalBlock(DILexicalBlock(S.getNode())); processLocation(Loc.getOrigLocation()); }
/// ExtractDebugLocation - Extract debug location information /// from DILocation. DebugLoc ExtractDebugLocation(DILocation &Loc, DebugLocTracker &DebugLocInfo) { DebugLoc DL; MDNode *Context = Loc.getScope().getNode(); MDNode *InlinedLoc = NULL; if (!Loc.getOrigLocation().isNull()) InlinedLoc = Loc.getOrigLocation().getNode(); // If this location is already tracked then use it. DebugLocTuple Tuple(Context, InlinedLoc, Loc.getLineNumber(), Loc.getColumnNumber()); DenseMap<DebugLocTuple, unsigned>::iterator II = DebugLocInfo.DebugIdMap.find(Tuple); if (II != DebugLocInfo.DebugIdMap.end()) return DebugLoc::get(II->second); // Add a new location entry. unsigned Id = DebugLocInfo.DebugLocations.size(); DebugLocInfo.DebugLocations.push_back(Tuple); DebugLocInfo.DebugIdMap[Tuple] = Id; return DebugLoc::get(Id); }
/// processLocation - Process DILocation. void DebugInfoFinder::processLocation(DILocation Loc) { if (!Loc) return; processScope(Loc.getScope()); processLocation(Loc.getOrigLocation()); }