<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <p><br>
    </p>
    <div class="moz-cite-prefix">24.09.2019 3:05, David Blaikie пишет:<br>
    </div>
    <blockquote type="cite"
cite="mid:CAENS6Eu1ekinfJbMYn9_-QZoqETizY667Hp9=_ezJfbJxhvUYw@mail.gmail.com">
      <meta http-equiv="content-type" content="text/html; charset=UTF-8">
      <div dir="ltr">
        <div class="gmail_quote">
          <div dir="ltr" class="gmail_attr">On Fri, Sep 20, 2019 at 1:41
            PM Alexey Lapshin <<a href="mailto:a.v.lapshin@mail.ru"
              target="_blank" moz-do-not-send="true">a.v.lapshin@mail.ru</a>>
            wrote:<br>
          </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div bgcolor="#FFFFFF">
              <div>19.09.2019 4:24, David Blaikie пишет:</div>
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_quote">
                    <div dir="ltr" class="gmail_attr">On Wed, Sep 18,
                      2019 at 7:25 AM Alexey Lapshin <<a
                        href="mailto:a.v.lapshin@mail.ru"
                        target="_blank" moz-do-not-send="true">a.v.lapshin@mail.ru</a>>
                      wrote:<br>
                    </div>
                  </div>
                </div>
              </blockquote>
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_quote">
                    <blockquote class="gmail_quote" style="margin:0px
                      0px 0px 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div bgcolor="#FFFFFF">
                        <blockquote type="cite">
                          <div dir="ltr">
                            <div class="gmail_quote">
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
                                0.8ex;border-left:1px solid
                                rgb(204,204,204);padding-left:1ex">
                                <div>1. Minimize or entirely avoid
                                  references from subprograms into other
                                  parts of .debug_info section. That
                                  would simplify splitting and removing
                                  subprograms out in that sense that it
                                  would minimize the number of
                                  references that should be parsed and
                                  followed. (DW_FORM_ref_subroutine
                                  instead of DW_FORM_ref_*, ?)<br>
                                </div>
                              </blockquote>
                              <div><br>
                                Not sure I follow - by "other parts of
                                the .debug_info section" do you mean in
                                the same CU, or cross CU references? Any
                                particular references you have in mind?
                                Or encountered in practice?<br>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                        I mean here all kinds of references into
                        .debug_info section.</div>
                    </blockquote>
                    <div><br>
                    </div>
                    <div>Ah, not only references from other places
                      /into/ .debug_info (which don't really exist, so
                      far as I know) but any references to locations
                      within debug_info.<br>
                      <br>
                      Reducing these isn't super-viable - types being
                      the most common examples. Though now I understand
                      what you're getting at partly around the
                      debug_type_table idea - adding a level of
                      indirection to type references. So it'd be easy to
                      find only one place to fix when removing chunks of
                      debug_info (updating only the type table without
                      having to find all the places inside debug_info to
                      touch). That indirection would come at a size
                      cost, of course - and an overhead for DWARF
                      parsers having to follow that indirection. Doesn't
                      make it impossible - just tradeoffs to be aware
                      of.<br>
                      <br>
                      Though that's not the only DIE references -
                      without removing them all there'd still be a fair
                      bit of overhead for finding any remaining ones and
                      applying them. If an indirection table is to be
                      added, maybe a generalized one (for any DIE
                      reference) rather than one only for types would be
                      good.<br>
                      <br>
                    </div>
                  </div>
                </div>
              </blockquote>
              <p>yes, some general indirection table would probably be
                useful. <br>
                But, types would still require specialized handling.<br>
                Types have "type hash" and need some specific logic
                around that.<br>
              </p>
            </div>
          </blockquote>
          <div>This indirection is essentially the same as relocations
            & could be implemented that way (though no matter the
            solution you'd need some attribute on the CU that says "I
            don't use any CU-local DIE offsets" so an implementation
            didn't have to go searching/scanning for such offsets
            (though I guess it'd be cheap to scan for that by just
            looking at the abbreviations & if you don't see any
            CU-local DIE offset forms, use the fast-path)). A custom
            DWARF format would be potentially more compact than general
            ELF relocations. <br>
          </div>
        </div>
      </div>
    </blockquote>
    <p><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">I see, so
        indirection table(or just relocations) will speedup references
        patching. There would not be necessary to parse DWARF to find
        all references which should be corrected. They already would be
        gathered in the "indirection table"(or relocations table) and as
        the result patching process would be executed faster.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <br style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">But that
        solution has a cost. You've already mentioned it. Size of debug
        info would be increased.   </span><br style="color: rgb(0, 0,
        0); font-family: Calibri, Arial, Helvetica, sans-serif;
        font-size: 16px; font-style: normal; font-variant-ligatures:
        normal; font-variant-caps: normal; font-weight: 400;
        letter-spacing: normal; orphans: 2; text-align: start;
        text-indent: 0px; text-transform: none; white-space: normal;
        widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;
        background-color: rgb(255, 255, 255); text-decoration-style:
        initial; text-decoration-color: initial;">
      <br style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">My original
        suggestion was to evaluate variant with a minimal size of debug
        info.</span><br style="color: rgb(0, 0, 0); font-family:
        Calibri, Arial, Helvetica, sans-serif; font-size: 16px;
        font-style: normal; font-variant-ligatures: normal;
        font-variant-caps: normal; font-weight: 400; letter-spacing:
        normal; orphans: 2; text-align: start; text-indent: 0px;
        text-transform: none; white-space: normal; widows: 2;
        word-spacing: 0px; -webkit-text-stroke-width: 0px;
        background-color: rgb(255, 255, 255); text-decoration-style:
        initial; text-decoration-color: initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">"Types
        table"/"bag of DWARF" allows us to have minimal size by
        deduplicating base/proxy types and avoiding fragmentation.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">And if
        performance would be insufficient, then speed up it.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">Indirection
        table is an option which would allow having that speedup.</span></p>
    <br>
    <blockquote type="cite"
cite="mid:CAENS6Eu1ekinfJbMYn9_-QZoqETizY667Hp9=_ezJfbJxhvUYw@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div bgcolor="#FFFFFF">
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_quote">
                    <div>  </div>
                    <blockquote class="gmail_quote" style="margin:0px
                      0px 0px 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div bgcolor="#FFFFFF">
                        <blockquote type="cite">
                          <div dir="ltr">
                            <div class="gmail_quote">
                              <div> </div>
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
                                0.8ex;border-left:1px solid
                                rgb(204,204,204);padding-left:1ex">
                                <div>2. Create additional section -
                                  global types table
                                  (.debug_types_table). That would
                                  significantly reduce the number of
                                  references inside .debug_info section.
                                  It also makes it possible to have a
                                  4-byte reference in this section
                                  instead of 8-bytes reference into type
                                  unit (DW_FORM_ref_types instead of
                                  DW_FORM_ref_sig8). It also makes it
                                  possible to place base types into this
                                  section and avoid per-compile unit
                                  duplication of them. Additionally,
                                  there could be achieved size reduction
                                  by not generating type unit header.
                                  Note, that new section -
                                  .debug_types_table - differs from
                                  DWARF4 section .debug_types in that
                                  sense that: it contains unique type
                                  descriptors referenced by offsets
                                  instead of list of type units
                                  referenced by DW_FORM_ref_sig8;  all
                                  table entries share the same
                                  abbreviations and do not have type
                                  unit headers.<br>
                                </div>
                              </blockquote>
                              <div><br>
                                What do you mean when you say "global
                                types table" the phrasing in the above
                                paragraph is present-tense, as though
                                this thing exists but doesn't seem to
                                describe what it actually is and how it
                                achieves the things the text says it
                                achieves. Perhaps I've missed some
                                context here.<br>
                              </div>
                            </div>
                          </div>
                        </blockquote>
                        <p><br>
                        </p>
                        <p>The "global types table" does not exist yet.
                          It could be created if the discussed approach
                          would be considered useful. <br>
                        </p>
                      </div>
                    </blockquote>
                    <div><br>
                    </div>
                    <div>Ah, the present-tense language was a bit
                      confusing for me when discussing a thing that
                      doesn't exist yet & not having provided a
                      description of what it might be or might contain
                      and why it would exist/what it would achieve.</div>
                  </div>
                </div>
              </blockquote>
              <p>I should've written it more precise.<br>
              </p>
              <p><br>
              </p>
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_quote">
                    <div> </div>
                    <blockquote class="gmail_quote" style="margin:0px
                      0px 0px 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div bgcolor="#FFFFFF">
                        <p> Please check the comparison of possible
                          "global types table" and currently existed
                          type units: <a
                            href="https://reviews.llvm.org/P8164"
                            target="_blank" moz-do-not-send="true">https://reviews.llvm.org/P8164</a></p>
                      </div>
                    </blockquote>
                    <div>Ah, that proposed version makes it easy to
                      remove subprograms from debug_info without having
                      to fix up type references (but you still have to
                      have the code to fix up other cross-CU references,
                      like abstract_origin, so I'm not sure it provides
                      that much value) but doesn't make it easy to
                      remove types (becaues you'd have to go looking
                      through the debug_info section to update all the
                      type offsets (which I guess you have to do anyway
                      to find the type references)  and removing the
                      types still also requires fixing up the types that
                      reference each other... <br>
                      <br>
                      So I'm not seeing a big win there.</div>
                  </div>
                </div>
              </blockquote>
              <p>Correct. Even if types were put into a separated table,
                there still would be necessary to:  <br>
                 "go looking through the debug_info section to update
                all the type offsets"; <br>
                 "removing the types still also requires fixing up the
                types that reference each other".<br>
                <br>
                 But additionally it allows to have following benefits:<br>
                <br>
                 1. Size reduction by remove fragmentation. In
                "-fdebug-types-section" solution every type which is
                put  into type unit requires:<br>
                   - additional type unit header, <br>
                   - section header(since it put into separate section),
                <br>
                   - proxy type copies inside compilation unit. <br>
                <br>
                  Putting types into separate table allows not to create
                above data for every type.</p>
              <p>2. Size reduction by deduplicate base types. In
                "-fdebug-types-section" solution base types are not
                deduplicated at all.</p>
            </div>
          </blockquote>
          <div><br>
            Base types are pretty small - not sure there'd be much to
            save by indirection (for classic base types like "int" - for
            non-trivial but non-user-defined types like subroutine types
            there might be more opportunity for savings). & you'd
            still have some cost of indirection to tradeoff - so I don't
            think it's always going to be the right solution to indirect
            everything. <br>
            <br>
            There's a lot of design considerations in this problem
            space, let's put it that way.<br>
          </div>
        </div>
      </div>
    </blockquote>
    <p><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">For the clang
        binary they(base/proxy types) take ~1.5% of overall .debug_info
        + .debug_types. Another ~1.5% takes fragmentation from #1.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;"> </span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">Implementing
        "bag of DWARF"/"generalized type unit"/"types table" allows to
        deduplicate base/proxy types and avoid fragmentation.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">It could give
        approx 3% of debug info for either reducing debug info size
        either creating "indirection table" accelerator.</span><br
        style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <br style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial;">
      <span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">My idea is to
        start from the minimum size of debug info and to check whether
        parsing performance would be enough. The PoC implementation for
        that proposal does all kind of things: parses abbreviations,
        removes parts of debug_info, </span><span style="color: rgb(0,
        0, 0); font-family: Calibri, Arial, Helvetica, sans-serif;
        font-size: 16px; font-style: normal; font-variant-ligatures:
        normal; font-variant-caps: normal; font-weight: 400;
        letter-spacing: normal; orphans: 2; text-align: start;
        text-indent: 0px; text-transform: none; white-space: normal;
        widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px;
        background-color: rgb(255, 255, 255); text-decoration-style:
        initial; text-decoration-color: initial; display: inline
        !important; float: none;">searches for references which should
        be patched, patch references. Its performance looks quite good. 
        <br>
      </span></p>
    <p><br>
    </p>
    <blockquote type="cite"
cite="mid:CAENS6Eu1ekinfJbMYn9_-QZoqETizY667Hp9=_ezJfbJxhvUYw@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div> </div>
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div bgcolor="#FFFFFF">
              <p> </p>
              <p>3. Performance improvement by handling fewer data. #1
                leads to loading and parsing fewer bits.<br>
                <br>
                4. Performance improvement by handling fewer references.
                Simpler reference chains allow parsing references
                faster.<br>
                  Instead of this : <br>
                <br>
                 
type_offset->proxy_type->DW_FORM_ref_sig8->type_unit->type_offset->type.<br>
                <br>
                  There would be this :<br>
                <br>
                  type_offset->type_table->type.<br>
              </p>
            </div>
          </blockquote>
          <div>Yep, though to avoid the need for the proxy type you'd
            need to be able to refer to other entities in the "bag of
            DWARF"/generalized type unit (things like member function
            declarations and the like)<br>
            <br>
            Yes, "bag of DWARF" or generalized type units (where you can
            refer to multiple entities in a single unit by some kind of
            hash) has some benefits.<br>
            <br>
            But it seems somewhat orthogonal to your debug info linking
            goals here, unless it is a solution that removes the need
            for parsing the DWARF.<br>
            <br>
          </div>
        </div>
      </div>
    </blockquote>
    <p><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">Minimizing of
        debug_info size is also a goal If the performance of parsing
        DWARF would be acceptable.</span></p>
    <p><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;"><br>
      </span></p>
    <blockquote type="cite"
cite="mid:CAENS6Eu1ekinfJbMYn9_-QZoqETizY667Hp9=_ezJfbJxhvUYw@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <div>Another way to consider this would be to model (or
            actually implement) inter-DIE references as relocations
            (DW_FORM_sec_offset instead of a cu offset) - ah, I
            mentioned that earlier (I'm writing this reply out of
            order).</div>
        </div>
      </div>
    </blockquote>
    <p><span style="color: rgb(0, 0, 0); font-family: Calibri, Arial,
        Helvetica, sans-serif; font-size: 16px; font-style: normal;
        font-variant-ligatures: normal; font-variant-caps: normal;
        font-weight: 400; letter-spacing: normal; orphans: 2;
        text-align: start; text-indent: 0px; text-transform: none;
        white-space: normal; widows: 2; word-spacing: 0px;
        -webkit-text-stroke-width: 0px; background-color: rgb(255, 255,
        255); text-decoration-style: initial; text-decoration-color:
        initial; display: inline !important; float: none;">Agreed.</span></p>
    <p><br>
    </p>
    <p>Alexey<br>
    </p>
    <blockquote type="cite"
cite="mid:CAENS6Eu1ekinfJbMYn9_-QZoqETizY667Hp9=_ezJfbJxhvUYw@mail.gmail.com">
      <div dir="ltr">
        <div class="gmail_quote">
          <blockquote class="gmail_quote" style="margin:0px 0px 0px
            0.8ex;border-left:1px solid
            rgb(204,204,204);padding-left:1ex">
            <div bgcolor="#FFFFFF">
              <blockquote type="cite">
                <div dir="ltr">
                  <div class="gmail_quote">
                    <blockquote class="gmail_quote" style="margin:0px
                      0px 0px 0.8ex;border-left:1px solid
                      rgb(204,204,204);padding-left:1ex">
                      <div bgcolor="#FFFFFF">
                        <blockquote type="cite">
                          <div dir="ltr">
                            <div class="gmail_quote">
                              <blockquote class="gmail_quote"
                                style="margin:0px 0px 0px
                                0.8ex;border-left:1px solid
                                rgb(204,204,204);padding-left:1ex">
                                <div><br>
                                </div>
_______________________________________________<br>
                                LLVM Developers mailing list<br>
                                <a href="mailto:llvm-dev@lists.llvm.org"
                                  target="_blank" moz-do-not-send="true">llvm-dev@lists.llvm.org</a><br>
                                <a
                                  href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev"
                                  rel="noreferrer" target="_blank"
                                  moz-do-not-send="true">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev</a><br>
                              </blockquote>
                            </div>
                          </div>
                        </blockquote>
                      </div>
                    </blockquote>
                  </div>
                </div>
              </blockquote>
            </div>
          </blockquote>
        </div>
      </div>
    </blockquote>
  </body>
</html>