@@ -25,6 +25,10 @@ runtestdifffilter \
runtestreaddwarf \
runtestcanonicalizetypes.sh
+if CTF_READER
+TESTS += runtestreadctf
+endif
+
# rather cheap tests
TESTS+= \
runtestabicompat \
@@ -72,7 +76,7 @@ runtestcanonicalizetypes.output.final.txt
noinst_PROGRAMS= $(TESTS) testirwalker testdiff2 printdifftree
noinst_SCRIPTS = mockfedabipkgdiff
-noinst_LTLIBRARIES = libtestutils.la libcatch.la
+noinst_LTLIBRARIES = libtestutils.la libtestreadcommon.la libcatch.la
libtestutils_la_SOURCES= \
test-utils.h \
@@ -82,15 +86,31 @@ libtestutils_la_CXXFLAGS= \
-DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \
-DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\"
+libtestreadcommon_la_SOURCES= \
+test-read-common.h \
+test-read-common.cc
+
+libtestreadcommon_la_CXXFLAGS= \
+-DABIGAIL_SRC_DIR=\"${abs_top_srcdir}\" \
+-DABIGAIL_BUILD_DIR=\"${abs_top_builddir}\"
+
libcatch_la_SOURCES = lib/catch.cc lib/catch.hpp
runtestreadwrite_SOURCES=test-read-write.cc
runtestreadwrite_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
runtestreaddwarf_SOURCES=test-read-dwarf.cc
-runtestreaddwarf_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
+runtestreaddwarf_LDADD=libtestreadcommon.la libtestutils.la \
+ $(top_builddir)/src/libabigail.la
runtestreaddwarf_LDFLAGS=-pthread
+if CTF_READER
+runtestreadctf_SOURCES=test-read-ctf.cc
+runtestreadctf_LDADD=libtestreadcommon.la libtestutils.la \
+ $(top_builddir)/src/libabigail.la
+runtestreadctf_LDFLAGS=-pthread
+endif
+
runtestannotate_SOURCES=test-annotate.cc
runtestannotate_LDADD=libtestutils.la $(top_builddir)/src/libabigail.la
@@ -7,18 +7,14 @@
<elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' alias='foo,foo__,__foo__' is-defined='yes'/>
<!-- __foo__ -->
<elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <!-- _fini -->
- <elf-symbol name='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <!-- _init -->
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<!-- foo -->
<elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
<!-- foo__ -->
<elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
<!-- void __foo() -->
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
<!-- void -->
<return type-id='type-id-1'/>
</function-decl>
@@ -1,4 +1,4 @@
-<abi-corpus version='2.0' architecture='elf-amd-x86_64'>
+<abi-corpus version='2.0' architecture='elf-amd-x86_64' soname='test4.so.1'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
@@ -6,7 +6,7 @@
<!-- cpy -->
<elf-symbol name='cpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test4.c' comp-dir-path='/home/mark/src/tests' language='LANG_C89'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test4.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
<!-- char -->
<type-decl name='char' size-in-bits='8' id='type-id-1'/>
<!-- unsigned int -->
@@ -22,13 +22,13 @@
<!-- const char* restrict -->
<qualified-type-def type-id='type-id-6' restrict='yes' id='type-id-7'/>
<!-- char* cpy(char* restrict, const char* restrict, unsigned int) -->
- <function-decl name='cpy' mangled-name='cpy' filepath='/home/mark/src/tests/test4.c' line='2' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
+ <function-decl name='cpy' mangled-name='cpy' filepath='./tests/data/test-read-common/test4.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
<!-- parameter of type 'char* restrict' -->
- <parameter type-id='type-id-4' name='s1' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
+ <parameter type-id='type-id-4' name='s1' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
<!-- parameter of type 'const char* restrict' -->
- <parameter type-id='type-id-7' name='s2' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
+ <parameter type-id='type-id-7' name='s2' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
<!-- parameter of type 'unsigned int' -->
- <parameter type-id='type-id-2' name='n' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
+ <parameter type-id='type-id-2' name='n' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
<!-- char* -->
<return type-id='type-id-3'/>
</function-decl>
new file mode 100755
GIT binary patch
literal 19000
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
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,58 @@
+<abi-corpus version='2.0' path='data/test-read-common/PR26261/PR26261-exe'>
+ <elf-function-symbols>
+ <elf-symbol name='__libc_csu_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='__libc_csu_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_obja' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_objb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='wrapped_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='_IO_stdin_used' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-1'/>
+ <class-decl name='SA' size-in-bits='192' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-2'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='m3' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='SB' size-in-bits='128' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-6'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-7' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-3'/>
+ <typedef-decl name='fn_ptr_type_a2_t' type-id='type-id-8' id='type-id-5'/>
+ <typedef-decl name='fn_ptr_type_a_t' type-id='type-id-8' id='type-id-4'/>
+ <typedef-decl name='fn_ptr_type_b_t' type-id='type-id-9' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' alignment-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-6' size-in-bits='64' alignment-in-bits='64' id='type-id-11'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-12'/>
+ <pointer-type-def type-id='type-id-12' size-in-bits='64' alignment-in-bits='64' id='type-id-13'/>
+ <pointer-type-def type-id='type-id-14' size-in-bits='64' alignment-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-15' size-in-bits='64' alignment-in-bits='64' id='type-id-9'/>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-14'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-15'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <type-decl name='void' id='type-id-16'/>
+ </abi-instr>
+</abi-corpus>
similarity index 53%
rename from tests/data/test-read-dwarf/PR26261/PR26261-exe.abi
rename to tests/data/test-read-common/PR26261/PR26261-exe-dwarf.abi
@@ -1,12 +1,10 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/PR26261/PR26261-exe'>
+<abi-corpus version='2.0' path='data/test-read-common/PR26261/PR26261-exe'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
<elf-function-symbols>
<elf-symbol name='__libc_csu_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='__libc_csu_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='fun_obja' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='fun_objb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
@@ -16,18 +14,18 @@
<elf-variable-symbols>
<elf-symbol name='_IO_stdin_used' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-variable-symbols>
- <abi-instr address-size='64' path='PR26261-main.c' comp-dir-path='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261' language='LANG_C89'>
+ <abi-instr address-size='64' path='PR26261-main.c' comp-dir-path='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261' language='LANG_C99'>
<pointer-type-def type-id='type-id-1' size-in-bits='64' id='type-id-2'/>
<pointer-type-def type-id='type-id-2' size-in-bits='64' id='type-id-3'/>
- <function-decl name='wrapped_call' mangled-name='wrapped_call' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wrapped_call'>
- <parameter type-id='type-id-4' name='fun' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='18' column='1'/>
- <parameter type-id='type-id-5' name='a' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='19' column='1'/>
- <parameter type-id='type-id-5' name='b' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='20' column='1'/>
+ <function-decl name='wrapped_call' mangled-name='wrapped_call' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='18' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='wrapped_call'>
+ <parameter type-id='type-id-4' name='fun' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='18' column='1'/>
+ <parameter type-id='type-id-5' name='a' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='19' column='1'/>
+ <parameter type-id='type-id-5' name='b' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='20' column='1'/>
<return type-id='type-id-6'/>
</function-decl>
- <function-decl name='main' mangled-name='main' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='main'>
- <parameter type-id='type-id-5' name='argc' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='27' column='1'/>
- <parameter type-id='type-id-3' name='argv' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-main.c' line='27' column='1'/>
+ <function-decl name='main' mangled-name='main' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='27' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='main'>
+ <parameter type-id='type-id-5' name='argc' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='27' column='1'/>
+ <parameter type-id='type-id-3' name='argv' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-main.c' line='27' column='1'/>
<return type-id='type-id-5'/>
</function-decl>
<function-type size-in-bits='64' id='type-id-7'>
@@ -36,44 +34,44 @@
<return type-id='type-id-6'/>
</function-type>
</abi-instr>
- <abi-instr address-size='64' path='PR26261-obja.c' comp-dir-path='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261' language='LANG_C89'>
+ <abi-instr address-size='64' path='PR26261-obja.c' comp-dir-path='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261' language='LANG_C99'>
<type-decl name='int' size-in-bits='32' id='type-id-5'/>
- <typedef-decl name='fn_ptr_type_a_t' type-id='type-id-4' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='1' column='1' id='type-id-8'/>
- <typedef-decl name='fn_ptr_type_a2_t' type-id='type-id-4' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='3' column='1' id='type-id-9'/>
- <class-decl name='SA' size-in-bits='192' is-struct='yes' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='5' column='1' id='type-id-10'>
+ <typedef-decl name='fn_ptr_type_a_t' type-id='type-id-4' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='1' column='1' id='type-id-8'/>
+ <typedef-decl name='fn_ptr_type_a2_t' type-id='type-id-4' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='3' column='1' id='type-id-9'/>
+ <class-decl name='SA' size-in-bits='192' is-struct='yes' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='5' column='1' id='type-id-10'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='m1' type-id='type-id-5' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='7' column='1'/>
+ <var-decl name='m1' type-id='type-id-5' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='7' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='m2' type-id='type-id-8' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='8' column='1'/>
+ <var-decl name='m2' type-id='type-id-8' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='8' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='128'>
- <var-decl name='m3' type-id='type-id-9' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.h' line='9' column='1'/>
+ <var-decl name='m3' type-id='type-id-9' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.h' line='9' column='1'/>
</data-member>
</class-decl>
<pointer-type-def type-id='type-id-10' size-in-bits='64' id='type-id-11'/>
<pointer-type-def type-id='type-id-7' size-in-bits='64' id='type-id-4'/>
- <function-decl name='fun_obja' mangled-name='fun_obja' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun_obja'>
- <parameter type-id='type-id-11' name='s' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-obja.c' line='4' column='1'/>
+ <function-decl name='fun_obja' mangled-name='fun_obja' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun_obja'>
+ <parameter type-id='type-id-11' name='s' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-obja.c' line='4' column='1'/>
<return type-id='type-id-6'/>
</function-decl>
<type-decl name='void' id='type-id-6'/>
</abi-instr>
- <abi-instr address-size='64' path='PR26261-objb.c' comp-dir-path='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261' language='LANG_C89'>
+ <abi-instr address-size='64' path='PR26261-objb.c' comp-dir-path='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261' language='LANG_C99'>
<type-decl name='char' size-in-bits='8' id='type-id-1'/>
- <typedef-decl name='fn_ptr_type_b_t' type-id='type-id-12' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.h' line='1' column='1' id='type-id-13'/>
- <class-decl name='SB' size-in-bits='128' is-struct='yes' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.h' line='3' column='1' id='type-id-14'>
+ <typedef-decl name='fn_ptr_type_b_t' type-id='type-id-12' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.h' line='1' column='1' id='type-id-13'/>
+ <class-decl name='SB' size-in-bits='128' is-struct='yes' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.h' line='3' column='1' id='type-id-14'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='m1' type-id='type-id-5' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.h' line='5' column='1'/>
+ <var-decl name='m1' type-id='type-id-5' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.h' line='5' column='1'/>
</data-member>
<data-member access='public' layout-offset-in-bits='64'>
- <var-decl name='m2' type-id='type-id-13' visibility='default' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.h' line='6' column='1'/>
+ <var-decl name='m2' type-id='type-id-13' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.h' line='6' column='1'/>
</data-member>
</class-decl>
<pointer-type-def type-id='type-id-14' size-in-bits='64' id='type-id-15'/>
<pointer-type-def type-id='type-id-16' size-in-bits='64' id='type-id-12'/>
- <function-decl name='fun_objb' mangled-name='fun_objb' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun_objb'>
- <parameter type-id='type-id-15' name='s' filepath='/home/dodji/git/libabigail/patches/tests/data/test-read-dwarf/PR26261/PR26261-objb.c' line='4' column='1'/>
+ <function-decl name='fun_objb' mangled-name='fun_objb' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun_objb'>
+ <parameter type-id='type-id-15' name='s' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR26261/PR26261-objb.c' line='4' column='1'/>
<return type-id='type-id-6'/>
</function-decl>
<function-type size-in-bits='64' id='type-id-16'>
new file mode 100644
@@ -0,0 +1,58 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/PR26261/PR26261-exe'>
+ <elf-function-symbols>
+ <elf-symbol name='__libc_csu_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='__libc_csu_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_obja' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_objb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='wrapped_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='_IO_stdin_used' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-1'/>
+ <class-decl name='SA' size-in-bits='192' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-2'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='m3' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='SB' size-in-bits='128' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-6'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-7' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-3'/>
+ <typedef-decl name='fn_ptr_type_a2_t' type-id='type-id-8' id='type-id-5'/>
+ <typedef-decl name='fn_ptr_type_a_t' type-id='type-id-8' id='type-id-4'/>
+ <typedef-decl name='fn_ptr_type_b_t' type-id='type-id-9' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' alignment-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-6' size-in-bits='64' alignment-in-bits='64' id='type-id-11'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-12'/>
+ <pointer-type-def type-id='type-id-12' size-in-bits='64' alignment-in-bits='64' id='type-id-13'/>
+ <pointer-type-def type-id='type-id-14' size-in-bits='64' alignment-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-15' size-in-bits='64' alignment-in-bits='64' id='type-id-9'/>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-14'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-15'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <type-decl name='void' id='type-id-16'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,58 @@
+<abi-corpus version='2.0' path='data/test-read-common/PR26261/PR26261-exe'>
+ <elf-function-symbols>
+ <elf-symbol name='__libc_csu_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='__libc_csu_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='_start' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_obja' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='fun_objb' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='wrapped_call' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='_IO_stdin_used' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-1'/>
+ <class-decl name='SA' size-in-bits='192' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-2'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='m3' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='SB' size-in-bits='128' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-6'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m1' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='m2' type-id='type-id-7' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-3'/>
+ <typedef-decl name='fn_ptr_type_a2_t' type-id='type-id-8' id='type-id-5'/>
+ <typedef-decl name='fn_ptr_type_a_t' type-id='type-id-8' id='type-id-4'/>
+ <typedef-decl name='fn_ptr_type_b_t' type-id='type-id-9' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' alignment-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-6' size-in-bits='64' alignment-in-bits='64' id='type-id-11'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-12'/>
+ <pointer-type-def type-id='type-id-12' size-in-bits='64' alignment-in-bits='64' id='type-id-13'/>
+ <pointer-type-def type-id='type-id-14' size-in-bits='64' alignment-in-bits='64' id='type-id-8'/>
+ <pointer-type-def type-id='type-id-15' size-in-bits='64' alignment-in-bits='64' id='type-id-9'/>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-14'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <function-type size-in-bits='64' alignment-in-bits='8' id='type-id-15'>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-3'/>
+ <parameter type-id='type-id-1'/>
+ <return type-id='type-id-16'/>
+ </function-type>
+ <type-decl name='void' id='type-id-16'/>
+ </abi-instr>
+</abi-corpus>
similarity index 100%
rename from tests/data/test-read-dwarf/PR26261/PR26261-main.c
rename to tests/data/test-read-common/PR26261/PR26261-main.c
similarity index 100%
rename from tests/data/test-read-dwarf/PR26261/PR26261-obja.c
rename to tests/data/test-read-common/PR26261/PR26261-obja.c
similarity index 100%
rename from tests/data/test-read-dwarf/PR26261/PR26261-obja.h
rename to tests/data/test-read-common/PR26261/PR26261-obja.h
similarity index 100%
rename from tests/data/test-read-dwarf/PR26261/PR26261-objb.c
rename to tests/data/test-read-common/PR26261/PR26261-objb.c
similarity index 100%
rename from tests/data/test-read-dwarf/PR26261/PR26261-objb.h
rename to tests/data/test-read-common/PR26261/PR26261-objb.h
similarity index 100%
rename from tests/data/test-read-dwarf/PR27700/include-dir/priv.h
rename to tests/data/test-read-common/PR27700/include-dir/priv.h
similarity index 100%
rename from tests/data/test-read-dwarf/PR27700/include-dir/pub.h
rename to tests/data/test-read-common/PR27700/include-dir/pub.h
similarity index 100%
rename from tests/data/test-read-dwarf/PR27700/pub-incdir/inc.h
rename to tests/data/test-read-common/PR27700/pub-incdir/inc.h
new file mode 100644
@@ -0,0 +1,22 @@
+<abi-corpus version='2.0' path='data/test-read-common/PR27700/test-PR27700.o'>
+ <elf-function-symbols>
+ <elf-symbol name='foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='811c9dc5'/>
+ <enum-decl name='foo' linkage-name='foo' id='022218d8'>
+ <underlying-type type-id='811c9dc5'/>
+ <enumerator name='foo_e0' value='0'/>
+ <enumerator name='foo_e1' value='1'/>
+ <enumerator name='foo_e2' value='2'/>
+ <enumerator name='foo_e3' value='3'/>
+ </enum-decl>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <pointer-type-def type-id='022218d8' size-in-bits='64' alignment-in-bits='64' id='8750e847'/>
+ <function-decl name='foo' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <parameter type-id='8750e847'/>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
similarity index 60%
rename from tests/data/test-read-dwarf/PR27700/test-PR27700.abi
rename to tests/data/test-read-common/PR27700/test-PR27700-dwarf.abi
@@ -1,15 +1,15 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/PR27700/test-PR27700.o'>
+<abi-corpus version='2.0' path='data/test-read-common/PR27700/test-PR27700.o'>
<elf-function-symbols>
<elf-symbol name='foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test-PR27700.c' comp-dir-path='/home/dodji/git/libabigail/PR27700/tests/data/test-read-dwarf/PR27700' language='LANG_C11'>
+ <abi-instr address-size='64' path='test-PR27700.c' comp-dir-path='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR27700' language='LANG_C11'>
<type-decl name='unnamed-enum-underlying-type-32' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='9cac1fee'/>
<enum-decl name='foo' filepath='include-dir/priv.h' line='1' column='1' id='022218d8'>
<underlying-type type-id='9cac1fee'/>
</enum-decl>
<pointer-type-def type-id='022218d8' size-in-bits='64' id='8750e847'/>
- <function-decl name='foo' mangled-name='foo' filepath='/home/dodji/git/libabigail/PR27700/tests/data/test-read-dwarf/PR27700/test-PR27700.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
- <parameter type-id='8750e847' name='c' filepath='/home/dodji/git/libabigail/PR27700/tests/data/test-read-dwarf/PR27700/test-PR27700.c' line='4' column='1'/>
+ <function-decl name='foo' mangled-name='foo' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR27700/test-PR27700.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
+ <parameter type-id='8750e847' name='c' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/PR27700/test-PR27700.c' line='4' column='1'/>
<return type-id='48b5725f'/>
</function-decl>
<type-decl name='void' id='48b5725f'/>
similarity index 55%
rename from tests/data/test-read-dwarf/PR27700/test-PR27700.c
rename to tests/data/test-read-common/PR27700/test-PR27700.c
@@ -1,5 +1,7 @@
#include "include-dir/priv.h"
+/* gcc -I. -gctf -gdwarf -c -o test-PR27700.o test-PR27700.c */
+
void
foo(enum foo* c __attribute__((unused)))
{
new file mode 100644
@@ -0,0 +1,56 @@
+<abi-corpus version='2.0' path='data/test-read-common/test-PR26568-1.o'>
+ <elf-function-symbols>
+ <elf-symbol name='fun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <class-decl name='A' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='type-id-1'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='' type-id='type-id-2' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='x' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='y' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='' size-in-bits='32' alignment-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-3'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='x' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='' size-in-bits='64' alignment-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-5'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='y' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-4'/>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <union-decl name='' size-in-bits='64' is-anonymous='yes' visibility='default' id='type-id-2'>
+ <data-member access='public'>
+ <var-decl name='' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='x' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='y' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-7'/>
+ <function-decl name='fun' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <parameter type-id='type-id-7'/>
+ <return type-id='type-id-8'/>
+ </function-decl>
+ <type-decl name='void' id='type-id-8'/>
+ </abi-instr>
+</abi-corpus>
similarity index 54%
rename from tests/data/test-read-dwarf/test-PR26568-1.o.abi
rename to tests/data/test-read-common/test-PR26568-1-dwarf.o.abi
@@ -1,16 +1,16 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test-PR26568-1.o'>
+<abi-corpus version='2.0' path='data/test-read-common/test-PR26568-1.o'>
<elf-function-symbols>
<elf-symbol name='fun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test-PR26568-1.c' comp-dir-path='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf' language='LANG_C89'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test-PR26568-1.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C99'>
<type-decl name='int' size-in-bits='32' id='type-id-1'/>
<type-decl name='long int' size-in-bits='64' id='type-id-2'/>
- <class-decl name='A' size-in-bits='64' is-struct='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='1' column='1' id='type-id-3'>
+ <class-decl name='A' size-in-bits='64' is-struct='yes' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='1' column='1' id='type-id-3'>
<data-member access='public' layout-offset-in-bits='0'>
<var-decl name='' type-id='type-id-4' visibility='default'/>
</data-member>
</class-decl>
- <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='2' column='1' id='type-id-4'>
+ <union-decl name='__anonymous_union__' size-in-bits='64' is-anonymous='yes' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='2' column='1' id='type-id-4'>
<data-member access='public'>
<var-decl name='' type-id='type-id-5' visibility='default'/>
</data-member>
@@ -18,19 +18,19 @@
<var-decl name='' type-id='type-id-6' visibility='default'/>
</data-member>
</union-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='3' column='1' id='type-id-5'>
+ <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='3' column='1' id='type-id-5'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='x' type-id='type-id-1' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='4' column='1'/>
+ <var-decl name='x' type-id='type-id-1' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='4' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='6' column='1' id='type-id-6'>
+ <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='6' column='1' id='type-id-6'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='y' type-id='type-id-2' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='7' column='1'/>
+ <var-decl name='y' type-id='type-id-2' visibility='default' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='7' column='1'/>
</data-member>
</class-decl>
<pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-7'/>
- <function-decl name='fun' mangled-name='fun' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun'>
- <parameter type-id='type-id-7' name='a' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-1.c' line='12' column='1'/>
+ <function-decl name='fun' mangled-name='fun' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='12' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun'>
+ <parameter type-id='type-id-7' name='a' filepath='./tests/data/test-read-common/test-PR26568-1.c' line='12' column='1'/>
<return type-id='type-id-8'/>
</function-decl>
<type-decl name='void' id='type-id-8'/>
similarity index 100%
rename from tests/data/test-read-dwarf/test-PR26568-1.c
rename to tests/data/test-read-common/test-PR26568-1.c
new file mode 100644
@@ -0,0 +1,39 @@
+<abi-corpus version='2.0' path='data/test-read-common/test-PR26568-2.o'>
+ <elf-function-symbols>
+ <elf-symbol name='fun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <class-decl name='' size-in-bits='32' alignment-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-1'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='x' type-id='type-id-2' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='' size-in-bits='64' alignment-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-3'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='y' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-2'/>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='type-id-4'/>
+ <union-decl name='A' size-in-bits='64' visibility='default' id='type-id-5'>
+ <data-member access='public'>
+ <var-decl name='' type-id='type-id-1' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='x' type-id='type-id-2' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='y' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <function-decl name='fun' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <parameter type-id='type-id-6'/>
+ <return type-id='type-id-7'/>
+ </function-decl>
+ <type-decl name='void' id='type-id-7'/>
+ </abi-instr>
+</abi-corpus>
similarity index 59%
rename from tests/data/test-read-dwarf/test-PR26568-2.o.abi
rename to tests/data/test-read-common/test-PR26568-2-dwarf.o.abi
@@ -1,11 +1,11 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test-PR26568-2.o'>
+<abi-corpus version='2.0' path='data/test-read-common/test-PR26568-2.o'>
<elf-function-symbols>
<elf-symbol name='fun' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test-PR26568-2.c' comp-dir-path='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf' language='LANG_C89'>
+ <abi-instr address-size='64' path='test-PR26568-2.c' comp-dir-path='/home/byby/oracle/src/libabigail/tests/data/test-read-common' language='LANG_C11'>
<type-decl name='int' size-in-bits='32' id='type-id-1'/>
<type-decl name='long int' size-in-bits='64' id='type-id-2'/>
- <union-decl name='A' size-in-bits='64' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='1' column='1' id='type-id-3'>
+ <union-decl name='A' size-in-bits='64' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='1' column='1' id='type-id-3'>
<data-member access='public'>
<var-decl name='' type-id='type-id-4' visibility='default'/>
</data-member>
@@ -13,19 +13,19 @@
<var-decl name='' type-id='type-id-5' visibility='default'/>
</data-member>
</union-decl>
- <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='2' column='1' id='type-id-4'>
+ <class-decl name='__anonymous_struct__' size-in-bits='32' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='2' column='1' id='type-id-4'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='x' type-id='type-id-1' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='3' column='1'/>
+ <var-decl name='x' type-id='type-id-1' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='3' column='1'/>
</data-member>
</class-decl>
- <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='5' column='1' id='type-id-5'>
+ <class-decl name='__anonymous_struct__1' size-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='5' column='1' id='type-id-5'>
<data-member access='public' layout-offset-in-bits='0'>
- <var-decl name='y' type-id='type-id-2' visibility='default' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='6' column='1'/>
+ <var-decl name='y' type-id='type-id-2' visibility='default' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='6' column='1'/>
</data-member>
</class-decl>
<pointer-type-def type-id='type-id-3' size-in-bits='64' id='type-id-6'/>
- <function-decl name='fun' mangled-name='fun' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='10' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun'>
- <parameter type-id='type-id-6' name='a' filepath='/home/dodji/git/libabigail/fixes/tests/data/test-read-dwarf/test-PR26568-2.c' line='10' column='1'/>
+ <function-decl name='fun' mangled-name='fun' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='10' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='fun'>
+ <parameter type-id='type-id-6' name='a' filepath='/home/byby/oracle/src/libabigail/tests/data/test-read-common/test-PR26568-2.c' line='10' column='1'/>
<return type-id='type-id-7'/>
</function-decl>
<type-decl name='void' id='type-id-7'/>
similarity index 68%
rename from tests/data/test-read-dwarf/test-PR26568-2.c
rename to tests/data/test-read-common/test-PR26568-2.c
@@ -1,3 +1,5 @@
+/* gcc -gctf -gdwarf -c -o test-PR26568-2.o test-PR26568-2.c */
+
union A {
struct {
int x;
new file mode 100644
@@ -0,0 +1,14 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so' soname='test3.so.1'>
+ <elf-needed>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
similarity index 100%
rename from tests/data/test-read-dwarf/test3-alias-1.suppr
rename to tests/data/test-read-common/test3-alias-1.suppr
new file mode 100644
@@ -0,0 +1,16 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so' soname='test3.so.1'>
+ <elf-needed>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
similarity index 100%
rename from tests/data/test-read-dwarf/test3-alias-2.suppr
rename to tests/data/test-read-common/test3-alias-2.suppr
new file mode 100644
@@ -0,0 +1,14 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so' soname='test3.so.1'>
+ <elf-needed>
+ <dependency name='libc.so.6'/>
+ </elf-needed>
+ <elf-function-symbols>
+ <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
similarity index 100%
rename from tests/data/test-read-dwarf/test3-alias-3.suppr
rename to tests/data/test-read-common/test3-alias-3.suppr
new file mode 100644
@@ -0,0 +1,11 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so'>
+ <elf-function-symbols>
+ <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='_init' mangled-name='_init' filepath='./tests/data/test-read-common/test3.c' line='17' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='_init'>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
similarity index 100%
rename from tests/data/test-read-dwarf/test3-alias-4.suppr
rename to tests/data/test-read-common/test3-alias-4.suppr
new file mode 100644
@@ -0,0 +1,10 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so'>
+ <elf-function-symbols>
+ <elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' alias='foo__,__foo__,__foo' is-defined='yes'/>
+ <elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,10 @@
+<abi-corpus version='2.0' path='data/test-read-common/test3.so'>
+ <elf-function-symbols>
+ <elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' alias='foo__,__foo__,__foo' is-defined='yes'/>
+ <elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ </abi-instr>
+</abi-corpus>
similarity index 50%
rename from tests/data/test-read-dwarf/test3.so.abi
rename to tests/data/test-read-common/test3-dwarf.so.abi
@@ -1,17 +1,15 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
+<abi-corpus version='2.0' path='data/test-read-common/test3.so' soname='test3.so.1'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
<elf-function-symbols>
<elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' alias='foo,foo__,__foo__' is-defined='yes'/>
<elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
<return type-id='type-id-1'/>
</function-decl>
<type-decl name='void' id='type-id-1'/>
similarity index 50%
rename from tests/data/test-read-dwarf/test3.so.hash.abi
rename to tests/data/test-read-common/test3-dwarf.so.hash.abi
@@ -1,17 +1,15 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
+<abi-corpus version='2.0' path='data/test-read-common/test3.so' soname='test3.so.1'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
<elf-function-symbols>
<elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' alias='foo,foo__,__foo__' is-defined='yes'/>
<elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
<elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test3.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
+ <function-decl name='__foo' mangled-name='__foo' filepath='./tests/data/test-read-common/test3.c' line='9' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
<return type-id='48b5725f'/>
</function-decl>
<type-decl name='void' id='48b5725f'/>
similarity index 71%
rename from tests/data/test-read-dwarf/test3.c
rename to tests/data/test-read-common/test3.c
@@ -1,4 +1,5 @@
// Test file for creating multiple alias for a symbol
+// gcc -shared -gctf -g -mtune=generic -march=x86-64 -fPIC -Wl,-soname=test3.so.1 -o test3.so test3.c
void __foo(void);
void foo(void) __attribute__((weak, alias("__foo")));
new file mode 100755
GIT binary patch
literal 16424
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
E0)zhFKmY&$
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,14 @@
+<abi-corpus version='2.0' path='data/test-read-common/test4.so'>
+ <elf-function-symbols>
+ <elf-symbol name='cpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-1'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='type-id-2'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-3'/>
+ <qualified-type-def type-id='type-id-3' restrict='yes' id='type-id-4'/>
+ <qualified-type-def type-id='type-id-1' const='yes' id='type-id-5'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <qualified-type-def type-id='type-id-6' restrict='yes' id='type-id-7'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,14 @@
+<abi-corpus version='2.0' path='data/test-read-common/test4.so'>
+ <elf-function-symbols>
+ <elf-symbol name='cpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='a84c031d'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <pointer-type-def type-id='a84c031d' size-in-bits='64' alignment-in-bits='64' id='26a90f95'/>
+ <qualified-type-def type-id='26a90f95' restrict='yes' id='266fe297'/>
+ <qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
+ <pointer-type-def type-id='9b45d938' size-in-bits='64' alignment-in-bits='64' id='80f4b756'/>
+ <qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/>
+ </abi-instr>
+</abi-corpus>
similarity index 51%
rename from tests/data/test-read-dwarf/test4.so.abi
rename to tests/data/test-read-common/test4-dwarf.so.abi
@@ -1,11 +1,11 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test4.so'>
+<abi-corpus version='2.0' path='data/test-read-common/test4.so' soname='test4.so.1'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
<elf-function-symbols>
<elf-symbol name='cpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test4.c' comp-dir-path='/home/mark/src/tests' language='LANG_C89'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test4.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
<type-decl name='char' size-in-bits='8' id='type-id-1'/>
<type-decl name='unsigned int' size-in-bits='32' id='type-id-2'/>
<pointer-type-def type-id='type-id-1' size-in-bits='64' id='type-id-3'/>
@@ -13,10 +13,10 @@
<qualified-type-def type-id='type-id-1' const='yes' id='type-id-5'/>
<pointer-type-def type-id='type-id-5' size-in-bits='64' id='type-id-6'/>
<qualified-type-def type-id='type-id-6' restrict='yes' id='type-id-7'/>
- <function-decl name='cpy' mangled-name='cpy' filepath='/home/mark/src/tests/test4.c' line='2' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
- <parameter type-id='type-id-4' name='s1' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
- <parameter type-id='type-id-7' name='s2' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
- <parameter type-id='type-id-2' name='n' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
+ <function-decl name='cpy' mangled-name='cpy' filepath='./tests/data/test-read-common/test4.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
+ <parameter type-id='type-id-4' name='s1' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
+ <parameter type-id='type-id-7' name='s2' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
+ <parameter type-id='type-id-2' name='n' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
<return type-id='type-id-3'/>
</function-decl>
</abi-instr>
similarity index 51%
rename from tests/data/test-read-dwarf/test4.so.hash.abi
rename to tests/data/test-read-common/test4-dwarf.so.hash.abi
@@ -1,11 +1,11 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test4.so'>
+<abi-corpus version='2.0' path='data/test-read-common/test4.so' soname='test4.so.1'>
<elf-needed>
<dependency name='libc.so.6'/>
</elf-needed>
<elf-function-symbols>
<elf-symbol name='cpy' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
</elf-function-symbols>
- <abi-instr address-size='64' path='test4.c' comp-dir-path='/home/mark/src/tests' language='LANG_C89'>
+ <abi-instr address-size='64' path='./tests/data/test-read-common/test4.c' comp-dir-path='/home/byby/oracle/src/libabigail' language='LANG_C11'>
<type-decl name='char' size-in-bits='8' id='a84c031d'/>
<type-decl name='unsigned int' size-in-bits='32' id='f0981eeb'/>
<pointer-type-def type-id='a84c031d' size-in-bits='64' id='26a90f95'/>
@@ -13,10 +13,10 @@
<qualified-type-def type-id='a84c031d' const='yes' id='9b45d938'/>
<pointer-type-def type-id='9b45d938' size-in-bits='64' id='80f4b756'/>
<qualified-type-def type-id='80f4b756' restrict='yes' id='9d26089a'/>
- <function-decl name='cpy' mangled-name='cpy' filepath='/home/mark/src/tests/test4.c' line='2' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
- <parameter type-id='266fe297' name='s1' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
- <parameter type-id='9d26089a' name='s2' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
- <parameter type-id='f0981eeb' name='n' filepath='/home/mark/src/tests/test4.c' line='2' column='1'/>
+ <function-decl name='cpy' mangled-name='cpy' filepath='./tests/data/test-read-common/test4.c' line='4' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='cpy'>
+ <parameter type-id='266fe297' name='s1' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
+ <parameter type-id='9d26089a' name='s2' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
+ <parameter type-id='f0981eeb' name='n' filepath='./tests/data/test-read-common/test4.c' line='4' column='1'/>
<return type-id='26a90f95'/>
</function-decl>
</abi-instr>
new file mode 100644
@@ -0,0 +1,11 @@
+// gcc -shared -gctf -g -mtune=generic -march=x86-64 -fPIC -Wl,-soname=test4.so.1 -o test4.so test4.c
+
+char *
+cpy (char * restrict s1, const char * restrict s2, unsigned int n)
+{
+ char *t1 = s1;
+ const char *t2 = s2;
+ while(n-- > 0)
+ *t1++ = *t2++;
+ return s1;
+}
new file mode 100755
GIT binary patch
literal 16672
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
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,16 @@
+
+// function aliases
+
+void main_func(void);
+void alias_func(void) __attribute__((weak, alias("main_func")));
+
+void main_func(void)
+{
+
+}
+
+// variables aliases
+
+int main_var;
+extern int alias_var __attribute__((weak, alias("main_var")));
+
new file mode 100644
@@ -0,0 +1,19 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-alias.o'>
+ <elf-function-symbols>
+ <elf-symbol name='alias_func' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main_func' type='func-type' binding='global-binding' visibility='default-visibility' alias='alias_func,main_var,alias_var' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='alias_var' size='4' type='object-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main_var' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='95e97e5e'/>
+ <function-decl name='main_func' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <return type-id='48b5725f'/>
+ </function-decl>
+ <var-decl name='alias_var' type-id='95e97e5e' mangled-name='alias_var' visibility='default'/>
+ <var-decl name='main_var' type-id='95e97e5e' mangled-name='main_var' visibility='default'/>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,8 @@
+struct A;
+struct B { struct A *a; };
+struct A { struct B b; long foo; long bar; struct B b2; };
+
+typedef struct A a_array[50];
+a_array *foo __attribute__((__used__));
+
+static struct A a __attribute ((__used__));
new file mode 100644
@@ -0,0 +1,36 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-ambiguous-struct-A.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='foo' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <array-type-def dimensions='1' type-id='3ed987a4' size-in-bits='12800' alignment-in-bits='64' id='e022be37'>
+ <subrange length='50' type-id='7359adad' id='3c1860ce'/>
+ </array-type-def>
+ <class-decl name='A' size-in-bits='256' alignment-in-bits='64' is-struct='yes' visibility='default' id='3ed987a4'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='b' type-id='41d98c5d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='foo' type-id='bd54fe1a' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='bar' type-id='bd54fe1a' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='b2' type-id='41d98c5d' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='B' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='41d98c5d'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='a' type-id='84d5ac12' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='bd54fe1a'/>
+ <typedef-decl name='a_array' type-id='e022be37' id='1c12b755'/>
+ <type-decl name='unsigned long int' size-in-bits='64' alignment-in-bits='64' id='7359adad'/>
+ <pointer-type-def type-id='3ed987a4' size-in-bits='64' alignment-in-bits='64' id='84d5ac12'/>
+ <pointer-type-def type-id='1c12b755' size-in-bits='64' alignment-in-bits='64' id='55cd64e8'/>
+ <var-decl name='a' type-id='3ed987a4' mangled-name='a' visibility='default'/>
+ <var-decl name='foo' type-id='55cd64e8' mangled-name='foo' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,5 @@
+struct A;
+struct B { struct A *a; };
+struct A { struct B b; int foo; struct B b2; };
+
+static struct A a __attribute__((__used__));
new file mode 100644
@@ -0,0 +1,23 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-ambiguous-struct-B.o'>
+ <abi-instr address-size='64' language='LANG_C'>
+ <class-decl name='A' size-in-bits='192' alignment-in-bits='64' is-struct='yes' visibility='default' id='3ed987a4'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='b' type-id='41d98c5d' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='foo' type-id='95e97e5e' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='b2' type-id='41d98c5d' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='B' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='41d98c5d'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='a' type-id='84d5ac12' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='95e97e5e'/>
+ <pointer-type-def type-id='3ed987a4' size-in-bits='64' alignment-in-bits='64' id='84d5ac12'/>
+ <var-decl name='a' type-id='3ed987a4' mangled-name='a' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,5 @@
+typedef long a_t;
+typedef long b_t;
+
+a_t *a;
+b_t ignore2;
new file mode 100644
@@ -0,0 +1,14 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-conflicting-type-syms-a.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='a' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='ignore2' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='bd54fe1a'/>
+ <typedef-decl name='a_t' type-id='bd54fe1a' id='40acc204'/>
+ <typedef-decl name='b_t' type-id='bd54fe1a' id='b3d2db81'/>
+ <pointer-type-def type-id='40acc204' size-in-bits='64' alignment-in-bits='64' id='c6fd4117'/>
+ <var-decl name='a' type-id='c6fd4117' mangled-name='a' visibility='default'/>
+ <var-decl name='ignore2' type-id='b3d2db81' mangled-name='ignore2' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,5 @@
+typedef long a_t;
+typedef long b_t;
+
+a_t b;
+b_t ignore1;
new file mode 100644
@@ -0,0 +1,13 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-conflicting-type-syms-b.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='b' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='ignore1' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='bd54fe1a'/>
+ <typedef-decl name='a_t' type-id='bd54fe1a' id='40acc204'/>
+ <typedef-decl name='b_t' type-id='bd54fe1a' id='b3d2db81'/>
+ <var-decl name='b' type-id='40acc204' mangled-name='b' visibility='default'/>
+ <var-decl name='ignore1' type-id='b3d2db81' mangled-name='ignore1' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,8 @@
+/* Looked up item by item. */
+enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 };
+
+/* Looked up via both sorts of iterator in turn. */
+enum ie { IENUMSAMPLE_1 = -10, IENUMSAMPLE_2, IENUMSAMPLE_3 };
+
+enum e foo;
+enum ie bar;
new file mode 100644
@@ -0,0 +1,24 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-enum-ctf.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='bar' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='type-id-1'/>
+ <enum-decl name='e' linkage-name='e' id='type-id-2'>
+ <underlying-type type-id='type-id-1'/>
+ <enumerator name='ENUMSAMPLE_1' value='0'/>
+ <enumerator name='ENUMSAMPLE_2' value='1'/>
+ </enum-decl>
+ <enum-decl name='ie' linkage-name='ie' id='type-id-3'>
+ <underlying-type type-id='type-id-1'/>
+ <enumerator name='IENUMSAMPLE_1' value='-10'/>
+ <enumerator name='IENUMSAMPLE_2' value='-9'/>
+ <enumerator name='IENUMSAMPLE_3' value='-8'/>
+ </enum-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-4'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='type-id-5'/>
+ <var-decl name='foo' type-id='type-id-2' mangled-name='foo' visibility='default'/>
+ <var-decl name='bar' type-id='type-id-3' mangled-name='bar' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,10 @@
+/* Looked up item by item. */
+enum e { ENUMSAMPLE_1 = 0, ENUMSAMPLE_2 = 1 };
+
+/* Looked up via both sorts of iterator in turn. */
+enum ie { IE_0 = -10, IE_1, IE_2, IE_3, IE_4, IE_5, IE_6, IE_7, IE_8, IE_9, IE_A, IE_B, IE_C, IE_D, IE_E, IE_F,
+ IE_10, IE_11, IE_12, IE_13, IE_14, IE_15, IE_16, IE_17, IE_18, IE_19, IE_1A, IE_1B, IE_1C, IE_1D, IE_1E, IE_1F,
+ IE_20, IE_21, IE_22, IE_23, IE_24, IE_25, IE_26, IE_27, IE_28, IE_29, IE_2A, IE_2B, IE_2C, IE_2D, IE_2E, IE_2F};
+
+enum e foo;
+enum ie bar;
new file mode 100644
@@ -0,0 +1,69 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-enum-many-ctf.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='bar' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='811c9dc5'/>
+ <enum-decl name='e' linkage-name='e' id='a6c2eddf'>
+ <underlying-type type-id='811c9dc5'/>
+ <enumerator name='ENUMSAMPLE_1' value='0'/>
+ <enumerator name='ENUMSAMPLE_2' value='1'/>
+ </enum-decl>
+ <enum-decl name='ie' linkage-name='ie' id='1ee696ca'>
+ <underlying-type type-id='811c9dc5'/>
+ <enumerator name='IE_0' value='-10'/>
+ <enumerator name='IE_1' value='-9'/>
+ <enumerator name='IE_2' value='-8'/>
+ <enumerator name='IE_3' value='-7'/>
+ <enumerator name='IE_4' value='-6'/>
+ <enumerator name='IE_5' value='-5'/>
+ <enumerator name='IE_6' value='-4'/>
+ <enumerator name='IE_7' value='-3'/>
+ <enumerator name='IE_8' value='-2'/>
+ <enumerator name='IE_9' value='-1'/>
+ <enumerator name='IE_A' value='0'/>
+ <enumerator name='IE_B' value='1'/>
+ <enumerator name='IE_C' value='2'/>
+ <enumerator name='IE_D' value='3'/>
+ <enumerator name='IE_E' value='4'/>
+ <enumerator name='IE_F' value='5'/>
+ <enumerator name='IE_10' value='6'/>
+ <enumerator name='IE_11' value='7'/>
+ <enumerator name='IE_12' value='8'/>
+ <enumerator name='IE_13' value='9'/>
+ <enumerator name='IE_14' value='10'/>
+ <enumerator name='IE_15' value='11'/>
+ <enumerator name='IE_16' value='12'/>
+ <enumerator name='IE_17' value='13'/>
+ <enumerator name='IE_18' value='14'/>
+ <enumerator name='IE_19' value='15'/>
+ <enumerator name='IE_1A' value='16'/>
+ <enumerator name='IE_1B' value='17'/>
+ <enumerator name='IE_1C' value='18'/>
+ <enumerator name='IE_1D' value='19'/>
+ <enumerator name='IE_1E' value='20'/>
+ <enumerator name='IE_1F' value='21'/>
+ <enumerator name='IE_20' value='22'/>
+ <enumerator name='IE_21' value='23'/>
+ <enumerator name='IE_22' value='24'/>
+ <enumerator name='IE_23' value='25'/>
+ <enumerator name='IE_24' value='26'/>
+ <enumerator name='IE_25' value='27'/>
+ <enumerator name='IE_26' value='28'/>
+ <enumerator name='IE_27' value='29'/>
+ <enumerator name='IE_28' value='30'/>
+ <enumerator name='IE_29' value='31'/>
+ <enumerator name='IE_2A' value='32'/>
+ <enumerator name='IE_2B' value='33'/>
+ <enumerator name='IE_2C' value='34'/>
+ <enumerator name='IE_2D' value='35'/>
+ <enumerator name='IE_2E' value='36'/>
+ <enumerator name='IE_2F' value='37'/>
+ </enum-decl>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='95e97e5e'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <var-decl name='foo' type-id='a6c2eddf' mangled-name='foo' visibility='default'/>
+ <var-decl name='bar' type-id='1ee696ca' mangled-name='bar' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1 @@
+enum {red1, green1, blue1} primary1;
new file mode 100644
@@ -0,0 +1,16 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-enum-symbol-ctf.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='primary1' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='811c9dc5'/>
+ <enum-decl name='' is-anonymous='yes' id='08f5ca17'>
+ <underlying-type type-id='811c9dc5'/>
+ <enumerator name='red1' value='0'/>
+ <enumerator name='green1' value='1'/>
+ <enumerator name='blue1' value='2'/>
+ </enum-decl>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <var-decl name='primary1' type-id='08f5ca17' mangled-name='primary1' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,28 @@
+#include <unistd.h>
+
+struct foo_t
+{
+ int foo;
+ size_t bar;
+ const char *baz;
+ struct foo_t *self;
+ union
+ {
+ double should_not_appear;
+ char *nor_should_this;
+ } named;
+ struct
+ {
+ long unnamed_sub_member;
+ union
+ {
+ double one_more_level;
+ long yes_really_one_more;
+ };
+ };
+ struct {}; /* Empty ones */
+ union {};
+ int after_the_end;
+};
+
+struct foo_t used;
new file mode 100644
@@ -0,0 +1,96 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test-struct-iteration-ctf.o'>
+ <elf-variable-symbols>
+ <elf-symbol name='used' size='64' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-1'/>
+ <class-decl name='' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-2'/>
+ <class-decl name='' size-in-bits='128' alignment-in-bits='64' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-3'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='unnamed_sub_member' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='one_more_level' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='yes_really_one_more' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='foo_t' size-in-bits='512' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-7'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='foo' type-id='type-id-8' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='bar' type-id='type-id-9' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='128'>
+ <var-decl name='baz' type-id='type-id-10' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='192'>
+ <var-decl name='self' type-id='type-id-11' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='256'>
+ <var-decl name='named' type-id='type-id-12' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='unnamed_sub_member' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='type-id-5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='one_more_level' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='yes_really_one_more' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='type-id-2' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='64'>
+ <var-decl name='' type-id='type-id-13' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='448'>
+ <var-decl name='after_the_end' type-id='type-id-8' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='double' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-8'/>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='type-id-4'/>
+ <type-decl name='short int' size-in-bits='16' alignment-in-bits='16' id='type-id-14'/>
+ <type-decl name='signed char' size-in-bits='8' alignment-in-bits='8' id='type-id-15'/>
+ <typedef-decl name='size_t' type-id='type-id-16' id='type-id-9'/>
+ <union-decl name='' size-in-bits='64' is-anonymous='yes' visibility='default' id='type-id-12'>
+ <data-member access='public'>
+ <var-decl name='should_not_appear' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='nor_should_this' type-id='type-id-17' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <union-decl name='' is-anonymous='yes' visibility='default' id='type-id-13'/>
+ <union-decl name='' size-in-bits='64' is-anonymous='yes' visibility='default' id='type-id-5'>
+ <data-member access='public'>
+ <var-decl name='one_more_level' type-id='type-id-6' visibility='default'/>
+ </data-member>
+ <data-member access='public'>
+ <var-decl name='yes_really_one_more' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </union-decl>
+ <type-decl name='unsigned char' size-in-bits='8' alignment-in-bits='8' id='type-id-18'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='type-id-19'/>
+ <type-decl name='unsigned long int' size-in-bits='64' alignment-in-bits='64' id='type-id-16'/>
+ <type-decl name='unsigned short int' size-in-bits='16' alignment-in-bits='16' id='type-id-20'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-17'/>
+ <qualified-type-def type-id='type-id-1' const='yes' id='type-id-21'/>
+ <pointer-type-def type-id='type-id-21' size-in-bits='64' alignment-in-bits='64' id='type-id-10'/>
+ <pointer-type-def type-id='type-id-7' size-in-bits='64' alignment-in-bits='64' id='type-id-11'/>
+ <var-decl name='used' type-id='type-id-7' mangled-name='used' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
GIT binary patch
literal 2600
zcmbtWzi%8x6n<-)O9=5{ClC;!*dQbvf%ooQAczn;V<oXfKqyg^C=l6u>$Pvm-L17d
zj(kW6Xpo{5&>&G#rlbR;6p>Q!7tqi^Lq!8r>EQcj-uTw5Lqg(7-_CpA`!zfF=I%Z@
zf9b+Z5QvvR-js>uS&@5<iQctpSDG>}SJ&_Swtna1N9%XbKe{V7AJYDw{+kbNoxgsW
zo3Y_|{OT2~&jT+4U0@yf6ky~FXnq{}5#R*y1n?Bl1m=OKfm6V3;4|PpkO4me-vVC&
zKLJ0h%{<1kCSzHXF|5Tr)@LqzupayB`!|k4?*b<QNMjC<P(hn<h?$A7LK=M01z?rd
z#6SCv+UnQx67fi{sZVPM@2jo7gDthS*Q_(8c}x{7d?oI~?wkA<Bt(w+nl#Y+IojXQ
zfIJD@16Y@PR(Xv!_jzy%B8Rx|oX6Js!N$4Xs;(@mf~EQRM1PfM$j=3GihJefgI-pD
zhU`R|w#FbI?Sy-yGTRxYTVXabGTlh}aUo?tFU;X+O{}<CgRqsUSf5Etv$31QP7AR{
zTom!xskie%Y_dTr+k-qdj&o{hVzXDa#jPD(<%$g3E-cAMrDhapQDljcVVsR*JI^;d
z((32KwACB;#;v@FlR?@li=;KkdT}q?iL*hATPa&xv5Bp^T%_^Va$>fv)s7N>UKiKa
z&V@@C-@SS^?5srXs2#4fS2`UaTuS$M(;^$DBNGqKx&)mGc?>3!@L2~B$ax9W<{VIX
zFDSuBmnGO=2u>eAa`a0$d4CCtouAd_!sjz<^NqI=0FJ&l=!Ec&iT7V{ep1tfedpxQ
zzo+?T?X({DaK;wJUyI2s@;icjsNqYxp0T`}a8h1tS$@`j7m@d8a!&b6Bq5$(g}!J{
z(b5Mz<Jk8-N85Wz^#*XFvVVW)HkJ3bJu7f_i1;!8xB0YD)ye$#A$0R+M-gp8_JZ&n
z{8`ZM@&WO@-=9R~cxd7tR#UjO?=_R|8;Llw67|YbB8;m<Medj+A94~U8s#R9Fni0m
zJIO7zcSd{BZjobN%@{f9Adb@h#&!`8Q@4@-`8<vM0I2+o*@|8J6rsN=jIGKU8003C
z=DZ(hQ1$Fc)$NzS@m|#PH^EV^yXD{+9%xQ^1xtNT^lb70xlt=zkL@6aTzy~nHP6pA
zYf<X<>)@E*rn4dsH2>uaN7eWD>suAB8v1)}-`?l*ynPu8f1B(3|3mZZ`{G$w<wF>(
zS<eskMeFBZ&*u~}v<n;(9Vp+Q_m|&EKL1$_p4OYLeeECW3-f;pU#XtYn$wQzYkrYK
X>bInRe*8_HmfzO>8(U@asOSF!-{%E7
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,64 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test0'>
+ <elf-function-symbols>
+ <elf-symbol name='foo_1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='status' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_array' size='40' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_const' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_float' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_pointer' size='8' type='object-type' binding='global-binding' visibility='default-visibility' alias='test_volatile,test_const,foo_1' is-defined='yes'/>
+ <elf-symbol name='test_restrict' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_volatile' size='2' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='1' alignment-in-bits='8' id='type-id-1'/>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='type-id-2'/>
+ <class-decl name='S' size-in-bits='32' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-3'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='' size-in-bits='32' alignment-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' id='type-id-5'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='status0' type-id='type-id-1' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='1'>
+ <var-decl name='status1' type-id='type-id-1' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='float' size-in-bits='32' alignment-in-bits='32' id='type-id-6'/>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='type-id-4'/>
+ <array-type-def dimensions='1' type-id='type-id-4' size-in-bits='320' alignment-in-bits='32' id='type-id-7'>
+ <subrange length='10' type-id='type-id-8' id='type-id-9'/>
+ </array-type-def>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='type-id-10'/>
+ <type-decl name='short int' size-in-bits='16' alignment-in-bits='16' id='type-id-11'/>
+ <type-decl name='signed char' size-in-bits='8' alignment-in-bits='8' id='type-id-12'/>
+ <type-decl name='unsigned char' size-in-bits='8' alignment-in-bits='8' id='type-id-13'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='type-id-14'/>
+ <type-decl name='unsigned long int' size-in-bits='64' alignment-in-bits='64' id='type-id-8'/>
+ <type-decl name='unsigned short int' size-in-bits='16' alignment-in-bits='16' id='type-id-15'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' alignment-in-bits='64' id='type-id-16'/>
+ <pointer-type-def type-id='type-id-2' size-in-bits='64' alignment-in-bits='64' id='type-id-17'/>
+ <qualified-type-def type-id='type-id-3' const='yes' id='type-id-18'/>
+ <pointer-type-def type-id='type-id-10' size-in-bits='64' alignment-in-bits='64' id='type-id-19'/>
+ <qualified-type-def type-id='type-id-19' restrict='yes' id='type-id-20'/>
+ <qualified-type-def type-id='type-id-11' volatile='yes' id='type-id-21'/>
+ <var-decl name='status' type-id='type-id-5' mangled-name='status' visibility='default'/>
+ <var-decl name='test_pointer' type-id='type-id-17' mangled-name='test_pointer' visibility='default'/>
+ <var-decl name='test_const' type-id='type-id-18' mangled-name='test_const' visibility='default'/>
+ <var-decl name='test_float' type-id='type-id-6' mangled-name='test_float' visibility='default'/>
+ <function-decl name='foo_1' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <parameter type-id='type-id-16'/>
+ <return type-id='type-id-4'/>
+ </function-decl>
+ <function-decl name='main' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <return type-id='type-id-4'/>
+ </function-decl>
+ <var-decl name='test_array' type-id='type-id-7' mangled-name='test_array' visibility='default'/>
+ <var-decl name='test_restrict' type-id='type-id-20' mangled-name='test_restrict' visibility='default'/>
+ <var-decl name='test_volatile' type-id='type-id-21' mangled-name='test_volatile' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,32 @@
+
+#include <stdio.h>
+
+char* test_pointer = NULL;
+int test_array[10] = {0};
+volatile short test_volatile = 1;
+float test_float = 0.0;
+
+struct {
+ unsigned int status0 : 1;
+ unsigned int status1 : 1;
+} status;
+
+
+struct S
+{
+ int m0;
+};
+
+const struct S test_const;
+long* restrict test_restrict;
+
+int
+foo_1(struct S* s)
+{
+ return s->m0;
+}
+
+int main()
+{
+
+}
new file mode 100644
@@ -0,0 +1,64 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test0'>
+ <elf-function-symbols>
+ <elf-symbol name='foo_1' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='main' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <elf-variable-symbols>
+ <elf-symbol name='status' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_array' size='40' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_const' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_float' size='4' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_pointer' size='8' type='object-type' binding='global-binding' visibility='default-visibility' alias='test_volatile,test_const,foo_1' is-defined='yes'/>
+ <elf-symbol name='test_restrict' size='8' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='test_volatile' size='2' type='object-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-variable-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='1' alignment-in-bits='8' id='811c9dc5'/>
+ <type-decl name='char' size-in-bits='8' alignment-in-bits='8' id='a84c031d'/>
+ <class-decl name='S' size-in-bits='32' alignment-in-bits='32' is-struct='yes' visibility='default' id='50d9a3fa'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='95e97e5e' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='' size-in-bits='32' alignment-in-bits='8' is-struct='yes' is-anonymous='yes' visibility='default' id='e7f43f72'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='status0' type-id='811c9dc5' visibility='default'/>
+ </data-member>
+ <data-member access='public' layout-offset-in-bits='1'>
+ <var-decl name='status1' type-id='811c9dc5' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <type-decl name='float' size-in-bits='32' alignment-in-bits='32' id='a6c45d85'/>
+ <type-decl name='int' size-in-bits='32' alignment-in-bits='32' id='95e97e5e'/>
+ <array-type-def dimensions='1' type-id='95e97e5e' size-in-bits='320' alignment-in-bits='32' id='b7bd1749'>
+ <subrange length='10' type-id='7359adad' id='487da03a'/>
+ </array-type-def>
+ <type-decl name='long int' size-in-bits='64' alignment-in-bits='64' id='bd54fe1a'/>
+ <type-decl name='short int' size-in-bits='16' alignment-in-bits='16' id='a2185560'/>
+ <type-decl name='signed char' size-in-bits='8' alignment-in-bits='8' id='28577a57'/>
+ <type-decl name='unsigned char' size-in-bits='8' alignment-in-bits='8' id='002ac4a6'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <type-decl name='unsigned long int' size-in-bits='64' alignment-in-bits='64' id='7359adad'/>
+ <type-decl name='unsigned short int' size-in-bits='16' alignment-in-bits='16' id='8efea9e5'/>
+ <pointer-type-def type-id='50d9a3fa' size-in-bits='64' alignment-in-bits='64' id='fd01f598'/>
+ <pointer-type-def type-id='a84c031d' size-in-bits='64' alignment-in-bits='64' id='26a90f95'/>
+ <qualified-type-def type-id='50d9a3fa' const='yes' id='0fb3b55d'/>
+ <pointer-type-def type-id='bd54fe1a' size-in-bits='64' alignment-in-bits='64' id='3ccc2590'/>
+ <qualified-type-def type-id='3ccc2590' restrict='yes' id='af4b1b38'/>
+ <qualified-type-def type-id='a2185560' volatile='yes' id='ec67e496'/>
+ <var-decl name='status' type-id='e7f43f72' mangled-name='status' visibility='default'/>
+ <var-decl name='test_pointer' type-id='26a90f95' mangled-name='test_pointer' visibility='default'/>
+ <var-decl name='test_const' type-id='0fb3b55d' mangled-name='test_const' visibility='default'/>
+ <var-decl name='test_float' type-id='a6c45d85' mangled-name='test_float' visibility='default'/>
+ <function-decl name='foo_1' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <parameter type-id='fd01f598'/>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <function-decl name='main' visibility='default' binding='global' size-in-bits='64' alignment-in-bits='8'>
+ <return type-id='95e97e5e'/>
+ </function-decl>
+ <var-decl name='test_array' type-id='b7bd1749' mangled-name='test_array' visibility='default'/>
+ <var-decl name='test_restrict' type-id='af4b1b38' mangled-name='test_restrict' visibility='default'/>
+ <var-decl name='test_volatile' type-id='ec67e496' mangled-name='test_volatile' visibility='default'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,25 @@
+enum opaque_enum;
+struct opaque_struct;
+
+typedef enum opaque_enum opaque_enum;
+typedef struct opaque_struct opaque_struct;
+
+void
+fn(opaque_struct *, opaque_enum *e);
+
+enum opaque_enum
+{
+ e0,
+ e1
+};
+
+struct opaque_struct
+{
+ opaque_enum m0;
+};
+
+void
+fn(opaque_struct * s, opaque_enum *e)
+{
+ s->m0 = *e;
+}
new file mode 100755
GIT binary patch
literal 15592
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
I@1C^(7v)NDpa1{>
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,23 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test1.so'>
+ <elf-function-symbols>
+ <elf-symbol name='fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='type-id-1'/>
+ <class-decl name='opaque_struct' size-in-bits='32' alignment-in-bits='32' is-struct='yes' visibility='default' id='type-id-2'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='type-id-3' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <enum-decl name='opaque_enum' linkage-name='opaque_enum' id='type-id-4'>
+ <underlying-type type-id='type-id-1'/>
+ <enumerator name='e0' value='0'/>
+ <enumerator name='e1' value='1'/>
+ </enum-decl>
+ <typedef-decl name='opaque_enum' type-id='type-id-4' id='type-id-3'/>
+ <typedef-decl name='opaque_struct' type-id='type-id-2' id='type-id-5'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='type-id-6'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' alignment-in-bits='64' id='type-id-7'/>
+ <pointer-type-def type-id='type-id-5' size-in-bits='64' alignment-in-bits='64' id='type-id-8'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,23 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test1.so'>
+ <elf-function-symbols>
+ <elf-symbol name='fn' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <type-decl name='' is-anonymous='yes' size-in-bits='32' alignment-in-bits='32' id='811c9dc5'/>
+ <class-decl name='opaque_struct' size-in-bits='32' alignment-in-bits='32' is-struct='yes' visibility='default' id='6cde5052'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='99fcd3a5' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <enum-decl name='opaque_enum' linkage-name='opaque_enum' id='55763a91'>
+ <underlying-type type-id='811c9dc5'/>
+ <enumerator name='e0' value='0'/>
+ <enumerator name='e1' value='1'/>
+ </enum-decl>
+ <typedef-decl name='opaque_enum' type-id='55763a91' id='99fcd3a5'/>
+ <typedef-decl name='opaque_struct' type-id='6cde5052' id='dae69ca1'/>
+ <type-decl name='unsigned int' size-in-bits='32' alignment-in-bits='32' id='f0981eeb'/>
+ <pointer-type-def type-id='99fcd3a5' size-in-bits='64' alignment-in-bits='64' id='0e0526e0'/>
+ <pointer-type-def type-id='dae69ca1' size-in-bits='64' alignment-in-bits='64' id='3f6e71d0'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,19 @@
+struct S0
+{
+ void* m0;
+};
+
+typedef const void* POINTER;
+
+struct S1
+{
+ POINTER m0;
+};
+
+void foo(struct S0* a __attribute__((unused)))
+{
+}
+
+void bar(struct S1* a __attribute__((unused)))
+{
+}
new file mode 100755
GIT binary patch
literal 15616
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
U6x%k4_vJZDAzn&WN_;y0Q+>X1e*gdg
literal 0
HcmV?d00001
new file mode 100644
@@ -0,0 +1,25 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test2.so'>
+ <elf-function-symbols>
+ <elf-symbol name='bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <class-decl name='S0' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='type-id-1'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='type-id-2' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='S1' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='type-id-3'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='type-id-4' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='POINTER' type-id='type-id-5' id='type-id-4'/>
+ <pointer-type-def type-id='type-id-1' size-in-bits='64' alignment-in-bits='64' id='type-id-6'/>
+ <pointer-type-def type-id='type-id-3' size-in-bits='64' alignment-in-bits='64' id='type-id-7'/>
+ <qualified-type-def type-id='type-id-8' const='yes' id='type-id-9'/>
+ <pointer-type-def type-id='type-id-9' size-in-bits='64' alignment-in-bits='64' id='type-id-5'/>
+ <pointer-type-def type-id='type-id-8' size-in-bits='64' alignment-in-bits='64' id='type-id-2'/>
+ <type-decl name='void' id='type-id-8'/>
+ </abi-instr>
+</abi-corpus>
new file mode 100644
@@ -0,0 +1,25 @@
+<abi-corpus version='2.0' path='data/test-read-ctf/test2.so'>
+ <elf-function-symbols>
+ <elf-symbol name='bar' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ <elf-symbol name='foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
+ </elf-function-symbols>
+ <abi-instr address-size='64' language='LANG_C'>
+ <class-decl name='S0' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='109cd6fe'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='eaa32e2f' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <class-decl name='S1' size-in-bits='64' alignment-in-bits='64' is-struct='yes' visibility='default' id='119cd891'>
+ <data-member access='public' layout-offset-in-bits='0'>
+ <var-decl name='m0' type-id='8a34a235' visibility='default'/>
+ </data-member>
+ </class-decl>
+ <typedef-decl name='POINTER' type-id='6e97a70c' id='8a34a235'/>
+ <pointer-type-def type-id='109cd6fe' size-in-bits='64' alignment-in-bits='64' id='842ea234'/>
+ <pointer-type-def type-id='119cd891' size-in-bits='64' alignment-in-bits='64' id='5e30a4f9'/>
+ <qualified-type-def type-id='48b5725f' const='yes' id='8581546e'/>
+ <pointer-type-def type-id='8581546e' size-in-bits='64' alignment-in-bits='64' id='6e97a70c'/>
+ <pointer-type-def type-id='48b5725f' size-in-bits='64' alignment-in-bits='64' id='eaa32e2f'/>
+ <type-decl name='void' id='48b5725f'/>
+ </abi-instr>
+</abi-corpus>
deleted file mode 100644
@@ -1,21 +0,0 @@
-SRCS = PR26261-obja.c PR26261-objb.c PR26261-main.c
-EXE = PR26261-exe
-OBJS = $(SRCS:.c=.o)
-CFLAGS = -Wall -g
-
-all: $(EXE)
-
-%.o: %.c
- $(CC) $(CFLAGS) -c $<
-
-$(EXE): $(OBJS)
- gcc -fPIC $(OBJS) -o $@
-
-cleanobjs:
- rm -rf $(OBJS)
-
-cleanexe:
- rm $(EXE)
-
-clean: cleanobjs
- rm -rf *~
deleted file mode 100755
GIT binary patch
literal 0
HcmV?d00001
literal 10976
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
deleted file mode 100644
GIT binary patch
literal 0
HcmV?d00001
literal 3248
zcmb_e&2Jl35TCbe$1dAAAFfJ6in1V}DZ*<zg{A~0xCHVczM`N=Ac3s4_t{>s*VTGc
zLJ^`85>f>cL2!d365@u0#6N(zapR7-AaUhZi37~+&T}@e8x;Yg_|433X5P%3_py2Z
zxfeDJAwZFUH8|1~3h-^=NN&Vp1I|Dh_O@>Qwsq^h+lO!b@Cm|s5Jj>YG~7=^nyi#!
zc7{VJ<X%I_5EI0bwDFh}WW=%wxm=t)PZ1(Fu1?J+zWf-YC)#M6BFXr)2Zf@85{N}G
zOXtzim=O<`%9gn>zc3?a3)A-km^on<*DTB0F0WWmSx;J`43K*WENjg&OSlwAJUwR?
z6WfJ33TvFZF-Kk#c~FM!vT+WeFoj{;Xo1J507?yUA7Y6HRqPmG;br7`^u2^!2=QlW
zk{GQKe<&;@lc8>)JY}MgB9RwxYV2|L1H;6a{b1yG1L@g*5W(h4d-i&L*{;`}np3lv
zYD;zcvln;KVatu!P^n$CD}!i1kgHu8$k1=2>W1y!>cN%EmCKLYl`dfWoAOe^Y6+_+
zYzeBp;Xqcsq4%a=?fOx*@3-8R-*x?db!T^JdAU}rMsgI5s-7FUu~-SE>s7qB-LRuv
zfLto<@3jA?N&TSR-}hw2^Fuv>mhW2VUw3){o9pW<_9Axf;y-8`@5UMC;>IqBgK05;
zx==jCEj*7n{fOc-aJ4l3p|L(Wv4IW=oH^17$iW|fWf^gkvtTg!<mpBeEm?#&D+@;N
zi4*YDBarei;Z#aH63r7%y$Pp}oKlhrc<nOCgsBV^Z!k>Wflnhco9fT_-f4SHZwZmw
zgL_a;uUgGaIIT|UvnUf0PQMLOkj^G-jI#>&u|PXEzNjca$~euTY9Q!p3a7kH);Bf0
z!}^OFK4AS74S$vO*EO6~z+)eiUZ?5_)tP4>V$^3M-T%P^9`|97^+z=P3)X8I{x$1Q
zX!!T6uW0y>tUt?Kug7MbdY|q;IHPw4k=sHZg$eH|DUt^fIP_A1(;AJy31#1PJlWds
zHvOP8L|ZJotyU<nA2Yk58+7IIkiH*C6@n?0NN_XO+rz;?;#=(m!$>;#?o>vR+kT5D
zmc3>tbO(|b@*mke##4{fzN+aOER639>*SlJ2T&nQe^H)KJEdej{sP+Qy#L$yI>zdA
zQaY9YGg4Bd`_lKBUcE-jCl>i|+Z-^1Ao;1gi68lxR&mtlB*QPU6(D4;nC`oS1|1{c
z9R}5XI4PdinN`2d8>-@|etNC-`aQ(5^50}oy&LEjlkQ9JQC9vP&VR^pl%L)&J^wYt
zXiilpiZT7ni6R9sSNRox7xAq4O}^Ye-6j5`6XMH!AggzY|D5ABH+V)r(Cnb<R{q~`
z{IRzPu`Q0jq8yp4{weq?6tepNEB9ZWQ|do`HC4RAsUAHyLU5Dw_qbsC&e7LckEcD&
eTI%mq6q5QsDADdbYgAWO{B5rPI~B-W@891PcJreE
deleted file mode 100644
GIT binary patch
literal 0
HcmV?d00001
literal 2864
zcmbtV&2Jl35TCctADe9KIx)~j;jl<lZKUoxNfTp=Qd~lbD^L|h>IJDv*Y?_8u-Dak
z11<=0pddwnR3s!oLU4csHxLI7TtMOg{{VkN&xl(k4luL(p1pqAs8V^7-^~1GelzpF
z*6&_@<t2?Vkb}Wxm|7AAxSgBo^+>Hl8J6Hi<LG|l=$!|R53fG>J;F(A{H*75*$mfM
z<EV7=w;$1wiJW?r`&faqku#pO4C8fF`50J+6y#>Io*#myv)rp_@;kutqyS{~EQy@X
zv=C+9qG^{P{R-%ey^q?QLpIEJ4t-z?k&crr$-ev^EyF<<DcUDJSkNgKutj#ZST=ZZ
zrMSqJ@}<-0Ei=QoWISiEGPY3wu9I=CTr;rAr@=5T8(hb(gj&STPA3@o0$f9)US?dM
z=9wduGR)iT`Q<p}xn(L@Kl9lO%T&t9PD*KK02WSRDar&FsAXyvuxw(;)g_=veGz93
z&f(11Kg9yh(b?mHFbLgIXzlH9RJW=%Yu#?e+_^YC8r)#-eXW-@4OzR_Z<ssgrd_kQ
z%#F46t+ndLMf3c=+cq0c7~|H(XID*Y5FYyOcGvaYz-yuD1g+loxK_2Qo2J!;N^dxD
zEA3(XHLue3!b;z3I!&+Zc>PMp8@r<lH8rZVozRI?D{!5*)qc|nI?x~bU6by`@y2&|
zb}pIcvB}kk_ZTnpu~-0mYaiIS#8wva`aRs1ClRL~jc8M^6iXjyJB8dW42a>>8L4>X
z|Nb}4$x~k#Zm>8?mBZ1KHn@0Hs*gkBu_l}x@(F9Ia+sSM35^3@%9O#Okb+YGc;Qn9
zhsmp(c$ZLHO6<er!X7(JdbaqE1am&26C^Veo?OKuIdMq*<Jg49g_L+h*vmrFxlL|7
z>Z<~$_~d!tOyE@auCPB6Qq7a>KPzHLlun4>JOMWaPCX|31bcL65IRkiVGzrn)IxV0
zf=zD-?B-|$cHs6MyX`g)y9b`%8KN)Jon|v|-<WYbf#Y}GSxVpYT}i<bV7G>Yfs60Z
z_J^Ts<Eyhqq0@R@ByxKPoxmBmqVfMJR*+A7EB8~Ts|#gvkAzLJ$?+5#gsCs;r1n%k
zeLCqLJSu-()JHKhWc{CJ(74wmL?3+mE3GF%)W3`WU*T7Q)4d`{-dX(Dh{iU~>YB*0
zBEWB>sOhA}?x9P?DEb!xu1%?trpCUEXj=chY)q7V>Yu(=YX5D-)SSfpOMneB5<`tW
zKwnz@&qaN?PgI}YwOao+Vw6+%iE1>S5s&dJ2?#0cOZhh9Y5YG0-+l=HuHY+Sz|{*W
z0%Tno|ApYsd^-@+1-~W(g_P@;@TaJx?cWb6`$zu<k}vm_`cZ3B?z*VICmN>jH~q_~
hd^(e~rQV~aa6A!<$*iuQ@}}|s5dD8MVaAHe{|}8}$8i7v
deleted file mode 100644
GIT binary patch
literal 0
HcmV?d00001
literal 2824
zcmbtVQHvW@6h3!mlT3CtF`KB}WqlaI(k^r++wE?Mm9433-4sh%7W$x2)=6@cj3$#Z
znXRc(6clk0L_rZnw9p4%efCN4q2P}YU-|=lEBK)2%-owy?oKJ_fw}kG@0{<PbMM?U
z^TCyCuW5{d6b6@Iwvs47Gdt58k=lR?l;KA6_+j(-?xW^sR~|ixaMGH;7`bd_LDyLG
zxODTk`)F8*j7AjuM1s?iF&?x9rZrI2C%|-4kh_ra{17yQW!}W4eg{~V6o8D8p(%SA
z490Gwma}QtBhcs``M?%QC6PJU_xEs>chN+O_GKRy4Hq?F%j|TqV(P`U;xa4eN~h3T
zVWxS}e92@L%v%86pvBcn-NdS10Moo=>IRk})FPI0is{CTlPkbgq#6!;c{L`VS*75O
zm2X~IrJ(uDG^n-$u=o@PB?g?M;;1aZ1PPJ*NI;SLDvlbQ!I81Qiv=8`*NSJ&AmroF
z-apu^ZP)7drqhnO`8Yf-^gR3MN28)?$U5P>cm0O7Yi&7oXWQD`IKRD7+q__%J>VUy
z>4q_GUwCodvWMZ3&v$y<=YiM8r5m*SJCl0Nu5DR%532pqkXJjS&f8wK=Y`dQ*K%84
z&-Dh?t~cT1DrFv5J8tMksvU5*V|U(lgDwn4e$S#i0DHT;7p=2c)B2N3!ks-GZxz^k
z2f!vJwziZrzQ8ki4sm)&q7%JbEPbNw7P4=lLky>mNX4uC*FR}SJ+*W2bj5pAIXYU>
zL>JAX+H^=XVZx|GF0q=aI^<`Igr)=D-W1WHkb+YEc&}4Lhouu}8If}09HzJR#I>UC
z#C8!8s7<9#kc><??P8fg6gf*gMgg7?ip1X#>s2w+dz)T&)Yk=0{>k@!Gl5gyuf_VV
znAJG4W{Q&$J~WktuKI612Db!GH74r>XMATEx-Fc;AfEeD3;84jhx!Ga)_4p~zz43=
z;jN?Iq33r;Xp3~W)e89SIkOwMevi*n2A<C)1yg|29u0>ad(QDkA$PFl>~ZL}-w}a$
z|F9dlLoN#cpVJ!h>8#{=%5V*#Oz)9clW$U<#|2?(M?J1Ql~3PIx(EN2e_rIrX-;JR
zpXSiG)+9t<d-_E-k|63I#{W(DRp4~52$FXee;JYN;Hd723`+w1Jo1_is_#CURE)g8
z6X3>-8fmKU>xib+-^j#7$*211Yo*rTK}?NF%-;prq(wqh-$S&e<-aBJ%X6aq)YoeM
zTZmCiStqKIltnZCAOSJU{BnLD@ihL=g6}+m|FPgJZt%z4$6#iac_s3#;H&O`3ZO0>
z#Vq$P;jd6hJHJm;&X4{Ek}uDd>QQr3>=n^a`=Vg_e$!t@<<mP+dk-P#Q&A|-#?y3E
T_fK)t`1eHp_ovKQQThJ@<ln>C
deleted file mode 100644
@@ -1,14 +0,0 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
- <elf-needed>
- <dependency name='libc.so.6'/>
- </elf-needed>
- <elf-function-symbols>
- <elf-symbol name='__foo' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- </elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='__foo'>
- <return type-id='48b5725f'/>
- </function-decl>
- <type-decl name='void' id='48b5725f'/>
- </abi-instr>
-</abi-corpus>
deleted file mode 100644
@@ -1,18 +0,0 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
- <elf-needed>
- <dependency name='libc.so.6'/>
- </elf-needed>
- <elf-function-symbols>
- <elf-symbol name='__foo__' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_fini' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
- <elf-symbol name='foo__' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
- </elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
- <return type-id='48b5725f'/>
- </function-decl>
- <type-decl name='void' id='48b5725f'/>
- </abi-instr>
-</abi-corpus>
deleted file mode 100644
@@ -1,14 +0,0 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
- <elf-needed>
- <dependency name='libc.so.6'/>
- </elf-needed>
- <elf-function-symbols>
- <elf-symbol name='foo' type='func-type' binding='weak-binding' visibility='default-visibility' is-defined='yes'/>
- </elf-function-symbols>
- <abi-instr address-size='64' path='test3.c' comp-dir-path='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf' language='LANG_C89'>
- <function-decl name='__foo' mangled-name='__foo' filepath='/home/skumari/Tasks/source_repo/dodji/libabigail/tests/data/test-read-dwarf/test3.c' line='8' column='1' visibility='default' binding='global' size-in-bits='64' elf-symbol-id='foo'>
- <return type-id='48b5725f'/>
- </function-decl>
- <type-decl name='void' id='48b5725f'/>
- </abi-instr>
-</abi-corpus>
deleted file mode 100644
@@ -1,8 +0,0 @@
-<abi-corpus version='2.0' path='data/test-read-dwarf/test3.so' soname='test3.so.1'>
- <elf-needed>
- <dependency name='libc.so.6'/>
- </elf-needed>
- <elf-function-symbols>
- <elf-symbol name='_init' type='func-type' binding='global-binding' visibility='default-visibility' is-defined='yes'/>
- </elf-function-symbols>
-</abi-corpus>
deleted file mode 100755
GIT binary patch
literal 0
HcmV?d00001
literal 8851
zcmeHMeQX>@6`#Aa<8$qt9j6VB(~?z48YjZ*k0i!QWMb!H`x5N5xHbh*YqfW~XJ30C
zW_K^PO8`p_At|z`5E4P+kAj3i2%#V$l=2~5j4C7$GKET^e??TKc8G-2isFi@=Dpc@
z=iRxz773|;c}}};<~Q$S_RZd#nSEax7#<9VLX1j;eVp;u4j1VY9nHImgRwr=!)oBJ
zu!lHr^;TC|?NW^k5oI8S1#O^-)t%Tvs`zMMm^WEMP?EzY%0**te>A4>3egolc*clE
zT{cz)6tCZjewiK=d_<8K%cHM32G-vZ{*dW|oQpA{B=<>>6C#4+y-B0!9u@W~`K4L-
zgQ$2M{%rSyjtE>s7slCNjaRO$z4^@A^Tx=YOB>H^y!}vh3!1=woD%Z?k6uzD^HqJd
zh}{PlPRE&nm+xM+uh#wI)vsSlU$Gl*eeTl_KEHS`R<-=YxjTRUXYBjy{}A2>=717m
zwd@DdOM(7T0(fy8LAYK4@2P-~0)7B4xhw+E$R1#=jf$^p23iML9a|NXM052V;Eik#
z>yY@rP=Ws&f?w8;^Vt;OhtG4o-0mKZ*RypR2(+;j;c5yPC)2daTp_R7j&3=c#<Wa6
z<1j4^glXr-Ml{2;%*l-HnAX@xJX^?{V|p@cx_!YtT548D1$s8~G%%jOsErB@@vLs!
zrVTdJg@Strli5r%rP>9xn`x$@J34eEZQC6YKzV~XrtKU<mQFS_eC|wK>r%Va6a2a8
z7KS%b{$U?t3qa|AQEbW7G8SexgdoKW`hVXLep?rDgz#zdC&dXN&qVuHgTfJHD}@@U
z-}d16pP{nq!Rfz_ed`|F`|59aa2g8oH;eZR|94*fiU;@dCl>BT6JM=vyH8<>FE2UO
zs~-Wu#KLc*%cyOuY@X->md!)Q;oh*n4{F$+LWZ^5n@|oN#Ww!!)>fdISgdXZAhFon
z0%SaKWFv9ywZy_kY$iOh3<iH%>l%DxV)HiY1O9smE%x34Li{gmL=xA2lX&6I=|pHH
z@u!U<7k=PtT=*sDjfupy7dQWg^7Fkv0gx3BCl-2Vur?0%oO;k_)hKLr0*16Y1-FS8
ztFJ<L=*{Ic7PVpjWf(GpNAB$dM&>*WgFDRiFF7saAb%8K(6zZTvGzD9XxKlG{A-`!
zb#7*2IsGj6qi|bjU*uFX@Zh}v<=xHA<3R5M`x8JhmSPD#J<39}jiG(@HPL6mYX<?t
zSau!wJCGsPI2da_-%vLbooA<8P8~gVkcT1UISbcS(8uSoKh}699N)R49~7b7cG>p8
zwg<L7u<e0u4}1U~p#4#4KSVagJ_t7iSQcEuVuF58(0V~>UoVbrrTyw&(NFubeWFck
z9Y1^kM*A~dAF)vXzuw&}V0&E*g!WK3#pZ~wq0rwWHfeZP!SYL&zz*3hxSnGXVz7Z!
zc$@Zie9Z=g)^~9{Wgp^PjLizegx?gKJR0Yc;DgO5FJuq41AP3~1wSnNyiI;x7i~xM
zzb)FOaSDAOG@)~|Z1?ZN4{r%N6px=&TH$1QL^-bZs9j1|N9VE5uFfu{b<{MJgzmU_
z+sBTukAgDS->%o>GnQ;C4uI>HD0f%r2>=YZf&{~O0tiLruF$txXjkY^Y<FEGwlB6T
z)Kt?5QyNy;>AjKI$+}Z@hxa1b*Zj>h_^Nip6=oksRiXdHcEX*10|E0PacW6HAC%fK
zS!x*$!(k-^E>Pm{>jR}NJ#CrORv~4=$;nXKa!xUC_D-64)5@fvsavV3-r1h+w(jFf
z+a$0*dM;kF+&)#vneFydMPSRckLmVPcDr3DS}9WlrG<8*U_6;=hx3=7%uMQ;Y&#yb
z>~=ha@oJl8>PDL}qg!clW@D;7mvi(aP{(rV6xH$t$5bctMKxK>WR13r!FX#*x2KqD
z%;iDSrH<wHTr@2^Q^@-o8uVFaR!0F*o6b5+<;POhF=wI952va*rKK%BXKGUh$WY7W
z)O5?z=Uh&zKbZnHd^FUrS_M89J(o#={Q_u(o61eW;ghMULM~_K0XEEJaT0Xs`AImr
zie@ICMtQd@nY7G{)XHY^Ce^_)?&SX;cZ`1+Ln!W4`rbq)L|C9EQ=#@2#0Zk7xJWc1
zI4OQmd?E$-odjbd$y3}UIxhkf+C?6cr+C%}80sc@io--H?g9%h6z8ao<HHz8@)Y-o
zDuR*5Pkcnjp&w%^wJEL=C3ze_+NSYCl@|;j^lS)F94ESjAQZAs^7Q<9=<~|cx<HiH
z5tPTZNS2=k497+57Ok5^X*~oMUeK1e*wFCGuZTEIl<bpCqo@%5q9k7$h#1g12}*JV
zUzX(8Nls8&|A=26|1(0K=C9Is(@OH!CHZEtAQLr6P*Cze!QX`n?qO(tX<tI$Rb_s;
z{bP`A@W|7?WnFB1WPZ8*bCAXPBl{cTyVS=2DF16op1xPn#!R*+xBme0I8|hy)_MAF
zzJh~;Li0xQ^!~gIectiYcd}dP6ez7ODcwn)=qu3Um8X3eeb9S9`By<6b<z0g`)aEg
zAlab-&~s3G6)I@Ig8)HE9``8TBHY1c5Wfc(VP3v5VPDo;#tT3h28u2V`5~{;09*AH
z<bN;ZD~+Gjwp5V+w~#+cjDpHzeOSoL&)K=l75G^NdD4SyG<ROs*M)p1F^W#9$$dw$
z!z<q`4i+~>JlqeR?QqfiK=B*nQ;_`?1v;QCO9rK;%T(bWfzi==?q!L<YDw#}ACHvI
zEq=U;(R%8~s~N46etZX`_0Nyjl-4&t9xa_`{CIhO2KythlF|C&=ZBqyi2HuLJYV7J
z*;&e$`T1jv;<q1fDCPhBcw_0j=*M?4il=_O34*@jg?K%}c0;}}2*00ET=NP=AYW99
zSDuat<b@~>d0_AxogTd?`jg&98K={-jLW+Mw?D$@G%fSfDS8XX_qdAP+uTCjT0M{u
zEB70YB#b*nX?}74iFk*E_X}M9j_^3wzvUnLKczWdK987}L;W`-{omsJ<?q8yz=NKv
z((^8HJux;*2YF~?`6FCGe!#vU{q8ze{$9P#^_0I?>l`o7H@+iq`Mqj_2MEgVVf<D=
zMlRie2jw$+xt{X>W4wZ%QNV-ppP%CT%k!U~t-!Afe))fq13c)tY`_)yp`iVh3ix*b
zKM=tGE5L*Dt1M+Xwo`<RQ3{T}=i{T=@VUpvAX~YW57nHUmcopv%_tG-fi%r1Xp`AO
zQqO9JQ?P7JFU~SJR!(P4$28RLW8Eh}a{v=hzPhJY$bLH39COdPMlqM0!*e)4_3{?a
z*7{i8R4I;maI}A9KpVJl7PGqi38-$^1#L>t8<@sD`<V;<Bk;*U(;&S|+(W~UoarCd
z9vK{bY+y_q>pwF*fI1*)i@M$`D=ZSYZu;1tS>`EU%;pL;-XyP^4-U!{qcQTXKLPDa
NGxzm*6T@y2`@a>G9{B(O
deleted file mode 100644
@@ -1,14 +0,0 @@
-// Test file for restrict (needs to be compiled by a GCC that actually emits
-// DW_TAG_restrict_type. https://gcc.gnu.org/bugzilla/show_bug.cgi?id=59051
-//
-// gcc -gdwarf-3 -std=c99 -shared -nostartfiles -o test4.so test4.c
-
-char *
-cpy (char * restrict s1, const char * restrict s2, unsigned int n)
-{
- char *t1 = s1;
- const char *t2 = s2;
- while(n-- > 0)
- *t1++ = *t2++;
- return s1;
-}
deleted file mode 100755
GIT binary patch
literal 0
HcmV?d00001
literal 3364
zcmcImPiP!v6n`_b|JqG9o1{u1Dx+wdh?yj9NYj?oP0~#_x@}TzARc6#-JR?%W+!20
zViQq%s7hlABqHiTu!08#!HX0H4*_pIdGgf5UIIcd@mBN@-<$c~c6PF>i1@*L?|r}b
zdvCsZ-}k-wZe;T_vLpdF1ug)MGO~|kgkd`-6cia4hbZ>lkn*_EN2WtsUBqDtpn4p7
z2Zdz3F8eskU9?f#^?K@5Por@E#xLP{0nG2Yr3mUDi}{4*F~MU=TxwU*FYxI;_&0r8
z*c6oHN0MT-%aNE4GTJu<BV<BE%3n_azbf3jP^KXccNA41zIdh${&*W4imMy2TrCte
zXGI$W-7Fcd0lHpr9NlpZ+eOGK0W9P;_i~%>{+8QZt8Xsc&)v?Vnth0}j&lFOlc+t+
zZOu!$%>_gk_H$b=p?-P4>u%4j^zH2Zt@#7=dw+NBSMq)RXPl4Jr<|ue(l>s4aB%Pf
zN?sS~?N>lrPfL9r@x(R~o<JKt>&WwRFquk!AWwJ3<UBI`7-(+fpVxJff(P*9BEP)W
zw}kzuPlJ;}CWSmM<o_)$O;4Xw`!8Kt7*I#Gkzs9EJvBTsIy^QquJ)VjtEOG8nU-rT
z4*+G!{|JB2^N!)25uWJ}2+-~XNJz9hr0d=Q8e45gq=aBuqWvJr(nmPp$V`wv_h7{t
zLB<!v-dR+fQ#km_8_X*f>fd{MKH?%PLSf{cO2kE0^c!#R21FB|p%#;3H&Dch5+_qM
z@g4TQEfRkWb&$HH=Tf~%CDoVemU^T#u9~b#FLo%2bIJ3`lO40Y1ZR$ZI@KZd;%7#|
zx6Jm+xS)~IreU-TlF3=5#hyjw0!GCbp8-M=Cp-ZY_)Zy~qBl!_raH0rN+#|R30%{0
zN3|kN3*d;%$vL)n^X5?E$9pf!GSY`CD>ZYdX4r2IId*Y~d>mM_oNC!JOKR0}0hd^v
z{)aVI2W#${Wloe$3m3kKL&GjsCf3Kt2FFI#!E))kVJ{7yRtFuoG*LWzwlTM2#jpW1
zXQSpC1(dGs%L;21!>NE)+OUw~OV<X?HP>Cx%!<Bb8#Pm}ln~>Q$1-ZwB51{x8f`*E
z%)(k(H*CWyn+^}F*3t^=MxkJvZ}DikYMHF#MEnf?$G#8!sn+t|<#W!GP6;)(^Z$YC
z!qaG@GtPFd11z`685^A(;;=v0gMokzRp7e9lIsZBsEIP;53nB*7}ueUm<Y@8Y36xz
zfHT6M=ilx>$NaE=Hst@c2*h%n9fjoYXLt@3{_hdS|MR+tvr8a0zw$iFAOANO(MCBL
zCQ_i?5f0A>Fj6^xER6sbq}~($;kfL_+|@Sze+d7dm?&h}|D87ecSWKpez1l8KSW~~
zBmN0-ftU<Bx8Qyvu<&=5h5vhP{P~^TXy>&FQXdHaFM}ZJ?8h*TdG9es@)z+VO$%ch
zu^xPQ|M2-af>^8f*E`UF?V>Llefa$iLkmU0*>W8SniZTepYLW|X`J6?{P2B@><U&M
zK5xzZ81VUN#^a6i(TsCef+)qO>>O?ih~$P$idV@(APyA}$qbnk=nNtL`bOaQgF^-c
zTH!Q93GbhES#5HmwI)2=`VnY#kEJ@@>K=Q#4Ni5b6~FNd)GxkvW%BauH0YP|b5oOf
ceQsvv)$BF>+T>I|t9#d7zU0!yHh9zh3+<yQu>b%7
@@ -40,12 +40,12 @@ InOutSpec in_out_specs[] =
"output/test-annotate/test2.so.abi"
},
{
- "data/test-read-dwarf/test3.so",
+ "data/test-read-common/test3.so",
"data/test-annotate/test3.so.abi",
"output/test-annotate/test3.so.abi"
},
{
- "data/test-read-dwarf/test4.so",
+ "data/test-read-common/test4.so",
"data/test-annotate/test4.so.abi",
"output/test-annotate/test4.so.abi"
},
new file mode 100644
@@ -0,0 +1,184 @@
+// -*- Mode: C++ -*-
+//
+
+#include <fstream>
+#include <cstring>
+#include "test-read-common.h"
+
+using std::ofstream;
+using std::cerr;
+using std::dynamic_pointer_cast;
+
+using abigail::tools_utils::emit_prefix;
+using abigail::tests::get_build_dir;
+using abigail::xml_writer::write_context_sptr;
+using abigail::xml_writer::create_write_context;
+using abigail::xml_writer::write_corpus;
+
+namespace abigail
+{
+namespace tests
+{
+namespace read_common
+{
+
+test_task::test_task(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base)
+ : is_ok(true),
+ spec(s),
+ out_abi_base(a_out_abi_base),
+ in_elf_base(a_in_elf_base),
+ in_abi_base(a_in_abi_base)
+ {}
+
+bool
+test_task::serialize_corpus(const string& out_abi_path,
+ corpus_sptr corp)
+{
+ ofstream of(out_abi_path.c_str(), std::ios_base::trunc);
+ if (!of.is_open())
+ {
+ error_message = string("failed to read ") + out_abi_path + "\n";
+ return false;
+ }
+
+ write_context_sptr write_ctxt
+ = create_write_context(corp->get_environment(), of);
+ set_type_id_style(*write_ctxt, spec.type_id_style);
+ is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0);
+ of.close();
+
+ return true;
+}
+
+bool
+test_task::run_abidw(const string& extargs)
+{
+ string abidw = string(get_build_dir()) + "/tools/abidw";
+ string drop_private_types;
+ if (!in_public_headers_path.empty())
+ drop_private_types += "--headers-dir " + in_public_headers_path +
+ " --drop-private-types";
+ string cmd = abidw + " " + drop_private_types + " --abidiff " + extargs +
+ in_elf_path;
+ if (system(cmd.c_str()))
+ {
+ error_message = string("ABIs differ:\n")
+ + in_elf_path
+ + "\nand:\n"
+ + out_abi_path
+ + "\n";
+
+ return false;
+ }
+
+ return true;
+}
+
+bool
+test_task::run_diff()
+{
+ set_in_abi_path();
+ string cmd = "diff -u " + in_abi_path + " " + out_abi_path;
+ if (system(cmd.c_str()))
+ {
+ error_message = string("ABIs differ:\n")
+ + in_abi_path
+ + "\nand:\n"
+ + out_abi_path
+ + "\n";
+
+ return false;
+ }
+
+ return true;
+}
+
+void
+display_usage(const string& prog_name, ostream& out)
+{
+ emit_prefix(prog_name, out)
+ << "usage: " << prog_name << " [options]\n"
+ << " where options can be: \n"
+ << " --help|-h display this message\n"
+ << " --no-parallel execute testsuite is a sigle thread\n"
+ ;
+}
+
+bool
+parse_command_line(int argc, char* argv[], options& opts)
+{
+ for (int i = 1; i < argc; ++i)
+ {
+ if (!strcmp(argv[i], "--no-parallel"))
+ opts.parallel = false;
+ else if (!strcmp(argv[i], "--help")
+ || !strcmp(argv[i], "--h"))
+ return false;
+ else
+ {
+ if (strlen(argv[i]) >= 2 && argv[i][0] == '-' && argv[i][1] == '-')
+ opts.wrong_option = argv[i];
+ return false;
+ }
+ }
+
+ return true;
+}
+
+bool
+run_tests(const size_t num_tests, const InOutSpec* specs,
+ const options& opts, create_new_test new_test)
+{
+ size_t num_workers = (opts.parallel
+ ? std::min(abigail::workers::get_number_of_threads(),
+ num_tests)
+ : 1);
+ abigail::workers::queue task_queue(num_workers);
+ bool is_ok = true;
+
+ string out_abi_base = string(get_build_dir()) + "/tests/";
+ string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/";
+ string in_abi_base = in_elf_base;
+
+ for (const InOutSpec *s = specs; s->in_elf_path; ++s)
+ {
+ test_task_sptr t(new_test(s, out_abi_base,
+ in_elf_base,
+ in_abi_base));
+ ABG_ASSERT(task_queue.schedule_task(t));
+ }
+
+ /// Wait for all worker threads to finish their job, and wind down.
+ task_queue.wait_for_workers_to_complete();
+
+ // Now walk the results and print whatever error messages need to be
+ // printed.
+
+ const vector<abigail::workers::task_sptr>& completed_tasks =
+ task_queue.get_completed_tasks();
+
+ ABG_ASSERT(completed_tasks.size() == num_tests);
+
+ for (vector<abigail::workers::task_sptr>::const_iterator ti =
+ completed_tasks.begin();
+ ti != completed_tasks.end();
+ ++ti)
+ {
+ test_task_sptr t = dynamic_pointer_cast<test_task>(*ti);
+ if (!t->is_ok)
+ {
+ is_ok = false;
+ if (!t->error_message.empty())
+ cerr << t->error_message << '\n';
+ }
+ }
+
+ return !is_ok;
+}
+
+}//end namespace read_common
+}//end namespace tests
+}//end namespace abigail
new file mode 100644
@@ -0,0 +1,148 @@
+#ifndef __TEST_READ_COMMON_H__
+#define __TEST_READ_COMMON_H__
+
+#include <string>
+#include "abg-ir.h"
+#include "abg-corpus.h"
+#include "abg-workers.h"
+#include "abg-writer.h"
+#include "test-utils.h"
+#include "abg-tools-utils.h"
+
+using std::string;
+
+using abigail::xml_writer::type_id_style_kind;
+using abigail::ir::corpus_sptr;
+
+namespace abigail
+{
+namespace tests
+{
+namespace read_common
+{
+
+/// This is an aggregate that specifies where a test shall get its
+/// input from, and where it shall write its ouput to.
+struct InOutSpec
+{
+ const char* in_elf_path;
+ const char* in_suppr_spec_path;
+ const char* in_public_headers_path;
+ type_id_style_kind type_id_style;
+ const char* in_abi_path;
+ const char* out_abi_path;
+};// end struct InOutSpec
+
+/// The task that peforms the tests.
+struct test_task : public abigail::workers::task
+{
+ bool is_ok;
+ InOutSpec spec;
+ string error_message;
+ string out_abi_base;
+ string in_elf_base;
+ string in_abi_base;
+
+ string in_elf_path;
+ string in_abi_path;
+ string in_suppr_spec_path;
+ string in_public_headers_path;
+ string out_abi_path;
+
+ void
+ set_in_elf_path()
+ {
+ in_elf_path = in_elf_base + spec.in_elf_path;
+ }
+
+ void
+ set_in_suppr_spec_path()
+ {
+ if (spec.in_suppr_spec_path)
+ in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path;
+ else
+ in_suppr_spec_path.clear();
+ }
+
+ void
+ set_in_public_headers_path()
+ {
+ if (spec.in_public_headers_path)
+ in_public_headers_path = spec.in_public_headers_path;
+ if (!in_public_headers_path.empty())
+ in_public_headers_path = in_elf_base + spec.in_public_headers_path;
+ }
+
+ bool
+ set_out_abi_path()
+ {
+ out_abi_path = out_abi_base + spec.out_abi_path;
+ if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path))
+ {
+ error_message =
+ string("Could not create parent directory for ") + out_abi_path;
+ return false;
+ }
+ return true;
+ }
+
+ void
+ set_in_abi_path()
+ {
+ in_abi_path = in_abi_base + spec.in_abi_path;
+ }
+
+ test_task(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base);
+ bool
+ serialize_corpus(const string& out_abi_path,
+ corpus_sptr corp);
+ bool
+ run_abidw(const string& extargs = "");
+
+ bool
+ run_diff();
+
+ virtual
+ ~test_task()
+ {}
+
+}; // end struct test_task
+
+typedef shared_ptr<test_task> test_task_sptr;
+
+struct options
+{
+ string wrong_option;
+ bool parallel;
+
+ options()
+ : parallel(true)
+ {}
+
+ ~options()
+ {
+ }
+};
+
+void
+display_usage(const string& prog_name, ostream& out);
+
+bool
+parse_command_line(int argc, char* argv[], options& opts);
+
+typedef test_task* (*create_new_test)(const InOutSpec* s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base);
+bool
+run_tests(const size_t num_test, const InOutSpec* specs,
+ const options& opts, create_new_test new_test);
+
+}//end namespace read_common
+}//end namespace tests
+}//end namespace abigail
+
+#endif //__TEST_READ_COMMON_H__
new file mode 100644
@@ -0,0 +1,328 @@
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+// -*- Mode: C++ -*-
+//
+// Copyright (C) 2021 Oracle, Inc.
+//
+// Author: Guillermo E. Martinez
+
+/// @file read ELF binaries containing CTF, save them in XML corpus
+/// files and diff the corpus files against reference XML corpus
+/// files.
+
+#include <cstdlib>
+#include <fstream>
+#include <iostream>
+#include <memory>
+#include <string>
+#include <vector>
+#include "abg-ctf-reader.h"
+#include "test-read-common.h"
+
+using std::string;
+using std::cerr;
+
+using abigail::tests::read_common::InOutSpec;
+using abigail::tests::read_common::test_task;
+using abigail::tests::read_common::display_usage;
+using abigail::tests::read_common::options;
+
+using abigail::ctf_reader::read_context_sptr;
+using abigail::ctf_reader::create_read_context;
+using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE;
+using abigail::xml_writer::HASH_TYPE_ID_STYLE;
+using abigail::tools_utils::emit_prefix;
+
+static InOutSpec in_out_specs[] =
+{
+ {
+ "data/test-read-ctf/test0",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-ctf/test0.abi",
+ "output/test-read-ctf/test0.abi"
+ },
+ {
+ "data/test-read-ctf/test0",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test0.hash.abi",
+ "output/test-read-ctf/test0.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test1.so",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-ctf/test1.so.abi",
+ "output/test-read-ctf/test1.so.abi"
+ },
+ {
+ "data/test-read-ctf/test1.so",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test1.so.hash.abi",
+ "output/test-read-ctf/test1.so.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test2.so",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-ctf/test2.so.abi",
+ "output/test-read-ctf/test2.so.abi"
+ },
+ {
+ "data/test-read-ctf/test2.so",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test2.so.hash.abi",
+ "output/test-read-ctf/test2.so.hash.abi"
+ },
+ {
+ "data/test-read-common/test3.so",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-common/test3-ctf.so.abi",
+ "output/test-read-common/test3-ctf.so.abi"
+ },
+ {
+ "data/test-read-common/test3.so",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-common/test3-ctf.so.hash.abi",
+ "output/test-read-common/test3-ctf.so.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-enum-many-ctf.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-enum-many-ctf.o.hash.abi",
+ "output/test-read-ctf/test-enum-many-ctf.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-ambiguous-struct-A.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-ambiguous-struct-A.o.hash.abi",
+ "output/test-read-ctf/test-ambiguous-struct-A.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-ambiguous-struct-B.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-ambiguous-struct-B.o.hash.abi",
+ "output/test-read-ctf/test-ambiguous-struct-B.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-conflicting-type-syms-a.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi",
+ "output/test-read-ctf/test-conflicting-type-syms-a.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-conflicting-type-syms-b.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi",
+ "output/test-read-ctf/test-conflicting-type-syms-b.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-alias.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-alias.o.abi",
+ "output/test-read-ctf/test-alias.o.abi",
+ },
+ {
+ "data/test-read-common/test4.so",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-common/test4-ctf.so.abi",
+ "output/test-read-common/test4-ctf.so.abi"
+ },
+ {
+ "data/test-read-common/test4.so",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-common/test4-ctf.so.hash.abi",
+ "output/test-read-common/test4-ctf.so.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-enum-ctf.o",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-enum-ctf.o.abi",
+ "output/test-read-ctf/test-enum-ctf.o.abi"
+ },
+ {
+ "data/test-read-ctf/test-enum-symbol-ctf.o",
+ "",
+ "",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-enum-symbol-ctf.o.hash.abi",
+ "output/test-read-ctf/test-enum-symbol-ctf.o.hash.abi"
+ },
+ {
+ "data/test-read-ctf/test-struct-iteration-ctf.o",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-ctf/test-struct-iteration-ctf.o.abi",
+ "output/test-read-ctf/test-struct-iteration-ctf.o.abi"
+ },
+ {
+ "data/test-read-common/PR26261/PR26261-exe",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-common/PR26261/PR26261-exe-ctf.abi",
+ "output/test-read-common/PR26261/PR26261-exe-ctf.abi",
+ },
+ {
+ "data/test-read-common/test-PR26568-1.o",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-common/test-PR26568-1-ctf.o.abi",
+ "output/test-read-common/test-PR26568-1-ctf.o.abi",
+ },
+ {
+ "data/test-read-common/test-PR26568-2.o",
+ "",
+ "",
+ SEQUENCE_TYPE_ID_STYLE,
+ "data/test-read-common/test-PR26568-2-ctf.o.abi",
+ "output/test-read-common/test-PR26568-2-ctf.o.abi",
+ },
+ {
+ "data/test-read-common/PR27700/test-PR27700.o",
+ "",
+ "data/test-read-common/PR27700/pub-incdir",
+ HASH_TYPE_ID_STYLE,
+ "data/test-read-common/PR27700/test-PR27700-ctf.abi",
+ "output/test-read-common/PR27700/test-PR27700-ctf.abi",
+ },
+ // This should be the last entry.
+ {NULL, NULL, NULL, SEQUENCE_TYPE_ID_STYLE, NULL, NULL}
+};
+
+/// The task that peforms the tests.
+struct test_task_ctf : public test_task
+{
+ test_task_ctf(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base);
+ virtual void
+ perform();
+
+ virtual
+ ~test_task_ctf()
+ {}
+};
+
+test_task_ctf::test_task_ctf(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base)
+ : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base)
+ {}
+
+/// The actual test.
+///
+/// This reads the corpus into memory, saves it to disk, loads it
+/// again and compares the new in-memory representation against the
+void
+test_task_ctf::perform()
+{
+ abigail::ir::environment_sptr env;
+
+ set_in_elf_path();
+ set_in_suppr_spec_path();
+
+ env.reset(new abigail::ir::environment);
+ ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path));
+
+ read_context_sptr ctxt = create_read_context(in_elf_path,
+ env.get());
+ ABG_ASSERT(ctxt);
+
+ corpus_sptr corp = read_corpus(ctxt.get());
+ // if there is no output and no input, assume that we do not care about the
+ // actual read result, just that it succeeded.
+ if (!spec.in_abi_path && !spec.out_abi_path)
+ {
+ // Phew! we made it here and we did not crash! yay!
+ return;
+ }
+ if (!corp)
+ {
+ error_message = string("failed to read ") + in_elf_path + "\n";
+ is_ok = false;
+ return;
+ }
+ corp->set_path(spec.in_elf_path);
+ // Do not take architecture names in comparison so that these
+ // test input binaries can come from whatever arch the
+ // programmer likes.
+ corp->set_architecture_name("");
+
+ if (!(is_ok = set_out_abi_path()))
+ return;
+
+ if (!(is_ok = serialize_corpus(out_abi_path, corp)))
+ return;
+
+ if (!(is_ok = run_abidw("--ctf ")))
+ return;
+
+ if (!(is_ok = run_diff()))
+ return;
+}
+
+static test_task*
+new_task(const InOutSpec* s, string& a_out_abi_base,
+ string& a_in_elf_base, string& a_in_abi_base)
+{
+ return new test_task_ctf(*s, a_in_abi_base,
+ a_in_elf_base, a_in_abi_base);
+}
+
+int
+main(int argc, char *argv[])
+{
+ options opts;
+ if (!parse_command_line(argc, argv, opts))
+ {
+ if (!opts.wrong_option.empty())
+ emit_prefix(argv[0], cerr)
+ << "unrecognized option: " << opts.wrong_option << "\n";
+ display_usage(argv[0], cerr);
+ return 1;
+ }
+
+ /// Create a task queue. The max number of worker threads of the
+ /// queue is the number of the concurrent threads supported by the
+ /// processor of the machine this code runs on. But if
+ /// --no-parallel was provided then the number of worker threads
+ /// equals 1.
+ const size_t num_tests = sizeof(in_out_specs) / sizeof (InOutSpec) - 1;
+
+ return run_tests(num_tests, in_out_specs, opts, new_task);
+}
@@ -15,45 +15,28 @@
#include <memory>
#include <string>
#include <vector>
-#include "abg-ir.h"
+// #include "abg-ir.h"
+#include "test-read-common.h"
#include "abg-dwarf-reader.h"
-#include "abg-workers.h"
-#include "abg-writer.h"
-#include "abg-tools-utils.h"
-#include "test-utils.h"
using std::vector;
using std::string;
-using std::ofstream;
using std::cerr;
-using std::dynamic_pointer_cast;
-using abigail::tests::get_build_dir;
+
+using abigail::tests::read_common::InOutSpec;
+using abigail::tests::read_common::test_task;
+using abigail::tests::read_common::display_usage;
+using abigail::tests::read_common::options;
+
using abigail::dwarf_reader::read_corpus_from_elf;
using abigail::dwarf_reader::read_context;
using abigail::dwarf_reader::read_context_sptr;
using abigail::dwarf_reader::create_read_context;
using abigail::xml_writer::SEQUENCE_TYPE_ID_STYLE;
using abigail::xml_writer::HASH_TYPE_ID_STYLE;
-using abigail::xml_writer::create_write_context;
-using abigail::xml_writer::set_type_id_style;
-using abigail::xml_writer::type_id_style_kind;
-using abigail::xml_writer::write_context_sptr;
-using abigail::xml_writer::write_corpus;
-
-/// This is an aggregate that specifies where a test shall get its
-/// input from, and where it shall write its ouput to.
-struct InOutSpec
-{
- const char* in_elf_path;
- const char* in_suppr_spec_path;
- const char* in_public_headers_path;
- type_id_style_kind type_id_style;
- const char* in_abi_path;
- const char* out_abi_path;
-};// end struct InOutSpec
-
+using abigail::tools_utils::emit_prefix;
-InOutSpec in_out_specs[] =
+static InOutSpec in_out_specs[] =
{
{
"data/test-read-dwarf/test0",
@@ -104,56 +87,56 @@ InOutSpec in_out_specs[] =
"output/test-read-dwarf/test2.so.hash.abi"
},
{
- "data/test-read-dwarf/test3.so",
+ "data/test-read-common/test3.so",
"",
"",
SEQUENCE_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3.so.abi",
- "output/test-read-dwarf/test3.so.abi"
+ "data/test-read-common/test3-dwarf.so.abi",
+ "output/test-read-common/test3-dwarf.so.abi"
},
{
- "data/test-read-dwarf/test3.so",
+ "data/test-read-common/test3.so",
"",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3.so.hash.abi",
- "output/test-read-dwarf/test3.so.hash.abi"
+ "data/test-read-common/test3-dwarf.so.hash.abi",
+ "output/test-read-common/test3-dwarf.so.hash.abi"
},
// suppress all except the main symbol of a group of aliases
{
- "data/test-read-dwarf/test3.so",
- "data/test-read-dwarf/test3-alias-1.suppr",
+ "data/test-read-common/test3.so",
+ "data/test-read-common/test3-alias-1.suppr",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3-alias-1.so.hash.abi",
- "output/test-read-dwarf/test3-alias-1.so.hash.abi"
+ "data/test-read-common/test3-alias-1-dwarf.so.hash.abi",
+ "output/test-read-common/test3-alias-1-dwarf.so.hash.abi"
},
// suppress the main symbol of a group of aliases
{
- "data/test-read-dwarf/test3.so",
- "data/test-read-dwarf/test3-alias-2.suppr",
+ "data/test-read-common/test3.so",
+ "data/test-read-common/test3-alias-2.suppr",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3-alias-2.so.hash.abi",
- "output/test-read-dwarf/test3-alias-2.so.hash.abi"
+ "data/test-read-common/test3-alias-2-dwarf.so.hash.abi",
+ "output/test-read-common/test3-alias-2-dwarf.so.hash.abi"
},
// suppress all except one non main symbol of a group of aliases
{
- "data/test-read-dwarf/test3.so",
- "data/test-read-dwarf/test3-alias-3.suppr",
+ "data/test-read-common/test3.so",
+ "data/test-read-common/test3-alias-3.suppr",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3-alias-3.so.hash.abi",
- "output/test-read-dwarf/test3-alias-3.so.hash.abi"
+ "data/test-read-common/test3-alias-3-dwarf.so.hash.abi",
+ "output/test-read-common/test3-alias-3-dwarf.so.hash.abi"
},
// suppress all symbols of a group of aliases
{
- "data/test-read-dwarf/test3.so",
- "data/test-read-dwarf/test3-alias-4.suppr",
+ "data/test-read-common/test3.so",
+ "data/test-read-common/test3-alias-4.suppr",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test3-alias-4.so.hash.abi",
- "output/test-read-dwarf/test3-alias-4.so.hash.abi"
+ "data/test-read-common/test3-alias-4-dwarf.so.hash.abi",
+ "output/test-read-common/test3-alias-4-dwarf.so.hash.abi"
},
// suppress the main symbols with alias (function+variable) in .o file
{
@@ -165,20 +148,20 @@ InOutSpec in_out_specs[] =
"output/test-read-dwarf/test-suppressed-alias.o.abi",
},
{
- "data/test-read-dwarf/test4.so",
+ "data/test-read-common/test4.so",
"",
"",
SEQUENCE_TYPE_ID_STYLE,
- "data/test-read-dwarf/test4.so.abi",
- "output/test-read-dwarf/test4.so.abi"
+ "data/test-read-common/test4-dwarf.so.abi",
+ "output/test-read-common/test4-dwarf.so.abi"
},
{
- "data/test-read-dwarf/test4.so",
+ "data/test-read-common/test4.so",
"",
"",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/test4.so.hash.abi",
- "output/test-read-dwarf/test4.so.hash.abi"
+ "data/test-read-common/test4-dwarf.so.hash.abi",
+ "output/test-read-common/test4-dwarf.so.hash.abi"
},
{
"data/test-read-dwarf/test5.o",
@@ -449,28 +432,28 @@ InOutSpec in_out_specs[] =
NULL,
},
{
- "data/test-read-dwarf/PR26261/PR26261-exe",
+ "data/test-read-common/PR26261/PR26261-exe",
"",
"",
SEQUENCE_TYPE_ID_STYLE,
- "data/test-read-dwarf/PR26261/PR26261-exe.abi",
- "output/test-read-dwarf/PR26261/PR26261-exe.abi",
+ "data/test-read-common/PR26261/PR26261-exe-dwarf.abi",
+ "output/test-read-common/PR26261/PR26261-exe-dwarf.abi",
},
{
- "data/test-read-dwarf/test-PR26568-1.o",
+ "data/test-read-common/test-PR26568-1.o",
"",
"",
SEQUENCE_TYPE_ID_STYLE,
- "data/test-read-dwarf/test-PR26568-1.o.abi",
- "output/test-read-dwarf/test-PR26568-1.o.abi",
+ "data/test-read-common/test-PR26568-1-dwarf.o.abi",
+ "output/test-read-common/test-PR26568-1-dwarf.o.abi",
},
{
- "data/test-read-dwarf/test-PR26568-2.o",
+ "data/test-read-common/test-PR26568-2.o",
"",
"",
SEQUENCE_TYPE_ID_STYLE,
- "data/test-read-dwarf/test-PR26568-2.o.abi",
- "output/test-read-dwarf/test-PR26568-2.o.abi",
+ "data/test-read-common/test-PR26568-2-dwarf.o.abi",
+ "output/test-read-common/test-PR26568-2-dwarf.o.abi",
},
{
"data/test-read-dwarf/test-libandroid.so",
@@ -481,12 +464,12 @@ InOutSpec in_out_specs[] =
"output/test-read-dwarf/test-libandroid.so.abi",
},
{
- "data/test-read-dwarf/PR27700/test-PR27700.o",
+ "data/test-read-common/PR27700/test-PR27700.o",
"",
- "data/test-read-dwarf/PR27700/pub-incdir",
+ "data/test-read-common/PR27700/pub-incdir",
HASH_TYPE_ID_STYLE,
- "data/test-read-dwarf/PR27700/test-PR27700.abi",
- "output/test-read-dwarf/PR27700/test-PR27700.abi",
+ "data/test-read-common/PR27700/test-PR27700-dwarf.abi",
+ "output/test-read-common/PR27700/test-PR27700-dwarf.abi",
},
{
"data/test-read-dwarf/test-libaaudio.so",
@@ -545,146 +528,107 @@ set_suppressions_from_headers(read_context& read_ctxt, const string& path)
}
/// The task that peforms the tests.
-struct test_task : public abigail::workers::task
+struct test_task_dwarf : public test_task
{
- bool is_ok;
- InOutSpec spec;
- string error_message;
- string out_abi_base;
- string in_elf_base;
- string in_abi_base;
+ test_task_dwarf(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base);
+ virtual void
+ perform();
- test_task(const InOutSpec &s,
- string& a_out_abi_base,
- string& a_in_elf_base,
- string& a_in_abi_base)
- : is_ok(true),
- spec(s),
- out_abi_base(a_out_abi_base),
- in_elf_base(a_in_elf_base),
- in_abi_base(a_in_abi_base)
+ virtual
+ ~test_task_dwarf()
{}
+};
- /// The actual test.
- ///
- /// This reads the corpus into memory, saves it to disk, loads it
- /// again and compares the new in-memory representation against the
- /// saved one.
- virtual void
- perform()
- {
- string in_elf_path, in_abi_path, in_suppr_spec_path, in_public_headers_path,
- out_abi_path;
- abigail::ir::environment_sptr env;
+/// The task that peforms the tests.
+test_task_dwarf::test_task_dwarf(const InOutSpec &s,
+ string& a_out_abi_base,
+ string& a_in_elf_base,
+ string& a_in_abi_base)
+ : test_task(s, a_out_abi_base, a_in_elf_base, a_in_abi_base)
+ {}
- in_elf_path = in_elf_base + spec.in_elf_path;
- if (spec.in_suppr_spec_path)
- in_suppr_spec_path = in_elf_base + spec.in_suppr_spec_path;
- else
- in_suppr_spec_path.clear();
+void
+test_task_dwarf::perform()
+{
+ abigail::ir::environment_sptr env;
- if (spec.in_public_headers_path)
- in_public_headers_path = spec.in_public_headers_path;
- if (!in_public_headers_path.empty())
- in_public_headers_path = in_elf_base + spec.in_public_headers_path;
+ set_in_elf_path();
+ set_in_suppr_spec_path();
+ set_in_public_headers_path();
- env.reset(new abigail::ir::environment);
- abigail::dwarf_reader::status status =
+ env.reset(new abigail::ir::environment);
+ abigail::dwarf_reader::status status =
abigail::dwarf_reader::STATUS_UNKNOWN;
- vector<char**> di_roots;
- ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path));
- read_context_sptr ctxt = create_read_context(in_elf_path,
- di_roots,
- env.get());
- ABG_ASSERT(ctxt);
- if (!in_suppr_spec_path.empty())
- set_suppressions(*ctxt, in_suppr_spec_path);
-
- if (!in_public_headers_path.empty())
- set_suppressions_from_headers(*ctxt, in_public_headers_path);
+ vector<char**> di_roots;
+ ABG_ASSERT(abigail::tools_utils::file_exists(in_elf_path));
+ read_context_sptr ctxt = create_read_context(in_elf_path,
+ di_roots,
+ env.get());
+ ABG_ASSERT(ctxt);
+ if (!in_suppr_spec_path.empty())
+ set_suppressions(*ctxt, in_suppr_spec_path);
+
+ if (!in_public_headers_path.empty())
+ set_suppressions_from_headers(*ctxt, in_public_headers_path);
+
+ abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status);
+ // if there is no output and no input, assume that we do not care about the
+ // actual read result, just that it succeeded.
+ if (!spec.in_abi_path && !spec.out_abi_path)
+ {
+ // Phew! we made it here and we did not crash! yay!
+ return;
+ }
+ if (!corp)
+ {
+ error_message = string("failed to read ") + in_elf_path + "\n";
+ is_ok = false;
+ return;
+ }
+ corp->set_path(spec.in_elf_path);
+ // Do not take architecture names in comparison so that these
+ // test input binaries can come from whatever arch the
+ // programmer likes.
+ corp->set_architecture_name("");
- abigail::corpus_sptr corp = read_corpus_from_elf(*ctxt, status);
- // if there is no output and no input, assume that we do not care about the
- // actual read result, just that it succeeded.
- if (!spec.in_abi_path && !spec.out_abi_path)
- {
- // Phew! we made it here and we did not crash! yay!
- return;
- }
- if (!corp)
- {
- error_message = string("failed to read ") + in_elf_path + "\n";
- is_ok = false;
- return;
- }
- corp->set_path(spec.in_elf_path);
- // Do not take architecture names in comparison so that these
- // test input binaries can come from whatever arch the
- // programmer likes.
- corp->set_architecture_name("");
+ if (!(is_ok = set_out_abi_path()))
+ return;
- out_abi_path = out_abi_base + spec.out_abi_path;
- if (!abigail::tools_utils::ensure_parent_dir_created(out_abi_path))
- {
- error_message =
- string("Could not create parent directory for ") + out_abi_path;
- is_ok = false;
- return;
- }
+ if (!(is_ok = serialize_corpus(out_abi_path, corp)))
+ return;
- ofstream of(out_abi_path.c_str(), std::ios_base::trunc);
- if (!of.is_open())
- {
- error_message = string("failed to read ") + out_abi_path + "\n";
- is_ok = false;
- return;
- }
- write_context_sptr write_ctxt
- = create_write_context(corp->get_environment(), of);
- set_type_id_style(*write_ctxt, spec.type_id_style);
- is_ok = write_corpus(*write_ctxt, corp, /*indent=*/0);
- of.close();
+ if (!(is_ok = run_abidw()))
+ return;
- string abidw = string(get_build_dir()) + "/tools/abidw";
- string drop_private_types;
- if (!in_public_headers_path.empty())
- drop_private_types += "--headers-dir " + in_public_headers_path +
- " --drop-private-types";
- string cmd = abidw + " " + drop_private_types + " --abidiff " + in_elf_path;
- if (system(cmd.c_str()))
- {
- error_message = string("ABIs differ:\n")
- + in_elf_path
- + "\nand:\n"
- + out_abi_path
- + "\n";
- is_ok = false;
- }
+ if (!(is_ok = run_diff()))
+ return;
+}
- in_abi_path = in_abi_base + spec.in_abi_path;
- cmd = "diff -u " + in_abi_path + " " + out_abi_path;
- if (system(cmd.c_str()))
- is_ok = false;
- }
-}; // end struct test_task
-typedef shared_ptr<test_task> test_task_sptr;
+static test_task*
+new_task(const InOutSpec* s, string& a_out_abi_base,
+ string& a_in_elf_base, string& a_in_abi_base)
+{
+ return new test_task_dwarf(*s, a_in_abi_base,
+ a_in_elf_base, a_in_abi_base);
+}
int
main(int argc, char *argv[])
{
bool no_parallel = false;
- if (argc == 2)
+ options opts;
+ if (!parse_command_line(argc, argv, opts))
{
- if (argv[1] == string("--no-parallel"))
- no_parallel = true;
- else
- {
- cerr << "unrecognized option\n";
- cerr << "usage: " << argv[0] << " [--no-parallel]\n" ;
- return 1;
- }
+ if (!opts.wrong_option.empty())
+ emit_prefix(argv[0], cerr)
+ << "unrecognized option: " << opts.wrong_option << "\n";
+ display_usage(argv[0], cerr);
+ return 1;
}
/// Create a task queue. The max number of worker threads of the
@@ -693,49 +637,6 @@ main(int argc, char *argv[])
/// --no-parallel was provided then the number of worker threads
/// equals 1.
const size_t num_tests = sizeof(in_out_specs) / sizeof (InOutSpec) - 1;
- size_t num_workers = (no_parallel
- ? 1
- : std::min(abigail::workers::get_number_of_threads(),
- num_tests));
- abigail::workers::queue task_queue(num_workers);
- bool is_ok = true;
-
- string out_abi_base = string(get_build_dir()) + "/tests/";
- string in_elf_base = string(abigail::tests::get_src_dir()) + "/tests/";
- string in_abi_base = in_elf_base;
-
- for (InOutSpec *s = in_out_specs; s->in_elf_path; ++s)
- {
- test_task_sptr t(new test_task(*s, out_abi_base,
- in_elf_base,
- in_abi_base));
- ABG_ASSERT(task_queue.schedule_task(t));
- }
-
- /// Wait for all worker threads to finish their job, and wind down.
- task_queue.wait_for_workers_to_complete();
-
- // Now walk the results and print whatever error messages need to be
- // printed.
-
- const vector<abigail::workers::task_sptr>& completed_tasks =
- task_queue.get_completed_tasks();
-
- ABG_ASSERT(completed_tasks.size() == num_tests);
-
- for (vector<abigail::workers::task_sptr>::const_iterator ti =
- completed_tasks.begin();
- ti != completed_tasks.end();
- ++ti)
- {
- test_task_sptr t = dynamic_pointer_cast<test_task>(*ti);
- if (!t->is_ok)
- {
- is_ok = false;
- if (!t->error_message.empty())
- cerr << t->error_message << '\n';
- }
- }
- return !is_ok;
+ return run_tests(num_tests, in_out_specs, opts, new_task);
}