[llvm] r321883 - [PDB] Correctly link S_FILESTATIC records.
Zachary Turner via llvm-commits
llvm-commits at lists.llvm.org
Mon Jan 8 13:42:44 PST 2018
I'm hoping this is fixed in r322029
On Mon, Jan 8, 2018 at 12:53 PM Zachary Turner <zturner at google.com> wrote:
> Yes, I know what the problem is. I should have a fix soon
>
> On Mon, Jan 8, 2018 at 12:16 PM Zachary Turner <zturner at google.com> wrote:
>
>> Thanks! That gives me a hint. Will confirm after lunch
>> On Mon, Jan 8, 2018 at 12:15 PM Evgenii Stepanov <
>> eugeni.stepanov at gmail.com> wrote:
>>
>>> 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
>>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180108/353da066/attachment.html>
More information about the llvm-commits
mailing list