<div dir="ltr"><br><br><div class="gmail_quote"><div dir="ltr">On Mon, Feb 27, 2017 at 10:30 AM Victor Leschuk <<a href="mailto:vleschuk@accesssoftek.com">vleschuk@accesssoftek.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
  
    
  
  <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
    <p class="gmail_msg">I think flag_present and implicit_const attributes shouldn't be
      treated as similar here: flag_present attributes physically do
      have a record in .debug_info section,</p></div></blockquote><div><br>I think one of us is confused, because my understanding is that flag_present attributes do not have any bit/bytes in the debug_info representation.<br><br>To take the same example as before and look at the assembly:<br><br>this is the debug_info assembly for that subprogram:<br><font face="monospace"><br></font><div><font face="monospace">        .byte   2                       # Abbrev [2] 0x2a:0x19 DW_TAG_subprogram</font></div><div><font face="monospace">        .quad   .Lfunc_begin0           # DW_AT_low_pc</font></div><div><font face="monospace">        .long   .Lfunc_end0-.Lfunc_begin0 # DW_AT_high_pc</font></div><div><font face="monospace">        .byte   1                       # DW_AT_frame_base</font></div><div><font face="monospace">        .byte   86</font></div><div><font face="monospace">        .long   .Linfo_string3          # DW_AT_linkage_name</font></div><div><font face="monospace">        .long   .Linfo_string4          # DW_AT_name</font></div><div><font face="monospace">        .byte   1                       # DW_AT_decl_file</font></div><div><font face="monospace">        .byte   1                       # DW_AT_decl_line</font></div><div><font face="monospace">                                        # DW_AT_external</font></div><div><font face="monospace">        .byte   0                       # End Of Children Mark</font></div><br>Note that no bytes were produced for the DW_AT_external (using DW_FORM_flag_present in the abbrev) attribute.<br><br>From the DWARF4 spec:<br><br>"A flag is represented explicitly as a single byte of data (DW_FORM_flag) or implicitly
(DW_FORM_flag_present). In the first case, if the flag has value zero, it indicates the
absence of the attribute; if the flag has a non-zero value, it indicates the presence of the
attribute. In the second case, the attribute is implicitly indicated as present, and no value is
encoded in the debugging information entry itself."<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><p class="gmail_msg"> while implicit_const
      attributes are not physically mentioned there.  Printing
      implicit_const values when dumping .debug_info can be more
      convenient for reader but it will actually violate the definition
      of dump. When dumping section contents we expect to see what is
      actually there, don't we?<br class="gmail_msg">
    </p></div><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
    <br class="gmail_msg">
    <div class="m_-7804286437102967308moz-cite-prefix gmail_msg">On 02/27/2017 09:04 PM, David Blaikie
      wrote:<br class="gmail_msg">
    </div>
    <blockquote type="cite" class="gmail_msg">
      
      <div dir="ltr" class="gmail_msg"><br class="gmail_msg">
        <br class="gmail_msg">
        <div class="gmail_quote gmail_msg">
          <div dir="ltr" class="gmail_msg">On Mon, Feb 27, 2017 at 10:00 AM Victor Leschuk
            <<a href="mailto:vleschuk@accesssoftek.com" class="gmail_msg" target="_blank">vleschuk@accesssoftek.com</a>>
            wrote:<br class="gmail_msg">
          </div>
          <blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
              <p class="gmail_msg"><br class="gmail_msg">
              </p>
              <br class="gmail_msg">
              <div class="m_-7804286437102967308m_-7636712434836838175moz-cite-prefix gmail_msg">On 02/27/2017 08:04 PM, David Blaikie wrote:<br class="gmail_msg">
              </div>
              <blockquote type="cite" class="gmail_msg">
                <div dir="ltr" class="gmail_msg">Skipping these values
                  doesn't seem to be correct - in the case of
                  flag_present, I think the value is still rendered in
                  the dump, is it not?</div>
              </blockquote>
            </div>
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"> Do
              you mean that the value is somehow mentioned in
              .debug_info section? It is not.</div>
          </blockquote>
          <div class="gmail_msg"><br class="gmail_msg">
            Looks to me like it is:<br class="gmail_msg">
            <br class="gmail_msg">
            dumping debug info for this code: void f1() { }<br class="gmail_msg">
            <br class="gmail_msg">
            produces this:<br class="gmail_msg">
            <br class="gmail_msg">
            <font face="monospace" class="gmail_msg">  .debug_abbrev contents:<br class="gmail_msg">
                ...<br class="gmail_msg">
            </font>
            <div class="gmail_msg"><font face="monospace" class="gmail_msg">  [2] DW_TAG_subprogram  
                DW_CHILDREN_no</font></div>
            <div class="gmail_msg"><font face="monospace" class="gmail_msg">          ...</font></div>
            <div class="gmail_msg"><font face="monospace" class="gmail_msg">          DW_AT_external
                 DW_FORM_flag_present<br class="gmail_msg">
                <br class="gmail_msg">
                  .debug_info contents:<br class="gmail_msg">
                  ...<br class="gmail_msg">
                  0x0000002a:   DW_TAG_subprogram [2]<br class="gmail_msg">
                                  ...<br class="gmail_msg">
                                  DW_AT_external [DW_FORM_flag_present]
                (true)</font></div>
            <br class="gmail_msg">
          </div>
          <div class="gmail_msg">I would expect similar behavior for const_value - that
            the attribute and its constant value is printed in the
            debug_info dump.<br class="gmail_msg">
            <br class="gmail_msg">
          </div>
          <blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><br class="gmail_msg">
              <blockquote type="cite" class="gmail_msg">
                <div dir="ltr" class="gmail_msg"> I would expect the
                  same for implicit_const values. (also, this needs test
                  coverage either way)</div>
              </blockquote>
            </div>
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
              Yes, you are correct. I will create tests when we decide
              what's right behavior here. <br class="gmail_msg">
              <br class="gmail_msg">
              I think skipping is correct here: we are dumping
              .debug_info data based on attributes stored in AbbrevDecl,
              this code was based on assumption that every attribute has
              representation in .debug_info section, that was before
              implicit_const form was introduced.</div>
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><br class="gmail_msg">
              <blockquote type="cite" class="gmail_msg"><br class="gmail_msg">
                <div class="gmail_quote gmail_msg">
                  <div dir="ltr" class="gmail_msg">On Sat, Feb 25, 2017
                    at 5:27 AM Victor Leschuk via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a>>
                    wrote:<br class="gmail_msg">
                  </div>
                  <blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: vleschuk<br class="gmail_msg">
                    Date: Sat Feb 25 07:15:57 2017<br class="gmail_msg">
                    New Revision: 296253<br class="gmail_msg">
                    <br class="gmail_msg">
                    URL: <a href="http://llvm.org/viewvc/llvm-project?rev=296253&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=296253&view=rev</a><br class="gmail_msg">
                    Log:<br class="gmail_msg">
                    [DebugInfo] Skip implicit_const attributes when
                    dumping .debug_info. NFC.<br class="gmail_msg">
                    <br class="gmail_msg">
                    When dumping .debug_info section we loop through all
                    attributes mentioned in<br class="gmail_msg">
                    .debug_abbrev section and dump values using
                    DWARFFormValue::extractValue().<br class="gmail_msg">
                    We need to skip implicit_const attributes here as
                    their values are not<br class="gmail_msg">
                    really located in .debug_info but directly in
                    .debug_abbrev. This patch fixes<br class="gmail_msg">
                    triggered assert() in DWARFFormValue::extractValue()
                    caused by trying to<br class="gmail_msg">
                    access implicit_const values from .debug_info.<br class="gmail_msg">
                    <br class="gmail_msg">
                    Modified:<br class="gmail_msg">
                        llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp<br class="gmail_msg">
                    <br class="gmail_msg">
                    Modified:
                    llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp<br class="gmail_msg">
                    URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp?rev=296253&r1=296252&r2=296253&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp?rev=296253&r1=296252&r2=296253&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
                    --- llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp
                    (original)<br class="gmail_msg">
                    +++ llvm/trunk/lib/DebugInfo/DWARF/DWARFDie.cpp Sat
                    Feb 25 07:15:57 2017<br class="gmail_msg">
                    @@ -329,6 +329,12 @@ void DWARFDie::dump(raw_ostream
                    &OS, uns<br class="gmail_msg">
                    <br class="gmail_msg">
                             // Dump all data in the DIE for the
                    attributes.<br class="gmail_msg">
                             for (const auto &AttrSpec :
                    AbbrevDecl->attributes()) {<br class="gmail_msg">
                    +          if (AttrSpec.Form ==
                    DW_FORM_implicit_const) {<br class="gmail_msg">
                    +            // We are dumping .debug_info section ,<br class="gmail_msg">
                    +            // implicit_const attribute values are
                    not really stored here,<br class="gmail_msg">
                    +            // but in .debug_abbrev section. So we
                    just skip such attrs.<br class="gmail_msg">
                    +            continue;<br class="gmail_msg">
                    +          }<br class="gmail_msg">
                               dumpAttribute(OS, *this, &offset,
                    AttrSpec.Attr, AttrSpec.Form,<br class="gmail_msg">
                                             Indent);<br class="gmail_msg">
                             }<br class="gmail_msg">
                    <br class="gmail_msg">
                    <br class="gmail_msg">
                    _______________________________________________<br class="gmail_msg">
                    llvm-commits mailing list<br class="gmail_msg">
                    <a href="mailto:llvm-commits@lists.llvm.org" class="gmail_msg" target="_blank">llvm-commits@lists.llvm.org</a><br class="gmail_msg">
                    <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="gmail_msg">
                  </blockquote>
                </div>
              </blockquote>
              <br class="gmail_msg">
            </div>
            <div bgcolor="#FFFFFF" text="#000000" class="gmail_msg">
              <pre class="m_-7804286437102967308m_-7636712434836838175moz-signature gmail_msg" cols="72">-- 
Best Regards,
Victor</pre>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
    <br class="gmail_msg">
    </div><div bgcolor="#FFFFFF" text="#000000" class="gmail_msg"><pre class="m_-7804286437102967308moz-signature gmail_msg" cols="72">-- 
Best Regards,
Victor</pre>
  </div></blockquote></div></div>