public inbox for libabigail@sourceware.org
 help / color / mirror / Atom feed
From: Giuliano Procida <gprocida@google.com>
To: Thomas Schwinge <thomas@codesourcery.com>
Cc: libabigail@sourceware.org, Dodji Seketeli <dodji@seketeli.org>,
	 Mark Wielaard <mark@klomp.org>
Subject: Re: 'src/abg-dwarf-reader.cc:compare_dies_string_attribute_value' optimization
Date: Mon, 31 Jan 2022 15:56:50 +0000	[thread overview]
Message-ID: <CAGvU0HnSPU14xAqSWOBkrLHXce=PzEGhVh4iaAyWLdtSFpRv-A@mail.gmail.com> (raw)
In-Reply-To: <87r18oynpn.fsf@euler.schwinge.homeip.net>

Hi.

On Mon, 31 Jan 2022 at 14:38, Thomas Schwinge <thomas@codesourcery.com>
wrote:

> Hi!
>
> On 2022-01-28T23:39:49+0100, I wrote:
> > It's late on a Friday evening, and very well this may just be me not
> > understanding libabigail/DWARF ;-) -- in context of
> > <https://sourceware.org/bugzilla/show_bug.cgi?id=21023#c10> or
> > <https://sourceware.org/bugzilla/show_bug.cgi?id=25042#c4>, I did a
> > simple experiment to disable the
> > 'src/abg-dwarf-reader.cc:compare_dies_string_attribute_value'
> > optimization:
>
> OK, something doesn't seem right here:
>
> >     --- src/abg-dwarf-reader.cc
> >     +++ src/abg-dwarf-reader.cc
> >     [...]
> >      /// This function is a fast routine (optimization) to compare the
> >      /// values of two string attributes of two DIEs.
> >      ///
> >      /// @param l the first DIE to consider.
> >      ///
> >      /// @param r the second DIE to consider.
> >      ///
> >      /// @param attr_name the name of the attribute to compare, on the
> two
> >      /// DIEs above.
> >      ///
> >      /// @param result out parameter.  This is set to the result of the
> >      /// comparison.  If the value of attribute @p attr_name on DIE @p l
> >      /// equals the value of attribute @p attr_name on DIE @p r, then the
> >      /// the argument of this parameter is set to true.  Otherwise, it's
> >      /// set to false.  Note that the argument of this parameter is set
> iff
> >      /// the function returned true.
> >      ///
> >      /// @return true iff the comparison could be performed.  There are
> >      /// cases in which the comparison cannot be performed.  For
> instance,
> >      /// if one of the DIEs does not have the attribute @p attr_name.  In
> >      /// any case, if this function returns true, then the parameter @p
> >      /// result is set to the result of the comparison.
> >      static bool
> >      compare_dies_string_attribute_value(const Dwarf_Die *l, const
> Dwarf_Die *r,
> >                                   unsigned attr_name,
> >                                   bool &result)
> >      {
> >        Dwarf_Attribute l_attr, r_attr;
> >        if (!dwarf_attr_integrate(const_cast<Dwarf_Die*>(l), attr_name,
> &l_attr)
> >            || !dwarf_attr_integrate(const_cast<Dwarf_Die*>(r),
> attr_name, &r_attr))
> >          return false;
> >
> >        ABG_ASSERT(l_attr.form == DW_FORM_strp
> >            || l_attr.form == DW_FORM_string
> >            || l_attr.form == DW_FORM_GNU_strp_alt
> >            || form_is_DW_FORM_strx(l_attr.form)
> >            || form_is_DW_FORM_line_strp(l_attr.form));
> >
> >        ABG_ASSERT(r_attr.form == DW_FORM_strp
> >            || r_attr.form == DW_FORM_string
> >            || r_attr.form == DW_FORM_GNU_strp_alt
> >            || form_is_DW_FORM_strx(r_attr.form)
> >            || form_is_DW_FORM_line_strp(r_attr.form));
> >
> >     +#if 0
> >        if ((l_attr.form == DW_FORM_strp
> >             && r_attr.form == DW_FORM_strp)
> >            || (l_attr.form == DW_FORM_GNU_strp_alt
> >         && r_attr.form == DW_FORM_GNU_strp_alt)
> >            || (form_is_DW_FORM_strx(l_attr.form)
> >         && form_is_DW_FORM_strx(r_attr.form))
> >            || (form_is_DW_FORM_line_strp(l_attr.form)
> >         && form_is_DW_FORM_line_strp(r_attr.form)))
> >          {
> >            // So these string attributes are actually pointers into a
> >            // string table.  The string table is most likely
> de-duplicated
> >            // so comparing the *values* of the pointers should be enough.
> >            //
> >            // This is the fast path.
> >            if (l_attr.valp == r_attr.valp)
> >         result = true;
> >            else if (l_attr.valp && r_attr.valp)
> >       result = *l_attr.valp == *r_attr.valp;
> >            else
> >       result = false;
> >            return true;
> >          }
> >     +#endif
> >
> >        // If we reached this point it means we couldn't use the fast path
> >        // because the string atttributes are strings that are "inline" in
> >        // the debug info section.  Let's just compare them the slow and
> >        // obvious way.
> >        string l_str = die_string_attribute(l, attr_name),
> >          r_str = die_string_attribute(r, attr_name);
> >        result = l_str == r_str;
> >
> >        return true;
> >      }
>
> I re-enabled the "optimized" code, but added a simple 'assert' to verify
> that its 'result' does match the "slow" 'result'.  (This indeed does
> cause a number of more testsuite failures than the single one that I'd
> mentioned before!)  Here's one case where the 'result's don't match.
>
> First, the "slow" code:
>
>     (gdb) call die_string_attribute(l, attr_name)
>     $20 = "dwarf_getarangeinfo.c"
>     (gdb) call die_string_attribute(r, attr_name)
>     $21 = "dwarf_onearange.c"
>
> Clearly not identical; thus ought to 'return false;'.  However, the
> "optimized" code:
>
>     (gdb) ptype l_attr
>     type = struct Dwarf_Attribute {
>         unsigned int code;
>         unsigned int form;
>         unsigned char *valp;
>         Dwarf_CU *cu;
>     }
>     (gdb) print l_attr
>     $5 = {code = 3, form = 14, valp = 0x7ffff45c97d9 "\351\024", cu =
> 0x7fffe8614670}
>     (gdb) print r_attr
>     $6 = {code = 3, form = 14, valp = 0x7ffff45c970d "\351\r", cu =
> 0x7fffe8614550}
>
> So these are both 'DW_FORM_strp', eligible for "optimized" comparison:
>
>     (gdb) print l_attr.valp == r_attr.valp
>     $7 = false
>
> OK.  Then:
>
>     (gdb) print l_attr.valp && r_attr.valp
>     $8 = true
>     (gdb) print *l_attr.valp == *r_attr.valp
>     $9 = true
>
> This now does 'return true;'!
>
> Given 'unsigned char *valp', what this only checks is that one byte at
> 'l_attr.valp' equals one byte at 'r_attr.valp' -- which evidently isn't
> sufficient to demonstrate that 'l_attr' and 'r_attr' do match.  Therefore
> it seems that this optimization is not correct?
>
>
Looks like you've found one bug. It has compared addresses and moved on to
test data.

It could do strcmp at this point, assuming these things are null-terminated
strings, which is the case for DW_FORM_strp but is not for other things.

But there is another bug. I've instrumented the code and found cases (in
the test suite) where the fast path returns false, but the slow path
returns true. Both sides are DW_FORM_strx1. The data are not strings but
indexes and that the same string appears at different indexes.


> I understand the purpose here is that for the supported and matching
> 'DW_FORM_*', not to call 'dwarf_formstring' (via the "slow" code's
> 'die_string_attribute'), because we don't actually need the strings, but
> just identifiers (like, table indices) to compare.  But how to do this
> properly?
>
>
The optimisation could be restricted to check pointers and indexes only and
also no longer assume distinct references mean distinct data.

Giuliano.


>
> Grüße
>  Thomas
>
>
> > My assumption was that this shouldn't change anything other than possibly
> > regress performance.  However:
> >
> >     [-PASS:-]{+FAIL:+} runtestreaddwarf
> >
> >     --- build-libabigail/tests/runtestreaddwarf.log
> >     +++ build-libabigail/tests/runtestreaddwarf.log
> >     [...]
> >     -PASS runtestreaddwarf (exit status: 0)
> >     +---
> [...]/source-libabigail/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi
>   2022-01-28 22:48:07.049805043 +0100
> >     ++++
> [...]/build-libabigail/tests/output/test-read-dwarf/PR25007-sdhci.ko.abi
>  2022-01-28 23:15:30.261483063 +0100
> >     +@@ -10107,10 +10107,19 @@
> >     +       <parameter type-id='type-id-1183'/>
> >     +       <return type-id='type-id-165'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1112'>
> >     ++      <parameter type-id='type-id-614'/>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <return type-id='type-id-165'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1114'>
> >     +       <parameter type-id='type-id-125'/>
> >     +       <return type-id='type-id-165'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1153'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <return type-id='type-id-282'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1184'>
> >     +       <parameter type-id='type-id-238'/>
> >     +       <parameter type-id='type-id-1138'/>
> >     +@@ -10138,6 +10147,10 @@
> >     +       <parameter type-id='type-id-51'/>
> >     +       <return type-id='type-id-1195'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1198'>
> >     ++      <parameter type-id='type-id-538'/>
> >     ++      <return type-id='type-id-530'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1199'>
> >     +       <parameter type-id='type-id-1357'/>
> >     +       <return type-id='type-id-635'/>
> >     +@@ -10181,6 +10194,16 @@
> >     +       <parameter type-id='type-id-1553'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1224'>
> >     ++      <parameter type-id='type-id-24'/>
> >     ++      <parameter type-id='type-id-1143'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1225'>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <parameter type-id='type-id-1143'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1226'>
> >     +       <parameter type-id='type-id-1118'/>
> >     +       <return type-id='type-id-53'/>
> >     +@@ -10370,6 +10393,13 @@
> >     +       <parameter type-id='type-id-411'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1256'>
> >     ++      <parameter type-id='type-id-335'/>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1093'/>
> >     ++      <parameter type-id='type-id-125'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1257'>
> >     +       <parameter type-id='type-id-335'/>
> >     +       <parameter type-id='type-id-67'/>
> >     +@@ -10519,6 +10549,31 @@
> >     +       <parameter type-id='type-id-53'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1283'>
> >     ++      <parameter type-id='type-id-559'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1284'>
> >     ++      <parameter type-id='type-id-559'/>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <parameter type-id='type-id-332'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1285'>
> >     ++      <parameter type-id='type-id-559'/>
> >     ++      <parameter type-id='type-id-559'/>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1286'>
> >     ++      <parameter type-id='type-id-1343'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1287'>
> >     ++      <parameter type-id='type-id-1343'/>
> >     ++      <parameter type-id='type-id-125'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1288'>
> >     +       <parameter type-id='type-id-225'/>
> >     +       <parameter type-id='type-id-1151'/>
> >     +@@ -10531,6 +10586,17 @@
> >     +       <parameter type-id='type-id-172'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1290'>
> >     ++      <parameter type-id='type-id-614'/>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1292'>
> >     ++      <parameter type-id='type-id-614'/>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1350'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1294'>
> >     +       <parameter type-id='type-id-1357'/>
> >     +       <return type-id='type-id-53'/>
> >     +@@ -10591,6 +10657,10 @@
> >     +       <parameter type-id='type-id-100'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1305'>
> >     ++      <parameter type-id='type-id-274'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1306'>
> >     +       <parameter type-id='type-id-826'/>
> >     +       <parameter type-id='type-id-114'/>
> >     +@@ -10631,6 +10701,22 @@
> >     +       <parameter type-id='type-id-238'/>
> >     +       <return type-id='type-id-53'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1314'>
> >     ++      <parameter type-id='type-id-577'/>
> >     ++      <parameter type-id='type-id-559'/>
> >     ++      <parameter type-id='type-id-557'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1315'>
> >     ++      <parameter type-id='type-id-577'/>
> >     ++      <parameter type-id='type-id-557'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1316'>
> >     ++      <parameter type-id='type-id-577'/>
> >     ++      <parameter type-id='type-id-127'/>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1317'>
> >     +       <parameter type-id='type-id-241'/>
> >     +       <return type-id='type-id-53'/>
> >     +@@ -10746,6 +10832,10 @@
> >     +       <parameter type-id='type-id-114'/>
> >     +       <return type-id='type-id-67'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1363'>
> >     ++      <parameter type-id='type-id-1398'/>
> >     ++      <return type-id='type-id-67'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1364'>
> >     +       <parameter type-id='type-id-241'/>
> >     +       <parameter type-id='type-id-1409'/>
> >     +@@ -10770,6 +10860,14 @@
> >     +       <parameter type-id='type-id-1384'/>
> >     +       <return type-id='type-id-1085'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1427'>
> >     ++      <parameter type-id='type-id-1343'/>
> >     ++      <parameter type-id='type-id-1384'/>
> >     ++      <return type-id='type-id-1085'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1428'>
> >     ++      <return type-id='type-id-172'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1429'>
> >     +       <parameter type-id='type-id-515'/>
> >     +       <return type-id='type-id-172'/>
> >     +@@ -10815,6 +10913,9 @@
> >     +       <parameter type-id='type-id-399'/>
> >     +       <return type-id='type-id-399'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1437'>
> >     ++      <return type-id='type-id-533'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1438'>
> >     +       <parameter type-id='type-id-335'/>
> >     +       <parameter type-id='type-id-333'/>
> >     +@@ -10859,6 +10960,15 @@
> >     +       <parameter type-id='type-id-1360'/>
> >     +       <return type-id='type-id-1027'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1445'>
> >     ++      <parameter type-id='type-id-335'/>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1093'/>
> >     ++      <parameter type-id='type-id-24'/>
> >     ++      <parameter type-id='type-id-333'/>
> >     ++      <parameter type-id='type-id-176'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1446'>
> >     +       <parameter type-id='type-id-335'/>
> >     +       <parameter type-id='type-id-1360'/>
> >     +@@ -10885,11 +10995,44 @@
> >     +       <parameter type-id='type-id-113'/>
> >     +       <return type-id='type-id-1027'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1449'>
> >     ++      <parameter type-id='type-id-1343'/>
> >     ++      <parameter type-id='type-id-24'/>
> >     ++      <parameter type-id='type-id-176'/>
> >     ++      <parameter type-id='type-id-333'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1450'>
> >     +       <parameter type-id='type-id-1347'/>
> >     +       <parameter type-id='type-id-1339'/>
> >     +       <return type-id='type-id-1027'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1451'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1088'/>
> >     ++      <parameter type-id='type-id-24'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1452'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1088'/>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <parameter type-id='type-id-176'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1453'>
> >     ++      <parameter type-id='type-id-790'/>
> >     ++      <parameter type-id='type-id-1369'/>
> >     ++      <parameter type-id='type-id-24'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1454'>
> >     ++      <parameter type-id='type-id-790'/>
> >     ++      <parameter type-id='type-id-1369'/>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <parameter type-id='type-id-176'/>
> >     ++      <return type-id='type-id-1027'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1455'>
> >     +       <parameter type-id='type-id-387'/>
> >     +       <parameter type-id='type-id-335'/>
> >     +@@ -10923,6 +11066,18 @@
> >     +       <parameter type-id='type-id-261'/>
> >     +       <return type-id='type-id-104'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1460'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1088'/>
> >     ++      <parameter type-id='type-id-53'/>
> >     ++      <return type-id='type-id-332'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1461'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1093'/>
> >     ++      <parameter type-id='type-id-53'/>
> >     ++      <return type-id='type-id-332'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1462'>
> >     +       <parameter type-id='type-id-1476'/>
> >     +       <return type-id='type-id-718'/>
> >     +@@ -10936,6 +11091,14 @@
> >     +       <parameter type-id='type-id-1402'/>
> >     +       <return type-id='type-id-113'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1468'>
> >     ++      <parameter type-id='type-id-335'/>
> >     ++      <parameter type-id='type-id-114'/>
> >     ++      <parameter type-id='type-id-114'/>
> >     ++      <parameter type-id='type-id-114'/>
> >     ++      <parameter type-id='type-id-114'/>
> >     ++      <return type-id='type-id-114'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1469'>
> >     +       <parameter type-id='type-id-1410'/>
> >     +       <parameter type-id='type-id-1409'/>
> >     +@@ -10949,6 +11112,10 @@
> >     +       <parameter type-id='type-id-1379'/>
> >     +       <return type-id='type-id-841'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1477'>
> >     ++      <parameter type-id='type-id-899'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1478'>
> >     +       <parameter type-id='type-id-308'/>
> >     +       <return type-id='type-id-1538'/>
> >     +@@ -11075,12 +11242,26 @@
> >     +       <parameter type-id='type-id-53'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1501'>
> >     ++      <parameter type-id='type-id-1343'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1502'>
> >     +       <parameter type-id='type-id-1347'/>
> >     +       <parameter type-id='type-id-67'/>
> >     +       <parameter type-id='type-id-67'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1503'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1504'>
> >     ++      <parameter type-id='type-id-279'/>
> >     ++      <parameter type-id='type-id-1356'/>
> >     ++      <parameter type-id='type-id-1346'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1505'>
> >     +       <parameter type-id='type-id-1357'/>
> >     +       <return type-id='type-id-1538'/>
> >     +@@ -11124,6 +11305,15 @@
> >     +       <parameter type-id='type-id-75'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1514'>
> >     ++      <parameter type-id='type-id-274'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1515'>
> >     ++      <parameter type-id='type-id-274'/>
> >     ++      <parameter type-id='type-id-165'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1516'>
> >     +       <parameter type-id='type-id-139'/>
> >     +       <return type-id='type-id-1538'/>
> >     +@@ -11192,10 +11382,19 @@
> >     +       <parameter type-id='type-id-335'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1528'>
> >     ++      <parameter type-id='type-id-577'/>
> >     ++      <parameter type-id='type-id-127'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1529'>
> >     +       <parameter type-id='type-id-241'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1530'>
> >     ++      <parameter type-id='type-id-1418'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1531'>
> >     +       <parameter type-id='type-id-399'/>
> >     +       <return type-id='type-id-1538'/>
> >     +@@ -11210,6 +11409,10 @@
> >     +       <parameter type-id='type-id-114'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1534'>
> >     ++      <parameter type-id='type-id-127'/>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1535'>
> >     +       <parameter type-id='type-id-127'/>
> >     +       <parameter type-id='type-id-1204'/>
> >     +@@ -11224,6 +11427,9 @@
> >     +       <parameter type-id='type-id-1550'/>
> >     +       <return type-id='type-id-1538'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1539'>
> >     ++      <return type-id='type-id-127'/>
> >     ++    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1540'>
> >     +       <parameter type-id='type-id-515'/>
> >     +       <parameter type-id='type-id-1123'/>
> >     +@@ -11241,223 +11447,6 @@
> >     +       <parameter type-id='type-id-114'/>
> >     +       <return type-id='type-id-127'/>
> >     +     </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1547'>
> >     +-      <parameter type-id='type-id-127'/>
> >     +-      <return type-id='type-id-127'/>
> >     +-    </function-type>
> >     +-    <type-decl name='void' id='type-id-1538'/>
> >     +-    <function-type size-in-bits='64' id='type-id-1112'>
> >     +-      <parameter type-id='type-id-614'/>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <return type-id='type-id-165'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1153'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <return type-id='type-id-282'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1198'>
> >     +-      <parameter type-id='type-id-538'/>
> >     +-      <return type-id='type-id-530'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1220'>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1224'>
> >     +-      <parameter type-id='type-id-24'/>
> >     +-      <parameter type-id='type-id-1143'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1225'>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <parameter type-id='type-id-1143'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1256'>
> >     +-      <parameter type-id='type-id-335'/>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1093'/>
> >     +-      <parameter type-id='type-id-125'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1283'>
> >     +-      <parameter type-id='type-id-559'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1284'>
> >     +-      <parameter type-id='type-id-559'/>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <parameter type-id='type-id-332'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1285'>
> >     +-      <parameter type-id='type-id-559'/>
> >     +-      <parameter type-id='type-id-559'/>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1286'>
> >     +-      <parameter type-id='type-id-1343'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1287'>
> >     +-      <parameter type-id='type-id-1343'/>
> >     +-      <parameter type-id='type-id-125'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1290'>
> >     +-      <parameter type-id='type-id-614'/>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1292'>
> >     +-      <parameter type-id='type-id-614'/>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1350'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1305'>
> >     +-      <parameter type-id='type-id-274'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1314'>
> >     +-      <parameter type-id='type-id-577'/>
> >     +-      <parameter type-id='type-id-559'/>
> >     +-      <parameter type-id='type-id-557'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1315'>
> >     +-      <parameter type-id='type-id-577'/>
> >     +-      <parameter type-id='type-id-557'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1316'>
> >     +-      <parameter type-id='type-id-577'/>
> >     +-      <parameter type-id='type-id-127'/>
> >     +-      <return type-id='type-id-53'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1363'>
> >     +-      <parameter type-id='type-id-1398'/>
> >     +-      <return type-id='type-id-67'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1427'>
> >     +-      <parameter type-id='type-id-1343'/>
> >     +-      <parameter type-id='type-id-1384'/>
> >     +-      <return type-id='type-id-1085'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1428'>
> >     +-      <return type-id='type-id-172'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1437'>
> >     +-      <return type-id='type-id-533'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1445'>
> >     +-      <parameter type-id='type-id-335'/>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1093'/>
> >     +-      <parameter type-id='type-id-24'/>
> >     +-      <parameter type-id='type-id-333'/>
> >     +-      <parameter type-id='type-id-176'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1449'>
> >     +-      <parameter type-id='type-id-1343'/>
> >     +-      <parameter type-id='type-id-24'/>
> >     +-      <parameter type-id='type-id-176'/>
> >     +-      <parameter type-id='type-id-333'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1451'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1088'/>
> >     +-      <parameter type-id='type-id-24'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1452'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1088'/>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <parameter type-id='type-id-176'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1453'>
> >     +-      <parameter type-id='type-id-790'/>
> >     +-      <parameter type-id='type-id-1369'/>
> >     +-      <parameter type-id='type-id-24'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1454'>
> >     +-      <parameter type-id='type-id-790'/>
> >     +-      <parameter type-id='type-id-1369'/>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <parameter type-id='type-id-176'/>
> >     +-      <return type-id='type-id-1027'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1460'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1088'/>
> >     +-      <parameter type-id='type-id-53'/>
> >     +-      <return type-id='type-id-332'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1461'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1093'/>
> >     +-      <parameter type-id='type-id-53'/>
> >     +-      <return type-id='type-id-332'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1468'>
> >     +-      <parameter type-id='type-id-335'/>
> >     +-      <parameter type-id='type-id-114'/>
> >     +-      <parameter type-id='type-id-114'/>
> >     +-      <parameter type-id='type-id-114'/>
> >     +-      <parameter type-id='type-id-114'/>
> >     +-      <return type-id='type-id-114'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1073'>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1477'>
> >     +-      <parameter type-id='type-id-899'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1501'>
> >     +-      <parameter type-id='type-id-1343'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1503'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1504'>
> >     +-      <parameter type-id='type-id-279'/>
> >     +-      <parameter type-id='type-id-1356'/>
> >     +-      <parameter type-id='type-id-1346'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1514'>
> >     +-      <parameter type-id='type-id-274'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1515'>
> >     +-      <parameter type-id='type-id-274'/>
> >     +-      <parameter type-id='type-id-165'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1528'>
> >     +-      <parameter type-id='type-id-577'/>
> >     +-      <parameter type-id='type-id-127'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1530'>
> >     +-      <parameter type-id='type-id-1418'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1534'>
> >     +-      <parameter type-id='type-id-127'/>
> >     +-      <return type-id='type-id-1538'/>
> >     +-    </function-type>
> >     +-    <function-type size-in-bits='64' id='type-id-1539'>
> >     +-      <return type-id='type-id-127'/>
> >     +-    </function-type>
> >     +     <function-type size-in-bits='64' id='type-id-1543'>
> >     +       <parameter type-id='type-id-279'/>
> >     +       <return type-id='type-id-127'/>
> >     +@@ -11477,48 +11466,19 @@
> >     +       <parameter type-id='type-id-1412'/>
> >     +       <return type-id='type-id-127'/>
> >     +     </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1547'>
> >     ++      <parameter type-id='type-id-127'/>
> >     ++      <return type-id='type-id-127'/>
> >     ++    </function-type>
> >     ++    <type-decl name='void' id='type-id-1538'/>
> >     ++    <function-type size-in-bits='64' id='type-id-1220'>
> >     ++      <return type-id='type-id-53'/>
> >     ++    </function-type>
> >     ++    <function-type size-in-bits='64' id='type-id-1073'>
> >     ++      <return type-id='type-id-1538'/>
> >     ++    </function-type>
> >     +   </abi-instr>
> >     +   <abi-instr address-size='64' path='drivers/mmc/host/sdhci.mod.c'
> comp-dir-path='/ws/android/kernel/aosp/common-mainline/out/android-mainline/common'
> language='LANG_C89'>
> >     +-    <class-decl name='anon_vma' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1555'/>
> >     +-    <class-decl name='audit_context' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1556'/>
> >     +-    <class-decl name='backing_dev_info' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1557'/>
> >     +-    <class-decl name='bio_list' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1558'/>
> >     +-    <class-decl name='blk_plug' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1559'/>
> >     +-    <class-decl name='capture_control' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1560'/>
> >     +-    <class-decl name='cfs_rq' is-struct='yes' visibility='default'
> is-declaration-only='yes' id='type-id-1561'/>
> >     +-    <class-decl name='files_struct' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1562'/>
> >     +-    <class-decl name='fs_struct' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1563'/>
> >     +-    <class-decl name='ftrace_ret_stack' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1564'/>
> >     +-    <class-decl name='kernfs_iattrs' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1565'/>
> >     +-    <class-decl name='kernfs_open_node' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1566'/>
> >     +-    <class-decl name='kioctx_table' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1567'/>
> >     +-    <class-decl name='kmem_cache' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1568'/>
> >     +-    <class-decl name='linux_binfmt' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1569'/>
> >     +-    <class-decl name='mem_cgroup' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1570'/>
> >     +-    <class-decl name='module_notes_attrs' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1571'/>
> >     +-    <class-decl name='module_param_attrs' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1572'/>
> >     +-    <class-decl name='module_sect_attrs' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1573'/>
> >     +-    <class-decl name='nameidata' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1574'/>
> >     +-    <class-decl name='perf_event' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1575'/>
> >     +-    <class-decl name='pipe_inode_info' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1576'/>
> >     +-    <class-decl name='poll_table_struct' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1577'/>
> >     +-    <class-decl name='pollfd' is-struct='yes' visibility='default'
> is-declaration-only='yes' id='type-id-1578'/>
> >     +-    <class-decl name='rcu_node' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1579'/>
> >     +-    <class-decl name='reclaim_state' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1580'/>
> >     +-    <class-decl name='request_queue' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1581'/>
> >     +-    <class-decl name='rt_mutex_waiter' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1582'/>
> >     +-    <class-decl name='rt_rq' is-struct='yes' visibility='default'
> is-declaration-only='yes' id='type-id-1583'/>
> >     +-    <class-decl name='sched_class' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1584'/>
> >     +-    <class-decl name='seccomp_filter' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1585'/>
> >     +-    <class-decl name='seq_file' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1586'/>
> >     +-    <class-decl name='sock' is-struct='yes' visibility='default'
> is-declaration-only='yes' id='type-id-1587'/>
> >     +-    <class-decl name='task_group' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1588'/>
> >     +-    <class-decl name='trace_eval_map' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1589'/>
> >     +-    <class-decl name='trace_event_call' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1590'/>
> >     +-    <class-decl name='uprobe' is-struct='yes' visibility='default'
> is-declaration-only='yes' id='type-id-1591'/>
> >     +-    <class-decl name='user_namespace' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1592'/>
> >     +-    <class-decl name='workqueue_struct' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1593'/>
> >     +-    <class-decl name='xol_area' is-struct='yes'
> visibility='default' is-declaration-only='yes' id='type-id-1594'/>
> >     +     <var-decl name='__this_module' type-id='type-id-789'
> mangled-name='__this_module' visibility='default'
> filepath='/ws/android/kernel/aosp/common-mainline/out/android-mainline/common/drivers/mmc/host/sdhci.mod.c'
> line='11' column='1' elf-symbol-id='__this_module'/>
> >     +   </abi-instr>
> >     + </abi-corpus>
> >     +ABIs differ:
> >
>  +[...]/source-libabigail/tests/data/test-read-dwarf/PR25007-sdhci.ko.abi
> >     +and:
> >
>  +[...]/build-libabigail/tests/output/test-read-dwarf/PR25007-sdhci.ko.abi
> >     +
> >     +FAIL runtestreaddwarf (exit status: 1)
> >
> > Only that one test case.
> >
> > The reordered 'function-type's -- but I've not yet verified whether
> > they're really just reordered -- may hint towards a sorting stability
> > issue, but there are also the disappearing 'class-decl's.
> >
> > Unless somebody points out any misunderstanding on my side, I suppose I
> > shall try to figure out what's going wrong.
> >
> >
> > Grüße
> >  Thomas
> -----------------
> Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstraße 201,
> 80634 München; Gesellschaft mit beschränkter Haftung; Geschäftsführer:
> Thomas Heurung, Frank Thürauf; Sitz der Gesellschaft: München;
> Registergericht München, HRB 106955
>

  reply	other threads:[~2022-01-31 15:57 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-01-28 22:39 Thomas Schwinge
2022-01-31 14:38 ` Thomas Schwinge
2022-01-31 15:56   ` Giuliano Procida [this message]
2022-04-11 15:18     ` Dodji Seketeli
2022-04-12 15:20       ` Giuliano Procida
2022-04-12 16:16         ` Dodji Seketeli
2022-04-13  2:19           ` Ben Woodard
2022-04-13 18:00             ` Ben Woodard
2022-04-14  9:14             ` Dodji Seketeli
2022-04-18 16:42               ` Ben Woodard
2022-06-20 16:12 ` Dodji Seketeli
2022-06-22  8:09   ` Ben Woodard

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAGvU0HnSPU14xAqSWOBkrLHXce=PzEGhVh4iaAyWLdtSFpRv-A@mail.gmail.com' \
    --to=gprocida@google.com \
    --cc=dodji@seketeli.org \
    --cc=libabigail@sourceware.org \
    --cc=mark@klomp.org \
    --cc=thomas@codesourcery.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).