[llvm-commits] [llvm] r78603 - in /llvm/trunk/lib/Target/PIC16: PIC16DebugInfo.cpp PIC16DebugInfo.h

Sanjiv Gupta sanjiv.gupta at microchip.com
Wed Aug 12 22:26:02 PDT 2009


Hi Devang,
Do we have a plan to include information about composite types also in 
DbgFinder? Currently I can see only llvm.debug.global_variables.


- Sanjiv

Devang Patel wrote:
> Author: dpatel
> Date: Mon Aug 10 17:11:20 2009
> New Revision: 78603
>
> URL: http://llvm.org/viewvc/llvm-project?rev=78603&view=rev
> Log:
> Do not rely on magic "llvm.dbg.*" global variable name to find debug info.
> PIC16 developers, please verify. 
>
> Modified:
>     llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.cpp
>     llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.h
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.cpp?rev=78603&r1=78602&r2=78603&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.cpp (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.cpp Mon Aug 10 17:11:20 2009
> @@ -17,6 +17,7 @@
>  #include "llvm/CodeGen/MachineFunction.h"
>  #include "llvm/Support/DebugLoc.h"
>  #include "llvm/Support/FormattedStream.h"
> +#include "llvm/ADT/SmallString.h"
>  
>  using namespace llvm;
>  
> @@ -117,6 +118,8 @@
>    CTy.getName(TagName);
>    // UniqueSuffix is .number where number is obtained from
>    // llvm.dbg.composite<number>.
> +  // FIXME: This will break when composite type is not represented by
> +  // llvm.dbg.composite* global variable. This is not supported.
>    std::string UniqueSuffix = "." + Ty.getGV()->getNameStr().substr(18);
>    TagName += UniqueSuffix;
>    unsigned short size = CTy.getSizeInBits()/8;
> @@ -290,7 +293,7 @@
>  /// composite type.
>  /// 
>  void PIC16DbgInfo::EmitCompositeTypeElements (DICompositeType CTy,
> -                                              std::string UniqueSuffix) { 
> +                                              unsigned SuffixNo) {
>    unsigned long Value = 0;
>    DIArray Elements = CTy.getTypeArray();
>    for (unsigned i = 0, N = Elements.getNumElements(); i < N; i++) {
> @@ -305,18 +308,19 @@
>      DITy.getName(ElementName);
>      unsigned short ElementSize = DITy.getSizeInBits()/8;
>      // Get mangleddd name for this structure/union  element.
> -    std::string MangMemName = ElementName + UniqueSuffix;
> +    SmallString<128> MangMemName(ElementName.begin(), ElementName.end());
> +    MangMemName.append_uint_32(SuffixNo);
>      PopulateDebugInfo(DITy, TypeNo, HasAux, ElementAux, TagName);
>      short Class = 0;
>      if( CTy.getTag() == dwarf::DW_TAG_union_type)
>        Class = PIC16Dbg::C_MOU;
>      else if  (CTy.getTag() == dwarf::DW_TAG_structure_type)
>        Class = PIC16Dbg::C_MOS;
> -    EmitSymbol(MangMemName, Class, TypeNo, Value);
> +    EmitSymbol(MangMemName.c_str(), Class, TypeNo, Value);
>      if (CTy.getTag() == dwarf::DW_TAG_structure_type)
>        Value += ElementSize;
>      if (HasAux)
> -      EmitAuxEntry(MangMemName, ElementAux, PIC16Dbg::AuxSize, TagName);
> +      EmitAuxEntry(MangMemName.c_str(), ElementAux, PIC16Dbg::AuxSize, TagName);
>    }
>  }
>  
> @@ -324,49 +328,49 @@
>  /// and union declarations.
>  ///
>  void PIC16DbgInfo::EmitCompositeTypeDecls(Module &M) {
> -  for(iplist<GlobalVariable>::iterator I = M.getGlobalList().begin(),
> -      E = M.getGlobalList().end(); I != E; I++) {
> -    // Structures and union declaration's debug info has llvm.dbg.composite
> -    // in its name.
> -    // FIXME: Checking and relying on llvm.dbg.composite name is not a good idea.
> -    if(I->getNameStr().find("llvm.dbg.composite") != std::string::npos) {
> -      GlobalVariable *GV = cast<GlobalVariable >(I);
> -      DICompositeType CTy(GV);
> -      if (CTy.getTag() == dwarf::DW_TAG_union_type ||
> -          CTy.getTag() == dwarf::DW_TAG_structure_type ) {
> -        std::string name;
> -        CTy.getName(name);
> -        std::string DIVar = I->getName();
> -        // Get the number after llvm.dbg.composite and make UniqueSuffix from 
> -        // it.
> -        std::string UniqueSuffix = "." + DIVar.substr(18);
> -        std::string MangledCTyName = name + UniqueSuffix;
> -        unsigned short size = CTy.getSizeInBits()/8;
> -        int Aux[PIC16Dbg::AuxSize] = {0};
> -        // 7th and 8th byte represent size of structure/union.
> -        Aux[6] = size & 0xff;
> -        Aux[7] = size >> 8;
> -        // Emit .def for structure/union tag.
> -        if( CTy.getTag() == dwarf::DW_TAG_union_type)
> -          EmitSymbol(MangledCTyName, PIC16Dbg::C_UNTAG);
> -        else if  (CTy.getTag() == dwarf::DW_TAG_structure_type) 
> -          EmitSymbol(MangledCTyName, PIC16Dbg::C_STRTAG);
> -
> -        // Emit auxiliary debug information for structure/union tag. 
> -        EmitAuxEntry(MangledCTyName, Aux, PIC16Dbg::AuxSize);
> -
> -        // Emit members.
> -        EmitCompositeTypeElements (CTy, UniqueSuffix);
> -
> -        // Emit mangled Symbol for end of structure/union.
> -        std::string EOSSymbol = ".eos" + UniqueSuffix;
> -        EmitSymbol(EOSSymbol, PIC16Dbg::C_EOS);
> -        EmitAuxEntry(EOSSymbol, Aux, PIC16Dbg::AuxSize, MangledCTyName);
> -      }
> +  DebugInfoFinder DbgFinder;
> +  DbgFinder.processModule(M);
> +  unsigned SuffixNo = 0;
> +  for (DebugInfoFinder::iterator I = DbgFinder.global_variable_begin(),
> +         E = DbgFinder.global_variable_end(); I != E; ++I) {
> +    DICompositeType CTy(*I);
> +    if (CTy.isNull())
> +      continue;
> +    if (CTy.getTag() == dwarf::DW_TAG_union_type ||
> +        CTy.getTag() == dwarf::DW_TAG_structure_type ) {
> +      std::string Name;
> +      CTy.getName(Name);
> +      SmallString<128> MangledCTyName(Name.begin(), Name.end());
> +      MangledCTyName.append_uint_32(++SuffixNo);
> +      unsigned short size = CTy.getSizeInBits()/8;
> +      int Aux[PIC16Dbg::AuxSize] = {0};
> +      // 7th and 8th byte represent size of structure/union.
> +      Aux[6] = size & 0xff;
> +      Aux[7] = size >> 8;
> +      // Emit .def for structure/union tag.
> +      if( CTy.getTag() == dwarf::DW_TAG_union_type)
> +        EmitSymbol(MangledCTyName.c_str(), PIC16Dbg::C_UNTAG);
> +      else if  (CTy.getTag() == dwarf::DW_TAG_structure_type) 
> +        EmitSymbol(MangledCTyName.c_str(), PIC16Dbg::C_STRTAG);
> +      
> +      // Emit auxiliary debug information for structure/union tag. 
> +      EmitAuxEntry(MangledCTyName.c_str(), Aux, PIC16Dbg::AuxSize);
> +      
> +      // Emit members.
> +      EmitCompositeTypeElements (CTy, SuffixNo);
> +      
> +      // Emit mangled Symbol for end of structure/union.
> +      SmallString<128> EOSSymbol(Name.begin(), Name.end());
> +      EOSSymbol += ".eos";
> +      EOSSymbol.append_uint_32(SuffixNo);
> +      EmitSymbol(EOSSymbol.c_str(), PIC16Dbg::C_EOS);
> +      EmitAuxEntry(EOSSymbol.c_str(), Aux, PIC16Dbg::AuxSize, 
> +                   MangledCTyName.c_str());
>      }
>    }
>  }
>  
> +
>  /// EmitFunctBeginDI - Emit .bf for function.
>  ///
>  void PIC16DbgInfo::EmitFunctBeginDI(const Function *F) {
>
> Modified: llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.h?rev=78603&r1=78602&r2=78603&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.h (original)
> +++ llvm/trunk/lib/Target/PIC16/PIC16DebugInfo.h Mon Aug 10 17:11:20 2009
> @@ -145,8 +145,7 @@
>      short getStorageClass(DIGlobalVariable DIGV);
>      void EmitFunctBeginDI(const Function *F);
>      void EmitCompositeTypeDecls(Module &M);
> -    void EmitCompositeTypeElements (DICompositeType CTy,
> -                                    std::string UniqueSuffix);
> +    void EmitCompositeTypeElements (DICompositeType CTy, unsigned Suffix);
>      void EmitFunctEndDI(const Function *F, unsigned Line);
>      void EmitAuxEntry(const std::string VarName, int Aux[], 
>                        int num = PIC16Dbg::AuxSize, std::string TagName = "");
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>   




More information about the llvm-commits mailing list