diff options
author | Devang Patel <dpatel@apple.com> | 2009-07-06 23:28:36 +0000 |
---|---|---|
committer | Devang Patel <dpatel@apple.com> | 2009-07-06 23:28:36 +0000 |
commit | 8e8028eac3f5c41ff9f272e79177d2e21e857de7 (patch) | |
tree | 5db38b26c30ad96fb10a63cff551a4971ded5a62 /llvm/lib/Target/PIC16/PIC16DebugInfo.cpp | |
parent | c4744b9e2227b475381ec221dce7d557376ba4a2 (diff) | |
download | bcm5719-llvm-8e8028eac3f5c41ff9f272e79177d2e21e857de7.tar.gz bcm5719-llvm-8e8028eac3f5c41ff9f272e79177d2e21e857de7.zip |
Avoid directly relying on llvm.dbg.compile_unit and llvm.dbg.global_variables.
PIC16 developers, please verify. Thanks.
llvm-svn: 74880
Diffstat (limited to 'llvm/lib/Target/PIC16/PIC16DebugInfo.cpp')
-rw-r--r-- | llvm/lib/Target/PIC16/PIC16DebugInfo.cpp | 56 |
1 files changed, 29 insertions, 27 deletions
diff --git a/llvm/lib/Target/PIC16/PIC16DebugInfo.cpp b/llvm/lib/Target/PIC16/PIC16DebugInfo.cpp index af627a3b724..1766fde4b6b 100644 --- a/llvm/lib/Target/PIC16/PIC16DebugInfo.cpp +++ b/llvm/lib/Target/PIC16/PIC16DebugInfo.cpp @@ -200,9 +200,13 @@ short PIC16DbgInfo::getStorageClass(DIGlobalVariable DIGV) { /// required initializations. void PIC16DbgInfo::BeginModule(Module &M) { // Emit file directive for module. - // FIXME : What if more then one CUs are present in a module ? - GlobalVariable *CU = M.getNamedGlobal("llvm.dbg.compile_unit"); - if (CU) { + SmallVector<GlobalVariable *, 2> CUs; + SmallVector<GlobalVariable *, 4> GVs; + SmallVector<GlobalVariable *, 4> SPs; + CollectDebugInfoAnchors(M, CUs, GVs, SPs); + if (!CUs.empty()) { + // FIXME : What if more then one CUs are present in a module ? + GlobalVariable *CU = CUs[0]; EmitDebugDirectives = true; SwitchToCU(CU); } @@ -427,32 +431,30 @@ void PIC16DbgInfo::EmitSymbol(std::string Name, short Class, unsigned short /// EmitVarDebugInfo - Emit debug information for all variables. /// void PIC16DbgInfo::EmitVarDebugInfo(Module &M) { - // FIXME : This anchor has been removed. - GlobalVariable *Root = M.getGlobalVariable("llvm.dbg.global_variables"); - if (!Root) + SmallVector<GlobalVariable *, 2> CUs; + SmallVector<GlobalVariable *, 4> GVs; + SmallVector<GlobalVariable *, 4> SPs; + CollectDebugInfoAnchors(M, CUs, GVs, SPs); + if (GVs.empty()) return; - Constant *RootC = cast<Constant>(*Root->use_begin()); - for (Value::use_iterator UI = RootC->use_begin(), UE = Root->use_end(); - UI != UE; ++UI) { - for (Value::use_iterator UUI = UI->use_begin(), UUE = UI->use_end(); - UUI != UUE; ++UUI) { - DIGlobalVariable DIGV(cast<GlobalVariable>(*UUI)); - DIType Ty = DIGV.getType(); - unsigned short TypeNo = 0; - bool HasAux = false; - int Aux[PIC16Dbg::AuxSize] = { 0 }; - std::string TagName = ""; - std::string VarName = TAI->getGlobalPrefix()+DIGV.getGlobal()->getName(); - PopulateDebugInfo(Ty, TypeNo, HasAux, Aux, TagName); - // Emit debug info only if type information is availaible. - if (TypeNo != PIC16Dbg::T_NULL) { - O << "\n\t.type " << VarName << ", " << TypeNo; - short ClassNo = getStorageClass(DIGV); - O << "\n\t.class " << VarName << ", " << ClassNo; - if (HasAux) - EmitAuxEntry(VarName, Aux, PIC16Dbg::AuxSize, TagName); - } + for (SmallVector<GlobalVariable *, 4>::iterator I = GVs.begin(), + E = GVs.end(); I != E; ++I) { + DIGlobalVariable DIGV(*I); + DIType Ty = DIGV.getType(); + unsigned short TypeNo = 0; + bool HasAux = false; + int Aux[PIC16Dbg::AuxSize] = { 0 }; + std::string TagName = ""; + std::string VarName = TAI->getGlobalPrefix()+DIGV.getGlobal()->getName(); + PopulateDebugInfo(Ty, TypeNo, HasAux, Aux, TagName); + // Emit debug info only if type information is availaible. + if (TypeNo != PIC16Dbg::T_NULL) { + O << "\n\t.type " << VarName << ", " << TypeNo; + short ClassNo = getStorageClass(DIGV); + O << "\n\t.class " << VarName << ", " << ClassNo; + if (HasAux) + EmitAuxEntry(VarName, Aux, PIC16Dbg::AuxSize, TagName); } } O << "\n"; |