[llvm] r321883 - [PDB] Correctly link S_FILESTATIC records.
Evgenii Stepanov via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 8 12:14:38 PST 2018
I put an explicit check in MutableBinaryByteStream::writeBytes and got
this. Does it make sense?
Uninitialized bytes in __msan_check_mem_is_initialized at offset 0
inside [0x70600000008a, 2)
==219859==WARNING: MemorySanitizer: use-of-uninitialized-value
#0 0x1de06d2 in llvm::MutableBinaryByteStream::writeBytes(unsigned
int, llvm::ArrayRef<unsigned char>)
/code/llvm-project/llvm/include/llvm/Support/BinaryByteStream.h:123:5
#1 0x1dcf6a6 in llvm::WritableBinaryStreamRef::writeBytes(unsigned
int, llvm::ArrayRef<unsigned char>) const
/code/llvm-project/llvm/lib/Support/BinaryStreamRef.cpp:123:24
#2 0x1de2dba in
llvm::BinaryStreamWriter::writeBytes(llvm::ArrayRef<unsigned char>)
/code/llvm-project/llvm/lib/Support/BinaryStreamWriter.cpp:29:24
#3 0x28d697c in llvm::Error
llvm::BinaryStreamWriter::writeObject<llvm::support::detail::packed_endian_specific_integral<unsigned
short, (llvm::support::endianness)1, 1ul>
>(llvm::support::detail::packed_endian_specific_integral<unsigned
short, (llvm::support::endianness)1, 1ul> const&)
/code/llvm-project/llvm/include/llvm/Support/BinaryStreamWriter.h:127:12
#4 0x28a2e88 in llvm::Error
llvm::codeview::CodeViewRecordIO::mapObject<llvm::support::detail::packed_endian_specific_integral<unsigned
short, (llvm::support::endianness)1, 1ul>
>(llvm::support::detail::packed_endian_specific_integral<unsigned
short, (llvm::support::endianness)1, 1ul>&)
/code/llvm-project/llvm/include/llvm/DebugInfo/CodeView/CodeViewRecordIO.h:51:22
#5 0x28a42ea in
llvm::codeview::SymbolRecordMapping::visitKnownRecord(llvm::codeview::CVRecord<llvm::codeview::SymbolKind>&,
llvm::codeview::DefRangeRegisterSym&)
/code/llvm-project/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp:264:3
#6 0x10413b8 in llvm::Error
llvm::codeview::SymbolSerializer::visitKnownRecordImpl<llvm::codeview::DefRangeRegisterSym>(llvm::codeview::CVRecord<llvm::codeview::SymbolKind>&,
llvm::codeview::DefRangeRegisterSym&)
/code/llvm-project/llvm/include/llvm/DebugInfo/CodeView/SymbolSerializer.h:77:20
#7 0x1040fb0 in
llvm::codeview::SymbolSerializer::visitKnownRecord(llvm::codeview::CVRecord<llvm::codeview::SymbolKind>&,
llvm::codeview::DefRangeRegisterSym&)
/code/llvm-project/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def:221:1
#8 0x1040a0e in
llvm::codeview::CVRecord<llvm::codeview::SymbolKind>
llvm::codeview::SymbolSerializer::writeOneSymbol<llvm::codeview::DefRangeRegisterSym>(llvm::codeview::DefRangeRegisterSym&,
llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul>&,
llvm::codeview::CodeViewContainer)
/code/llvm-project/llvm/include/llvm/DebugInfo/CodeView/SymbolSerializer.h:59:29
#9 0x103fcc6 in
llvm::CodeViewYAML::detail::SymbolRecordImpl<llvm::codeview::DefRangeRegisterSym>::toCodeViewSymbol(llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator,
4096ul, 4096ul>&, llvm::codeview::CodeViewContainer) const
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp:209:12
#10 0xed62a1 in
llvm::CodeViewYAML::SymbolRecord::toCodeViewSymbol(llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator,
4096ul, 4096ul>&, llvm::codeview::CodeViewContainer) const
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp:522:18
#11 0xe07cd6 in (anonymous
namespace)::YAMLSymbolsSubsection::toCodeViewSubsection(llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator,
4096ul, 4096ul>&, llvm::codeview::StringsAndChecksums const&) const
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLDebugSections.cpp:495:13
#12 0xbc0730 in
llvm::CodeViewYAML::toCodeViewSubsectionList(llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator,
4096ul, 4096ul>&,
llvm::ArrayRef<llvm::CodeViewYAML::YAMLDebugSubsection>,
llvm::codeview::StringsAndChecksums const&)
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLDebugSections.cpp:757:26
#13 0x69e9ff in
toDebugS(llvm::ArrayRef<llvm::CodeViewYAML::YAMLDebugSubsection>,
llvm::codeview::StringsAndChecksums const&,
llvm::BumpPtrAllocatorImpl<llvm::MallocAllocator, 4096ul, 4096ul>&)
/code/llvm-project/llvm/tools/yaml2obj/yaml2coff.cpp:178:11
#14 0x6444c3 in layoutCOFF(COFFParser&)
/code/llvm-project/llvm/tools/yaml2obj/yaml2coff.cpp:232:13
#15 0x638021 in yaml2coff(llvm::COFFYAML::Object&,
llvm::raw_ostream&)
/code/llvm-project/llvm/tools/yaml2obj/yaml2coff.cpp:605:8
#16 0x5afcd6 in convertYAML(llvm::yaml::Input&,
llvm::raw_ostream&)
/code/llvm-project/llvm/tools/yaml2obj/yaml2obj.cpp:59:16
#17 0x5a84e8 in main
/code/llvm-project/llvm/tools/yaml2obj/yaml2obj.cpp:94:13
#18 0x7fcc2e6baf44 in __libc_start_main
/build/eglibc-SvCtMH/eglibc-2.19/csu/libc-start.c:287
#19 0x532918 in _start (/code/build-llvm-msan/bin/yaml2obj+0x532918)
Uninitialized value was created by a heap allocation
#0 0x59c9a9 in operator new(unsigned long)
/code/llvm-project/compiler-rt/lib/msan/msan_new_delete.cc:45:35
#1 0x114d6d4 in __allocate
/code/build-libcxx-msan//include/c++/v1/new:226:10
#2 0x114d6d4 in allocate /code/build-libcxx-msan//include/c++/v1/memory:1747
#3 0x114d6d4 in
std::__1::shared_ptr<llvm::CodeViewYAML::detail::SymbolRecordImpl<llvm::codeview::DefRangeRegisterSym>
> std::__1::shared_ptr<llvm::CodeViewYAML::detail::SymbolRecordImpl<llvm::codeview::DefRangeRegisterSym>
>::make_shared<llvm::codeview::SymbolKind&>(llvm::codeview::SymbolKind&)
/code/build-libcxx-msan//include/c++/v1/memory:4223
#4 0xf038fa in
make_shared<llvm::CodeViewYAML::detail::SymbolRecordImpl<llvm::codeview::DefRangeRegisterSym>,
llvm::codeview::SymbolKind &>
/code/build-libcxx-msan//include/c++/v1/memory:4594:12
#5 0xf038fa in
_ZL19mapSymbolRecordImplIN4llvm12CodeViewYAML6detail16SymbolRecordImplINS0_8codeview19DefRangeRegisterSymEEEEvRNS0_4yaml2IOEPKcNS4_10SymbolKindERNS1_12SymbolRecordE
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp:566
#6 0xed804f in
llvm::yaml::MappingTraits<llvm::CodeViewYAML::SymbolRecord>::mapping(llvm::yaml::IO&,
llvm::CodeViewYAML::SymbolRecord&)
/code/llvm-project/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def:221:1
#7 0xe0e11c in void
llvm::yaml::detail::doMapping<llvm::CodeViewYAML::SymbolRecord>(llvm::yaml::IO&,
llvm::CodeViewYAML::SymbolRecord&, llvm::yaml::EmptyContext&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:800:3
#8 0xe0d34b in
_ZN4llvm4yaml7yamlizeINS_12CodeViewYAML12SymbolRecordENS0_12EmptyContextEEENSt3__19enable_ifIXsr24unvalidatedMappingTraitsIT_T0_EE5valueEvE4typeERNS0_2IOERS7_bRS8_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:899:5
#9 0xe0c69a in
_ZN4llvm4yaml7yamlizeINSt3__16vectorINS_12CodeViewYAML12SymbolRecordENS2_9allocatorIS5_EEEENS0_12EmptyContextEEENS2_9enable_ifIXsr18has_SequenceTraitsIT_EE5valueEvE4typeERNS0_2IOERSB_bRT0_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:946:9
#10 0xe0b702 in void
llvm::yaml::IO::processKey<std::__1::vector<llvm::CodeViewYAML::SymbolRecord,
std::__1::allocator<llvm::CodeViewYAML::SymbolRecord> >,
llvm::yaml::EmptyContext>(char const*,
std::__1::vector<llvm::CodeViewYAML::SymbolRecord,
std::__1::allocator<llvm::CodeViewYAML::SymbolRecord> >&, bool,
llvm::yaml::EmptyContext&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:783:7
#11 0xe0ae32 in void
llvm::yaml::IO::mapRequired<std::__1::vector<llvm::CodeViewYAML::SymbolRecord,
std::__1::allocator<llvm::CodeViewYAML::SymbolRecord> > >(char const*,
std::__1::vector<llvm::CodeViewYAML::SymbolRecord,
std::__1::allocator<llvm::CodeViewYAML::SymbolRecord> >&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:692:11
#12 0xe05806 in (anonymous
namespace)::YAMLSymbolsSubsection::map(llvm::yaml::IO&)
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLDebugSections.cpp:353:6
#13 0xbb742f in
llvm::yaml::MappingTraits<llvm::CodeViewYAML::YAMLDebugSubsection>::mapping(llvm::yaml::IO&,
llvm::CodeViewYAML::YAMLDebugSubsection&)
/code/llvm-project/llvm/lib/ObjectYAML/CodeViewYAMLDebugSections.cpp:399:26
#14 0x1a075dc in void
llvm::yaml::detail::doMapping<llvm::CodeViewYAML::YAMLDebugSubsection>(llvm::yaml::IO&,
llvm::CodeViewYAML::YAMLDebugSubsection&, llvm::yaml::EmptyContext&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:800:3
#15 0x1a0680b in
_ZN4llvm4yaml7yamlizeINS_12CodeViewYAML19YAMLDebugSubsectionENS0_12EmptyContextEEENSt3__19enable_ifIXsr24unvalidatedMappingTraitsIT_T0_EE5valueEvE4typeERNS0_2IOERS7_bRS8_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:899:5
#16 0x1a05b5a in
_ZN4llvm4yaml7yamlizeINSt3__16vectorINS_12CodeViewYAML19YAMLDebugSubsectionENS2_9allocatorIS5_EEEENS0_12EmptyContextEEENS2_9enable_ifIXsr18has_SequenceTraitsIT_EE5valueEvE4typeERNS0_2IOERSB_bRT0_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:946:9
#17 0x1a04bc2 in void
llvm::yaml::IO::processKey<std::__1::vector<llvm::CodeViewYAML::YAMLDebugSubsection,
std::__1::allocator<llvm::CodeViewYAML::YAMLDebugSubsection> >,
llvm::yaml::EmptyContext>(char const*,
std::__1::vector<llvm::CodeViewYAML::YAMLDebugSubsection,
std::__1::allocator<llvm::CodeViewYAML::YAMLDebugSubsection> >&, bool,
llvm::yaml::EmptyContext&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:783:7
#18 0x1a042fb in
_ZN4llvm4yaml2IO22mapOptionalWithContextINSt3__16vectorINS_12CodeViewYAML19YAMLDebugSubsectionENS3_9allocatorIS6_EEEENS0_12EmptyContextEEENS3_9enable_ifIXsr18has_SequenceTraitsIT_EE5valueEvE4typeEPKcRSC_RT0_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:717:11
#19 0x19cbf96 in void
llvm::yaml::IO::mapOptional<std::__1::vector<llvm::CodeViewYAML::YAMLDebugSubsection,
std::__1::allocator<llvm::CodeViewYAML::YAMLDebugSubsection> > >(char
const*, std::__1::vector<llvm::CodeViewYAML::YAMLDebugSubsection,
std::__1::allocator<llvm::CodeViewYAML::YAMLDebugSubsection> >&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:702:5
#20 0x19c89bb in
llvm::yaml::MappingTraits<llvm::COFFYAML::Section>::mapping(llvm::yaml::IO&,
llvm::COFFYAML::Section&)
/code/llvm-project/llvm/lib/ObjectYAML/COFFYAML.cpp:570:8
#21 0x1a5d9bc in void
llvm::yaml::detail::doMapping<llvm::COFFYAML::Section>(llvm::yaml::IO&,
llvm::COFFYAML::Section&, llvm::yaml::EmptyContext&)
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:800:3
#22 0x1a5cbdb in
_ZN4llvm4yaml7yamlizeINS_8COFFYAML7SectionENS0_12EmptyContextEEENSt3__19enable_ifIXsr24unvalidatedMappingTraitsIT_T0_EE5valueEvE4typeERNS0_2IOERS7_bRS8_
/code/llvm-project/llvm/include/llvm/Support/YAMLTraits.h:899:5
On Mon, Jan 8, 2018 at 11:50 AM, Zachary Turner <zturner at google.com> wrote:
> In the meantime I'm trying to reproduce this on my linux box. I have an
> idea how to track it down if I can get a repro.
>
> On Mon, Jan 8, 2018 at 11:32 AM Zachary Turner <zturner at google.com> wrote:
>>
>> We were just discussing this in another thread. And I mentioned that this
>> is the exact same bug that happened several months ago. At the time, you
>> sent me this mail:
>>
>> ---
>> This is the write to the byte before the first uninitialized.
>>
>> #0 __memmove_ssse3_back () at
>> ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2720
>> #1 0x000000000044bb4c in __msan_memcpy () at
>> /code/llvm/projects/compiler-rt/lib/msan/msan_interceptors.cc:1455
>> #2 0x00000000007a3999 in writeBytes () at
>> /code/llvm/include/llvm/Support/BinaryByteStream.h:121
>> #3 writeBytes () at /code/llvm/lib/Support/BinaryStreamRef.cpp:59
>> #4 0x00000000007a2f91 in writeBytes () at
>> /code/llvm/lib/Support/BinaryStreamRef.cpp:129
>> #5 0x00000000007a46fe in writeBytes () at
>> /code/llvm/lib/Support/BinaryStreamWriter.cpp:29
>> #6 0x00000000008de26e in commit () at
>> /code/llvm/lib/DebugInfo/CodeView/DebugSymbolsSubsection.cpp:25
>> #7 0x000000000051bb9e in commit () at
>> /code/llvm/lib/DebugInfo/CodeView/DebugSubsectionRecord.cpp:77
>> #8 0x00000000004a50e1 in toDebugS () at
>> /code/llvm/tools/yaml2obj/yaml2coff.cpp:193
>> #9 layoutCOFF () at /code/llvm/tools/yaml2obj/yaml2coff.cpp:232
>> #10 yaml2coff () at /code/llvm/tools/yaml2obj/yaml2coff.cpp:602
>> #11 0x000000000049b3e7 in convertYAML () at
>> /code/llvm/tools/yaml2obj/yaml2obj.cpp:59
>> #12 main () at /code/llvm/tools/yaml2obj/yaml2obj.cpp:94
>>
>> There are no writes to the uninitialized byte, accoring to gdb.
>> ---
>>
>> I don't know how you came up with this stack trace, but if it's not too
>> much work, would you be able to generate a similar stack trace for this one?
>>
>> On Mon, Jan 8, 2018 at 11:24 AM Evgenii Stepanov
>> <eugeni.stepanov at gmail.com> wrote:
>>>
>>> Hi,
>>>
>>> MSan is not happy with this change:
>>>
>>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/12211
>>>
>>> Uninitialized bytes in __interceptor_write at offset 316 inside
>>> [0x720000085000, 1998)
>>> ==5173==WARNING: MemorySanitizer: use-of-uninitialized-value
>>> #0 0x6cf04d in llvm::raw_fd_ostream::write_impl(char const*,
>>> unsigned long)
>>> /b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/raw_ostream.cpp:600:19
>>> #1 0x4aaa8b in flush
>>>
>>> /b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/raw_ostream.h:142:7
>>> #2 0x4aaa8b in main
>>> /b/sanitizer-x86_64-linux-fast/build/llvm/tools/yaml2obj/yaml2obj.cpp:98
>>> #3 0x7f5d8f8b92b0 in __libc_start_main
>>> (/lib/x86_64-linux-gnu/libc.so.6+0x202b0)
>>> #4 0x43cd19 in _start
>>>
>>> (/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/yaml2obj+0x43cd19)
>>>
>>>
>>> On Fri, Jan 5, 2018 at 11:12 AM, Zachary Turner via llvm-commits
>>> <llvm-commits at lists.llvm.org> wrote:
>>> > Author: zturner
>>> > Date: Fri Jan 5 11:12:40 2018
>>> > New Revision: 321883
>>> >
>>> > URL: http://llvm.org/viewvc/llvm-project?rev=321883&view=rev
>>> > Log:
>>> > [PDB] Correctly link S_FILESTATIC records.
>>> >
>>> > This is not a record type that clang currently generates,
>>> > but it is a record that is encountered in object files generated
>>> > by cl. This record is unusual in that it refers directly to
>>> > the string table instead of indirectly to the string table via
>>> > the FileChecksums table. Because of this, it was previously
>>> > overlooked and we weren't remapping the string indices at all.
>>> > This would lead to crashes in MSVC when trying to display a
>>> > variable whose debug info involved an S_FILESTATIC.
>>> >
>>> > Original bug report by Alexander Ganea
>>> >
>>> > Differential Revision: https://reviews.llvm.org/D41718
>>> >
>>> > Modified:
>>> > llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp
>>> > llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h
>>> > llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
>>> > llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h
>>> >
>>> > Modified: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp?rev=321883&r1=321882&r2=321883&view=diff
>>> >
>>> > ==============================================================================
>>> > --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp (original)
>>> > +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp Fri Jan 5
>>> > 11:12:40 2018
>>> > @@ -848,14 +848,7 @@ Error DumpOutputStyle::dumpXme() {
>>> > return Error::success();
>>> > }
>>> >
>>> > -Error DumpOutputStyle::dumpStringTable() {
>>> > - printHeader(P, "String Table");
>>> > -
>>> > - if (File.isObj()) {
>>> > - P.formatLine("Dumping string table is not supported for object
>>> > files");
>>> > - return Error::success();
>>> > - }
>>> > -
>>> > +Error DumpOutputStyle::dumpStringTableFromPdb() {
>>> > AutoIndent Indent(P);
>>> > auto IS = getPdb().getStringTable();
>>> > if (!IS) {
>>> > @@ -895,6 +888,36 @@ Error DumpOutputStyle::dumpStringTable()
>>> > return Error::success();
>>> > }
>>> >
>>> > +Error DumpOutputStyle::dumpStringTableFromObj() {
>>> > + iterateModuleSubsections<DebugStringTableSubsectionRef>(
>>> > + File, PrintScope{P, 4},
>>> > + [&](uint32_t Modi, const SymbolGroup &Strings,
>>> > + DebugStringTableSubsectionRef &Strings2) {
>>> > + BinaryStreamRef StringTableBuffer = Strings2.getBuffer();
>>> > + BinaryStreamReader Reader(StringTableBuffer);
>>> > + while (Reader.bytesRemaining() > 0) {
>>> > + StringRef Str;
>>> > + uint32_t Offset = Reader.getOffset();
>>> > + cantFail(Reader.readCString(Str));
>>> > + if (Str.empty())
>>> > + continue;
>>> > +
>>> > + P.formatLine("{0} | {1}", fmt_align(Offset,
>>> > AlignStyle::Right, 4),
>>> > + Str);
>>> > + }
>>> > + });
>>> > + return Error::success();
>>> > +}
>>> > +
>>> > +Error DumpOutputStyle::dumpStringTable() {
>>> > + printHeader(P, "String Table");
>>> > +
>>> > + if (File.isPdb())
>>> > + return dumpStringTableFromPdb();
>>> > +
>>> > + return dumpStringTableFromObj();
>>> > +}
>>> > +
>>> > static void buildDepSet(LazyRandomTypeCollection &Types,
>>> > ArrayRef<TypeIndex> Indices,
>>> > std::map<TypeIndex, CVType> &DepSet) {
>>> > @@ -1124,6 +1147,7 @@ Error DumpOutputStyle::dumpModuleSymsFor
>>> > File, PrintScope{P, 2},
>>> > [&](uint32_t Modi, const SymbolGroup &Strings,
>>> > DebugSymbolsSubsectionRef &Symbols) {
>>> > + Dumper.setSymbolGroup(&Strings);
>>> > for (auto Symbol : Symbols) {
>>> > if (auto EC = Visitor.visitSymbolRecord(Symbol)) {
>>> > SymbolError = llvm::make_unique<Error>(std::move(EC));
>>> > @@ -1165,8 +1189,8 @@ Error DumpOutputStyle::dumpModuleSymsFor
>>> >
>>> > SymbolVisitorCallbackPipeline Pipeline;
>>> > SymbolDeserializer Deserializer(nullptr,
>>> > CodeViewContainer::Pdb);
>>> > - MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes,
>>> > Ids,
>>> > - Types);
>>> > + MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes,
>>> > Strings,
>>> > + Ids, Types);
>>> >
>>> > Pipeline.addCallbackToPipeline(Deserializer);
>>> > Pipeline.addCallbackToPipeline(Dumper);
>>> >
>>> > Modified: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h?rev=321883&r1=321882&r2=321883&view=diff
>>> >
>>> > ==============================================================================
>>> > --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h (original)
>>> > +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h Fri Jan 5 11:12:40
>>> > 2018
>>> > @@ -75,6 +75,8 @@ private:
>>> > Error dumpSymbolStats();
>>> > Error dumpUdtStats();
>>> > Error dumpStringTable();
>>> > + Error dumpStringTableFromPdb();
>>> > + Error dumpStringTableFromObj();
>>> > Error dumpLines();
>>> > Error dumpInlineeLines();
>>> > Error dumpXmi();
>>> >
>>> > Modified: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp?rev=321883&r1=321882&r2=321883&view=diff
>>> >
>>> > ==============================================================================
>>> > --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp (original)
>>> > +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp Fri Jan 5
>>> > 11:12:40 2018
>>> > @@ -10,6 +10,7 @@
>>> > #include "MinimalSymbolDumper.h"
>>> >
>>> > #include "FormatUtil.h"
>>> > +#include "InputFile.h"
>>> > #include "LinePrinter.h"
>>> >
>>> > #include "llvm/DebugInfo/CodeView/CVRecord.h"
>>> > @@ -18,6 +19,7 @@
>>> > #include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"
>>> > #include "llvm/DebugInfo/CodeView/SymbolRecord.h"
>>> > #include "llvm/DebugInfo/CodeView/TypeRecord.h"
>>> > +#include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"
>>> > #include "llvm/Support/FormatVariadic.h"
>>> >
>>> > using namespace llvm;
>>> > @@ -450,6 +452,17 @@ Error MinimalSymbolDumper::visitKnownRec
>>> > Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
>>> > FileStaticSym &FS) {
>>> > P.format(" `{0}`", FS.Name);
>>> > AutoIndent Indent(P, 7);
>>> > + if (SymGroup) {
>>> > + Expected<StringRef> FileName =
>>> > + SymGroup->getNameFromStringTable(FS.ModFilenameOffset);
>>> > + if (FileName) {
>>> > + P.formatLine("type = {0}, file name = {1} ({2}), flags = {3}",
>>> > + typeIndex(FS.Index), FS.ModFilenameOffset,
>>> > *FileName,
>>> > + formatLocalSymFlags(P.getIndentLevel() + 9,
>>> > FS.Flags));
>>> > + }
>>> > + return Error::success();
>>> > + }
>>> > +
>>> > P.formatLine("type = {0}, file name offset = {1}, flags = {2}",
>>> > typeIndex(FS.Index), FS.ModFilenameOffset,
>>> > formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags));
>>> >
>>> > Modified: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h
>>> > URL:
>>> > http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h?rev=321883&r1=321882&r2=321883&view=diff
>>> >
>>> > ==============================================================================
>>> > --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h (original)
>>> > +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h Fri Jan 5
>>> > 11:12:40 2018
>>> > @@ -19,6 +19,7 @@ class LazyRandomTypeCollection;
>>> >
>>> > namespace pdb {
>>> > class LinePrinter;
>>> > +class SymbolGroup;
>>> >
>>> > class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks {
>>> > public:
>>> > @@ -26,11 +27,19 @@ public:
>>> > codeview::LazyRandomTypeCollection &Ids,
>>> > codeview::LazyRandomTypeCollection &Types)
>>> > : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {}
>>> > + MinimalSymbolDumper(LinePrinter &P, bool RecordBytes,
>>> > + const SymbolGroup &SymGroup,
>>> > + codeview::LazyRandomTypeCollection &Ids,
>>> > + codeview::LazyRandomTypeCollection &Types)
>>> > + : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids),
>>> > + Types(Types) {}
>>> >
>>> > Error visitSymbolBegin(codeview::CVSymbol &Record) override;
>>> > Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset)
>>> > override;
>>> > Error visitSymbolEnd(codeview::CVSymbol &Record) override;
>>> >
>>> > + void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; }
>>> > +
>>> > #define SYMBOL_RECORD(EnumName, EnumVal, Name)
>>> > \
>>> > virtual Error visitKnownRecord(codeview::CVSymbol &CVR,
>>> > \
>>> > codeview::Name &Record) override;
>>> > @@ -45,6 +54,7 @@ private:
>>> >
>>> > LinePrinter &P;
>>> > bool RecordBytes;
>>> > + const SymbolGroup *SymGroup = nullptr;
>>> > codeview::LazyRandomTypeCollection &Ids;
>>> > codeview::LazyRandomTypeCollection &Types;
>>> > };
>>> >
>>> >
>>> > _______________________________________________
>>> > llvm-commits mailing list
>>> > llvm-commits at lists.llvm.org
>>> > http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list