[cfe-commits] [llvm-commits] new .file directive

Devang Patel dpatel at apple.com
Mon Oct 17 14:00:00 PDT 2011


On Oct 14, 2011, at 7:10 PM, Nick Lewycky wrote:

> 
> Please review!

> 
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.cpp
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.cpp	(revision 142035)
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.cpp	(working copy)
> @@ -442,23 +442,21 @@
>    if (FileName.empty())
>      return GetOrCreateSourceID("<stdin>", StringRef());
>  
> -  // MCStream expects full path name as filename.
> -  if (!DirName.empty() && !sys::path::is_absolute(FileName)) {
> -    SmallString<128> FullPathName = DirName;
> -    sys::path::append(FullPathName, FileName);
> -    // Here FullPathName will be copied into StringMap by GetOrCreateSourceID.
> -    return GetOrCreateSourceID(StringRef(FullPathName), StringRef());
> -  }
> +  unsigned SrcId = SourceIdMap.size()+1;
> +  std::pair<std::string, std::string> SourceName =
> +      std::make_pair(FileName, DirName);
> +  std::pair<std::pair<std::string, std::string>, unsigned> Entry =
> +      make_pair(SourceName, SrcId);
>  
> -  StringMapEntry<unsigned> &Entry = SourceIdMap.GetOrCreateValue(FileName);
> -  if (Entry.getValue())
> -    return Entry.getValue();
> +  std::map<std::pair<std::string, std::string>, unsigned>::iterator I;
> +  bool NewlyInserted;
> +  tie(I, NewlyInserted) = SourceIdMap.insert(Entry);
> +  if (!NewlyInserted)
> +    return I->second;
>  
> -  unsigned SrcId = SourceIdMap.size();
> -  Entry.setValue(SrcId);
> -
>    // Print out a .file directive to specify files for .loc directives.
> -  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.getKey());
> +  Asm->OutStreamer.EmitDwarfFileDirective(SrcId, Entry.first.second,
> +                                          Entry.first.first);
>  
>    return SrcId;
>  }
> Index: lib/CodeGen/AsmPrinter/DwarfDebug.h
> ===================================================================
> --- lib/CodeGen/AsmPrinter/DwarfDebug.h	(revision 142035)
> +++ lib/CodeGen/AsmPrinter/DwarfDebug.h	(working copy)
> @@ -26,6 +26,7 @@
>  #include "llvm/ADT/UniqueVector.h"
>  #include "llvm/Support/Allocator.h"
>  #include "llvm/Support/DebugLoc.h"
> +#include <map>
>  
>  namespace llvm {
>  
> @@ -207,9 +208,9 @@
>    ///
>    std::vector<DIEAbbrev *> Abbreviations;
>  
> -  /// SourceIdMap - Source id map, i.e. pair of directory id and source file
> -  /// id mapped to a unique id.
> -  StringMap<unsigned> SourceIdMap;
> +  /// SourceIdMap - Source id map, i.e. pair of source filename and directory
> +  /// mapped to a unique id.
> +  std::map<std::pair<std::string, std::string>, unsigned> SourceIdMap;
>  
>    /// StringPool - A String->Symbol mapping of strings used by indirect
>    /// references.

Why do you need this change in DwarfDebug ? Why can't MCAsmStreamer split file and directly ?
-
Devang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20111017/54a76e32/attachment.html>


More information about the cfe-commits mailing list