libabigail/tests/data/test-read-btf/test0.o.abi
Dodji Seketeli fee06608fc dwarf-reader: Support Ada subranges having upper_bound < lower_bound
If the subrange's upper_bound is lower than its lower_bound, that
means the subrange has a length of zero.  This is Ada lingo.  You can
learn more about this at
https://en.wikibooks.org/wiki/Ada_Programming/Types/array#Array_Attributes,
for instance.

This patch teaches the DWARF reader about this.

	* src/abg-dwarf-reader.cc (build_subrange_type): Be aware that
	the upper_bound can be lower than lower_bound..  This most
	likely means the length of the subrange is zero.
	* src/abg-ir.cc (array_type_def::subrange_type::get_length): If
	lower_bound > upper_bound, then length is zero.  This is Ada
	lingo.
	* src/abg-writer.cc (write_array_subrange_type): Always emit
	lower_bound and upper_bound.  Acknowledge that if lower_bound >
	upper_bound, it means length is zero.
	* tests/data/test-annotate/libtest24-drop-fns-2.so.abi: Adjust.
	* tests/data/test-annotate/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-annotate/test13-pr18894.so.abi: Likewise.
	* tests/data/test-annotate/test14-pr18893.so.abi: Likewise.
	* tests/data/test-annotate/test15-pr18892.so.abi: Likewise.
	* tests/data/test-annotate/test17-pr19027.so.abi: Likewise.
	* tests/data/test-annotate/test18-pr19037-libvtkRenderingLIC-6.1.so.abi:
	Likewise.
	* tests/data/test-annotate/test19-pr19023-libtcmalloc_and_profiler.so.abi:
	Likewise.
	* tests/data/test-annotate/test20-pr19025-libvtkParallelCore-6.1.so.abi:
	Likewise.
	* tests/data/test-annotate/test21-pr19092.so.abi: Likewise.
	* tests/data/test-annotate/test7.so.abi: Likewise.
	* tests/data/test-diff-dwarf-abixml/PR25409-librte_bus_dpaa.so.20.0.abi:
	Likewise.
	* tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1-report-0.txt:
	Likewise.
	* tests/data/test-diff-dwarf-abixml/test0-pr19026-libvtkIOSQL-6.1.so.1.abi:
	Likewise.
	* tests/data/test-read-btf/test0.o.abi: Likewise.
	* tests/data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi:
	Likewise.
	* tests/data/test-read-ctf/test-array-mdimension.abi: Likewise.
	* tests/data/test-read-ctf/test-array-of-pointers.abi: Likewise.
	* tests/data/test-read-ctf/test-array-size.abi: Likewise.
	* tests/data/test-read-ctf/test-const-array.abi: Likewise.
	* tests/data/test-read-ctf/test-dynamic-array.o.abi: Likewise.
	* tests/data/test-read-ctf/test0.abi: Likewise.
	* tests/data/test-read-ctf/test0.hash.abi: Likewise.
	* tests/data/test-read-ctf/test9.o.abi: Likewise.
	* tests/data/test-read-dwarf/PR22015-libboost_iostreams.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/PR22122-libftdc.so.abi: Likewise.
	* tests/data/test-read-dwarf/PR25007-sdhci.ko.abi: Likewise.
	* tests/data/test-read-dwarf/PR25042-libgdbm-clang-dwarf5.so.6.0.0.abi:
	Likewise.
	* tests/data/test-read-dwarf/libtest24-drop-fns-2.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/libtest24-drop-fns.so.abi: Likewise.
	* tests/data/test-read-dwarf/test-libaaudio.so.abi: Likewise.
	* tests/data/test-read-dwarf/test-libandroid.so.abi: Likewise.
	* tests/data/test-read-dwarf/test10-pr18818-gcc.so.abi: Likewise.
	* tests/data/test-read-dwarf/test11-pr18828.so.abi: Likewise.
	* tests/data/test-read-dwarf/test12-pr18844.so.abi: Likewise.
	* tests/data/test-read-dwarf/test13-pr18894.so.abi: Likewise.
	* tests/data/test-read-dwarf/test14-pr18893.so.abi: Likewise.
	* tests/data/test-read-dwarf/test15-pr18892.so.abi: Likewise.
	* tests/data/test-read-dwarf/test16-pr18904.so.abi: Likewise.
	* tests/data/test-read-dwarf/test17-pr19027.so.abi: Likewise.
	* tests/data/test-read-dwarf/test18-pr19037-libvtkRenderingLIC-6.1.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test19-pr19023-libtcmalloc_and_profiler.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test20-pr19025-libvtkParallelCore-6.1.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test21-pr19092.so.abi: Likewise.
	* tests/data/test-read-dwarf/test22-pr19097-libstdc++.so.6.0.17.so.abi:
	Likewise.
	* tests/data/test-read-dwarf/test7.so.abi: Likewise.
	* tests/data/test-read-dwarf/test7.so.hash.abi: Likewise.
	* tests/data/test-read-dwarf/test9-pr18818-clang.so.abi: Likewise.
	* tests/data/test-read-write/test25.xml: Likewise.

Signed-off-by: Dodji Seketeli <dodji@redhat.com>
2023-04-05 16:54:32 +02:00

91 lines
5.2 KiB
Plaintext

<abi-corpus version='2.2' path='data/test-read-btf/test0.o'>
<elf-function-symbols>
<elf-symbol name='fn0' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
<elf-variable-symbols>
<elf-symbol name='foos' size='160' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-variable-symbols>
<abi-instr address-size='64'>
<type-decl name='char' size-in-bits='8' id='type-id-1'/>
<enum-decl name='ANOTHER_ENUM_TYPE' linkage-name='ANOTHER_ENUM_TYPE' id='type-id-2'>
<underlying-type type-id='type-id-3'/>
<enumerator name='E0_ANOTHER_ENUM_TYPE' value='0'/>
<enumerator name='E1_ANOTHER_ENUM_TYPE' value='1'/>
</enum-decl>
<enum-decl name='ENUM_TYPE' linkage-name='ENUM_TYPE' id='type-id-4'>
<underlying-type type-id='type-id-5'/>
<enumerator name='E0_ENUM_TYPE' value='0'/>
<enumerator name='E1_ENUM_TYPE' value='1'/>
</enum-decl>
<type-decl name='enum-ANOTHER_ENUM_TYPE-underlying-type-32' size-in-bits='32' alignment-in-bits='32' id='type-id-3'/>
<type-decl name='enum-ENUM_TYPE-underlying-type-32' size-in-bits='32' alignment-in-bits='32' id='type-id-5'/>
<type-decl name='float' size-in-bits='32' id='type-id-6'/>
<array-type-def dimensions='1' type-id='type-id-6' size-in-bits='320' id='type-id-7'>
<subrange length='10' lower-bound='0' upper-bound='9' id='type-id-8'/>
</array-type-def>
<array-type-def dimensions='1' type-id='type-id-9' size-in-bits='1280' id='type-id-10'>
<subrange length='2' lower-bound='0' upper-bound='1' id='type-id-11'/>
</array-type-def>
<type-decl name='int' size-in-bits='32' id='type-id-12'/>
<class-decl name='foo_type' size-in-bits='640' is-struct='yes' visibility='default' id='type-id-9'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='m0' type-id='type-id-13' visibility='default'/>
</data-member>
<data-member access='public' layout-offset-in-bits='64'>
<var-decl name='m1' type-id='type-id-14' visibility='default'/>
</data-member>
<data-member access='public' layout-offset-in-bits='128'>
<var-decl name='m2' type-id='type-id-15' visibility='default'/>
</data-member>
<data-member access='public' layout-offset-in-bits='192'>
<var-decl name='m3' type-id='type-id-16' visibility='default'/>
</data-member>
<data-member access='public' layout-offset-in-bits='256'>
<var-decl name='m4' type-id='type-id-7' visibility='default'/>
</data-member>
<data-member access='public' layout-offset-in-bits='576'>
<var-decl name='m5' type-id='type-id-17' visibility='default'/>
</data-member>
</class-decl>
<typedef-decl name='ANOTHER_ENUM_TYPE' type-id='type-id-2' id='type-id-18'/>
<typedef-decl name='ENUM_TYPE' type-id='type-id-4' id='type-id-19'/>
<typedef-decl name='foo_type' type-id='type-id-9' id='type-id-20'/>
<typedef-decl name='u_type' type-id='type-id-21' id='type-id-22'/>
<union-decl name='u_type' size-in-bits='64' visibility='default' id='type-id-21'>
<data-member access='public'>
<var-decl name='m0' type-id='type-id-23' visibility='default'/>
</data-member>
<data-member access='public'>
<var-decl name='m1' type-id='type-id-24' visibility='default'/>
</data-member>
</union-decl>
<type-decl name='unsigned char' size-in-bits='8' id='type-id-25'/>
<type-decl name='unsigned int' size-in-bits='32' id='type-id-26'/>
<pointer-type-def type-id='type-id-18' size-in-bits='64' id='type-id-24'/>
<pointer-type-def type-id='type-id-19' size-in-bits='64' id='type-id-23'/>
<qualified-type-def type-id='type-id-20' const='yes' id='type-id-27'/>
<pointer-type-def type-id='type-id-27' size-in-bits='64' id='type-id-28'/>
<qualified-type-def type-id='type-id-12' const='yes' id='type-id-29'/>
<pointer-type-def type-id='type-id-29' size-in-bits='64' id='type-id-13'/>
<qualified-type-def type-id='type-id-22' const='yes' id='type-id-30'/>
<qualified-type-def type-id='type-id-25' const='yes' id='type-id-31'/>
<pointer-type-def type-id='type-id-26' size-in-bits='64' id='type-id-15'/>
<qualified-type-def type-id='type-id-1' volatile='yes' id='type-id-32'/>
<pointer-type-def type-id='type-id-32' size-in-bits='64' id='type-id-14'/>
<qualified-type-def type-id='type-id-30' volatile='yes' id='type-id-33'/>
<pointer-type-def type-id='type-id-33' size-in-bits='64' id='type-id-17'/>
<qualified-type-def type-id='type-id-31' volatile='yes' id='type-id-34'/>
<pointer-type-def type-id='type-id-34' size-in-bits='64' id='type-id-16'/>
<var-decl name='foos' type-id='type-id-10' mangled-name='foos' visibility='default' elf-symbol-id='foos'/>
<function-decl name='fn0' mangled-name='fn0' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fn0'>
<parameter type-id='type-id-28' name='p'/>
<return type-id='type-id-35'/>
</function-decl>
<type-decl name='void' id='type-id-35'/>
<function-type size-in-bits='64' id='type-id-36'>
<parameter type-id='type-id-28' name='p'/>
<return type-id='type-id-35'/>
</function-type>
</abi-instr>
</abi-corpus>