<div dir="ltr">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.</div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jan 8, 2018 at 11:32 AM Zachary Turner <<a href="mailto:zturner@google.com">zturner@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">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:<div><br></div><div>---</div><div><div style="color:rgb(33,33,33);font-size:13px">This is the write to the byte before the first uninitialized.</div><div style="color:rgb(33,33,33);font-size:13px"><br></div><div style="color:rgb(33,33,33);font-size:13px">#0  __memmove_ssse3_back () at ../sysdeps/x86_64/multiarch/memcpy-ssse3-back.S:2720</div><div style="color:rgb(33,33,33);font-size:13px">#1  0x000000000044bb4c in __msan_memcpy () at /code/llvm/projects/compiler-rt/lib/msan/msan_interceptors.cc:1455</div><div style="color:rgb(33,33,33);font-size:13px">#2  0x00000000007a3999 in writeBytes () at /code/llvm/include/llvm/Support/BinaryByteStream.h:121</div><div style="color:rgb(33,33,33);font-size:13px">#3  writeBytes () at /code/llvm/lib/Support/BinaryStreamRef.cpp:59</div><div style="color:rgb(33,33,33);font-size:13px">#4  0x00000000007a2f91 in writeBytes () at /code/llvm/lib/Support/BinaryStreamRef.cpp:129</div><div style="color:rgb(33,33,33);font-size:13px">#5  0x00000000007a46fe in writeBytes () at /code/llvm/lib/Support/BinaryStreamWriter.cpp:29</div><div style="color:rgb(33,33,33);font-size:13px">#6  0x00000000008de26e in commit () at /code/llvm/lib/DebugInfo/CodeView/DebugSymbolsSubsection.cpp:25</div><div style="color:rgb(33,33,33);font-size:13px">#7  0x000000000051bb9e in commit () at /code/llvm/lib/DebugInfo/CodeView/DebugSubsectionRecord.cpp:77</div><div style="color:rgb(33,33,33);font-size:13px">#8  0x00000000004a50e1 in toDebugS () at /code/llvm/tools/yaml2obj/yaml2coff.cpp:193</div><div style="color:rgb(33,33,33);font-size:13px">#9  layoutCOFF () at /code/llvm/tools/yaml2obj/yaml2coff.cpp:232</div><div style="color:rgb(33,33,33);font-size:13px">#10 yaml2coff () at /code/llvm/tools/yaml2obj/yaml2coff.cpp:602</div><div style="color:rgb(33,33,33);font-size:13px">#11 0x000000000049b3e7 in convertYAML () at /code/llvm/tools/yaml2obj/yaml2obj.cpp:59</div><div style="color:rgb(33,33,33);font-size:13px">#12 main () at /code/llvm/tools/yaml2obj/yaml2obj.cpp:94</div><div style="color:rgb(33,33,33);font-size:13px"><br></div><div style="color:rgb(33,33,33);font-size:13px">There are no writes to the uninitialized byte, accoring to gdb.</div></div><div>---</div><div><br></div><div>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?</div></div><div dir="ltr"><div><br><div class="gmail_quote"><div dir="ltr">On Mon, Jan 8, 2018 at 11:24 AM Evgenii Stepanov <<a href="mailto:eugeni.stepanov@gmail.com" target="_blank">eugeni.stepanov@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
MSan is not happy with this change:<br>
<a href="http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/12211" rel="noreferrer" target="_blank">http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/12211</a><br>
<br>
Uninitialized bytes in __interceptor_write at offset 316 inside<br>
[0x720000085000, 1998)<br>
==5173==WARNING: MemorySanitizer: use-of-uninitialized-value<br>
    #0 0x6cf04d in llvm::raw_fd_ostream::write_impl(char const*,<br>
unsigned long) /b/sanitizer-x86_64-linux-fast/build/llvm/lib/Support/raw_ostream.cpp:600:19<br>
    #1 0x4aaa8b in flush<br>
/b/sanitizer-x86_64-linux-fast/build/llvm/include/llvm/Support/raw_ostream.h:142:7<br>
    #2 0x4aaa8b in main<br>
/b/sanitizer-x86_64-linux-fast/build/llvm/tools/yaml2obj/yaml2obj.cpp:98<br>
    #3 0x7f5d8f8b92b0 in __libc_start_main<br>
(/lib/x86_64-linux-gnu/libc.so.6+0x202b0)<br>
    #4 0x43cd19 in _start<br>
(/b/sanitizer-x86_64-linux-fast/build/llvm_build_msan/bin/yaml2obj+0x43cd19)<br>
<br>
<br>
On Fri, Jan 5, 2018 at 11:12 AM, Zachary Turner via llvm-commits<br>
<<a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a>> wrote:<br>
> Author: zturner<br>
> Date: Fri Jan  5 11:12:40 2018<br>
> New Revision: 321883<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=321883&view=rev" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=321883&view=rev</a><br>
> Log:<br>
> [PDB] Correctly link S_FILESTATIC records.<br>
><br>
> This is not a record type that clang currently generates,<br>
> but it is a record that is encountered in object files generated<br>
> by cl.  This record is unusual in that it refers directly to<br>
> the string table instead of indirectly to the string table via<br>
> the FileChecksums table.  Because of this, it was previously<br>
> overlooked and we weren't remapping the string indices at all.<br>
> This would lead to crashes in MSVC when trying to display a<br>
> variable whose debug info involved an S_FILESTATIC.<br>
><br>
> Original bug report by Alexander Ganea<br>
><br>
> Differential Revision: <a href="https://reviews.llvm.org/D41718" rel="noreferrer" target="_blank">https://reviews.llvm.org/D41718</a><br>
><br>
> Modified:<br>
>     llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp<br>
>     llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h<br>
>     llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp<br>
>     llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h<br>
><br>
> Modified: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp?rev=321883&r1=321882&r2=321883&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp?rev=321883&r1=321882&r2=321883&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.cpp Fri Jan  5 11:12:40 2018<br>
> @@ -848,14 +848,7 @@ Error DumpOutputStyle::dumpXme() {<br>
>    return Error::success();<br>
>  }<br>
><br>
> -Error DumpOutputStyle::dumpStringTable() {<br>
> -  printHeader(P, "String Table");<br>
> -<br>
> -  if (File.isObj()) {<br>
> -    P.formatLine("Dumping string table is not supported for object files");<br>
> -    return Error::success();<br>
> -  }<br>
> -<br>
> +Error DumpOutputStyle::dumpStringTableFromPdb() {<br>
>    AutoIndent Indent(P);<br>
>    auto IS = getPdb().getStringTable();<br>
>    if (!IS) {<br>
> @@ -895,6 +888,36 @@ Error DumpOutputStyle::dumpStringTable()<br>
>    return Error::success();<br>
>  }<br>
><br>
> +Error DumpOutputStyle::dumpStringTableFromObj() {<br>
> +  iterateModuleSubsections<DebugStringTableSubsectionRef>(<br>
> +      File, PrintScope{P, 4},<br>
> +      [&](uint32_t Modi, const SymbolGroup &Strings,<br>
> +          DebugStringTableSubsectionRef &Strings2) {<br>
> +        BinaryStreamRef StringTableBuffer = Strings2.getBuffer();<br>
> +        BinaryStreamReader Reader(StringTableBuffer);<br>
> +        while (Reader.bytesRemaining() > 0) {<br>
> +          StringRef Str;<br>
> +          uint32_t Offset = Reader.getOffset();<br>
> +          cantFail(Reader.readCString(Str));<br>
> +          if (Str.empty())<br>
> +            continue;<br>
> +<br>
> +          P.formatLine("{0} | {1}", fmt_align(Offset, AlignStyle::Right, 4),<br>
> +                       Str);<br>
> +        }<br>
> +      });<br>
> +  return Error::success();<br>
> +}<br>
> +<br>
> +Error DumpOutputStyle::dumpStringTable() {<br>
> +  printHeader(P, "String Table");<br>
> +<br>
> +  if (File.isPdb())<br>
> +    return dumpStringTableFromPdb();<br>
> +<br>
> +  return dumpStringTableFromObj();<br>
> +}<br>
> +<br>
>  static void buildDepSet(LazyRandomTypeCollection &Types,<br>
>                          ArrayRef<TypeIndex> Indices,<br>
>                          std::map<TypeIndex, CVType> &DepSet) {<br>
> @@ -1124,6 +1147,7 @@ Error DumpOutputStyle::dumpModuleSymsFor<br>
>        File, PrintScope{P, 2},<br>
>        [&](uint32_t Modi, const SymbolGroup &Strings,<br>
>            DebugSymbolsSubsectionRef &Symbols) {<br>
> +        Dumper.setSymbolGroup(&Strings);<br>
>          for (auto Symbol : Symbols) {<br>
>            if (auto EC = Visitor.visitSymbolRecord(Symbol)) {<br>
>              SymbolError = llvm::make_unique<Error>(std::move(EC));<br>
> @@ -1165,8 +1189,8 @@ Error DumpOutputStyle::dumpModuleSymsFor<br>
><br>
>          SymbolVisitorCallbackPipeline Pipeline;<br>
>          SymbolDeserializer Deserializer(nullptr, CodeViewContainer::Pdb);<br>
> -        MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, Ids,<br>
> -                                   Types);<br>
> +        MinimalSymbolDumper Dumper(P, opts::dump::DumpSymRecordBytes, Strings,<br>
> +                                   Ids, Types);<br>
><br>
>          Pipeline.addCallbackToPipeline(Deserializer);<br>
>          Pipeline.addCallbackToPipeline(Dumper);<br>
><br>
> Modified: llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h?rev=321883&r1=321882&r2=321883&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h?rev=321883&r1=321882&r2=321883&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h (original)<br>
> +++ llvm/trunk/tools/llvm-pdbutil/DumpOutputStyle.h Fri Jan  5 11:12:40 2018<br>
> @@ -75,6 +75,8 @@ private:<br>
>    Error dumpSymbolStats();<br>
>    Error dumpUdtStats();<br>
>    Error dumpStringTable();<br>
> +  Error dumpStringTableFromPdb();<br>
> +  Error dumpStringTableFromObj();<br>
>    Error dumpLines();<br>
>    Error dumpInlineeLines();<br>
>    Error dumpXmi();<br>
><br>
> Modified: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp?rev=321883&r1=321882&r2=321883&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp?rev=321883&r1=321882&r2=321883&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.cpp Fri Jan  5 11:12:40 2018<br>
> @@ -10,6 +10,7 @@<br>
>  #include "MinimalSymbolDumper.h"<br>
><br>
>  #include "FormatUtil.h"<br>
> +#include "InputFile.h"<br>
>  #include "LinePrinter.h"<br>
><br>
>  #include "llvm/DebugInfo/CodeView/CVRecord.h"<br>
> @@ -18,6 +19,7 @@<br>
>  #include "llvm/DebugInfo/CodeView/LazyRandomTypeCollection.h"<br>
>  #include "llvm/DebugInfo/CodeView/SymbolRecord.h"<br>
>  #include "llvm/DebugInfo/CodeView/TypeRecord.h"<br>
> +#include "llvm/DebugInfo/PDB/Native/PDBStringTable.h"<br>
>  #include "llvm/Support/FormatVariadic.h"<br>
><br>
>  using namespace llvm;<br>
> @@ -450,6 +452,17 @@ Error MinimalSymbolDumper::visitKnownRec<br>
>  Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR, FileStaticSym &FS) {<br>
>    P.format(" `{0}`", FS.Name);<br>
>    AutoIndent Indent(P, 7);<br>
> +  if (SymGroup) {<br>
> +    Expected<StringRef> FileName =<br>
> +        SymGroup->getNameFromStringTable(FS.ModFilenameOffset);<br>
> +    if (FileName) {<br>
> +      P.formatLine("type = {0}, file name = {1} ({2}), flags = {3}",<br>
> +                   typeIndex(FS.Index), FS.ModFilenameOffset, *FileName,<br>
> +                   formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags));<br>
> +    }<br>
> +    return Error::success();<br>
> +  }<br>
> +<br>
>    P.formatLine("type = {0}, file name offset = {1}, flags = {2}",<br>
>                 typeIndex(FS.Index), FS.ModFilenameOffset,<br>
>                 formatLocalSymFlags(P.getIndentLevel() + 9, FS.Flags));<br>
><br>
> Modified: llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h?rev=321883&r1=321882&r2=321883&view=diff" rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h?rev=321883&r1=321882&r2=321883&view=diff</a><br>
> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h (original)<br>
> +++ llvm/trunk/tools/llvm-pdbutil/MinimalSymbolDumper.h Fri Jan  5 11:12:40 2018<br>
> @@ -19,6 +19,7 @@ class LazyRandomTypeCollection;<br>
><br>
>  namespace pdb {<br>
>  class LinePrinter;<br>
> +class SymbolGroup;<br>
><br>
>  class MinimalSymbolDumper : public codeview::SymbolVisitorCallbacks {<br>
>  public:<br>
> @@ -26,11 +27,19 @@ public:<br>
>                        codeview::LazyRandomTypeCollection &Ids,<br>
>                        codeview::LazyRandomTypeCollection &Types)<br>
>        : P(P), RecordBytes(RecordBytes), Ids(Ids), Types(Types) {}<br>
> +  MinimalSymbolDumper(LinePrinter &P, bool RecordBytes,<br>
> +                      const SymbolGroup &SymGroup,<br>
> +                      codeview::LazyRandomTypeCollection &Ids,<br>
> +                      codeview::LazyRandomTypeCollection &Types)<br>
> +      : P(P), RecordBytes(RecordBytes), SymGroup(&SymGroup), Ids(Ids),<br>
> +        Types(Types) {}<br>
><br>
>    Error visitSymbolBegin(codeview::CVSymbol &Record) override;<br>
>    Error visitSymbolBegin(codeview::CVSymbol &Record, uint32_t Offset) override;<br>
>    Error visitSymbolEnd(codeview::CVSymbol &Record) override;<br>
><br>
> +  void setSymbolGroup(const SymbolGroup *Group) { SymGroup = Group; }<br>
> +<br>
>  #define SYMBOL_RECORD(EnumName, EnumVal, Name)                                 \<br>
>    virtual Error visitKnownRecord(codeview::CVSymbol &CVR,                      \<br>
>                                   codeview::Name &Record) override;<br>
> @@ -45,6 +54,7 @@ private:<br>
><br>
>    LinePrinter &P;<br>
>    bool RecordBytes;<br>
> +  const SymbolGroup *SymGroup = nullptr;<br>
>    codeview::LazyRandomTypeCollection &Ids;<br>
>    codeview::LazyRandomTypeCollection &Types;<br>
>  };<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@lists.llvm.org" target="_blank">llvm-commits@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div></div></blockquote></div>