From: Thomas Schwinge <thomas@codesourcery.com>
To: <libabigail@sourceware.org>
Cc: Dodji Seketeli <dodji@seketeli.org>,
Mark Wielaard <mark@klomp.org>,
Giuliano Procida <gprocida@google.com>
Subject: Re: 'src/abg-dwarf-reader.cc:compare_dies_string_attribute_value' optimization
Date: Mon, 31 Jan 2022 15:38:44 +0100 [thread overview]
Message-ID: <87r18oynpn.fsf@euler.schwinge.homeip.net> (raw)
In-Reply-To: <87wnijv616.fsf@dirichlet.schwinge.homeip.net>
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?
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?
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
next prev parent reply other threads:[~2022-01-31 14:38 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 [this message]
2022-01-31 15:56 ` Giuliano Procida
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=87r18oynpn.fsf@euler.schwinge.homeip.net \
--to=thomas@codesourcery.com \
--cc=dodji@seketeli.org \
--cc=gprocida@google.com \
--cc=libabigail@sourceware.org \
--cc=mark@klomp.org \
/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).