[llvm] r301940 - Make DWARFDebugLine use StringRef for directory/file tables. NFC

David Blaikie via llvm-commits llvm-commits at lists.llvm.org
Mon May 8 11:26:07 PDT 2017


On Tue, May 2, 2017 at 10:50 AM Paul Robinson via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: probinson
> Date: Tue May  2 12:37:32 2017
> New Revision: 301940
>
> URL: http://llvm.org/viewvc/llvm-project?rev=301940&view=rev
> Log:
> Make DWARFDebugLine use StringRef for directory/file tables. NFC
>
> Differential Revision: http://reviews.llvm.org/D32728
>
> Modified:
>     llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
>     llvm/trunk/include/llvm/Support/DataExtractor.h
>     llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
>     llvm/trunk/lib/Support/DataExtractor.cpp
>
> Modified: llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h?rev=301940&r1=301939&r2=301940&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h (original)
> +++ llvm/trunk/include/llvm/DebugInfo/DWARF/DWARFDebugLine.h Tue May  2
> 12:37:32 2017
> @@ -30,7 +30,7 @@ public:
>    struct FileNameEntry {
>      FileNameEntry() = default;
>
> -    const char *Name = nullptr;
> +    StringRef Name = StringRef();
>

This is redundant ^ - probably best to write it as "StringRef Name;" ?

     uint64_t DirIdx = 0;
>      uint64_t ModTime = 0;
>      uint64_t Length = 0;
> @@ -63,7 +63,7 @@ public:
>      /// The number assigned to the first special opcode.
>      uint8_t OpcodeBase;
>      std::vector<uint8_t> StandardOpcodeLengths;
> -    std::vector<const char *> IncludeDirectories;
> +    std::vector<StringRef> IncludeDirectories;
>      std::vector<FileNameEntry> FileNames;
>
>      bool IsDWARF64;
>
> Modified: llvm/trunk/include/llvm/Support/DataExtractor.h
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/DataExtractor.h?rev=301940&r1=301939&r2=301940&view=diff
>
> ==============================================================================
> --- llvm/trunk/include/llvm/Support/DataExtractor.h (original)
> +++ llvm/trunk/include/llvm/Support/DataExtractor.h Tue May  2 12:37:32
> 2017
> @@ -58,6 +58,28 @@ public:
>    ///     NULL will be returned.
>    const char *getCStr(uint32_t *offset_ptr) const;
>
> +  /// Extract a C string from \a *OffsetPtr.
> +  ///
> +  /// Returns a StringRef for the C String from the data at the offset
> +  /// pointed to by \a OffsetPtr. A variable length NULL terminated C
> +  /// string will be extracted and the \a OffsetPtr will be
> +  /// updated with the offset of the byte that follows the NULL
> +  /// terminator byte.
> +  ///
> +  /// \param[in,out] OffsetPtr
> +  ///     A pointer to an offset within the data that will be advanced
> +  ///     by the appropriate number of bytes if the value is extracted
> +  ///     correctly. If the offset is out of bounds or there are not
> +  ///     enough bytes to extract this value, the offset will be left
> +  ///     unmodified.
> +  ///
> +  /// \return
> +  ///     A StringRef for the C string value in the data. If the offset
> +  ///     pointed to by \a OffsetPtr is out of bounds, or if the
> +  ///     offset plus the length of the C string is out of bounds,
> +  ///     a default-initialized StringRef will be returned.
> +  StringRef getCStrRef(uint32_t *OffsetPtr) const;
> +
>    /// Extract an unsigned integer of size \a byte_size from \a
>    /// *offset_ptr.
>    ///
>
> Modified: llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp?rev=301940&r1=301939&r2=301940&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp (original)
> +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDebugLine.cpp Tue May  2 12:37:32
> 2017
> @@ -107,25 +107,22 @@ bool DWARFDebugLine::Prologue::parse(Dat
>    }
>
>    while (*OffsetPtr < EndPrologueOffset) {
> -    const char *S = DebugLineData.getCStr(OffsetPtr);
> -    if (S && S[0])
> -      IncludeDirectories.push_back(S);
> -    else
> +    StringRef S = DebugLineData.getCStrRef(OffsetPtr);
> +    if (S.empty())
>        break;
> +    IncludeDirectories.push_back(S);
>    }
>
>    while (*OffsetPtr < EndPrologueOffset) {
> -    const char *Name = DebugLineData.getCStr(OffsetPtr);
> -    if (Name && Name[0]) {
> -      FileNameEntry FileEntry;
> -      FileEntry.Name = Name;
> -      FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr);
> -      FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr);
> -      FileEntry.Length = DebugLineData.getULEB128(OffsetPtr);
> -      FileNames.push_back(FileEntry);
> -    } else {
> +    StringRef Name = DebugLineData.getCStrRef(OffsetPtr);
> +    if (Name.empty())
>        break;
> -    }
> +    FileNameEntry FileEntry;
> +    FileEntry.Name = Name;
> +    FileEntry.DirIdx = DebugLineData.getULEB128(OffsetPtr);
> +    FileEntry.ModTime = DebugLineData.getULEB128(OffsetPtr);
> +    FileEntry.Length = DebugLineData.getULEB128(OffsetPtr);
> +    FileNames.push_back(FileEntry);
>    }
>
>    if (*OffsetPtr != EndPrologueOffset) {
> @@ -637,7 +634,7 @@ bool DWARFDebugLine::LineTable::getFileN
>    if (Kind == FileLineInfoKind::None || !hasFileAtIndex(FileIndex))
>      return false;
>    const FileNameEntry &Entry = Prologue.FileNames[FileIndex - 1];
> -  const char *FileName = Entry.Name;
> +  StringRef FileName = Entry.Name;
>    if (Kind != FileLineInfoKind::AbsoluteFilePath ||
>        sys::path::is_absolute(FileName)) {
>      Result = FileName;
> @@ -646,7 +643,7 @@ bool DWARFDebugLine::LineTable::getFileN
>
>    SmallString<16> FilePath;
>    uint64_t IncludeDirIndex = Entry.DirIdx;
> -  const char *IncludeDir = "";
> +  StringRef IncludeDir;
>    // Be defensive about the contents of Entry.
>    if (IncludeDirIndex > 0 &&
>        IncludeDirIndex <= Prologue.IncludeDirectories.size())
>
> Modified: llvm/trunk/lib/Support/DataExtractor.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/DataExtractor.cpp?rev=301940&r1=301939&r2=301940&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Support/DataExtractor.cpp (original)
> +++ llvm/trunk/lib/Support/DataExtractor.cpp Tue May  2 12:37:32 2017
> @@ -128,6 +128,16 @@ const char *DataExtractor::getCStr(uint3
>    return nullptr;
>  }
>
> +StringRef DataExtractor::getCStrRef(uint32_t *OffsetPtr) const {
> +  uint32_t Start = *OffsetPtr;
> +  StringRef::size_type Pos = Data.find('\0', Start);
> +  if (Pos != StringRef::npos) {
> +    *OffsetPtr = Pos + 1;
> +    return StringRef(Data.data() + Start, Pos - Start);
> +  }
> +  return StringRef();
> +}
> +
>  uint64_t DataExtractor::getULEB128(uint32_t *offset_ptr) const {
>    uint64_t result = 0;
>    if (Data.empty())
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170508/6a49ca5b/attachment.html>


More information about the llvm-commits mailing list