diff options
Diffstat (limited to 'tests')
62 files changed, 8975 insertions, 0 deletions
diff --git a/tests/ChangeLog b/tests/ChangeLog new file mode 100644 index 00000000..05e36331 --- /dev/null +++ b/tests/ChangeLog @@ -0,0 +1,41 @@ +2004-09-25 Ulrich Drepper <drepper@redhat.com> + + * asm-tst4.c (main): Add LD_LIBRARY_PATH to elflint invocation. + * asm-tst5.c (main): Likewise. + * asm-tst6.c (main): Likewise. + +2004-01-17 Ulrich Drepper <drepper@redhat.com> + + * Makefile.am: Support building with mudflap. + +2004-01-12 Ulrich Drepper <drepper@redhat.com> + + * get-aranges.c: Rewrite to use libdw. + * Makefile.am: Reenable get-aranges test. + +2004-01-11 Ulrich Drepper <drepper@redhat.com> + + * get-lines.c: New file. + * get-files.c: Adjust for libdw. + * run-get-files.sh: Adjust expected result. + * run-get-lines.sh: Likewise. + * Makefile.am: Run get-lines test. Don't run get-aranges and + get-ciefde test for now. + + * show-abbrev.c: Adjust call to dwarf_getabbrevattr after interface + change. Print attribute offset information. + * run-show-abbrev.sh: Adjust expected output. + +2004-01-09 Ulrich Drepper <drepper@redhat.com> + + * show-abbrev.c: Adjust call to dwarf_nextcu after interface change. + * show-die-info.c: Likewise. + * run-show-die-info.sh: Adjust expected output. + +2003-08-13 Ulrich Drepper <drepper@redhat.com> + + * Makefile.in: Depend on libebl.a, not libebl.so. + +2003-08-11 Ulrich Drepper <drepper@redhat.com> + + * Moved to CVS archive. diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 00000000..14b0e335 --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,794 @@ +# Makefile.in generated by automake 1.9.2 from Makefile.am. +# tests/Makefile. Generated from Makefile.in by configure. + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + + + +SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c asm-tst9.c ecp.c get-aranges.c get-files.c get-lines.c get-pubnames.c hash.c msg_tst.c newfile.c newscn.c saridx.c scnnames.c sectiondump.c show-abbrev.c show-die-info.c showptable.c test-nlist.c update1.c update2.c update3.c update4.c + +srcdir = . +top_srcdir = .. + +pkgdatadir = $(datadir)/elfutils +pkglibdir = $(libdir)/elfutils +pkgincludedir = $(includedir)/elfutils +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = /usr/bin/install -c +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = i686-pc-linux-gnu +host_triplet = i686-pc-linux-gnu +noinst_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ + newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \ + sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \ + update2$(EXEEXT) update3$(EXEEXT) update4$(EXEEXT) \ + test-nlist$(EXEEXT) show-die-info$(EXEEXT) get-files$(EXEEXT) \ + get-lines$(EXEEXT) get-pubnames$(EXEEXT) get-aranges$(EXEEXT) \ + show-abbrev$(EXEEXT) hash$(EXEEXT) asm-tst1$(EXEEXT) \ + asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) asm-tst4$(EXEEXT) \ + asm-tst5$(EXEEXT) asm-tst6$(EXEEXT) asm-tst7$(EXEEXT) \ + asm-tst8$(EXEEXT) asm-tst9$(EXEEXT) msg_tst$(EXEEXT) \ + newscn$(EXEEXT) ecp$(EXEEXT) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +arextract_SOURCES = arextract.c +arextract_OBJECTS = arextract.$(OBJEXT) +am__DEPENDENCIES_1 = ../libelf/libelf.so +#am__DEPENDENCIES_1 = ../libelf/libelf.a +arextract_DEPENDENCIES = $(am__DEPENDENCIES_1) +arsymtest_SOURCES = arsymtest.c +arsymtest_OBJECTS = arsymtest.$(OBJEXT) +arsymtest_DEPENDENCIES = $(am__DEPENDENCIES_1) +asm_tst1_SOURCES = asm-tst1.c +asm_tst1_OBJECTS = asm-tst1.$(OBJEXT) +am__DEPENDENCIES_2 = ../libasm/libasm.so +#am__DEPENDENCIES_2 = ../libasm/libasm.a +am__DEPENDENCIES_3 = ../libebl/libebl.a +asm_tst1_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst2_SOURCES = asm-tst2.c +asm_tst2_OBJECTS = asm-tst2.$(OBJEXT) +asm_tst2_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst3_SOURCES = asm-tst3.c +asm_tst3_OBJECTS = asm-tst3.$(OBJEXT) +asm_tst3_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst4_SOURCES = asm-tst4.c +asm_tst4_OBJECTS = asm-tst4.$(OBJEXT) +asm_tst4_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst5_SOURCES = asm-tst5.c +asm_tst5_OBJECTS = asm-tst5.$(OBJEXT) +asm_tst5_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst6_SOURCES = asm-tst6.c +asm_tst6_OBJECTS = asm-tst6.$(OBJEXT) +asm_tst6_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst7_SOURCES = asm-tst7.c +asm_tst7_OBJECTS = asm-tst7.$(OBJEXT) +asm_tst7_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst8_SOURCES = asm-tst8.c +asm_tst8_OBJECTS = asm-tst8.$(OBJEXT) +asm_tst8_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst9_SOURCES = asm-tst9.c +asm_tst9_OBJECTS = asm-tst9.$(OBJEXT) +asm_tst9_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +ecp_SOURCES = ecp.c +ecp_OBJECTS = ecp.$(OBJEXT) +ecp_DEPENDENCIES = $(am__DEPENDENCIES_1) +get_aranges_SOURCES = get-aranges.c +get_aranges_OBJECTS = get-aranges.$(OBJEXT) +am__DEPENDENCIES_4 = ../libdw/libdw.so +#am__DEPENDENCIES_4 = ../libdw/libdw.a +get_aranges_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_files_SOURCES = get-files.c +get_files_OBJECTS = get-files.$(OBJEXT) +get_files_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_lines_SOURCES = get-lines.c +get_lines_OBJECTS = get-lines.$(OBJEXT) +get_lines_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_pubnames_SOURCES = get-pubnames.c +get_pubnames_OBJECTS = get-pubnames.$(OBJEXT) +get_pubnames_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) +hash_SOURCES = hash.c +hash_OBJECTS = hash.$(OBJEXT) +hash_DEPENDENCIES = $(am__DEPENDENCIES_1) +msg_tst_SOURCES = msg_tst.c +msg_tst_OBJECTS = msg_tst.$(OBJEXT) +msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_1) +newfile_SOURCES = newfile.c +newfile_OBJECTS = newfile.$(OBJEXT) +newfile_DEPENDENCIES = $(am__DEPENDENCIES_1) +newscn_SOURCES = newscn.c +newscn_OBJECTS = newscn.$(OBJEXT) +newscn_DEPENDENCIES = $(am__DEPENDENCIES_1) +saridx_SOURCES = saridx.c +saridx_OBJECTS = saridx.$(OBJEXT) +saridx_DEPENDENCIES = $(am__DEPENDENCIES_1) +scnnames_SOURCES = scnnames.c +scnnames_OBJECTS = scnnames.$(OBJEXT) +scnnames_DEPENDENCIES = $(am__DEPENDENCIES_1) +sectiondump_SOURCES = sectiondump.c +sectiondump_OBJECTS = sectiondump.$(OBJEXT) +sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_abbrev_SOURCES = show-abbrev.c +show_abbrev_OBJECTS = show-abbrev.$(OBJEXT) +show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +show_die_info_SOURCES = show-die-info.c +show_die_info_OBJECTS = show-die-info.$(OBJEXT) +show_die_info_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) +showptable_SOURCES = showptable.c +showptable_OBJECTS = showptable.$(OBJEXT) +showptable_DEPENDENCIES = $(am__DEPENDENCIES_1) +test_nlist_SOURCES = test-nlist.c +test_nlist_OBJECTS = test-nlist.$(OBJEXT) +test_nlist_DEPENDENCIES = $(am__DEPENDENCIES_1) +update1_SOURCES = update1.c +update1_OBJECTS = update1.$(OBJEXT) +update1_DEPENDENCIES = $(am__DEPENDENCIES_1) +update2_SOURCES = update2.c +update2_OBJECTS = update2.$(OBJEXT) +update2_DEPENDENCIES = $(am__DEPENDENCIES_1) +update3_SOURCES = update3.c +update3_OBJECTS = update3.$(OBJEXT) +update3_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +update4_SOURCES = update4.c +update4_OBJECTS = update4.$(OBJEXT) +update4_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c \ + asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c \ + asm-tst9.c ecp.c get-aranges.c get-files.c get-lines.c \ + get-pubnames.c hash.c msg_tst.c newfile.c newscn.c saridx.c \ + scnnames.c sectiondump.c show-abbrev.c show-die-info.c \ + showptable.c test-nlist.c update1.c update2.c update3.c \ + update4.c +DIST_SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c \ + asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c \ + asm-tst8.c asm-tst9.c ecp.c get-aranges.c get-files.c \ + get-lines.c get-pubnames.c hash.c msg_tst.c newfile.c newscn.c \ + saridx.c scnnames.c sectiondump.c show-abbrev.c \ + show-die-info.c showptable.c test-nlist.c update1.c update2.c \ + update3.c update4.c +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run aclocal-1.9 +AMDEP_FALSE = # +AMDEP_TRUE = +AMTAR = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run tar +AUTOCONF = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run autoconf +AUTOHEADER = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run autoheader +AUTOMAKE = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run automake-1.9 +AWK = gawk +CC = gcc +CCDEPMODE = depmode=gcc3 +CFLAGS = -g -O2 +CPP = gcc -E +CPPFLAGS = +CYGPATH_W = echo +DATADIRNAME = ${prefix}/share +DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE +DEPDIR = .deps +ECHO_C = +ECHO_N = -n +ECHO_T = +EGREP = grep -E +EXEEXT = +GMSGFMT = /usr/bin/msgfmt +INSTALL_DATA = ${INSTALL} -m 644 +INSTALL_PROGRAM = ${INSTALL} +INSTALL_SCRIPT = ${INSTALL} +INSTALL_STRIP_PROGRAM = ${SHELL} $(install_sh) -c -s +INTLLIBS = +LDFLAGS = +LEX = flex +LEXLIB = -lfl +LEX_OUTPUT_ROOT = lex.yy +LIBICONV = -liconv +LIBINTL = +LIBOBJS = +LIBS = +LOCALEDIR = ${prefix}/share +LTLIBICONV = -liconv +LTLIBINTL = +LTLIBOBJS = +MAKEINFO = ${SHELL} /work/elfutils/stock/elfutils-0.97/config/missing --run makeinfo +MKINSTALLDIRS = config/mkinstalldirs +MSGFMT = /usr/bin/msgfmt +MSGMERGE = /usr/bin/msgmerge +MUDFLAP_FALSE = +MUDFLAP_TRUE = # +NATIVE_LD_FALSE = +NATIVE_LD_TRUE = # +OBJEXT = o +PACKAGE = elfutils +PACKAGE_BUGREPORT = http://bugzilla.redhat.com/bugzilla/ +PACKAGE_NAME = Red Hat elfutils +PACKAGE_STRING = Red Hat elfutils 0.97 +PACKAGE_TARNAME = elfutils +PACKAGE_VERSION = 0.97 +PATH_SEPARATOR = : +POSUB = po +RANLIB = ranlib +SET_MAKE = +SHELL = /bin/sh +STRIP = +USE_NLS = yes +VERSION = 0.97 +XGETTEXT = /usr/bin/xgettext +YACC = bison -y +ac_ct_CC = gcc +ac_ct_RANLIB = ranlib +ac_ct_STRIP = +am__fastdepCC_FALSE = # +am__fastdepCC_TRUE = +am__include = include +am__leading_dot = . +am__quote = +am__tar = ${AMTAR} chof - "$$tardir" +am__untar = ${AMTAR} xf - +base_cpu = none +bindir = ${exec_prefix}/bin +build = i686-pc-linux-gnu +build_alias = +build_cpu = i686 +build_os = linux-gnu +build_vendor = pc +datadir = ${prefix}/share +exec_prefix = ${prefix} +host = i686-pc-linux-gnu +host_alias = +host_cpu = i686 +host_os = linux-gnu +host_vendor = pc +includedir = ${prefix}/include +infodir = ${prefix}/info +install_sh = /work/elfutils/stock/elfutils-0.97/config/install-sh +libdir = ${exec_prefix}/lib +libexecdir = ${exec_prefix}/libexec +localstatedir = ${prefix}/var +mandir = ${prefix}/man +mkdir_p = mkdir -p -- +oldincludedir = /usr/include +prefix = /work/elfutils/google/linux-install-elfutils-0.97/ +program_transform_name = s,x,x, +sbindir = ${exec_prefix}/sbin +sharedstatedir = ${prefix}/com +sysconfdir = ${prefix}/etc +target_alias = +AM_CFLAGS = -Wall -Werror -std=gnu99 +AM_LDFLAGS = -Wl,-rpath,\$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../libebl:\$$ORIGIN/../libelf +INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ + -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ + -I$(top_srcdir)/lib -I.. + +# get-ciefde +TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ + update1 update2 update3 update4 \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-abbrev.sh hash asm-tst1 asm-tst2 \ + asm-tst3 asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn run-strip-test.sh run-strip-test2.sh \ + run-strip-test3.sh run-ecp-test.sh run-ecp-test2.sh + +# run-show-ciefde.sh +EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \ + run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \ + testfile.bz2 testfile2.bz2 testfile3.bz2 testfile4.bz2 \ + testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \ + testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \ + testfile13.bz2 run-strip-test3.sh + +libdw = ../libdw/libdw.so +#libdw = ../libdw/libdw.a +libelf = ../libelf/libelf.so +#libelf = ../libelf/libelf.a +libasm = ../libasm/libasm.so +#libasm = ../libasm/libasm.a +libebl = ../libebl/libebl.a +arextract_LDADD = $(libelf) +arsymtest_LDADD = $(libelf) +newfile_LDADD = $(libelf) +saridx_LDADD = $(libelf) +scnnames_LDADD = $(libelf) +sectiondump_LDADD = $(libelf) +showptable_LDADD = $(libelf) +hash_LDADD = $(libelf) +test_nlist_LDADD = $(libelf) +msg_tst_LDADD = $(libelf) +newscn_LDADD = $(libelf) +ecp_LDADD = $(libelf) +update1_LDADD = $(libelf) +update2_LDADD = $(libelf) +update3_LDADD = $(libebl) $(libelf) +update4_LDADD = $(libebl) $(libelf) +show_die_info_LDADD = $(libdw) $(libelf) +get_pubnames_LDADD = $(libdw) $(libelf) +show_abbrev_LDADD = $(libdw) $(libelf) +get_lines_LDADD = $(libdw) $(libelf) +get_files_LDADD = $(libdw) $(libelf) +get_aranges_LDADD = $(libdw) $(libelf) +#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) +asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) +CLEANFILES = xxx +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +arextract$(EXEEXT): $(arextract_OBJECTS) $(arextract_DEPENDENCIES) + @rm -f arextract$(EXEEXT) + $(LINK) $(arextract_LDFLAGS) $(arextract_OBJECTS) $(arextract_LDADD) $(LIBS) +arsymtest$(EXEEXT): $(arsymtest_OBJECTS) $(arsymtest_DEPENDENCIES) + @rm -f arsymtest$(EXEEXT) + $(LINK) $(arsymtest_LDFLAGS) $(arsymtest_OBJECTS) $(arsymtest_LDADD) $(LIBS) +asm-tst1$(EXEEXT): $(asm_tst1_OBJECTS) $(asm_tst1_DEPENDENCIES) + @rm -f asm-tst1$(EXEEXT) + $(LINK) $(asm_tst1_LDFLAGS) $(asm_tst1_OBJECTS) $(asm_tst1_LDADD) $(LIBS) +asm-tst2$(EXEEXT): $(asm_tst2_OBJECTS) $(asm_tst2_DEPENDENCIES) + @rm -f asm-tst2$(EXEEXT) + $(LINK) $(asm_tst2_LDFLAGS) $(asm_tst2_OBJECTS) $(asm_tst2_LDADD) $(LIBS) +asm-tst3$(EXEEXT): $(asm_tst3_OBJECTS) $(asm_tst3_DEPENDENCIES) + @rm -f asm-tst3$(EXEEXT) + $(LINK) $(asm_tst3_LDFLAGS) $(asm_tst3_OBJECTS) $(asm_tst3_LDADD) $(LIBS) +asm-tst4$(EXEEXT): $(asm_tst4_OBJECTS) $(asm_tst4_DEPENDENCIES) + @rm -f asm-tst4$(EXEEXT) + $(LINK) $(asm_tst4_LDFLAGS) $(asm_tst4_OBJECTS) $(asm_tst4_LDADD) $(LIBS) +asm-tst5$(EXEEXT): $(asm_tst5_OBJECTS) $(asm_tst5_DEPENDENCIES) + @rm -f asm-tst5$(EXEEXT) + $(LINK) $(asm_tst5_LDFLAGS) $(asm_tst5_OBJECTS) $(asm_tst5_LDADD) $(LIBS) +asm-tst6$(EXEEXT): $(asm_tst6_OBJECTS) $(asm_tst6_DEPENDENCIES) + @rm -f asm-tst6$(EXEEXT) + $(LINK) $(asm_tst6_LDFLAGS) $(asm_tst6_OBJECTS) $(asm_tst6_LDADD) $(LIBS) +asm-tst7$(EXEEXT): $(asm_tst7_OBJECTS) $(asm_tst7_DEPENDENCIES) + @rm -f asm-tst7$(EXEEXT) + $(LINK) $(asm_tst7_LDFLAGS) $(asm_tst7_OBJECTS) $(asm_tst7_LDADD) $(LIBS) +asm-tst8$(EXEEXT): $(asm_tst8_OBJECTS) $(asm_tst8_DEPENDENCIES) + @rm -f asm-tst8$(EXEEXT) + $(LINK) $(asm_tst8_LDFLAGS) $(asm_tst8_OBJECTS) $(asm_tst8_LDADD) $(LIBS) +asm-tst9$(EXEEXT): $(asm_tst9_OBJECTS) $(asm_tst9_DEPENDENCIES) + @rm -f asm-tst9$(EXEEXT) + $(LINK) $(asm_tst9_LDFLAGS) $(asm_tst9_OBJECTS) $(asm_tst9_LDADD) $(LIBS) +ecp$(EXEEXT): $(ecp_OBJECTS) $(ecp_DEPENDENCIES) + @rm -f ecp$(EXEEXT) + $(LINK) $(ecp_LDFLAGS) $(ecp_OBJECTS) $(ecp_LDADD) $(LIBS) +get-aranges$(EXEEXT): $(get_aranges_OBJECTS) $(get_aranges_DEPENDENCIES) + @rm -f get-aranges$(EXEEXT) + $(LINK) $(get_aranges_LDFLAGS) $(get_aranges_OBJECTS) $(get_aranges_LDADD) $(LIBS) +get-files$(EXEEXT): $(get_files_OBJECTS) $(get_files_DEPENDENCIES) + @rm -f get-files$(EXEEXT) + $(LINK) $(get_files_LDFLAGS) $(get_files_OBJECTS) $(get_files_LDADD) $(LIBS) +get-lines$(EXEEXT): $(get_lines_OBJECTS) $(get_lines_DEPENDENCIES) + @rm -f get-lines$(EXEEXT) + $(LINK) $(get_lines_LDFLAGS) $(get_lines_OBJECTS) $(get_lines_LDADD) $(LIBS) +get-pubnames$(EXEEXT): $(get_pubnames_OBJECTS) $(get_pubnames_DEPENDENCIES) + @rm -f get-pubnames$(EXEEXT) + $(LINK) $(get_pubnames_LDFLAGS) $(get_pubnames_OBJECTS) $(get_pubnames_LDADD) $(LIBS) +hash$(EXEEXT): $(hash_OBJECTS) $(hash_DEPENDENCIES) + @rm -f hash$(EXEEXT) + $(LINK) $(hash_LDFLAGS) $(hash_OBJECTS) $(hash_LDADD) $(LIBS) +msg_tst$(EXEEXT): $(msg_tst_OBJECTS) $(msg_tst_DEPENDENCIES) + @rm -f msg_tst$(EXEEXT) + $(LINK) $(msg_tst_LDFLAGS) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS) +newfile$(EXEEXT): $(newfile_OBJECTS) $(newfile_DEPENDENCIES) + @rm -f newfile$(EXEEXT) + $(LINK) $(newfile_LDFLAGS) $(newfile_OBJECTS) $(newfile_LDADD) $(LIBS) +newscn$(EXEEXT): $(newscn_OBJECTS) $(newscn_DEPENDENCIES) + @rm -f newscn$(EXEEXT) + $(LINK) $(newscn_LDFLAGS) $(newscn_OBJECTS) $(newscn_LDADD) $(LIBS) +saridx$(EXEEXT): $(saridx_OBJECTS) $(saridx_DEPENDENCIES) + @rm -f saridx$(EXEEXT) + $(LINK) $(saridx_LDFLAGS) $(saridx_OBJECTS) $(saridx_LDADD) $(LIBS) +scnnames$(EXEEXT): $(scnnames_OBJECTS) $(scnnames_DEPENDENCIES) + @rm -f scnnames$(EXEEXT) + $(LINK) $(scnnames_LDFLAGS) $(scnnames_OBJECTS) $(scnnames_LDADD) $(LIBS) +sectiondump$(EXEEXT): $(sectiondump_OBJECTS) $(sectiondump_DEPENDENCIES) + @rm -f sectiondump$(EXEEXT) + $(LINK) $(sectiondump_LDFLAGS) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS) +show-abbrev$(EXEEXT): $(show_abbrev_OBJECTS) $(show_abbrev_DEPENDENCIES) + @rm -f show-abbrev$(EXEEXT) + $(LINK) $(show_abbrev_LDFLAGS) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS) +show-die-info$(EXEEXT): $(show_die_info_OBJECTS) $(show_die_info_DEPENDENCIES) + @rm -f show-die-info$(EXEEXT) + $(LINK) $(show_die_info_LDFLAGS) $(show_die_info_OBJECTS) $(show_die_info_LDADD) $(LIBS) +showptable$(EXEEXT): $(showptable_OBJECTS) $(showptable_DEPENDENCIES) + @rm -f showptable$(EXEEXT) + $(LINK) $(showptable_LDFLAGS) $(showptable_OBJECTS) $(showptable_LDADD) $(LIBS) +test-nlist$(EXEEXT): $(test_nlist_OBJECTS) $(test_nlist_DEPENDENCIES) + @rm -f test-nlist$(EXEEXT) + $(LINK) $(test_nlist_LDFLAGS) $(test_nlist_OBJECTS) $(test_nlist_LDADD) $(LIBS) +update1$(EXEEXT): $(update1_OBJECTS) $(update1_DEPENDENCIES) + @rm -f update1$(EXEEXT) + $(LINK) $(update1_LDFLAGS) $(update1_OBJECTS) $(update1_LDADD) $(LIBS) +update2$(EXEEXT): $(update2_OBJECTS) $(update2_DEPENDENCIES) + @rm -f update2$(EXEEXT) + $(LINK) $(update2_LDFLAGS) $(update2_OBJECTS) $(update2_LDADD) $(LIBS) +update3$(EXEEXT): $(update3_OBJECTS) $(update3_DEPENDENCIES) + @rm -f update3$(EXEEXT) + $(LINK) $(update3_LDFLAGS) $(update3_OBJECTS) $(update3_LDADD) $(LIBS) +update4$(EXEEXT): $(update4_OBJECTS) $(update4_DEPENDENCIES) + @rm -f update4$(EXEEXT) + $(LINK) $(update4_LDFLAGS) $(update4_OBJECTS) $(update4_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +include ./$(DEPDIR)/arextract.Po +include ./$(DEPDIR)/arsymtest.Po +include ./$(DEPDIR)/asm-tst1.Po +include ./$(DEPDIR)/asm-tst2.Po +include ./$(DEPDIR)/asm-tst3.Po +include ./$(DEPDIR)/asm-tst4.Po +include ./$(DEPDIR)/asm-tst5.Po +include ./$(DEPDIR)/asm-tst6.Po +include ./$(DEPDIR)/asm-tst7.Po +include ./$(DEPDIR)/asm-tst8.Po +include ./$(DEPDIR)/asm-tst9.Po +include ./$(DEPDIR)/ecp.Po +include ./$(DEPDIR)/get-aranges.Po +include ./$(DEPDIR)/get-files.Po +include ./$(DEPDIR)/get-lines.Po +include ./$(DEPDIR)/get-pubnames.Po +include ./$(DEPDIR)/hash.Po +include ./$(DEPDIR)/msg_tst.Po +include ./$(DEPDIR)/newfile.Po +include ./$(DEPDIR)/newscn.Po +include ./$(DEPDIR)/saridx.Po +include ./$(DEPDIR)/scnnames.Po +include ./$(DEPDIR)/sectiondump.Po +include ./$(DEPDIR)/show-abbrev.Po +include ./$(DEPDIR)/show-die-info.Po +include ./$(DEPDIR)/showptable.Po +include ./$(DEPDIR)/test-nlist.Po +include ./$(DEPDIR)/update1.Po +include ./$(DEPDIR)/update2.Po +include ./$(DEPDIR)/update3.Po +include ./$(DEPDIR)/update4.Po + +.c.o: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c $< + +.c.obj: + if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ + then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +# source='$<' object='$@' libtool=no \ +# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \ +# $(COMPILE) -c `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/Makefile.am b/tests/Makefile.am new file mode 100644 index 00000000..1e4f9a8d --- /dev/null +++ b/tests/Makefile.am @@ -0,0 +1,98 @@ +## Process this file with automake to create Makefile.in +## Configure input file for elfutils. +## +## Copyright (C) 1996-2002, 2003, 2004 Red Hat, Inc. +## +## This program is Open Source software; you can redistribute it and/or +## modify it under the terms of the Open Software License version 1.0 as +## published by the Open Source Initiative. +## +## You should have received a copy of the Open Software License along +## with this program; if not, you may obtain a copy of the Open Software +## License version 1.0 from http://www.opensource.org/licenses/osl.php or +## by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +## 3001 King Ranch Road, Ukiah, CA 95482. +## +DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE +AM_CFLAGS = -Wall -Werror -std=gnu99 +if !MUDFLAP +AM_LDFLAGS = -Wl,-rpath,\$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../libebl:\$$ORIGIN/../libelf +endif +INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ + -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ + -I$(top_srcdir)/lib -I.. + +noinst_PROGRAMS = arextract arsymtest newfile saridx scnnames sectiondump \ + showptable update1 update2 update3 update4 test-nlist \ + show-die-info get-files get-lines get-pubnames \ + get-aranges \ + show-abbrev hash asm-tst1 asm-tst2 asm-tst3 \ + asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn ecp +# get-ciefde + +TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ + update1 update2 update3 update4 \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-abbrev.sh hash asm-tst1 asm-tst2 \ + asm-tst3 asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn run-strip-test.sh run-strip-test2.sh \ + run-strip-test3.sh run-ecp-test.sh run-ecp-test2.sh +# run-show-ciefde.sh + +EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \ + run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \ + testfile.bz2 testfile2.bz2 testfile3.bz2 testfile4.bz2 \ + testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \ + testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \ + testfile13.bz2 run-strip-test3.sh + +if MUDFLAP +libdw = ../libdw/libdw.a +libelf = ../libelf/libelf.a +libasm = ../libasm/libasm.a +else +libdw = ../libdw/libdw.so +libelf = ../libelf/libelf.so +libasm = ../libasm/libasm.so +endif +libebl = ../libebl/libebl.a + +arextract_LDADD = $(libelf) +arsymtest_LDADD = $(libelf) +newfile_LDADD = $(libelf) +saridx_LDADD = $(libelf) +scnnames_LDADD = $(libelf) +sectiondump_LDADD = $(libelf) +showptable_LDADD = $(libelf) +hash_LDADD = $(libelf) +test_nlist_LDADD = $(libelf) +msg_tst_LDADD = $(libelf) +newscn_LDADD = $(libelf) +ecp_LDADD = $(libelf) +update1_LDADD = $(libelf) +update2_LDADD = $(libelf) +update3_LDADD = $(libebl) $(libelf) +update4_LDADD = $(libebl) $(libelf) +show_die_info_LDADD = $(libdw) $(libelf) +get_pubnames_LDADD = $(libdw) $(libelf) +show_abbrev_LDADD = $(libdw) $(libelf) +get_lines_LDADD = $(libdw) $(libelf) +get_files_LDADD = $(libdw) $(libelf) +get_aranges_LDADD = $(libdw) $(libelf) +#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) +asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) + +CLEANFILES = xxx diff --git a/tests/Makefile.in b/tests/Makefile.in new file mode 100644 index 00000000..c5dd6529 --- /dev/null +++ b/tests/Makefile.in @@ -0,0 +1,794 @@ +# Makefile.in generated by automake 1.9.2 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + +SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c asm-tst9.c ecp.c get-aranges.c get-files.c get-lines.c get-pubnames.c hash.c msg_tst.c newfile.c newscn.c saridx.c scnnames.c sectiondump.c show-abbrev.c show-die-info.c showptable.c test-nlist.c update1.c update2.c update3.c update4.c + +srcdir = @srcdir@ +top_srcdir = @top_srcdir@ +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +top_builddir = .. +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +INSTALL = @INSTALL@ +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +noinst_PROGRAMS = arextract$(EXEEXT) arsymtest$(EXEEXT) \ + newfile$(EXEEXT) saridx$(EXEEXT) scnnames$(EXEEXT) \ + sectiondump$(EXEEXT) showptable$(EXEEXT) update1$(EXEEXT) \ + update2$(EXEEXT) update3$(EXEEXT) update4$(EXEEXT) \ + test-nlist$(EXEEXT) show-die-info$(EXEEXT) get-files$(EXEEXT) \ + get-lines$(EXEEXT) get-pubnames$(EXEEXT) get-aranges$(EXEEXT) \ + show-abbrev$(EXEEXT) hash$(EXEEXT) asm-tst1$(EXEEXT) \ + asm-tst2$(EXEEXT) asm-tst3$(EXEEXT) asm-tst4$(EXEEXT) \ + asm-tst5$(EXEEXT) asm-tst6$(EXEEXT) asm-tst7$(EXEEXT) \ + asm-tst8$(EXEEXT) asm-tst9$(EXEEXT) msg_tst$(EXEEXT) \ + newscn$(EXEEXT) ecp$(EXEEXT) +subdir = tests +DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ + $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ + $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ + $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(SHELL) $(top_srcdir)/config/mkinstalldirs +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +PROGRAMS = $(noinst_PROGRAMS) +arextract_SOURCES = arextract.c +arextract_OBJECTS = arextract.$(OBJEXT) +@MUDFLAP_FALSE@am__DEPENDENCIES_1 = ../libelf/libelf.so +@MUDFLAP_TRUE@am__DEPENDENCIES_1 = ../libelf/libelf.a +arextract_DEPENDENCIES = $(am__DEPENDENCIES_1) +arsymtest_SOURCES = arsymtest.c +arsymtest_OBJECTS = arsymtest.$(OBJEXT) +arsymtest_DEPENDENCIES = $(am__DEPENDENCIES_1) +asm_tst1_SOURCES = asm-tst1.c +asm_tst1_OBJECTS = asm-tst1.$(OBJEXT) +@MUDFLAP_FALSE@am__DEPENDENCIES_2 = ../libasm/libasm.so +@MUDFLAP_TRUE@am__DEPENDENCIES_2 = ../libasm/libasm.a +am__DEPENDENCIES_3 = ../libebl/libebl.a +asm_tst1_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst2_SOURCES = asm-tst2.c +asm_tst2_OBJECTS = asm-tst2.$(OBJEXT) +asm_tst2_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst3_SOURCES = asm-tst3.c +asm_tst3_OBJECTS = asm-tst3.$(OBJEXT) +asm_tst3_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst4_SOURCES = asm-tst4.c +asm_tst4_OBJECTS = asm-tst4.$(OBJEXT) +asm_tst4_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst5_SOURCES = asm-tst5.c +asm_tst5_OBJECTS = asm-tst5.$(OBJEXT) +asm_tst5_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst6_SOURCES = asm-tst6.c +asm_tst6_OBJECTS = asm-tst6.$(OBJEXT) +asm_tst6_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst7_SOURCES = asm-tst7.c +asm_tst7_OBJECTS = asm-tst7.$(OBJEXT) +asm_tst7_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst8_SOURCES = asm-tst8.c +asm_tst8_OBJECTS = asm-tst8.$(OBJEXT) +asm_tst8_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +asm_tst9_SOURCES = asm-tst9.c +asm_tst9_OBJECTS = asm-tst9.$(OBJEXT) +asm_tst9_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_3) \ + $(am__DEPENDENCIES_1) +ecp_SOURCES = ecp.c +ecp_OBJECTS = ecp.$(OBJEXT) +ecp_DEPENDENCIES = $(am__DEPENDENCIES_1) +get_aranges_SOURCES = get-aranges.c +get_aranges_OBJECTS = get-aranges.$(OBJEXT) +@MUDFLAP_FALSE@am__DEPENDENCIES_4 = ../libdw/libdw.so +@MUDFLAP_TRUE@am__DEPENDENCIES_4 = ../libdw/libdw.a +get_aranges_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_files_SOURCES = get-files.c +get_files_OBJECTS = get-files.$(OBJEXT) +get_files_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_lines_SOURCES = get-lines.c +get_lines_OBJECTS = get-lines.$(OBJEXT) +get_lines_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +get_pubnames_SOURCES = get-pubnames.c +get_pubnames_OBJECTS = get-pubnames.$(OBJEXT) +get_pubnames_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) +hash_SOURCES = hash.c +hash_OBJECTS = hash.$(OBJEXT) +hash_DEPENDENCIES = $(am__DEPENDENCIES_1) +msg_tst_SOURCES = msg_tst.c +msg_tst_OBJECTS = msg_tst.$(OBJEXT) +msg_tst_DEPENDENCIES = $(am__DEPENDENCIES_1) +newfile_SOURCES = newfile.c +newfile_OBJECTS = newfile.$(OBJEXT) +newfile_DEPENDENCIES = $(am__DEPENDENCIES_1) +newscn_SOURCES = newscn.c +newscn_OBJECTS = newscn.$(OBJEXT) +newscn_DEPENDENCIES = $(am__DEPENDENCIES_1) +saridx_SOURCES = saridx.c +saridx_OBJECTS = saridx.$(OBJEXT) +saridx_DEPENDENCIES = $(am__DEPENDENCIES_1) +scnnames_SOURCES = scnnames.c +scnnames_OBJECTS = scnnames.$(OBJEXT) +scnnames_DEPENDENCIES = $(am__DEPENDENCIES_1) +sectiondump_SOURCES = sectiondump.c +sectiondump_OBJECTS = sectiondump.$(OBJEXT) +sectiondump_DEPENDENCIES = $(am__DEPENDENCIES_1) +show_abbrev_SOURCES = show-abbrev.c +show_abbrev_OBJECTS = show-abbrev.$(OBJEXT) +show_abbrev_DEPENDENCIES = $(am__DEPENDENCIES_4) $(am__DEPENDENCIES_1) +show_die_info_SOURCES = show-die-info.c +show_die_info_OBJECTS = show-die-info.$(OBJEXT) +show_die_info_DEPENDENCIES = $(am__DEPENDENCIES_4) \ + $(am__DEPENDENCIES_1) +showptable_SOURCES = showptable.c +showptable_OBJECTS = showptable.$(OBJEXT) +showptable_DEPENDENCIES = $(am__DEPENDENCIES_1) +test_nlist_SOURCES = test-nlist.c +test_nlist_OBJECTS = test-nlist.$(OBJEXT) +test_nlist_DEPENDENCIES = $(am__DEPENDENCIES_1) +update1_SOURCES = update1.c +update1_OBJECTS = update1.$(OBJEXT) +update1_DEPENDENCIES = $(am__DEPENDENCIES_1) +update2_SOURCES = update2.c +update2_OBJECTS = update2.$(OBJEXT) +update2_DEPENDENCIES = $(am__DEPENDENCIES_1) +update3_SOURCES = update3.c +update3_OBJECTS = update3.$(OBJEXT) +update3_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +update4_SOURCES = update4.c +update4_OBJECTS = update4.$(OBJEXT) +update4_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) +DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) +depcomp = $(SHELL) $(top_srcdir)/config/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c asm-tst3.c \ + asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c asm-tst8.c \ + asm-tst9.c ecp.c get-aranges.c get-files.c get-lines.c \ + get-pubnames.c hash.c msg_tst.c newfile.c newscn.c saridx.c \ + scnnames.c sectiondump.c show-abbrev.c show-die-info.c \ + showptable.c test-nlist.c update1.c update2.c update3.c \ + update4.c +DIST_SOURCES = arextract.c arsymtest.c asm-tst1.c asm-tst2.c \ + asm-tst3.c asm-tst4.c asm-tst5.c asm-tst6.c asm-tst7.c \ + asm-tst8.c asm-tst9.c ecp.c get-aranges.c get-files.c \ + get-lines.c get-pubnames.c hash.c msg_tst.c newfile.c newscn.c \ + saridx.c scnnames.c sectiondump.c show-abbrev.c \ + show-die-info.c showptable.c test-nlist.c update1.c update2.c \ + update3.c update4.c +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMDEP_FALSE = @AMDEP_FALSE@ +AMDEP_TRUE = @AMDEP_TRUE@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CFLAGS = @CFLAGS@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DATADIRNAME = @DATADIRNAME@ +DEFS = -DHAVE_CONFIG_H -D_GNU_SOURCE +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +GMSGFMT = @GMSGFMT@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +INTLLIBS = @INTLLIBS@ +LDFLAGS = @LDFLAGS@ +LEX = @LEX@ +LEXLIB = @LEXLIB@ +LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ +LIBICONV = @LIBICONV@ +LIBINTL = @LIBINTL@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LOCALEDIR = @LOCALEDIR@ +LTLIBICONV = @LTLIBICONV@ +LTLIBINTL = @LTLIBINTL@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKINSTALLDIRS = @MKINSTALLDIRS@ +MSGFMT = @MSGFMT@ +MSGMERGE = @MSGMERGE@ +MUDFLAP_FALSE = @MUDFLAP_FALSE@ +MUDFLAP_TRUE = @MUDFLAP_TRUE@ +NATIVE_LD_FALSE = @NATIVE_LD_FALSE@ +NATIVE_LD_TRUE = @NATIVE_LD_TRUE@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +POSUB = @POSUB@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +USE_NLS = @USE_NLS@ +VERSION = @VERSION@ +XGETTEXT = @XGETTEXT@ +YACC = @YACC@ +ac_ct_CC = @ac_ct_CC@ +ac_ct_RANLIB = @ac_ct_RANLIB@ +ac_ct_STRIP = @ac_ct_STRIP@ +am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ +am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +base_cpu = @base_cpu@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +datadir = @datadir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +AM_CFLAGS = -Wall -Werror -std=gnu99 +@MUDFLAP_FALSE@AM_LDFLAGS = -Wl,-rpath,\$$ORIGIN/../libasm:\$$ORIGIN/../libdw:\$$ORIGIN/../libebl:\$$ORIGIN/../libelf +INCLUDES = -I$(top_srcdir)/libasm -I$(top_srcdir)/libdw \ + -I$(top_srcdir)/libebl -I$(top_srcdir)/libelf \ + -I$(top_srcdir)/lib -I.. + +# get-ciefde +TESTS = run-arextract.sh run-arsymtest.sh newfile test-nlist \ + update1 update2 update3 update4 \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-abbrev.sh hash asm-tst1 asm-tst2 \ + asm-tst3 asm-tst4 asm-tst5 asm-tst6 asm-tst7 asm-tst8 asm-tst9 \ + msg_tst newscn run-strip-test.sh run-strip-test2.sh \ + run-strip-test3.sh run-ecp-test.sh run-ecp-test2.sh + +# run-show-ciefde.sh +EXTRA_DIST = run-arextract.sh run-arsymtest.sh \ + run-show-die-info.sh run-get-files.sh run-get-lines.sh \ + run-get-pubnames.sh run-get-aranges.sh \ + run-show-ciefde.sh run-show-abbrev.sh run-strip-test.sh \ + run-strip-test2.sh run-ecp-test.sh run-ecp-test2.sh \ + testfile.bz2 testfile2.bz2 testfile3.bz2 testfile4.bz2 \ + testfile5.bz2 testfile6.bz2 testfile7.bz2 testfile8.bz2 \ + testfile9.bz2 testfile10.bz2 testfile11.bz2 testfile12.bz2 \ + testfile13.bz2 run-strip-test3.sh + +@MUDFLAP_FALSE@libdw = ../libdw/libdw.so +@MUDFLAP_TRUE@libdw = ../libdw/libdw.a +@MUDFLAP_FALSE@libelf = ../libelf/libelf.so +@MUDFLAP_TRUE@libelf = ../libelf/libelf.a +@MUDFLAP_FALSE@libasm = ../libasm/libasm.so +@MUDFLAP_TRUE@libasm = ../libasm/libasm.a +libebl = ../libebl/libebl.a +arextract_LDADD = $(libelf) +arsymtest_LDADD = $(libelf) +newfile_LDADD = $(libelf) +saridx_LDADD = $(libelf) +scnnames_LDADD = $(libelf) +sectiondump_LDADD = $(libelf) +showptable_LDADD = $(libelf) +hash_LDADD = $(libelf) +test_nlist_LDADD = $(libelf) +msg_tst_LDADD = $(libelf) +newscn_LDADD = $(libelf) +ecp_LDADD = $(libelf) +update1_LDADD = $(libelf) +update2_LDADD = $(libelf) +update3_LDADD = $(libebl) $(libelf) +update4_LDADD = $(libebl) $(libelf) +show_die_info_LDADD = $(libdw) $(libelf) +get_pubnames_LDADD = $(libdw) $(libelf) +show_abbrev_LDADD = $(libdw) $(libelf) +get_lines_LDADD = $(libdw) $(libelf) +get_files_LDADD = $(libdw) $(libelf) +get_aranges_LDADD = $(libdw) $(libelf) +#show_ciefde_LDADD = ../libdwarf/libdwarf.so $(libelf) +asm_tst1_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst2_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst3_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst4_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst5_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst6_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst7_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst8_LDADD = $(libasm) $(libebl) $(libelf) +asm_tst9_LDADD = $(libasm) $(libebl) $(libelf) +CLEANFILES = xxx +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits tests/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --gnits tests/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstPROGRAMS: + -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) +arextract$(EXEEXT): $(arextract_OBJECTS) $(arextract_DEPENDENCIES) + @rm -f arextract$(EXEEXT) + $(LINK) $(arextract_LDFLAGS) $(arextract_OBJECTS) $(arextract_LDADD) $(LIBS) +arsymtest$(EXEEXT): $(arsymtest_OBJECTS) $(arsymtest_DEPENDENCIES) + @rm -f arsymtest$(EXEEXT) + $(LINK) $(arsymtest_LDFLAGS) $(arsymtest_OBJECTS) $(arsymtest_LDADD) $(LIBS) +asm-tst1$(EXEEXT): $(asm_tst1_OBJECTS) $(asm_tst1_DEPENDENCIES) + @rm -f asm-tst1$(EXEEXT) + $(LINK) $(asm_tst1_LDFLAGS) $(asm_tst1_OBJECTS) $(asm_tst1_LDADD) $(LIBS) +asm-tst2$(EXEEXT): $(asm_tst2_OBJECTS) $(asm_tst2_DEPENDENCIES) + @rm -f asm-tst2$(EXEEXT) + $(LINK) $(asm_tst2_LDFLAGS) $(asm_tst2_OBJECTS) $(asm_tst2_LDADD) $(LIBS) +asm-tst3$(EXEEXT): $(asm_tst3_OBJECTS) $(asm_tst3_DEPENDENCIES) + @rm -f asm-tst3$(EXEEXT) + $(LINK) $(asm_tst3_LDFLAGS) $(asm_tst3_OBJECTS) $(asm_tst3_LDADD) $(LIBS) +asm-tst4$(EXEEXT): $(asm_tst4_OBJECTS) $(asm_tst4_DEPENDENCIES) + @rm -f asm-tst4$(EXEEXT) + $(LINK) $(asm_tst4_LDFLAGS) $(asm_tst4_OBJECTS) $(asm_tst4_LDADD) $(LIBS) +asm-tst5$(EXEEXT): $(asm_tst5_OBJECTS) $(asm_tst5_DEPENDENCIES) + @rm -f asm-tst5$(EXEEXT) + $(LINK) $(asm_tst5_LDFLAGS) $(asm_tst5_OBJECTS) $(asm_tst5_LDADD) $(LIBS) +asm-tst6$(EXEEXT): $(asm_tst6_OBJECTS) $(asm_tst6_DEPENDENCIES) + @rm -f asm-tst6$(EXEEXT) + $(LINK) $(asm_tst6_LDFLAGS) $(asm_tst6_OBJECTS) $(asm_tst6_LDADD) $(LIBS) +asm-tst7$(EXEEXT): $(asm_tst7_OBJECTS) $(asm_tst7_DEPENDENCIES) + @rm -f asm-tst7$(EXEEXT) + $(LINK) $(asm_tst7_LDFLAGS) $(asm_tst7_OBJECTS) $(asm_tst7_LDADD) $(LIBS) +asm-tst8$(EXEEXT): $(asm_tst8_OBJECTS) $(asm_tst8_DEPENDENCIES) + @rm -f asm-tst8$(EXEEXT) + $(LINK) $(asm_tst8_LDFLAGS) $(asm_tst8_OBJECTS) $(asm_tst8_LDADD) $(LIBS) +asm-tst9$(EXEEXT): $(asm_tst9_OBJECTS) $(asm_tst9_DEPENDENCIES) + @rm -f asm-tst9$(EXEEXT) + $(LINK) $(asm_tst9_LDFLAGS) $(asm_tst9_OBJECTS) $(asm_tst9_LDADD) $(LIBS) +ecp$(EXEEXT): $(ecp_OBJECTS) $(ecp_DEPENDENCIES) + @rm -f ecp$(EXEEXT) + $(LINK) $(ecp_LDFLAGS) $(ecp_OBJECTS) $(ecp_LDADD) $(LIBS) +get-aranges$(EXEEXT): $(get_aranges_OBJECTS) $(get_aranges_DEPENDENCIES) + @rm -f get-aranges$(EXEEXT) + $(LINK) $(get_aranges_LDFLAGS) $(get_aranges_OBJECTS) $(get_aranges_LDADD) $(LIBS) +get-files$(EXEEXT): $(get_files_OBJECTS) $(get_files_DEPENDENCIES) + @rm -f get-files$(EXEEXT) + $(LINK) $(get_files_LDFLAGS) $(get_files_OBJECTS) $(get_files_LDADD) $(LIBS) +get-lines$(EXEEXT): $(get_lines_OBJECTS) $(get_lines_DEPENDENCIES) + @rm -f get-lines$(EXEEXT) + $(LINK) $(get_lines_LDFLAGS) $(get_lines_OBJECTS) $(get_lines_LDADD) $(LIBS) +get-pubnames$(EXEEXT): $(get_pubnames_OBJECTS) $(get_pubnames_DEPENDENCIES) + @rm -f get-pubnames$(EXEEXT) + $(LINK) $(get_pubnames_LDFLAGS) $(get_pubnames_OBJECTS) $(get_pubnames_LDADD) $(LIBS) +hash$(EXEEXT): $(hash_OBJECTS) $(hash_DEPENDENCIES) + @rm -f hash$(EXEEXT) + $(LINK) $(hash_LDFLAGS) $(hash_OBJECTS) $(hash_LDADD) $(LIBS) +msg_tst$(EXEEXT): $(msg_tst_OBJECTS) $(msg_tst_DEPENDENCIES) + @rm -f msg_tst$(EXEEXT) + $(LINK) $(msg_tst_LDFLAGS) $(msg_tst_OBJECTS) $(msg_tst_LDADD) $(LIBS) +newfile$(EXEEXT): $(newfile_OBJECTS) $(newfile_DEPENDENCIES) + @rm -f newfile$(EXEEXT) + $(LINK) $(newfile_LDFLAGS) $(newfile_OBJECTS) $(newfile_LDADD) $(LIBS) +newscn$(EXEEXT): $(newscn_OBJECTS) $(newscn_DEPENDENCIES) + @rm -f newscn$(EXEEXT) + $(LINK) $(newscn_LDFLAGS) $(newscn_OBJECTS) $(newscn_LDADD) $(LIBS) +saridx$(EXEEXT): $(saridx_OBJECTS) $(saridx_DEPENDENCIES) + @rm -f saridx$(EXEEXT) + $(LINK) $(saridx_LDFLAGS) $(saridx_OBJECTS) $(saridx_LDADD) $(LIBS) +scnnames$(EXEEXT): $(scnnames_OBJECTS) $(scnnames_DEPENDENCIES) + @rm -f scnnames$(EXEEXT) + $(LINK) $(scnnames_LDFLAGS) $(scnnames_OBJECTS) $(scnnames_LDADD) $(LIBS) +sectiondump$(EXEEXT): $(sectiondump_OBJECTS) $(sectiondump_DEPENDENCIES) + @rm -f sectiondump$(EXEEXT) + $(LINK) $(sectiondump_LDFLAGS) $(sectiondump_OBJECTS) $(sectiondump_LDADD) $(LIBS) +show-abbrev$(EXEEXT): $(show_abbrev_OBJECTS) $(show_abbrev_DEPENDENCIES) + @rm -f show-abbrev$(EXEEXT) + $(LINK) $(show_abbrev_LDFLAGS) $(show_abbrev_OBJECTS) $(show_abbrev_LDADD) $(LIBS) +show-die-info$(EXEEXT): $(show_die_info_OBJECTS) $(show_die_info_DEPENDENCIES) + @rm -f show-die-info$(EXEEXT) + $(LINK) $(show_die_info_LDFLAGS) $(show_die_info_OBJECTS) $(show_die_info_LDADD) $(LIBS) +showptable$(EXEEXT): $(showptable_OBJECTS) $(showptable_DEPENDENCIES) + @rm -f showptable$(EXEEXT) + $(LINK) $(showptable_LDFLAGS) $(showptable_OBJECTS) $(showptable_LDADD) $(LIBS) +test-nlist$(EXEEXT): $(test_nlist_OBJECTS) $(test_nlist_DEPENDENCIES) + @rm -f test-nlist$(EXEEXT) + $(LINK) $(test_nlist_LDFLAGS) $(test_nlist_OBJECTS) $(test_nlist_LDADD) $(LIBS) +update1$(EXEEXT): $(update1_OBJECTS) $(update1_DEPENDENCIES) + @rm -f update1$(EXEEXT) + $(LINK) $(update1_LDFLAGS) $(update1_OBJECTS) $(update1_LDADD) $(LIBS) +update2$(EXEEXT): $(update2_OBJECTS) $(update2_DEPENDENCIES) + @rm -f update2$(EXEEXT) + $(LINK) $(update2_LDFLAGS) $(update2_OBJECTS) $(update2_LDADD) $(LIBS) +update3$(EXEEXT): $(update3_OBJECTS) $(update3_DEPENDENCIES) + @rm -f update3$(EXEEXT) + $(LINK) $(update3_LDFLAGS) $(update3_OBJECTS) $(update3_LDADD) $(LIBS) +update4$(EXEEXT): $(update4_OBJECTS) $(update4_DEPENDENCIES) + @rm -f update4$(EXEEXT) + $(LINK) $(update4_LDFLAGS) $(update4_OBJECTS) $(update4_LDADD) $(LIBS) + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arextract.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/arsymtest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst5.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst6.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst7.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst8.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asm-tst9.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ecp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-aranges.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-files.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-lines.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/get-pubnames.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hash.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg_tst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newfile.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/newscn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saridx.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scnnames.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sectiondump.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-abbrev.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show-die-info.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/showptable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-nlist.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/update4.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ +@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` +uninstall-info-am: + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +check-TESTS: $(TESTS) + @failed=0; all=0; xfail=0; xpass=0; skip=0; \ + srcdir=$(srcdir); export srcdir; \ + list='$(TESTS)'; \ + if test -n "$$list"; then \ + for tst in $$list; do \ + if test -f ./$$tst; then dir=./; \ + elif test -f $$tst; then dir=; \ + else dir="$(srcdir)/"; fi; \ + if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xpass=`expr $$xpass + 1`; \ + failed=`expr $$failed + 1`; \ + echo "XPASS: $$tst"; \ + ;; \ + *) \ + echo "PASS: $$tst"; \ + ;; \ + esac; \ + elif test $$? -ne 77; then \ + all=`expr $$all + 1`; \ + case " $(XFAIL_TESTS) " in \ + *" $$tst "*) \ + xfail=`expr $$xfail + 1`; \ + echo "XFAIL: $$tst"; \ + ;; \ + *) \ + failed=`expr $$failed + 1`; \ + echo "FAIL: $$tst"; \ + ;; \ + esac; \ + else \ + skip=`expr $$skip + 1`; \ + echo "SKIP: $$tst"; \ + fi; \ + done; \ + if test "$$failed" -eq 0; then \ + if test "$$xfail" -eq 0; then \ + banner="All $$all tests passed"; \ + else \ + banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ + fi; \ + else \ + if test "$$xpass" -eq 0; then \ + banner="$$failed of $$all tests failed"; \ + else \ + banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ + fi; \ + fi; \ + dashes="$$banner"; \ + skipped=""; \ + if test "$$skip" -ne 0; then \ + skipped="($$skip tests were not run)"; \ + test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$skipped"; \ + fi; \ + report=""; \ + if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ + report="Please report to $(PACKAGE_BUGREPORT)"; \ + test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ + dashes="$$report"; \ + fi; \ + dashes=`echo "$$dashes" | sed s/./=/g`; \ + echo "$$dashes"; \ + echo "$$banner"; \ + test -z "$$skipped" || echo "$$skipped"; \ + test -z "$$report" || echo "$$report"; \ + echo "$$dashes"; \ + test "$$failed" -eq 0; \ + else :; fi + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ + list='$(DISTFILES)'; for file in $$list; do \ + case $$file in \ + $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ + $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ + esac; \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test "$$dir" != "$$file" && test "$$dir" != "."; then \ + dir="/$$dir"; \ + $(mkdir_p) "$(distdir)$$dir"; \ + else \ + dir=''; \ + fi; \ + if test -d $$d/$$file; then \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am + $(MAKE) $(AM_MAKEFLAGS) check-TESTS +check: check-am +all-am: Makefile $(PROGRAMS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-exec-am: + +install-info: install-info-am + +install-man: + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: uninstall-info-am + +.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ + clean-generic clean-noinstPROGRAMS ctags distclean \ + distclean-compile distclean-generic distclean-tags distdir dvi \ + dvi-am html html-am info info-am install install-am \ + install-data install-data-am install-exec install-exec-am \ + install-info install-info-am install-man install-strip \ + installcheck installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am uninstall-info-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: diff --git a/tests/arextract.c b/tests/arextract.c new file mode 100644 index 00000000..aa86fb4e --- /dev/null +++ b/tests/arextract.c @@ -0,0 +1,155 @@ +/* Copyright (C) 1999, 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1999. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <fcntl.h> +#include <gelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/param.h> + + +int +main (int argc, char *argv[]) +{ + int fd; + Elf *elf; + Elf *subelf; + Elf_Cmd cmd; + off_t offset; + size_t todo; + + if (argc < 4) + exit (1); + + /* Open the archive. */ + fd = open (argv[1], O_RDONLY); + if (fd == -1) + { + printf ("Cannot open input file: %m"); + exit (1); + } + + /* Set the ELF version. */ + elf_version (EV_CURRENT); + + /* Create an ELF descriptor. */ + cmd = ELF_C_READ; + elf = elf_begin (fd, cmd, NULL); + if (elf == NULL) + { + printf ("Cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* If it is no archive punt. */ + if (elf_kind (elf) != ELF_K_AR) + { + printf ("`%s' is no archive\n", argv[1]); + exit (1); + } + + /* Get the elements of the archive one after the other. */ + while ((subelf = elf_begin (fd, cmd, elf)) != NULL) + { + /* The the header for this element. */ + Elf_Arhdr *arhdr = elf_getarhdr (subelf); + + if (arhdr == NULL) + { + printf ("cannot get arhdr: %s\n", elf_errmsg (-1)); + exit (1); + } + + if (strcmp (arhdr->ar_name, argv[2]) == 0) + { + int outfd; + + /* Get the offset of the file in the archive. */ + offset = elf_getbase (subelf); + if (offset == -1) + { + printf ("\ +Failed to get base address for the archive element: %s\n", + elf_errmsg (-1)); + exit (1); + } + + /* Open the output file. */ + outfd = open (argv[3], O_CREAT | O_TRUNC | O_RDWR, 0666); + if (outfd == -1) + { + printf ("cannot open output file: %m"); + exit (1); + } + + /* Now write out the data. */ + todo = arhdr->ar_size; + while (todo > 0) + { + char buf[1024]; + ssize_t n = pread (fd, buf, MIN (sizeof buf, todo), offset); + if (n == 0) + break; + + if (write (outfd, buf, n) != n) + { + puts ("Writing output failed"); + exit (1); + } + + offset += n; + todo -= n; + } + + /* Check whether all the date was read and written out. */ + if (todo != 0) + { + puts ("Reading archive member failed."); + exit (1); + } + + /* Close the descriptors. */ + if (elf_end (subelf) != 0 || elf_end (elf) != 0) + { + printf ("Freeing ELF descriptors failed: %s", elf_errmsg (-1)); + exit (1); + } + + close (outfd); + close (fd); + + /* All went well. */ + exit (0); + } + + /* Get next archive element. */ + cmd = elf_next (subelf); + if (elf_end (subelf) != 0) + { + printf ("error while freeing sub-ELF descriptor: %s\n", + elf_errmsg (-1)); + exit (1); + } + } + + /* When we reach this point we haven't found the given file in the + archive. */ + printf ("File `%s' not found in archive\n", argv[2]); + exit (1); +} diff --git a/tests/arsymtest.c b/tests/arsymtest.c new file mode 100644 index 00000000..e4c2cf09 --- /dev/null +++ b/tests/arsymtest.c @@ -0,0 +1,132 @@ +/* Copyright (C) 1999, 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1999. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + int fd; + FILE *fp; + Elf *elf; + Elf_Arsym *arsym; + size_t narsym; + + if (argc < 3) + exit (1); + + /* Open the archive. */ + fd = open (argv[1], O_RDONLY); + if (fd == -1) + { + printf ("Cannot open input file: %m"); + exit (1); + } + + /* Open the output file. */ + fp = fopen (argv[2], "w"); + if (fp == NULL) + { + printf ("Cannot open output file: %m"); + exit (1); + } + + /* Set the ELF version. */ + elf_version (EV_CURRENT); + + /* Create an ELF descriptor. */ + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("Cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* If it is no archive punt. */ + if (elf_kind (elf) != ELF_K_AR) + { + printf ("`%s' is no archive\n", argv[1]); + exit (1); + } + + /* Now get the index of the archive. */ + arsym = elf_getarsym (elf, &narsym); + if (arsym == NULL) + { + printf ("Cannot get archive index: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* If there is no element in the index do nothing. There always is + an empty entry at the end which is included in the count and + which we want to skip. */ + if (narsym-- > 1) + while (narsym-- > 0) + { + Elf *subelf; + Elf_Arhdr *arhdr; + + if (elf_rand (elf, arsym[narsym].as_off) != arsym[narsym].as_off) + { + printf ("random access for symbol `%s' fails: %s\n", + arsym[narsym].as_name, elf_errmsg (-1)); + exit (1); + } + + subelf = elf_begin (fd, ELF_C_READ, elf); + if (subelf == NULL) + { + printf ("Cannot create ELF descriptor for archive member: %s\n", + elf_errmsg (-1)); + exit (1); + } + + arhdr = elf_getarhdr (subelf); + if (arhdr == NULL) + { + printf ("Cannot get archive header for element `%s': %s\n", + arsym[narsym].as_name, elf_errmsg (-1)); + exit (1); + } + + /* Now print what we actually want. */ + fprintf (fp, "%s in %s\n", arsym[narsym].as_name, arhdr->ar_name); + + /* Free the ELF descriptor. */ + if (elf_end (subelf) != 0) + { + printf ("Error while freeing subELF descriptor: %s\n", + elf_errmsg (-1)); + exit (1); + } + } + + /* Free the ELF descriptor. */ + if (elf_end (elf) != 0) + { + printf ("Error while freeing ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + close (fd); + fclose (fp); + + return 0; +} diff --git a/tests/asm-tst1.c b/tests/asm-tst1.c new file mode 100644 index 00000000..b76930d0 --- /dev/null +++ b/tests/asm-tst1.c @@ -0,0 +1,239 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst1-out.o"; + + +static const GElf_Ehdr expected_ehdr = + { + .e_ident = { [EI_MAG0] = ELFMAG0, + [EI_MAG1] = ELFMAG1, + [EI_MAG2] = ELFMAG2, + [EI_MAG3] = ELFMAG3, + [EI_CLASS] = ELFCLASS32, + [EI_DATA] = ELFDATA2LSB, + [EI_VERSION] = EV_CURRENT }, + .e_type = ET_REL, + .e_machine = EM_386, + .e_version = EV_CURRENT, + .e_shoff = 88, + .e_ehsize = sizeof (Elf32_Ehdr), + .e_shentsize = sizeof (Elf32_Shdr), + .e_shnum = 4, + .e_shstrndx = 3 + }; + + +static const char *scnnames[4] = + { + [0] = "", + [1] = ".text", + [2] = ".data", + [3] = ".shstrtab" + }; + + +int +main (void) +{ + AsmCtx_t *ctx; + AsmScn_t *scn1; + AsmScn_t *scn2; + int fd; + Elf *elf; + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr; + int result = 0; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create two sections. */ + scn1 = asm_newscn (ctx, ".text", SHT_PROGBITS, SHF_ALLOC | SHF_EXECINSTR); + scn2 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + if (scn1 == NULL || scn2 == NULL) + { + printf ("cannot create section in output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Special alignment for the .text section. */ + if (asm_align (scn1, 32) != 0) + { + printf ("cannot align .text section: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + { + printf ("cannot get ELF header: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close2; + } + + if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0) + { + puts ("ELF header does not match"); + result = 1; + goto out_close2; + } + + for (cnt = 1; cnt < 4; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]) != 0) + { + printf ("section %Zd's name differs: %s vs %s\n", cnt, + elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]); + result = 1; + } + + if (shdr->sh_type != (cnt == 3 ? SHT_STRTAB : SHT_PROGBITS)) + { + printf ("section %Zd's type differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_EXECINSTR)) + || (cnt == 2 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE)) + || (cnt == 3 && shdr->sh_flags != 0)) + { + printf ("section %Zd's flags differs\n", cnt); + result = 1; + } + + if (shdr->sh_addr != 0) + { + printf ("section %Zd's address differs\n", cnt); + result = 1; + } + + if (shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 31) & ~31)) + { + printf ("section %Zd's offset differs\n", cnt); + result = 1; + } + + if ((cnt != 3 && shdr->sh_size != 0) + || (cnt == 3 && shdr->sh_size != 23)) + { + printf ("section %Zd's size differs\n", cnt); + result = 1; + } + + if (shdr->sh_link != 0) + { + printf ("section %Zd's link differs\n", cnt); + result = 1; + } + + if (shdr->sh_info != 0) + { + printf ("section %Zd's info differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_addralign != 32) + || (cnt != 1 && shdr->sh_addralign != 1)) + { + printf ("section %Zd's addralign differs\n", cnt); + result = 1; + } + + if (shdr->sh_entsize != 0) + { + printf ("section %Zd's entsize differs\n", cnt); + result = 1; + } + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst2.c b/tests/asm-tst2.c new file mode 100644 index 00000000..a309976d --- /dev/null +++ b/tests/asm-tst2.c @@ -0,0 +1,261 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst2-out.o"; + + +static const GElf_Ehdr expected_ehdr = + { + .e_ident = { [EI_MAG0] = ELFMAG0, + [EI_MAG1] = ELFMAG1, + [EI_MAG2] = ELFMAG2, + [EI_MAG3] = ELFMAG3, + [EI_CLASS] = ELFCLASS32, + [EI_DATA] = ELFDATA2LSB, + [EI_VERSION] = EV_CURRENT }, + .e_type = ET_REL, + .e_machine = EM_386, + .e_version = EV_CURRENT, + .e_shoff = 96, + .e_ehsize = sizeof (Elf32_Ehdr), + .e_shentsize = sizeof (Elf32_Shdr), + .e_shnum = 3, + .e_shstrndx = 2 + }; + + +static const char *scnnames[3] = + { + [0] = "", + [1] = ".data", + [2] = ".shstrtab" + }; + + +int +main (void) +{ + AsmCtx_t *ctx; + AsmScn_t *scn1; + AsmScn_t *scn2; + int result = 0; + int fd; + Elf *elf; + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create two sections. */ + scn1 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + scn2 = asm_newsubscn (scn1, 1); + if (scn1 == NULL || scn2 == NULL) + { + printf ("cannot create section in output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Special alignment for the .text section. */ + if (asm_align (scn1, 16) != 0) + { + printf ("cannot align .text section: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Add a few strings. */ + if (asm_addstrz (scn1, "one", 4) != 0) + { + printf ("cannot insert first string: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_addstrz (scn2, "three", 0) != 0) + { + printf ("cannot insert second string: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_addstrz (scn1, "two", 4) != 0) + { + printf ("cannot insert third string: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + { + printf ("cannot get ELF header: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close2; + } + + if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0) + { + puts ("ELF header does not match"); + result = 1; + goto out_close2; + } + + for (cnt = 1; cnt < 3; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]) != 0) + { + printf ("section %Zd's name differs: %s vs %s\n", cnt, + elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]); + result = 1; + } + + if (shdr->sh_type != (cnt == 2 ? SHT_STRTAB : SHT_PROGBITS)) + { + printf ("section %Zd's type differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE)) + || (cnt == 2 && shdr->sh_flags != 0)) + { + printf ("section %Zd's flags differs\n", cnt); + result = 1; + } + + if (shdr->sh_addr != 0) + { + printf ("section %Zd's address differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 15) & ~15)) + || (cnt == 2 + && shdr->sh_offset != (((sizeof (Elf32_Ehdr) + 15) & ~15) + + strlen ("one") + 1 + + strlen ("two") + 1 + + strlen ("three") + 1))) + { + printf ("section %Zd's offset differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_size != (strlen ("one") + 1 + + strlen ("two") + 1 + + strlen ("three") + 1)) + || (cnt == 2 && shdr->sh_size != 17)) + { + printf ("section %Zd's size differs\n", cnt); + result = 1; + } + + if (shdr->sh_link != 0) + { + printf ("section %Zd's link differs\n", cnt); + result = 1; + } + + if (shdr->sh_info != 0) + { + printf ("section %Zd's info differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_addralign != 16) + || (cnt != 1 && shdr->sh_addralign != 1)) + { + printf ("section %Zd's addralign differs\n", cnt); + result = 1; + } + + if (shdr->sh_entsize != 0) + { + printf ("section %Zd's entsize differs\n", cnt); + result = 1; + } + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst3.c b/tests/asm-tst3.c new file mode 100644 index 00000000..fb79ea78 --- /dev/null +++ b/tests/asm-tst3.c @@ -0,0 +1,322 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst3-out.o"; + + +static const char *scnnames[5] = + { + [0] = "", + [1] = ".data", + [2] = ".strtab", + [3] = ".symtab", + [4] = ".shstrtab" + }; + + +static unsigned int scntypes[5] = + { + [0] = SHT_NULL, + [1] = SHT_PROGBITS, + [2] = SHT_STRTAB, + [3] = SHT_SYMTAB, + [4] = SHT_STRTAB + }; + + +int +main (void) +{ + AsmCtx_t *ctx; + AsmScn_t *scn1; + AsmScn_t *scn2; + int result = 0; + int fd; + Elf *elf; + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create two sections. */ + scn1 = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + scn2 = asm_newsubscn (scn1, 1); + if (scn1 == NULL || scn2 == NULL) + { + printf ("cannot create section in output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Special alignment for the .text section. */ + if (asm_align (scn1, 16) != 0) + { + printf ("cannot align .text section: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Add a few strings with names. */ + if (asm_newsym (scn1, "one", 4, STT_OBJECT, STB_GLOBAL) == NULL) + { + printf ("cannot create first name: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_addstrz (scn1, "one", 4) != 0) + { + printf ("cannot insert first string: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_newsym (scn2, "three", 6, STT_OBJECT, STB_WEAK) == NULL) + { + printf ("cannot create second name: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_addstrz (scn2, "three", 0) != 0) + { + printf ("cannot insert second string: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_newsym (scn1, "two", 4, STT_OBJECT, STB_LOCAL) == NULL) + { + printf ("cannot create third name: %s\n", asm_errmsg (-1)); + result = 1; + } + if (asm_addstrz (scn1, "two", 4) != 0) + { + printf ("cannot insert third string: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + { + printf ("cannot get ELF header: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close2; + } + + for (cnt = 1; cnt < 5; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]) != 0) + { + printf ("section %Zd's name differs: %s vs %s\n", cnt, + elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]); + result = 1; + } + + if (shdr->sh_type != scntypes[cnt]) + { + printf ("section %Zd's type differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE)) + || (cnt != 1 && shdr->sh_flags != 0)) + { + printf ("section %Zd's flags differs\n", cnt); + result = 1; + } + + if (shdr->sh_addr != 0) + { + printf ("section %Zd's address differs\n", cnt); + result = 1; + } + + if (cnt == 3) + { + Elf_Data *data; + + if (shdr->sh_link != 2) + { + puts ("symbol table has incorrect link"); + result = 1; + } + + data = elf_getdata (scn, NULL); + if (data == NULL) + { + puts ("cannot get data of symbol table"); + result = 1; + } + else + { + size_t inner; + + for (inner = 1; + inner < (shdr->sh_size + / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT)); + ++inner) + { + GElf_Sym sym_mem; + GElf_Sym *sym; + + sym = gelf_getsym (data, inner, &sym_mem); + if (sym == NULL) + { + printf ("cannot get symbol %zu: %s\n", + inner, elf_errmsg (-1)); + result = 1; + } + else + { + /* The order of the third and fourth entry depends + on how the hash table is organized. */ + static const char *names[4] = + { + [0] = "", + [1] = "two", + [2] = "one", + [3] = "three" + }; + static const int info[4] = + { + [0] = GELF_ST_INFO (STB_LOCAL, STT_NOTYPE), + [1] = GELF_ST_INFO (STB_LOCAL, STT_OBJECT), + [2] = GELF_ST_INFO (STB_GLOBAL, STT_OBJECT), + [3] = GELF_ST_INFO (STB_WEAK, STT_OBJECT) + }; + static const unsigned value[4] = + { + [0] = 0, + [1] = 4, + [2] = 0, + [3] = 8 + }; + + if (strcmp (names[inner], + elf_strptr (elf, shdr->sh_link, + sym->st_name)) != 0) + { + printf ("symbol %zu has different name\n", inner); + result = 1; + } + + if (sym->st_value != value[inner]) + { + printf ("symbol %zu has wrong value\n", inner); + result = 1; + } + + if (sym->st_other != 0) + { + printf ("symbol %zu has wrong other info\n", inner); + result = 1; + } + + if (sym->st_shndx != 1) + { + printf ("symbol %zu has wrong section reference\n", + inner); + result = 1; + } + + if (sym->st_info != info[inner]) + { + printf ("symbol %zu has wrong type or binding\n", + inner); + result = 1; + } + + if ((inner != 3 && sym->st_size != 4) + || (inner == 3 && sym->st_size != 6)) + { + printf ("symbol %zu has wrong size\n", inner); + result = 1; + } + } + } + } + } + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst4.c b/tests/asm-tst4.c new file mode 100644 index 00000000..29d6485d --- /dev/null +++ b/tests/asm-tst4.c @@ -0,0 +1,88 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + + +static const char fname[] = "asm-tst4-out.o"; + + +int +main (void) +{ + AsmCtx_t *ctx; + int result = 0; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create 66000 sections. */ + for (cnt = 0; cnt < 66000; ++cnt) + { + char buf[20]; + AsmScn_t *scn; + + /* Create a unique name. */ + snprintf (buf, sizeof (buf), ".data.%Zu", cnt); + + /* Create the section. */ + scn = asm_newscn (ctx, buf, SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + if (scn == NULL) + { + printf ("cannot create section \"%s\" in output file: %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add some content. */ + if (asm_adduint32 (scn, cnt) != 0) + { + printf ("cannot create content of section \"%s\": %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + if (result == 0) + result = WEXITSTATUS (system ("\ +env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst4-out.o")); + + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst5.c b/tests/asm-tst5.c new file mode 100644 index 00000000..4f761aed --- /dev/null +++ b/tests/asm-tst5.c @@ -0,0 +1,100 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> +#include <sys/wait.h> + +#include "system.h" + + +static const char fname[] = "asm-tst5-out.o"; + + +int +main (void) +{ + AsmCtx_t *ctx; + int result = 0; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create 66000 sections. */ + for (cnt = 0; cnt < 66000; ++cnt) + { + char buf[20]; + AsmScn_t *scn; + + /* Create a unique name. */ + snprintf (buf, sizeof (buf), ".data.%Zu", cnt); + + /* Create the section. */ + scn = asm_newscn (ctx, buf, SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + if (scn == NULL) + { + printf ("cannot create section \"%s\" in output file: %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add a name. */ + snprintf (buf, sizeof (buf), "%Zu", cnt); + if (asm_newsym (scn, buf, sizeof (uint32_t), STT_OBJECT, + STB_GLOBAL) == NULL) + { + printf ("cannot create symbol \"%s\": %s\n", buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add some content. */ + if (asm_adduint32 (scn, cnt) != 0) + { + printf ("cannot create content of section \"%s\": %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + if (result == 0) + result = WEXITSTATUS (system ("\ +env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst5-out.o")); + + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst6.c b/tests/asm-tst6.c new file mode 100644 index 00000000..ece69bc2 --- /dev/null +++ b/tests/asm-tst6.c @@ -0,0 +1,134 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/wait.h> + +#include <system.h> + + +static const char fname[] = "asm-tst6-out.o"; + + +int +main (void) +{ + AsmCtx_t *ctx; + int result = 0; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + for (cnt = 0; cnt < 22000; ++cnt) + { + char buf[512]; + AsmScnGrp_t *grp; + AsmScn_t *scn; + AsmSym_t *sym; + + snprintf (buf, sizeof (buf), ".grp%Zu", cnt); + grp = asm_newscngrp (ctx, buf, NULL, 0); + if (grp == NULL) + { + printf ("cannot section group %Zu: %s\n", cnt, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + scn = asm_newscn_ingrp (ctx, ".data", SHT_PROGBITS, + SHF_ALLOC | SHF_WRITE, grp); + if (scn == NULL) + { + printf ("cannot data section for group %Zu: %s\n", + cnt, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add a name. */ + snprintf (buf, sizeof (buf), "%Zu", cnt); + sym = asm_newsym (scn, buf, sizeof (uint32_t), STT_OBJECT, + STB_GLOBAL); + if (sym == NULL) + { + printf ("cannot create symbol \"%s\": %s\n", buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add some content. */ + if (asm_adduint32 (scn, cnt) != 0) + { + printf ("cannot create content of section \"%s\": %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Now we have a symbol, use it as the signature. */ + if (asm_scngrp_newsignature (grp, sym) != 0) + { + printf ("cannot set signature for section group %Zu: %s\n", + cnt, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Create a phony debug info section. */ + scn = asm_newscn_ingrp (ctx, ".stab", SHT_PROGBITS, 0, grp); + if (scn == NULL) + { + printf ("cannot stab section for group %Zu: %s\n", + cnt, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Add some content. */ + if (asm_adduint32 (scn, cnt) != 0) + { + printf ("cannot create content of section \"%s\": %s\n", + buf, asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + if (result == 0) + result = WEXITSTATUS (system ("\ +env LD_LIBRARY_PATH=../libelf ../src/elflint -q asm-tst6-out.o")); + + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst7.c b/tests/asm-tst7.c new file mode 100644 index 00000000..ebd45594 --- /dev/null +++ b/tests/asm-tst7.c @@ -0,0 +1,164 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <inttypes.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst7-out.o"; + + +int +main (void) +{ + int result = 0; + size_t cnt; + AsmCtx_t *ctx; + Elf *elf; + int fd; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + if (asm_newcomsym (ctx, "commsym", 4, 16) == NULL) + { + printf ("cannot create common symbol: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + for (cnt = 1; 1; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + /* We are looking for the symbol table. */ + if (shdr->sh_type != SHT_SYMTAB) + continue; + + for (cnt = 1; cnt< (shdr->sh_size + / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT)); + ++cnt) + { + GElf_Sym sym_mem; + GElf_Sym *sym; + + if (cnt > 1) + { + puts ("too many symbol"); + result = 1; + break; + } + + sym = gelf_getsym (elf_getdata (scn, NULL), cnt, &sym_mem); + if (sym == NULL) + { + printf ("cannot get symbol %zu: %s\n", cnt, elf_errmsg (-1)); + result = 1; + } + else + { + if (sym->st_shndx != SHN_COMMON) + { + printf ("expected common symbol, got section %u\n", + (unsigned int) sym->st_shndx); + result = 1; + } + + if (sym->st_value != 16) + { + printf ("requested alignment 16, is %" PRIuMAX "\n", + (uintmax_t) sym->st_value); + result = 1; + } + + if (sym->st_size != 4) + { + printf ("requested size 4, is %" PRIuMAX "\n", + (uintmax_t) sym->st_value); + result = 1; + } + } + } + + break; + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst8.c b/tests/asm-tst8.c new file mode 100644 index 00000000..6ce7c9c0 --- /dev/null +++ b/tests/asm-tst8.c @@ -0,0 +1,172 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <inttypes.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst8-out.o"; + + +int +main (void) +{ + int result = 0; + size_t cnt; + AsmCtx_t *ctx; + Elf *elf; + int fd; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + if (asm_newabssym (ctx, "tst8-out.s", 4, 0xfeedbeef, STT_FILE, STB_LOCAL) + == NULL) + { + printf ("cannot create absolute symbol: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + for (cnt = 1; 1; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + /* We are looking for the symbol table. */ + if (shdr->sh_type != SHT_SYMTAB) + continue; + + for (cnt = 1; cnt< (shdr->sh_size + / gelf_fsize (elf, ELF_T_SYM, 1, EV_CURRENT)); + ++cnt) + { + GElf_Sym sym_mem; + GElf_Sym *sym; + + if (cnt > 1) + { + puts ("too many symbol"); + result = 1; + break; + } + + sym = gelf_getsym (elf_getdata (scn, NULL), cnt, &sym_mem); + if (sym == NULL) + { + printf ("cannot get symbol %zu: %s\n", cnt, elf_errmsg (-1)); + result = 1; + } + else + { + if (sym->st_shndx != SHN_ABS) + { + printf ("expected common symbol, got section %u\n", + (unsigned int) sym->st_shndx); + result = 1; + } + + if (sym->st_value != 0xfeedbeef) + { + printf ("requested value 0xfeedbeef, is %#" PRIxMAX "\n", + (uintmax_t) sym->st_value); + result = 1; + } + + if (sym->st_size != 4) + { + printf ("requested size 4, is %" PRIuMAX "\n", + (uintmax_t) sym->st_value); + result = 1; + } + + if (GELF_ST_TYPE (sym->st_info) != STT_FILE) + { + printf ("requested type FILE, is %u\n", + (unsigned int) GELF_ST_TYPE (sym->st_info)); + result = 1; + } + } + } + + break; + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/asm-tst9.c b/tests/asm-tst9.c new file mode 100644 index 00000000..28bb4787 --- /dev/null +++ b/tests/asm-tst9.c @@ -0,0 +1,318 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <inttypes.h> +#include <libasm.h> +#include <libelf.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +static const char fname[] = "asm-tst9-out.o"; + + +static int32_t input[] = + { + 0, 1, 129, 510, 2000, 33000, 0x7ffffff, 0x7fffffff + }; +#define ninput (sizeof (input) / sizeof (input[0])) + + +static const GElf_Ehdr expected_ehdr = + { + .e_ident = { [EI_MAG0] = ELFMAG0, + [EI_MAG1] = ELFMAG1, + [EI_MAG2] = ELFMAG2, + [EI_MAG3] = ELFMAG3, + [EI_CLASS] = ELFCLASS32, + [EI_DATA] = ELFDATA2LSB, + [EI_VERSION] = EV_CURRENT }, + .e_type = ET_REL, + .e_machine = EM_386, + .e_version = EV_CURRENT, + .e_shoff = 180, + .e_ehsize = sizeof (Elf32_Ehdr), + .e_shentsize = sizeof (Elf32_Shdr), + .e_shnum = 3, + .e_shstrndx = 2 + }; + + +static const char *scnnames[3] = + { + [0] = "", + [1] = ".data", + [2] = ".shstrtab" + }; + + +static const char expecteddata[] = + { + 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0xff, 0xff, 0xff, 0xff, 0x0f, 0x7f, + 0x81, 0x01, 0x81, 0x01, 0xff, 0xfe, 0xff, 0xff, 0x0f, 0xff, 0x7e, 0xfe, + 0x03, 0xfe, 0x03, 0x82, 0xfc, 0xff, 0xff, 0x0f, 0x82, 0x7c, 0xd0, 0x0f, + 0xd0, 0x0f, 0xb0, 0xf0, 0xff, 0xff, 0x0f, 0xb0, 0x70, 0xe8, 0x81, 0x02, + 0xe8, 0x81, 0x02, 0x98, 0xfe, 0xfd, 0xff, 0x0f, 0x98, 0xfe, 0x7d, 0xff, + 0xff, 0xff, 0x3f, 0xff, 0xff, 0xff, 0x3f, 0x81, 0x80, 0x80, 0xc0, 0x0f, + 0x81, 0x80, 0x80, 0x40, 0xff, 0xff, 0xff, 0xff, 0x07, 0xff, 0xff, 0xff, + 0xff, 0x07, 0x81, 0x80, 0x80, 0x80, 0x08, 0x81, 0x80, 0x80, 0x80, 0x78 + }; + + +int +main (void) +{ + AsmCtx_t *ctx; + AsmScn_t *scn; + int result = 0; + int fd; + Elf *elf; + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr; + size_t cnt; + + elf_version (EV_CURRENT); + + ctx = asm_begin (fname, false, EM_386, ELFCLASS32, ELFDATA2LSB); + if (ctx == NULL) + { + printf ("cannot create assembler context: %s\n", asm_errmsg (-1)); + return 1; + } + + /* Create two sections. */ + scn = asm_newscn (ctx, ".data", SHT_PROGBITS, SHF_ALLOC | SHF_WRITE); + if (scn == NULL) + { + printf ("cannot create section in output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Special alignment for the .text section. */ + if (asm_align (scn, 16) != 0) + { + printf ("cannot align .text section: %s\n", asm_errmsg (-1)); + result = 1; + } + + /* Add a few ULEB128 and SLEB128 numbers. */ + for (cnt = 0; cnt < ninput; ++cnt) + { + if (asm_adduleb128 (scn, input[cnt]) != 0) + { + printf ("cannot insert uleb %" PRIu32 ": %s\n", + (uint32_t) input[cnt], asm_errmsg (-1)); + result = 1; + } + + if (asm_addsleb128 (scn, input[cnt]) != 0) + { + printf ("cannot insert sleb %" PRId32 ": %s\n", + input[cnt], asm_errmsg (-1)); + result = 1; + } + + if (asm_adduleb128 (scn, -input[cnt]) != 0) + { + printf ("cannot insert uleb %" PRIu32 ": %s\n", + (uint32_t) -input[cnt], asm_errmsg (-1)); + result = 1; + } + + if (asm_addsleb128 (scn, -input[cnt]) != 0) + { + printf ("cannot insert sleb %" PRId32 ": %s\n", + -input[cnt], asm_errmsg (-1)); + result = 1; + } + } + + /* Create the output file. */ + if (asm_end (ctx) != 0) + { + printf ("cannot create output file: %s\n", asm_errmsg (-1)); + asm_abort (ctx); + return 1; + } + + /* Check the file. */ + fd = open (fname, O_RDONLY); + if (fd == -1) + { + printf ("cannot open generated file: %m\n"); + result = 1; + goto out; + } + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close; + } + if (elf_kind (elf) != ELF_K_ELF) + { + puts ("not a valid ELF file"); + result = 1; + goto out_close2; + } + + ehdr = gelf_getehdr (elf, &ehdr_mem); + if (ehdr == NULL) + { + printf ("cannot get ELF header: %s\n", elf_errmsg (-1)); + result = 1; + goto out_close2; + } + + if (memcmp (ehdr, &expected_ehdr, sizeof (GElf_Ehdr)) != 0) + { + puts ("ELF header does not match"); + result = 1; + goto out_close2; + } + + for (cnt = 1; cnt < 3; ++cnt) + { + Elf_Scn *scn; + GElf_Shdr shdr_mem; + GElf_Shdr *shdr; + + scn = elf_getscn (elf, cnt); + if (scn == NULL) + { + printf ("cannot get section %Zd: %s\n", cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + shdr = gelf_getshdr (scn, &shdr_mem); + if (shdr == NULL) + { + printf ("cannot get section header for section %Zd: %s\n", + cnt, elf_errmsg (-1)); + result = 1; + continue; + } + + if (strcmp (elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]) != 0) + { + printf ("section %Zd's name differs: %s vs %s\n", cnt, + elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + scnnames[cnt]); + result = 1; + } + + if (shdr->sh_type != (cnt == 2 ? SHT_STRTAB : SHT_PROGBITS)) + { + printf ("section %Zd's type differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_flags != (SHF_ALLOC | SHF_WRITE)) + || (cnt == 2 && shdr->sh_flags != 0)) + { + printf ("section %Zd's flags differs\n", cnt); + result = 1; + } + + if (shdr->sh_addr != 0) + { + printf ("section %Zd's address differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_offset != ((sizeof (Elf32_Ehdr) + 15) & ~15)) + || (cnt == 2 + && shdr->sh_offset != (((sizeof (Elf32_Ehdr) + 15) & ~15) + + sizeof (expecteddata)))) + { + printf ("section %Zd's offset differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_size != sizeof (expecteddata)) + || (cnt == 2 && shdr->sh_size != 17)) + { + printf ("section %Zd's size differs\n", cnt); + result = 1; + } + + if (shdr->sh_link != 0) + { + printf ("section %Zd's link differs\n", cnt); + result = 1; + } + + if (shdr->sh_info != 0) + { + printf ("section %Zd's info differs\n", cnt); + result = 1; + } + + if ((cnt == 1 && shdr->sh_addralign != 16) + || (cnt != 1 && shdr->sh_addralign != 1)) + { + printf ("section %Zd's addralign differs\n", cnt); + result = 1; + } + + if (shdr->sh_entsize != 0) + { + printf ("section %Zd's entsize differs\n", cnt); + result = 1; + } + + if (cnt == 1) + { + Elf_Data *data = elf_getdata (scn, NULL); + + if (data == NULL) + { + printf ("cannot get data of section %Zd\n", cnt); + result = 1; + } + else + { + if (data->d_size != sizeof (expecteddata)) + { + printf ("data block size of section %Zd wrong: got %Zd, " + "expected 96\n", cnt, data->d_size); + result = 1; + } + + if (memcmp (data->d_buf, expecteddata, sizeof (expecteddata)) + != 0) + { + printf ("data block content of section %Zd wrong\n", cnt); + result = 1; + } + } + } + } + + out_close2: + elf_end (elf); + out_close: + close (fd); + out: + /* We don't need the file anymore. */ + unlink (fname); + + return result; +} diff --git a/tests/ecp.c b/tests/ecp.c new file mode 100644 index 00000000..15bc71cc --- /dev/null +++ b/tests/ecp.c @@ -0,0 +1,88 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <errno.h> +#include <error.h> +#include <fcntl.h> +#include <gelf.h> +#include <stdlib.h> +#include <unistd.h> + +int +main (int argc, char *argv[]) +{ + if (argc < 3) + error (EXIT_FAILURE, 0, "usage: %s FROMNAME TONAME", argv[0]); + + elf_version (EV_CURRENT); + + int infd = open (argv[1], O_RDONLY); + if (infd == -1) + error (EXIT_FAILURE, errno, "cannot open input file '%s'", argv[1]); + + Elf *inelf = elf_begin (infd, ELF_C_READ, NULL); + if (inelf == NULL) + error (EXIT_FAILURE, 0, "problems opening '%s' as ELF file: %s", + argv[1], elf_errmsg (-1)); + + int outfd = creat (argv[2], 0666); + if (outfd == -1) + error (EXIT_FAILURE, errno, "cannot open output file '%s'", argv[2]); + + Elf *outelf = elf_begin (outfd, ELF_C_WRITE, NULL); + if (outelf == NULL) + error (EXIT_FAILURE, 0, "problems opening '%s' as ELF file: %s", + argv[2], elf_errmsg (-1)); + + gelf_newehdr (outelf, gelf_getclass (inelf)); + + GElf_Ehdr ehdr_mem; + GElf_Ehdr *ehdr; + gelf_update_ehdr (outelf, (ehdr = gelf_getehdr (inelf, &ehdr_mem))); + + if (ehdr->e_phnum > 0) + { + int cnt; + + if (gelf_newphdr (outelf, ehdr->e_phnum) == 0) + error (EXIT_FAILURE, 0, "cannot create program header: %s", + elf_errmsg (-1)); + + for (cnt = 0; cnt < ehdr->e_phnum; ++cnt) + { + GElf_Phdr phdr_mem; + + gelf_update_phdr (outelf, cnt, gelf_getphdr (inelf, cnt, &phdr_mem)); + } + } + + Elf_Scn *scn = NULL; + while ((scn = elf_nextscn (inelf, scn)) != NULL) + { + Elf_Scn *newscn = elf_newscn (outelf); + + GElf_Shdr shdr_mem; + gelf_update_shdr (newscn, gelf_getshdr (scn, &shdr_mem)); + + *elf_newdata (newscn) = *elf_getdata (scn, NULL); + } + + elf_flagelf (outelf, ELF_C_SET, ELF_F_LAYOUT); + + if (elf_update (outelf, ELF_C_WRITE) == -1) + error (EXIT_FAILURE, 0, "elf_update failed: %s", elf_errmsg (-1)); + + close (outfd); + + return 0; +} diff --git a/tests/get-aranges.c b/tests/get-aranges.c new file mode 100644 index 00000000..1be76b2d --- /dev/null +++ b/tests/get-aranges.c @@ -0,0 +1,134 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libelf.h> +#include <libdw.h> +#include <stdio.h> +#include <unistd.h> + + +static const Dwarf_Addr testaddr[] = +{ + 0x804842b, 0x804842c, 0x804843c, 0x8048459, 0x804845a, + 0x804845b, 0x804845c, 0x8048460, 0x8048465, 0x8048466, + 0x8048467, 0x8048468, 0x8048470, 0x8048471, 0x8048472 +}; +#define ntestaddr (sizeof (testaddr) / sizeof (testaddr[0])) + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable\n", argv[cnt]); + result = 1; + close (fd); + continue; + } + + Dwarf_Aranges *aranges; + size_t naranges; + if (dwarf_getaranges (dbg, &aranges, &naranges) != 0) + printf ("%s: cannot get aranges\n", argv[cnt]); + else + { + for (size_t i = 0; i < ntestaddr; ++i) + { + Dwarf_Arange *found; + + found = dwarf_getarange_addr (aranges, testaddr[i]); + if (found != NULL) + { + Dwarf_Off cu_offset; + + if (dwarf_getarangeinfo (found, NULL, NULL, &cu_offset) != 0) + { + puts ("failed to get CU die offset"); + result = 1; + } + else + { + const char *cuname; + Dwarf_Die cu_die; + + if (dwarf_offdie (dbg, cu_offset, &cu_die) == NULL + || (cuname = dwarf_diename (&cu_die)) == NULL) + { + puts ("failed to get CU die"); + result = 1; + } + else + printf ("CU name: \"%s\"\n", cuname); + } + } + else + printf ("%#llx: not in range\n", + (unsigned long long int) testaddr[i]); + } + + for (size_t i = 0; i < naranges; ++i) + { + Dwarf_Arange *arange = dwarf_onearange (aranges, i); + if (arange == NULL) + { + printf ("cannot get arange %zu: %s\n", i, dwarf_errmsg (-1)); + break; + } + + Dwarf_Addr start; + Dwarf_Word length; + Dwarf_Off cu_offset; + + if (dwarf_getarangeinfo (arange, &start, &length, &cu_offset) + != 0) + { + printf ("cannot get info from aranges[%zu]\n", i); + result = 1; + } + else + { + printf (" [%2zu] start: %#llx, length: %llu, cu: %llu\n", + i, (unsigned long long int) start, + (unsigned long long int) length, + (unsigned long long int) cu_offset); + + const char *cuname; + Dwarf_Die cu_die; + if (dwarf_offdie (dbg, cu_offset, &cu_die) == NULL + || (cuname = dwarf_diename (&cu_die)) == NULL) + { + puts ("failed to get CU die"); + result = 1; + } + else + printf ("CU name: \"%s\"\n", cuname); + } + } + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/get-files.c b/tests/get-files.c new file mode 100644 index 00000000..537d1eac --- /dev/null +++ b/tests/get-files.c @@ -0,0 +1,83 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libelf.h> +#include <libdw.h> +#include <stdio.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable\n", argv[cnt]); + result = 1; + if (fd != -1) + close (fd); + continue; + } + + Dwarf_Off o = 0; + Dwarf_Off ncu; + Dwarf_Off ao; + size_t cuhl; + uint8_t asz; + uint8_t osz; + while (dwarf_nextcu (dbg, o, &ncu, &cuhl, &ao, &asz, &osz) == 0) + { + printf ("cuhl = %zu, o = %llu, asz = %hhu, osz = %hhu, ncu = %llu\n", + cuhl, (unsigned long long int) ao, + asz, osz, (unsigned long long int) ncu); + + Dwarf_Die die_mem; + Dwarf_Die *die = dwarf_offdie (dbg, o + cuhl, &die_mem); + if (die == NULL) + { + printf ("%s: cannot get CU die\n", argv[cnt]); + result = 1; + break; + } + + Dwarf_Files *files; + size_t nfiles; + if (dwarf_getsrcfiles (die, &files, &nfiles) != 0) + { + printf ("%s: cannot get files\n", argv[cnt]); + result = 1; + break; + } + + for (int i = 0; i < nfiles; ++i) + printf (" file[%d] = \"%s\"\n", i, + dwarf_filesrc (files, i, NULL, NULL)); + + o = ncu; + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/get-lines.c b/tests/get-lines.c new file mode 100644 index 00000000..6a8c0764 --- /dev/null +++ b/tests/get-lines.c @@ -0,0 +1,129 @@ +/* Copyright (C) 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <inttypes.h> +#include <libelf.h> +#include <libdw.h> +#include <stdio.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); + close (fd); + continue; + } + + Dwarf_Off cuoff = 0; + Dwarf_Off old_cuoff = 0; + size_t hsize; + Dwarf_Off ao; + uint8_t asz; + uint8_t osz; + while (dwarf_nextcu (dbg, cuoff, &cuoff, &hsize, &ao, &asz, &osz) == 0) + { + printf ("cuhl = %zu, o = %llu, asz = %hhu, osz = %hhu, ncu = %llu\n", + hsize, (unsigned long long int) ao, + asz, osz, (unsigned long long int) cuoff); + + /* Get the DIE for the CU. */ + Dwarf_Die die; + if (dwarf_offdie (dbg, old_cuoff + hsize, &die) == NULL) + { + /* Something went wrong. */ + printf ("%s: cannot get CU die\n", argv[cnt]); + result = 1; + break; + } + old_cuoff = cuoff; + + Dwarf_Lines *lb; + size_t nlb; + if (dwarf_getsrclines (&die, &lb, &nlb) != 0) + { + printf ("%s: cannot get lines\n", argv[cnt]); + result = 1; + break; + } + + printf (" %zu lines\n", nlb); + + for (size_t i = 0; i < nlb; ++i) + { + Dwarf_Line *l = dwarf_onesrcline (lb, i); + if (l == NULL) + { + printf ("%s: cannot get individual line\n", argv[cnt]); + result = 1; + break; + } + + Dwarf_Addr addr; + if (dwarf_lineaddr (l, &addr) != 0) + addr = 0; + const char *file = dwarf_linesrc (l, NULL, NULL); + int line; + if (dwarf_lineno (l, &line) != 0) + line = 0; + + printf ("%" PRIx64 ": %s:%d:", (uint64_t) addr, + file ?: "???", line); + + int column; + if (dwarf_linecol (l, &column) != 0) + column = 0; + if (column >= 0) + printf ("%d:", column); + + bool is_stmt; + if (dwarf_linebeginstatement (l, &is_stmt) != 0) + is_stmt = false; + bool end_sequence; + if (dwarf_lineendsequence (l, &end_sequence) != 0) + end_sequence = false; + bool basic_block; + if (dwarf_lineblock (l, &basic_block) != 0) + basic_block = false; + bool prologue_end; + if (dwarf_lineprologueend (l, &prologue_end) != 0) + prologue_end = false; + bool epilogue_begin; + if (dwarf_lineepiloguebegin (l, &epilogue_begin) != 0) + epilogue_begin = false; + + printf (" is_stmt:%s, end_seq:%s, bb:%s, prologue:%s, epilogue:%s\n", + is_stmt ? "yes" : "no", end_sequence ? "yes" : "no", + basic_block ? "yes" : "no", prologue_end ? "yes" : "no", + epilogue_begin ? "yes" : "no"); + } + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/get-pubnames.c b/tests/get-pubnames.c new file mode 100644 index 00000000..3523f72f --- /dev/null +++ b/tests/get-pubnames.c @@ -0,0 +1,90 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <fcntl.h> +#include <libelf.h> +#include <libdw.h> +#include <stdio.h> +#include <unistd.h> + + +static int globcnt; + +static int +callback (Dwarf *dbg, Dwarf_Global *gl, void *arg) +{ + int result = DWARF_CB_OK; + + printf (" [%2d] \"%s\", die: %llu, cu: %llu\n", + globcnt++, gl->name, (unsigned long long int) gl->die_offset, + (unsigned long long int) gl->cu_offset); + + Dwarf_Die cu_die; + const char *cuname; + if (dwarf_offdie (dbg, gl->cu_offset, &cu_die) == NULL + || (cuname = dwarf_diename (&cu_die)) == NULL) + { + puts ("failed to get CU die"); + result = DWARF_CB_ABORT; + } + else + printf ("CU name: \"%s\"\n", cuname); + + const char *diename; + Dwarf_Die die; + if (dwarf_offdie (dbg, gl->die_offset, &die) == NULL + || (diename = dwarf_diename (&die)) == NULL) + { + puts ("failed to get object die"); + result = DWARF_CB_ABORT; + } + else + printf ("object name: \"%s\"\n", diename); + + return result; +} + + +int +main (int argc, char *argv[]) +{ + int result = 0; + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); + result = 1; + close (fd); + continue; + } + + globcnt = 0; + + if (dwarf_getpubnames (dbg, callback, NULL, 0) != 0) + { + printf ("dwarf_get_pubnames didn't return zero: %s\n", + dwarf_errmsg (-1)); + result = 1; + } + + dwarf_end (dbg); + close (fd); + } + + return result; +} diff --git a/tests/hash.c b/tests/hash.c new file mode 100644 index 00000000..afe853bb --- /dev/null +++ b/tests/hash.c @@ -0,0 +1,41 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <libelf.h> +#include <stdio.h> + + +static int +check (const char *name, unsigned long int expected) +{ + unsigned long int actual = elf_hash (name); + + return actual != expected; +} + + +int +main (void) +{ + int status; + + /* Check some names. We know what the expected result is. */ + status = check ("_DYNAMIC", 165832675); + status |= check ("_GLOBAL_OFFSET_TABLE_", 102264335); + + return status; +} diff --git a/tests/msg_tst.c b/tests/msg_tst.c new file mode 100644 index 00000000..67e63c0e --- /dev/null +++ b/tests/msg_tst.c @@ -0,0 +1,99 @@ +/* Copyright (C) 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2002. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <libelfP.h> + +static struct +{ + int id; + const char *expected; +} libelf_msgs[ELF_E_NUM] = + { + { ELF_E_NOERROR, "no error" }, + { ELF_E_UNKNOWN_ERROR, "unknown error" }, + { ELF_E_UNKNOWN_VERSION, "unknown version" }, + { ELF_E_UNKNOWN_TYPE, "unknown type" }, + { ELF_E_INVALID_HANDLE, "invalid `Elf' handle" }, + { ELF_E_SOURCE_SIZE, "invalid size of source operand" }, + { ELF_E_DEST_SIZE, "invalid size of destination operand" }, + { ELF_E_INVALID_ENCODING, "invalid encoding" }, + { ELF_E_NOMEM, "out of memory" }, + { ELF_E_INVALID_FILE, "invalid file descriptor" }, + { ELF_E_INVALID_OP, "invalid operation" }, + { ELF_E_NO_VERSION, "ELF version not set" }, + { ELF_E_INVALID_CMD, "invalid command" }, + { ELF_E_RANGE, "offset out of range" }, + { ELF_E_ARCHIVE_FMAG, "invalid fmag field in archive header" }, + { ELF_E_INVALID_ARCHIVE, "invalid archive file" }, + { ELF_E_NO_ARCHIVE, "descriptor is not for an archive" }, + { ELF_E_NO_INDEX, "no index available" }, + { ELF_E_READ_ERROR, "cannot read data from file" }, + { ELF_E_WRITE_ERROR, "cannot write data to file" }, + { ELF_E_INVALID_CLASS, "invalid binary class" }, + { ELF_E_INVALID_INDEX, "invalid section index" }, + { ELF_E_INVALID_OPERAND, "invalid operand" }, + { ELF_E_INVALID_SECTION, "invalid section" }, + { ELF_E_INVALID_COMMAND, "invalid command" }, + { ELF_E_WRONG_ORDER_EHDR, "executable header not created first" }, + { ELF_E_FD_DISABLED, "file descriptor disabled" }, + { ELF_E_FD_MISMATCH, "archive/member fildes mismatch" }, + { ELF_E_OFFSET_RANGE, "offset out of range" }, + { ELF_E_NOT_NUL_SECTION, "cannot manipulate null section" }, + { ELF_E_DATA_MISMATCH, "data/scn mismatch" }, + { ELF_E_INVALID_SECTION_HEADER, "invalid section header" }, + { ELF_E_INVALID_DATA, "invalid data" }, + { ELF_E_DATA_ENCODING, "unknown data encoding" }, + { ELF_E_SECTION_TOO_SMALL, "section `sh_size' too small for data" }, + { ELF_E_INVALID_ALIGN, "invalid section alignment" }, + { ELF_E_INVALID_SHENTSIZE, "invalid section entry size" }, + { ELF_E_UPDATE_RO, "update() for write on read-only file" }, + { ELF_E_NOFILE, "no such file" }, + { ELF_E_GROUP_NOT_REL, + "only relocatable files can contain section groups" }, + { ELF_E_INVALID_PHDR, + "program header only allowed in executables and shared objects" }, + { ELF_E_NO_PHDR, + "file has no program header" } + }; + + +int +main (void) +{ + size_t cnt; + int result = EXIT_SUCCESS; + + /* Clear the error state. */ + (void) elf_errno (); + + /* Check all the messages of libelf. */ + for (cnt = 1; cnt < ELF_E_NUM; ++cnt) + { + const char *str = elf_errmsg (libelf_msgs[cnt].id); + + if (strcmp (str, libelf_msgs[cnt].expected) != 0) + { + printf ("libelf msg %zu: expected \"%s\", got \"%s\"\n", + cnt, libelf_msgs[cnt].expected, str); + result = EXIT_FAILURE; + } + } + + return result; +} diff --git a/tests/newfile.c b/tests/newfile.c new file mode 100644 index 00000000..5efc862a --- /dev/null +++ b/tests/newfile.c @@ -0,0 +1,166 @@ +/* Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1999. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + +static void +print_ehdr (Elf32_Ehdr *ehdr) +{ + int n; + + for (n = 0; n < EI_NIDENT; ++n) + printf (" %02x", ehdr->e_ident[n]); + + printf ("\ntype = %d\nmachine = %d\nversion = %d\nentry = %d\n" + "phoff = %d\nshoff = %d\nflags = %d\nehsize = %d\n" + "phentsize = %d\nphnum = %d\nshentsize = %d\nshnum = %d\n" + "shstrndx = %d\n", + ehdr->e_type, + ehdr->e_machine, + ehdr->e_version, + ehdr->e_entry, + ehdr->e_phoff, + ehdr->e_shoff, + ehdr->e_flags, + ehdr->e_ehsize, + ehdr->e_phentsize, + ehdr->e_phnum, + ehdr->e_shentsize, + ehdr->e_shnum, + ehdr->e_shstrndx); +} + +int +main (int argc, char *argv[]) +{ + Elf *elf; + int result = 0; + int fd; + char fname[] = "newfile-XXXXXX"; + + fd = mkstemp (fname); + if (fd == -1) + { + printf ("cannot create temporary file: %m\n"); + exit (1); + } + /* Remove the file when we exit. */ + unlink (fname); + + elf_version (EV_CURRENT); + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + printf ("elf_begin: %s\n", elf_errmsg (-1)); + result = 1; + } + else + { + if (elf32_newehdr (elf) == NULL) + { + printf ("elf32_newehdr: %s\n", elf_errmsg (-1)); + result = 1; + } + else + { + Elf32_Ehdr *ehdr = elf32_getehdr (elf); + + if (ehdr == NULL) + { + printf ("elf32_getehdr: %s\n", elf_errmsg (-1)); + result = 1; + } + else + { + int i; + + if (argc > 1) + /* Use argc as a debugging flag. */ + print_ehdr (ehdr); + + /* Some tests. */ + for (i = 0; i < EI_NIDENT; ++i) + if (ehdr->e_ident[i] != 0) + { + printf ("ehdr->e_ident[%d] != 0\n", i); + result = 1; + break; + } + +#define VALUE_TEST(name, val) \ + if (ehdr->name != val) \ + { \ + printf ("ehdr->%s != %d\n", #name, val); \ + result = 1; \ + } +#define ZERO_TEST(name) VALUE_TEST (name, 0) + ZERO_TEST (e_type); + ZERO_TEST (e_machine); + ZERO_TEST (e_version); + ZERO_TEST (e_entry); + ZERO_TEST (e_phoff); + ZERO_TEST (e_shoff); + ZERO_TEST (e_flags); + ZERO_TEST (e_ehsize); + ZERO_TEST (e_phentsize); + ZERO_TEST (e_phnum); + ZERO_TEST (e_shentsize); + ZERO_TEST (e_shnum); + ZERO_TEST (e_shstrndx); + + if (elf32_newphdr (elf, 10) == NULL) + { + printf ("elf32_newphdr: %s\n", elf_errmsg (-1)); + result = 1; + } + else + { + if (argc > 1) + print_ehdr (ehdr); + + ehdr = elf32_getehdr (elf); + if (ehdr == NULL) + { + printf ("elf32_getehdr (#2): %s\n", elf_errmsg (-1)); + result = 1; + } + else + { + ZERO_TEST (e_type); + ZERO_TEST (e_machine); + ZERO_TEST (e_version); + ZERO_TEST (e_entry); + ZERO_TEST (e_phoff); + ZERO_TEST (e_shoff); + ZERO_TEST (e_flags); + ZERO_TEST (e_ehsize); + VALUE_TEST (e_phentsize, (int) sizeof (Elf32_Phdr)); + VALUE_TEST (e_phnum, 10); + ZERO_TEST (e_shentsize); + ZERO_TEST (e_shnum); + ZERO_TEST (e_shstrndx); + } + } + } + } + + (void) elf_end (elf); + } + + return result; +} diff --git a/tests/newscn.c b/tests/newscn.c new file mode 100644 index 00000000..bc975130 --- /dev/null +++ b/tests/newscn.c @@ -0,0 +1,58 @@ +/* Copyright (C) 1999, 2000, 2001, 2002 Red Hat, Inc. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <assert.h> +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + Elf *elf; + int fd; + Elf_Scn *section; + + if (elf_version (EV_CURRENT) == EV_NONE) + { + fprintf (stderr, "library fd of date\n"); + exit (1); + } + + char name[] = "test.XXXXXX"; + fd = mkstemp (name); + if (fd < 0) + { + fprintf (stderr, "Failed to open fdput file: %s\n", name); + exit (1); + } + unlink (name); + + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + fprintf (stderr, "Failed to elf_begin fdput file: %s\n", name); + exit (1); + } + + section = elf_newscn (elf); + section = elf_nextscn (elf, section); + assert (section == NULL); + + elf_end (elf); + close (fd); + + return 0; +} diff --git a/tests/run-arextract.sh b/tests/run-arextract.sh new file mode 100644 index 00000000..839a6792 --- /dev/null +++ b/tests/run-arextract.sh @@ -0,0 +1,34 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. + +archive=../libelf/.libs/libelf.a +test -f $archive || archive=../libelf/libelf.a +if test -f $archive; then + # The file is really available (i.e., no shared-only built). + echo -n "Extracting symbols... $ac_c" + + # The files we are looking at. + for f in ../libelf/*.o; do + ./arextract $archive `basename $f` arextract.test || exit 1 + cmp $f arextract.test || { + echo "Extraction of $1 failed" + exit 1 + } + rm -f ${objpfx}arextract.test + done + + echo "done" +fi + +exit 0 diff --git a/tests/run-arsymtest.sh b/tests/run-arsymtest.sh new file mode 100644 index 00000000..793cdb8f --- /dev/null +++ b/tests/run-arsymtest.sh @@ -0,0 +1,41 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. + +lib=../libelf/libelf.a +okfile=arsymtest.ok +tmpfile=arsymtest.tmp +testfile=arsymtest.test + +result=0 +if test -f $lib; then + # Generate list using `nm' we check against. + nm -s $lib | + sed -e '1,/^Arch/d' -e '/^$/,$d' | + sort > $okfile + + # Now run our program using libelf. + ./arsymtest $lib $tmpfile || exit 1 + sort $tmpfile > $testfile + rm $tmpfile + + # Compare the outputs. + if cmp $okfile $testfile; then + result=0 + rm $testfile $okfile + else + result=1 + fi +fi + +exit $result diff --git a/tests/run-ecp-test.sh b/tests/run-ecp-test.sh new file mode 100644 index 00000000..e4304965 --- /dev/null +++ b/tests/run-ecp-test.sh @@ -0,0 +1,25 @@ +#! /bin/sh +# Copyright (C) 2002 Red Hat, Inc. +# Written by Jakub Jelinek <jakub@redhat.com>, 2002. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile10.bz2 > testfile10 2>/dev/null || exit 0 + +./ecp testfile10 testfile10.tmp + +cmp testfile10 testfile10.tmp + +rm -f testfile10 testfile10.tmp + +exit 0 diff --git a/tests/run-ecp-test2.sh b/tests/run-ecp-test2.sh new file mode 100644 index 00000000..143c70a6 --- /dev/null +++ b/tests/run-ecp-test2.sh @@ -0,0 +1,23 @@ +#! /bin/sh +# Copyright (C) 2002 Red Hat, Inc. +# Written by Jakub Jelinek <jakub@redhat.com>, 2002. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./ecp testfile2 testfile2.tmp + +rm -f testfile2 testfile2.tmp + +exit 0 diff --git a/tests/run-get-aranges.sh b/tests/run-get-aranges.sh new file mode 100644 index 00000000..26b29863 --- /dev/null +++ b/tests/run-get-aranges.sh @@ -0,0 +1,71 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile.bz2 > testfile 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./get-aranges testfile testfile2 > get-aranges.out + +cmp get-aranges.out - <<"EOF" +0x804842b: not in range +CU name: "m.c" +CU name: "m.c" +CU name: "m.c" +0x804845a: not in range +0x804845b: not in range +CU name: "b.c" +CU name: "b.c" +CU name: "b.c" +0x8048466: not in range +0x8048467: not in range +CU name: "f.c" +CU name: "f.c" +CU name: "f.c" +0x8048472: not in range + [ 0] start: 0x804842c, length: 46, cu: 11 +CU name: "m.c" + [ 1] start: 0x804845c, length: 10, cu: 202 +CU name: "b.c" + [ 2] start: 0x8048468, length: 10, cu: 5628 +CU name: "f.c" +0x804842b: not in range +0x804842c: not in range +0x804843c: not in range +0x8048459: not in range +0x804845a: not in range +0x804845b: not in range +0x804845c: not in range +0x8048460: not in range +0x8048465: not in range +0x8048466: not in range +0x8048467: not in range +0x8048468: not in range +0x8048470: not in range +0x8048471: not in range +0x8048472: not in range + [ 0] start: 0x10000470, length: 32, cu: 11 +CU name: "b.c" + [ 1] start: 0x10000490, length: 32, cu: 2429 +CU name: "f.c" + [ 2] start: 0x100004b0, length: 100, cu: 2532 +CU name: "m.c" +EOF + +rm -f testfile testfile2 get-aranges.out + +exit 0 diff --git a/tests/run-get-files.sh b/tests/run-get-files.sh new file mode 100644 index 00000000..7af5c139 --- /dev/null +++ b/tests/run-get-files.sh @@ -0,0 +1,64 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2004 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile.bz2 > testfile 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./get-files testfile testfile2 > get-files.out + +diff -u get-files.out - <<"EOF" +cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 191 + file[0] = "???" + file[1] = "/home/drepper/gnu/new-bu/build/ttt/m.c" +cuhl = 11, o = 114, asz = 4, osz = 4, ncu = 5617 + file[0] = "???" + file[1] = "/home/drepper/gnu/new-bu/build/ttt/b.c" + file[2] = "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stddef.h" + file[3] = "/usr/lib/gcc-lib/i386-redhat-linux/2.96/include/stdarg.h" + file[4] = "/usr/include/bits/types.h" + file[5] = "/usr/include/bits/sched.h" + file[6] = "/usr/include/bits/pthreadtypes.h" + file[7] = "/usr/include/stdio.h" + file[8] = "/usr/include/libio.h" + file[9] = "/usr/include/wchar.h" + file[10] = "/usr/include/_G_config.h" + file[11] = "/usr/include/gconv.h" +cuhl = 11, o = 412, asz = 4, osz = 4, ncu = 5752 + file[0] = "???" + file[1] = "/home/drepper/gnu/new-bu/build/ttt/f.c" +cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 2418 + file[0] = "???" + file[1] = "/shoggoth/drepper/b.c" + file[2] = "/home/geoffk/objs/laurel-000912-branch/lib/gcc-lib/powerpc-unknown-linux-gnu/2.96-laurel-000912/include/stddef.h" + file[3] = "/home/geoffk/objs/laurel-000912-branch/lib/gcc-lib/powerpc-unknown-linux-gnu/2.96-laurel-000912/include/stdarg.h" + file[4] = "/shoggoth/drepper/<built-in>" + file[5] = "/usr/include/bits/types.h" + file[6] = "/usr/include/stdio.h" + file[7] = "/usr/include/libio.h" + file[8] = "/usr/include/_G_config.h" +cuhl = 11, o = 213, asz = 4, osz = 4, ncu = 2521 + file[0] = "???" + file[1] = "/shoggoth/drepper/f.c" +cuhl = 11, o = 267, asz = 4, osz = 4, ncu = 2680 + file[0] = "???" + file[1] = "/shoggoth/drepper/m.c" +EOF + +rm -f testfile testfil2 get-files.out + +exit 0 diff --git a/tests/run-get-lines.sh b/tests/run-get-lines.sh new file mode 100644 index 00000000..70c9cd84 --- /dev/null +++ b/tests/run-get-lines.sh @@ -0,0 +1,67 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2004 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile.bz2 > testfile 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./get-lines testfile testfile2 > get-lines.out + +diff -u get-lines.out - <<"EOF" +cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 191 + 5 lines +804842c: /home/drepper/gnu/new-bu/build/ttt/m.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048432: /home/drepper/gnu/new-bu/build/ttt/m.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +804844d: /home/drepper/gnu/new-bu/build/ttt/m.c:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048458: /home/drepper/gnu/new-bu/build/ttt/m.c:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +804845a: /home/drepper/gnu/new-bu/build/ttt/m.c:8:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 114, asz = 4, osz = 4, ncu = 5617 + 4 lines +804845c: /home/drepper/gnu/new-bu/build/ttt/b.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +804845f: /home/drepper/gnu/new-bu/build/ttt/b.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048464: /home/drepper/gnu/new-bu/build/ttt/b.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048466: /home/drepper/gnu/new-bu/build/ttt/b.c:6:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 412, asz = 4, osz = 4, ncu = 5752 + 4 lines +8048468: /home/drepper/gnu/new-bu/build/ttt/f.c:3:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +804846b: /home/drepper/gnu/new-bu/build/ttt/f.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048470: /home/drepper/gnu/new-bu/build/ttt/f.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +8048472: /home/drepper/gnu/new-bu/build/ttt/f.c:5:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 0, asz = 4, osz = 4, ncu = 2418 + 4 lines +10000470: /shoggoth/drepper/b.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +1000047c: /shoggoth/drepper/b.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +10000480: /shoggoth/drepper/b.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +10000490: /shoggoth/drepper/b.c:6:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 213, asz = 4, osz = 4, ncu = 2521 + 4 lines +10000490: /shoggoth/drepper/f.c:3:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +1000049c: /shoggoth/drepper/f.c:4:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100004a0: /shoggoth/drepper/f.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100004b0: /shoggoth/drepper/f.c:5:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +cuhl = 11, o = 267, asz = 4, osz = 4, ncu = 2680 + 5 lines +100004b0: /shoggoth/drepper/m.c:5:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100004cc: /shoggoth/drepper/m.c:6:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100004e8: /shoggoth/drepper/m.c:7:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +100004f4: /shoggoth/drepper/m.c:8:0: is_stmt:yes, end_seq:no, bb:no, prologue:no, epilogue:no +10000514: /shoggoth/drepper/m.c:8:0: is_stmt:yes, end_seq:yes, bb:no, prologue:no, epilogue:no +EOF + +rm -f testfile testfile2 get-lines.out + +exit 0 diff --git a/tests/run-get-pubnames.sh b/tests/run-get-pubnames.sh new file mode 100644 index 00000000..a232bfd2 --- /dev/null +++ b/tests/run-get-pubnames.sh @@ -0,0 +1,53 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2003 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile.bz2 > testfile 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./get-pubnames testfile testfile2 > get-pubnames.out + +diff -u get-pubnames.out - <<"EOF" + [ 0] "main", die: 104, cu: 11 +CU name: "m.c" +object name: "main" + [ 1] "a", die: 174, cu: 11 +CU name: "m.c" +object name: "a" + [ 2] "bar", die: 295, cu: 202 +CU name: "b.c" +object name: "bar" + [ 3] "foo", die: 5721, cu: 5628 +CU name: "f.c" +object name: "foo" + [ 0] "bar", die: 72, cu: 11 +CU name: "b.c" +object name: "bar" + [ 1] "foo", die: 2490, cu: 2429 +CU name: "f.c" +object name: "foo" + [ 2] "main", die: 2593, cu: 2532 +CU name: "m.c" +object name: "main" + [ 3] "a", die: 2663, cu: 2532 +CU name: "m.c" +object name: "a" +EOF + +rm -f testfile testfile2 get-pubnames.out + +exit 0 diff --git a/tests/run-show-abbrev.sh b/tests/run-show-abbrev.sh new file mode 100644 index 00000000..78812a5f --- /dev/null +++ b/tests/run-show-abbrev.sh @@ -0,0 +1,355 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2003, 2004 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile.bz2 > testfile 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./show-abbrev testfile testfile2 > show-abbrev.out + +diff -u show-abbrev.out - <<"EOF" +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 0 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 2 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 4 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 6 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 8 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 10 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 12 +abbrev[19]: code = 2, tag = 46, children = 1 +abbrev[19]: attr[0]: code = 1, form = 19, offset = 19 +abbrev[19]: attr[1]: code = 63, form = 12, offset = 21 +abbrev[19]: attr[2]: code = 3, form = 8, offset = 23 +abbrev[19]: attr[3]: code = 58, form = 11, offset = 25 +abbrev[19]: attr[4]: code = 59, form = 11, offset = 27 +abbrev[19]: attr[5]: code = 39, form = 12, offset = 29 +abbrev[19]: attr[6]: code = 73, form = 19, offset = 31 +abbrev[19]: attr[7]: code = 17, form = 1, offset = 33 +abbrev[19]: attr[8]: code = 18, form = 1, offset = 35 +abbrev[19]: attr[9]: code = 64, form = 10, offset = 37 +abbrev[44]: code = 3, tag = 46, children = 1 +abbrev[44]: attr[0]: code = 1, form = 19, offset = 44 +abbrev[44]: attr[1]: code = 63, form = 12, offset = 46 +abbrev[44]: attr[2]: code = 3, form = 8, offset = 48 +abbrev[44]: attr[3]: code = 58, form = 11, offset = 50 +abbrev[44]: attr[4]: code = 59, form = 11, offset = 52 +abbrev[44]: attr[5]: code = 73, form = 19, offset = 54 +abbrev[44]: attr[6]: code = 60, form = 12, offset = 56 +abbrev[63]: code = 4, tag = 24, children = 0 +abbrev[68]: code = 5, tag = 46, children = 1 +abbrev[68]: attr[0]: code = 63, form = 12, offset = 68 +abbrev[68]: attr[1]: code = 3, form = 8, offset = 70 +abbrev[68]: attr[2]: code = 58, form = 11, offset = 72 +abbrev[68]: attr[3]: code = 59, form = 11, offset = 74 +abbrev[68]: attr[4]: code = 73, form = 19, offset = 76 +abbrev[68]: attr[5]: code = 60, form = 12, offset = 78 +abbrev[85]: code = 6, tag = 36, children = 0 +abbrev[85]: attr[0]: code = 3, form = 8, offset = 85 +abbrev[85]: attr[1]: code = 11, form = 11, offset = 87 +abbrev[85]: attr[2]: code = 62, form = 11, offset = 89 +abbrev[96]: code = 7, tag = 52, children = 0 +abbrev[96]: attr[0]: code = 3, form = 8, offset = 96 +abbrev[96]: attr[1]: code = 58, form = 11, offset = 98 +abbrev[96]: attr[2]: code = 59, form = 11, offset = 100 +abbrev[96]: attr[3]: code = 73, form = 19, offset = 102 +abbrev[96]: attr[4]: code = 63, form = 12, offset = 104 +abbrev[96]: attr[5]: code = 2, form = 10, offset = 106 +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 114 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 116 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 118 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 120 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 122 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 124 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 126 +abbrev[19]: code = 2, tag = 46, children = 0 +abbrev[19]: attr[0]: code = 63, form = 12, offset = 133 +abbrev[19]: attr[1]: code = 3, form = 8, offset = 135 +abbrev[19]: attr[2]: code = 58, form = 11, offset = 137 +abbrev[19]: attr[3]: code = 59, form = 11, offset = 139 +abbrev[19]: attr[4]: code = 39, form = 12, offset = 141 +abbrev[19]: attr[5]: code = 73, form = 19, offset = 143 +abbrev[19]: attr[6]: code = 17, form = 1, offset = 145 +abbrev[19]: attr[7]: code = 18, form = 1, offset = 147 +abbrev[19]: attr[8]: code = 64, form = 10, offset = 149 +abbrev[42]: code = 3, tag = 36, children = 0 +abbrev[42]: attr[0]: code = 3, form = 8, offset = 156 +abbrev[42]: attr[1]: code = 11, form = 11, offset = 158 +abbrev[42]: attr[2]: code = 62, form = 11, offset = 160 +abbrev[53]: code = 4, tag = 22, children = 0 +abbrev[53]: attr[0]: code = 3, form = 8, offset = 167 +abbrev[53]: attr[1]: code = 58, form = 11, offset = 169 +abbrev[53]: attr[2]: code = 59, form = 11, offset = 171 +abbrev[53]: attr[3]: code = 73, form = 19, offset = 173 +abbrev[66]: code = 5, tag = 15, children = 0 +abbrev[66]: attr[0]: code = 11, form = 11, offset = 180 +abbrev[73]: code = 6, tag = 15, children = 0 +abbrev[73]: attr[0]: code = 11, form = 11, offset = 187 +abbrev[73]: attr[1]: code = 73, form = 19, offset = 189 +abbrev[82]: code = 7, tag = 19, children = 1 +abbrev[82]: attr[0]: code = 1, form = 19, offset = 196 +abbrev[82]: attr[1]: code = 11, form = 11, offset = 198 +abbrev[82]: attr[2]: code = 58, form = 11, offset = 200 +abbrev[82]: attr[3]: code = 59, form = 11, offset = 202 +abbrev[95]: code = 8, tag = 13, children = 0 +abbrev[95]: attr[0]: code = 3, form = 8, offset = 209 +abbrev[95]: attr[1]: code = 58, form = 11, offset = 211 +abbrev[95]: attr[2]: code = 59, form = 11, offset = 213 +abbrev[95]: attr[3]: code = 73, form = 19, offset = 215 +abbrev[95]: attr[4]: code = 56, form = 10, offset = 217 +abbrev[110]: code = 9, tag = 1, children = 1 +abbrev[110]: attr[0]: code = 1, form = 19, offset = 224 +abbrev[110]: attr[1]: code = 73, form = 19, offset = 226 +abbrev[119]: code = 10, tag = 33, children = 0 +abbrev[119]: attr[0]: code = 73, form = 19, offset = 233 +abbrev[119]: attr[1]: code = 47, form = 11, offset = 235 +abbrev[128]: code = 11, tag = 19, children = 1 +abbrev[128]: attr[0]: code = 1, form = 19, offset = 242 +abbrev[128]: attr[1]: code = 3, form = 8, offset = 244 +abbrev[128]: attr[2]: code = 11, form = 11, offset = 246 +abbrev[128]: attr[3]: code = 58, form = 11, offset = 248 +abbrev[128]: attr[4]: code = 59, form = 11, offset = 250 +abbrev[143]: code = 12, tag = 19, children = 0 +abbrev[143]: attr[0]: code = 3, form = 8, offset = 257 +abbrev[143]: attr[1]: code = 60, form = 12, offset = 259 +abbrev[152]: code = 13, tag = 13, children = 0 +abbrev[152]: attr[0]: code = 3, form = 8, offset = 266 +abbrev[152]: attr[1]: code = 58, form = 11, offset = 268 +abbrev[152]: attr[2]: code = 59, form = 5, offset = 270 +abbrev[152]: attr[3]: code = 73, form = 19, offset = 272 +abbrev[152]: attr[4]: code = 56, form = 10, offset = 274 +abbrev[167]: code = 14, tag = 22, children = 0 +abbrev[167]: attr[0]: code = 3, form = 8, offset = 281 +abbrev[167]: attr[1]: code = 58, form = 11, offset = 283 +abbrev[167]: attr[2]: code = 59, form = 5, offset = 285 +abbrev[167]: attr[3]: code = 73, form = 19, offset = 287 +abbrev[180]: code = 15, tag = 23, children = 1 +abbrev[180]: attr[0]: code = 1, form = 19, offset = 294 +abbrev[180]: attr[1]: code = 11, form = 11, offset = 296 +abbrev[180]: attr[2]: code = 58, form = 11, offset = 298 +abbrev[180]: attr[3]: code = 59, form = 11, offset = 300 +abbrev[193]: code = 16, tag = 13, children = 0 +abbrev[193]: attr[0]: code = 3, form = 8, offset = 307 +abbrev[193]: attr[1]: code = 58, form = 11, offset = 309 +abbrev[193]: attr[2]: code = 59, form = 11, offset = 311 +abbrev[193]: attr[3]: code = 73, form = 19, offset = 313 +abbrev[206]: code = 17, tag = 4, children = 1 +abbrev[206]: attr[0]: code = 1, form = 19, offset = 320 +abbrev[206]: attr[1]: code = 11, form = 11, offset = 322 +abbrev[206]: attr[2]: code = 58, form = 11, offset = 324 +abbrev[206]: attr[3]: code = 59, form = 11, offset = 326 +abbrev[219]: code = 18, tag = 40, children = 0 +abbrev[219]: attr[0]: code = 3, form = 8, offset = 333 +abbrev[219]: attr[1]: code = 28, form = 11, offset = 335 +abbrev[228]: code = 19, tag = 38, children = 0 +abbrev[228]: attr[0]: code = 73, form = 19, offset = 342 +abbrev[235]: code = 20, tag = 21, children = 1 +abbrev[235]: attr[0]: code = 1, form = 19, offset = 349 +abbrev[235]: attr[1]: code = 39, form = 12, offset = 351 +abbrev[235]: attr[2]: code = 73, form = 19, offset = 353 +abbrev[246]: code = 21, tag = 5, children = 0 +abbrev[246]: attr[0]: code = 73, form = 19, offset = 360 +abbrev[253]: code = 22, tag = 21, children = 1 +abbrev[253]: attr[0]: code = 1, form = 19, offset = 367 +abbrev[253]: attr[1]: code = 39, form = 12, offset = 369 +abbrev[262]: code = 23, tag = 33, children = 0 +abbrev[262]: attr[0]: code = 73, form = 19, offset = 376 +abbrev[262]: attr[1]: code = 47, form = 6, offset = 378 +abbrev[271]: code = 24, tag = 22, children = 0 +abbrev[271]: attr[0]: code = 3, form = 8, offset = 385 +abbrev[271]: attr[1]: code = 58, form = 11, offset = 387 +abbrev[271]: attr[2]: code = 59, form = 11, offset = 389 +abbrev[282]: code = 25, tag = 4, children = 1 +abbrev[282]: attr[0]: code = 1, form = 19, offset = 396 +abbrev[282]: attr[1]: code = 3, form = 8, offset = 398 +abbrev[282]: attr[2]: code = 11, form = 11, offset = 400 +abbrev[282]: attr[3]: code = 58, form = 11, offset = 402 +abbrev[282]: attr[4]: code = 59, form = 11, offset = 404 +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 412 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 414 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 416 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 418 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 420 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 422 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 424 +abbrev[19]: code = 2, tag = 46, children = 0 +abbrev[19]: attr[0]: code = 63, form = 12, offset = 431 +abbrev[19]: attr[1]: code = 3, form = 8, offset = 433 +abbrev[19]: attr[2]: code = 58, form = 11, offset = 435 +abbrev[19]: attr[3]: code = 59, form = 11, offset = 437 +abbrev[19]: attr[4]: code = 39, form = 12, offset = 439 +abbrev[19]: attr[5]: code = 73, form = 19, offset = 441 +abbrev[19]: attr[6]: code = 17, form = 1, offset = 443 +abbrev[19]: attr[7]: code = 18, form = 1, offset = 445 +abbrev[19]: attr[8]: code = 64, form = 10, offset = 447 +abbrev[42]: code = 3, tag = 36, children = 0 +abbrev[42]: attr[0]: code = 3, form = 8, offset = 454 +abbrev[42]: attr[1]: code = 11, form = 11, offset = 456 +abbrev[42]: attr[2]: code = 62, form = 11, offset = 458 +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 0 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 2 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 4 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 6 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 8 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 10 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 12 +abbrev[19]: code = 2, tag = 46, children = 0 +abbrev[19]: attr[0]: code = 63, form = 12, offset = 19 +abbrev[19]: attr[1]: code = 3, form = 8, offset = 21 +abbrev[19]: attr[2]: code = 58, form = 11, offset = 23 +abbrev[19]: attr[3]: code = 59, form = 11, offset = 25 +abbrev[19]: attr[4]: code = 39, form = 12, offset = 27 +abbrev[19]: attr[5]: code = 73, form = 19, offset = 29 +abbrev[19]: attr[6]: code = 17, form = 1, offset = 31 +abbrev[19]: attr[7]: code = 18, form = 1, offset = 33 +abbrev[19]: attr[8]: code = 64, form = 10, offset = 35 +abbrev[42]: code = 3, tag = 36, children = 0 +abbrev[42]: attr[0]: code = 3, form = 8, offset = 42 +abbrev[42]: attr[1]: code = 11, form = 11, offset = 44 +abbrev[42]: attr[2]: code = 62, form = 11, offset = 46 +abbrev[53]: code = 4, tag = 22, children = 0 +abbrev[53]: attr[0]: code = 3, form = 8, offset = 53 +abbrev[53]: attr[1]: code = 58, form = 11, offset = 55 +abbrev[53]: attr[2]: code = 59, form = 11, offset = 57 +abbrev[53]: attr[3]: code = 73, form = 19, offset = 59 +abbrev[66]: code = 5, tag = 1, children = 1 +abbrev[66]: attr[0]: code = 1, form = 19, offset = 66 +abbrev[66]: attr[1]: code = 3, form = 8, offset = 68 +abbrev[66]: attr[2]: code = 73, form = 19, offset = 70 +abbrev[77]: code = 6, tag = 33, children = 0 +abbrev[77]: attr[0]: code = 73, form = 19, offset = 77 +abbrev[77]: attr[1]: code = 47, form = 11, offset = 79 +abbrev[86]: code = 7, tag = 19, children = 1 +abbrev[86]: attr[0]: code = 1, form = 19, offset = 86 +abbrev[86]: attr[1]: code = 3, form = 8, offset = 88 +abbrev[86]: attr[2]: code = 11, form = 11, offset = 90 +abbrev[86]: attr[3]: code = 58, form = 11, offset = 92 +abbrev[86]: attr[4]: code = 59, form = 11, offset = 94 +abbrev[101]: code = 8, tag = 13, children = 0 +abbrev[101]: attr[0]: code = 3, form = 8, offset = 101 +abbrev[101]: attr[1]: code = 58, form = 11, offset = 103 +abbrev[101]: attr[2]: code = 59, form = 11, offset = 105 +abbrev[101]: attr[3]: code = 73, form = 19, offset = 107 +abbrev[101]: attr[4]: code = 56, form = 10, offset = 109 +abbrev[116]: code = 9, tag = 15, children = 0 +abbrev[116]: attr[0]: code = 11, form = 11, offset = 116 +abbrev[123]: code = 10, tag = 15, children = 0 +abbrev[123]: attr[0]: code = 11, form = 11, offset = 123 +abbrev[123]: attr[1]: code = 73, form = 19, offset = 125 +abbrev[132]: code = 11, tag = 19, children = 1 +abbrev[132]: attr[0]: code = 1, form = 19, offset = 132 +abbrev[132]: attr[1]: code = 11, form = 11, offset = 134 +abbrev[132]: attr[2]: code = 58, form = 11, offset = 136 +abbrev[132]: attr[3]: code = 59, form = 11, offset = 138 +abbrev[145]: code = 12, tag = 1, children = 1 +abbrev[145]: attr[0]: code = 1, form = 19, offset = 145 +abbrev[145]: attr[1]: code = 73, form = 19, offset = 147 +abbrev[154]: code = 13, tag = 22, children = 0 +abbrev[154]: attr[0]: code = 3, form = 8, offset = 154 +abbrev[154]: attr[1]: code = 58, form = 11, offset = 156 +abbrev[154]: attr[2]: code = 59, form = 5, offset = 158 +abbrev[154]: attr[3]: code = 73, form = 19, offset = 160 +abbrev[167]: code = 14, tag = 19, children = 0 +abbrev[167]: attr[0]: code = 3, form = 8, offset = 167 +abbrev[167]: attr[1]: code = 60, form = 12, offset = 169 +abbrev[176]: code = 15, tag = 22, children = 0 +abbrev[176]: attr[0]: code = 3, form = 8, offset = 176 +abbrev[176]: attr[1]: code = 58, form = 11, offset = 178 +abbrev[176]: attr[2]: code = 59, form = 11, offset = 180 +abbrev[187]: code = 16, tag = 21, children = 1 +abbrev[187]: attr[0]: code = 1, form = 19, offset = 187 +abbrev[187]: attr[1]: code = 39, form = 12, offset = 189 +abbrev[187]: attr[2]: code = 73, form = 19, offset = 191 +abbrev[198]: code = 17, tag = 5, children = 0 +abbrev[198]: attr[0]: code = 73, form = 19, offset = 198 +abbrev[205]: code = 18, tag = 38, children = 0 +abbrev[205]: attr[0]: code = 73, form = 19, offset = 205 +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 213 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 215 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 217 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 219 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 221 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 223 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 225 +abbrev[19]: code = 2, tag = 46, children = 0 +abbrev[19]: attr[0]: code = 63, form = 12, offset = 232 +abbrev[19]: attr[1]: code = 3, form = 8, offset = 234 +abbrev[19]: attr[2]: code = 58, form = 11, offset = 236 +abbrev[19]: attr[3]: code = 59, form = 11, offset = 238 +abbrev[19]: attr[4]: code = 39, form = 12, offset = 240 +abbrev[19]: attr[5]: code = 73, form = 19, offset = 242 +abbrev[19]: attr[6]: code = 17, form = 1, offset = 244 +abbrev[19]: attr[7]: code = 18, form = 1, offset = 246 +abbrev[19]: attr[8]: code = 64, form = 10, offset = 248 +abbrev[42]: code = 3, tag = 36, children = 0 +abbrev[42]: attr[0]: code = 3, form = 8, offset = 255 +abbrev[42]: attr[1]: code = 11, form = 11, offset = 257 +abbrev[42]: attr[2]: code = 62, form = 11, offset = 259 +abbrev[0]: code = 1, tag = 17, children = 1 +abbrev[0]: attr[0]: code = 16, form = 6, offset = 267 +abbrev[0]: attr[1]: code = 18, form = 1, offset = 269 +abbrev[0]: attr[2]: code = 17, form = 1, offset = 271 +abbrev[0]: attr[3]: code = 3, form = 8, offset = 273 +abbrev[0]: attr[4]: code = 27, form = 8, offset = 275 +abbrev[0]: attr[5]: code = 37, form = 8, offset = 277 +abbrev[0]: attr[6]: code = 19, form = 11, offset = 279 +abbrev[19]: code = 2, tag = 46, children = 1 +abbrev[19]: attr[0]: code = 1, form = 19, offset = 286 +abbrev[19]: attr[1]: code = 63, form = 12, offset = 288 +abbrev[19]: attr[2]: code = 3, form = 8, offset = 290 +abbrev[19]: attr[3]: code = 58, form = 11, offset = 292 +abbrev[19]: attr[4]: code = 59, form = 11, offset = 294 +abbrev[19]: attr[5]: code = 39, form = 12, offset = 296 +abbrev[19]: attr[6]: code = 73, form = 19, offset = 298 +abbrev[19]: attr[7]: code = 17, form = 1, offset = 300 +abbrev[19]: attr[8]: code = 18, form = 1, offset = 302 +abbrev[19]: attr[9]: code = 64, form = 10, offset = 304 +abbrev[44]: code = 3, tag = 46, children = 1 +abbrev[44]: attr[0]: code = 1, form = 19, offset = 311 +abbrev[44]: attr[1]: code = 63, form = 12, offset = 313 +abbrev[44]: attr[2]: code = 3, form = 8, offset = 315 +abbrev[44]: attr[3]: code = 58, form = 11, offset = 317 +abbrev[44]: attr[4]: code = 59, form = 11, offset = 319 +abbrev[44]: attr[5]: code = 73, form = 19, offset = 321 +abbrev[44]: attr[6]: code = 60, form = 12, offset = 323 +abbrev[63]: code = 4, tag = 24, children = 0 +abbrev[68]: code = 5, tag = 46, children = 1 +abbrev[68]: attr[0]: code = 63, form = 12, offset = 335 +abbrev[68]: attr[1]: code = 3, form = 8, offset = 337 +abbrev[68]: attr[2]: code = 58, form = 11, offset = 339 +abbrev[68]: attr[3]: code = 59, form = 11, offset = 341 +abbrev[68]: attr[4]: code = 73, form = 19, offset = 343 +abbrev[68]: attr[5]: code = 60, form = 12, offset = 345 +abbrev[85]: code = 6, tag = 36, children = 0 +abbrev[85]: attr[0]: code = 3, form = 8, offset = 352 +abbrev[85]: attr[1]: code = 11, form = 11, offset = 354 +abbrev[85]: attr[2]: code = 62, form = 11, offset = 356 +abbrev[96]: code = 7, tag = 52, children = 0 +abbrev[96]: attr[0]: code = 3, form = 8, offset = 363 +abbrev[96]: attr[1]: code = 58, form = 11, offset = 365 +abbrev[96]: attr[2]: code = 59, form = 11, offset = 367 +abbrev[96]: attr[3]: code = 73, form = 19, offset = 369 +abbrev[96]: attr[4]: code = 63, form = 12, offset = 371 +abbrev[96]: attr[5]: code = 2, form = 10, offset = 373 +EOF + +rm -f testfile testfile2 show-abbrev.out + +exit 0 diff --git a/tests/run-show-ciefde.sh b/tests/run-show-ciefde.sh new file mode 100644 index 00000000..b3355334 --- /dev/null +++ b/tests/run-show-ciefde.sh @@ -0,0 +1,319 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile3.bz2 > testfile3 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile4.bz2 > testfile4 2>/dev/null || exit 0 + +./show-ciefde testfile3 testfile4 > show-ciefde.out + +diff -u show-ciefde.out - <<"EOF" +testfile3 has 1 CIEs and 1 FDEs +CIE[0]: bytes_in_cie = 16, version = 1, augmenter = "" +CIE[0]: code_alignment_factor = 1 +CIE[0]: data_alignment_factor = fffffffffffffffc +CIE[0]: return_address_register = 8 +CIE[0]: bytes = 0c 04 04 88 01 00 00 +FDE[0]: low_pc = 0x804842c, length = 41 +FDE[0]: bytes = 18 00 00 00 18 00 00 00 2c 84 04 08 29 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[0]: cie_offset = 0, cie_index = 0, fde_offset = 24 +FDE[0]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +no FDE at 8048400 +FDE[@804842c]: cie_offset = 0, cie_index = 0, fde_offset = 24 +FDE[@8048454]: cie_offset = 0, cie_index = 0, fde_offset = 24 +no FDE at 8048455 +no FDE at 80493fc +testfile4 has 5 CIEs and 61 FDEs +CIE[0]: bytes_in_cie = 20, version = 1, augmenter = "eh" +CIE[0]: code_alignment_factor = 1 +CIE[0]: data_alignment_factor = fffffffffffffffc +CIE[0]: return_address_register = 8 +CIE[0]: bytes = 0c 04 04 88 01 +CIE[1]: bytes_in_cie = 16, version = 1, augmenter = "" +CIE[1]: code_alignment_factor = 1 +CIE[1]: data_alignment_factor = fffffffffffffffc +CIE[1]: return_address_register = 8 +CIE[1]: bytes = 0c 04 04 88 01 00 00 +CIE[2]: bytes_in_cie = 16, version = 1, augmenter = "" +CIE[2]: code_alignment_factor = 1 +CIE[2]: data_alignment_factor = fffffffffffffffc +CIE[2]: return_address_register = 8 +CIE[2]: bytes = 0c 04 04 88 01 00 00 +CIE[3]: bytes_in_cie = 20, version = 1, augmenter = "eh" +CIE[3]: code_alignment_factor = 1 +CIE[3]: data_alignment_factor = fffffffffffffffc +CIE[3]: return_address_register = 8 +CIE[3]: bytes = 0c 04 04 88 01 +CIE[4]: bytes_in_cie = 16, version = 1, augmenter = "" +CIE[4]: code_alignment_factor = 1 +CIE[4]: data_alignment_factor = fffffffffffffffc +CIE[4]: return_address_register = 8 +CIE[4]: bytes = 0c 04 04 88 01 00 00 +FDE[0]: low_pc = 0x80493fc, length = 154 +FDE[0]: bytes = 2c 00 00 00 1c 00 00 00 fc 93 04 08 9a 00 00 00 41 0e 08 85 02 42 0d 05 53 2e 08 50 2e 10 48 2e 00 58 2e 10 62 2e 00 63 2e 10 45 2e 00 00 00 00 +FDE[0]: cie_offset = 0, cie_index = 0, fde_offset = 28 +FDE[0]: instructions = 41 0e 08 85 02 42 0d 05 53 2e 08 50 2e 10 48 2e 00 58 2e 10 62 2e 00 63 2e 10 45 2e 00 00 00 00 +FDE[1]: low_pc = 0x8049498, length = 49 +FDE[1]: bytes = 18 00 00 00 4c 00 00 00 98 94 04 08 31 00 00 00 41 0e 08 85 02 42 0d 05 4c 2e 10 00 +FDE[1]: cie_offset = 0, cie_index = 0, fde_offset = 76 +FDE[1]: instructions = 41 0e 08 85 02 42 0d 05 4c 2e 10 00 +FDE[2]: low_pc = 0x80494d4, length = 23 +FDE[2]: bytes = 18 00 00 00 18 00 00 00 d4 94 04 08 17 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[2]: cie_offset = 100, cie_index = 1, fde_offset = 24 +FDE[2]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[3]: low_pc = 0x80494f0, length = 26 +FDE[3]: bytes = 18 00 00 00 34 00 00 00 f0 94 04 08 1a 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[3]: cie_offset = 100, cie_index = 1, fde_offset = 52 +FDE[3]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[4]: low_pc = 0x8049560, length = 85 +FDE[4]: bytes = 24 00 00 00 50 00 00 00 60 95 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 53 2e 10 4e 2e 00 55 2e 10 00 +FDE[4]: cie_offset = 100, cie_index = 1, fde_offset = 80 +FDE[4]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 53 2e 10 4e 2e 00 55 2e 10 00 +FDE[5]: low_pc = 0x80495c0, length = 66 +FDE[5]: bytes = 20 00 00 00 78 00 00 00 c0 95 04 08 42 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 5e 2e 10 00 00 00 +FDE[5]: cie_offset = 100, cie_index = 1, fde_offset = 120 +FDE[5]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 5e 2e 10 00 00 00 +FDE[6]: low_pc = 0x8049610, length = 28 +FDE[6]: bytes = 18 00 00 00 9c 00 00 00 10 96 04 08 1c 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[6]: cie_offset = 100, cie_index = 1, fde_offset = 156 +FDE[6]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[7]: low_pc = 0x8049630, length = 31 +FDE[7]: bytes = 18 00 00 00 b8 00 00 00 30 96 04 08 1f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[7]: cie_offset = 100, cie_index = 1, fde_offset = 184 +FDE[7]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[8]: low_pc = 0x80496e0, length = 71 +FDE[8]: bytes = 1c 00 00 00 d4 00 00 00 e0 96 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 5c 2e 10 00 00 +FDE[8]: cie_offset = 100, cie_index = 1, fde_offset = 212 +FDE[8]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 5c 2e 10 00 00 +FDE[9]: low_pc = 0x8049730, length = 165 +FDE[9]: bytes = 20 00 00 00 f4 00 00 00 30 97 04 08 a5 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 69 2e 10 02 66 2e 00 00 00 +FDE[9]: cie_offset = 100, cie_index = 1, fde_offset = 244 +FDE[9]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 69 2e 10 02 66 2e 00 00 00 +FDE[10]: low_pc = 0x80497e0, length = 89 +FDE[10]: bytes = 1c 00 00 00 18 01 00 00 e0 97 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 74 2e 10 00 00 +FDE[10]: cie_offset = 100, cie_index = 1, fde_offset = 280 +FDE[10]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 74 2e 10 00 00 +FDE[11]: low_pc = 0x8049840, length = 89 +FDE[11]: bytes = 28 00 00 00 38 01 00 00 40 98 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 55 2e 10 4e 2e 00 52 2e 10 4c 2e 00 00 00 +FDE[11]: cie_offset = 100, cie_index = 1, fde_offset = 312 +FDE[11]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 55 2e 10 4e 2e 00 52 2e 10 4c 2e 00 00 00 +FDE[12]: low_pc = 0x80498a0, length = 176 +FDE[12]: bytes = 24 00 00 00 64 01 00 00 a0 98 04 08 b0 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5e 2e 10 4c 2e 00 00 +FDE[12]: cie_offset = 100, cie_index = 1, fde_offset = 356 +FDE[12]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5e 2e 10 4c 2e 00 00 +FDE[13]: low_pc = 0x8049950, length = 116 +FDE[13]: bytes = 24 00 00 00 8c 01 00 00 50 99 04 08 74 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 5e 2e 10 00 00 00 +FDE[13]: cie_offset = 100, cie_index = 1, fde_offset = 396 +FDE[13]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 5e 2e 10 00 00 00 +FDE[14]: low_pc = 0x80499d0, length = 31 +FDE[14]: bytes = 18 00 00 00 b4 01 00 00 d0 99 04 08 1f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[14]: cie_offset = 100, cie_index = 1, fde_offset = 436 +FDE[14]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[15]: low_pc = 0x80499f0, length = 313 +FDE[15]: bytes = 24 00 00 00 d0 01 00 00 f0 99 04 08 39 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 d8 2e 10 62 2e 00 +FDE[15]: cie_offset = 100, cie_index = 1, fde_offset = 464 +FDE[15]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 d8 2e 10 62 2e 00 +FDE[16]: low_pc = 0x8049b30, length = 262 +FDE[16]: bytes = 24 00 00 00 f8 01 00 00 30 9b 04 08 06 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 c8 2e 10 62 2e 00 +FDE[16]: cie_offset = 100, cie_index = 1, fde_offset = 504 +FDE[16]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 c8 2e 10 62 2e 00 +FDE[17]: low_pc = 0x8049c40, length = 95 +FDE[17]: bytes = 1c 00 00 00 20 02 00 00 40 9c 04 08 5f 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 6e 2e 10 00 00 +FDE[17]: cie_offset = 100, cie_index = 1, fde_offset = 544 +FDE[17]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 6e 2e 10 00 00 +FDE[18]: low_pc = 0x8049d60, length = 230 +FDE[18]: bytes = 20 00 00 00 40 02 00 00 60 9d 04 08 e6 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 9a 2e 10 00 00 +FDE[18]: cie_offset = 100, cie_index = 1, fde_offset = 576 +FDE[18]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 9a 2e 10 00 00 +FDE[19]: low_pc = 0x8049e50, length = 85 +FDE[19]: bytes = 18 00 00 00 64 02 00 00 50 9e 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[19]: cie_offset = 100, cie_index = 1, fde_offset = 612 +FDE[19]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[20]: low_pc = 0x8049eb0, length = 144 +FDE[20]: bytes = 20 00 00 00 80 02 00 00 b0 9e 04 08 90 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 10 +FDE[20]: cie_offset = 100, cie_index = 1, fde_offset = 640 +FDE[20]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 10 +FDE[21]: low_pc = 0x8049f40, length = 115 +FDE[21]: bytes = 20 00 00 00 a4 02 00 00 40 9f 04 08 73 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 59 2e 10 +FDE[21]: cie_offset = 100, cie_index = 1, fde_offset = 676 +FDE[21]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 59 2e 10 +FDE[22]: low_pc = 0x8049fd0, length = 948 +FDE[22]: bytes = 30 00 00 00 c8 02 00 00 d0 9f 04 08 b4 03 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 f7 2e 20 02 64 2e 10 03 15 01 2e 00 02 9f 2e 10 00 00 +FDE[22]: cie_offset = 100, cie_index = 1, fde_offset = 712 +FDE[22]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 f7 2e 20 02 64 2e 10 03 15 01 2e 00 02 9f 2e 10 00 00 +FDE[23]: low_pc = 0x804a390, length = 201 +FDE[23]: bytes = 28 00 00 00 fc 02 00 00 90 a3 04 08 c9 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 58 2e 10 52 2e 00 75 2e 10 00 +FDE[23]: cie_offset = 100, cie_index = 1, fde_offset = 764 +FDE[23]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 58 2e 10 52 2e 00 75 2e 10 00 +FDE[24]: low_pc = 0x804a460, length = 206 +FDE[24]: bytes = 28 00 00 00 28 03 00 00 60 a4 04 08 ce 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 64 2e 10 52 2e 00 6e 2e 10 00 +FDE[24]: cie_offset = 100, cie_index = 1, fde_offset = 808 +FDE[24]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 64 2e 10 52 2e 00 6e 2e 10 00 +FDE[25]: low_pc = 0x804b970, length = 1274 +FDE[25]: bytes = 44 00 00 00 18 00 00 00 70 b9 04 08 fa 04 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 66 2e 10 7b 2e 20 03 7f 01 2e 10 53 2e 08 4c 2e 10 79 2e 20 02 54 2e 10 7e 2e 20 03 6c 01 2e 10 02 45 2e 20 00 00 00 +FDE[25]: cie_offset = 948, cie_index = 2, fde_offset = 24 +FDE[25]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 66 2e 10 7b 2e 20 03 7f 01 2e 10 53 2e 08 4c 2e 10 79 2e 20 02 54 2e 10 7e 2e 20 03 6c 01 2e 10 02 45 2e 20 00 00 00 +FDE[26]: low_pc = 0x804be70, length = 60 +FDE[26]: bytes = 1c 00 00 00 60 00 00 00 70 be 04 08 3c 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 5e 2e 10 00 00 +FDE[26]: cie_offset = 948, cie_index = 2, fde_offset = 96 +FDE[26]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 5e 2e 10 00 00 +FDE[27]: low_pc = 0x804c090, length = 85 +FDE[27]: bytes = 24 00 00 00 80 00 00 00 90 c0 04 08 55 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 66 2e 04 4d 2e 0c 4c 2e 04 46 2e 20 00 +FDE[27]: cie_offset = 948, cie_index = 2, fde_offset = 128 +FDE[27]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 66 2e 04 4d 2e 0c 4c 2e 04 46 2e 20 00 +FDE[28]: low_pc = 0x804c0f0, length = 75 +FDE[28]: bytes = 2c 00 00 00 a8 00 00 00 f0 c0 04 08 4b 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 04 4a 2e 0c 4d 2e 04 46 2e 20 00 00 00 +FDE[28]: cie_offset = 948, cie_index = 2, fde_offset = 168 +FDE[28]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5b 2e 04 4a 2e 0c 4d 2e 04 46 2e 20 00 00 00 +FDE[29]: low_pc = 0x804d8e0, length = 71 +FDE[29]: bytes = 20 00 00 00 d8 00 00 00 e0 d8 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[29]: cie_offset = 948, cie_index = 2, fde_offset = 216 +FDE[29]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[30]: low_pc = 0x804d980, length = 71 +FDE[30]: bytes = 20 00 00 00 fc 00 00 00 80 d9 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[30]: cie_offset = 948, cie_index = 2, fde_offset = 252 +FDE[30]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[31]: low_pc = 0x804da20, length = 71 +FDE[31]: bytes = 20 00 00 00 20 01 00 00 20 da 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[31]: cie_offset = 948, cie_index = 2, fde_offset = 288 +FDE[31]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[32]: low_pc = 0x804dac0, length = 71 +FDE[32]: bytes = 20 00 00 00 44 01 00 00 c0 da 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[32]: cie_offset = 948, cie_index = 2, fde_offset = 324 +FDE[32]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[33]: low_pc = 0x804db60, length = 71 +FDE[33]: bytes = 20 00 00 00 68 01 00 00 60 db 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[33]: cie_offset = 948, cie_index = 2, fde_offset = 360 +FDE[33]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[34]: low_pc = 0x804dc00, length = 71 +FDE[34]: bytes = 20 00 00 00 8c 01 00 00 00 dc 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[34]: cie_offset = 948, cie_index = 2, fde_offset = 396 +FDE[34]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[35]: low_pc = 0x804dca0, length = 71 +FDE[35]: bytes = 20 00 00 00 b0 01 00 00 a0 dc 04 08 47 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[35]: cie_offset = 948, cie_index = 2, fde_offset = 432 +FDE[35]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 60 2e 10 +FDE[36]: low_pc = 0x804c5b4, length = 26 +FDE[36]: bytes = 18 00 00 00 1c 00 00 00 b4 c5 04 08 1a 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[36]: cie_offset = 1412, cie_index = 3, fde_offset = 28 +FDE[36]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[37]: low_pc = 0x804c5d0, length = 23 +FDE[37]: bytes = 18 00 00 00 38 00 00 00 d0 c5 04 08 17 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[37]: cie_offset = 1412, cie_index = 3, fde_offset = 56 +FDE[37]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[38]: low_pc = 0x804c640, length = 24 +FDE[38]: bytes = 18 00 00 00 54 00 00 00 40 c6 04 08 18 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[38]: cie_offset = 1412, cie_index = 3, fde_offset = 84 +FDE[38]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[39]: low_pc = 0x804c660, length = 32 +FDE[39]: bytes = 18 00 00 00 70 00 00 00 60 c6 04 08 20 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[39]: cie_offset = 1412, cie_index = 3, fde_offset = 112 +FDE[39]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[40]: low_pc = 0x804c680, length = 29 +FDE[40]: bytes = 18 00 00 00 8c 00 00 00 80 c6 04 08 1d 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[40]: cie_offset = 1412, cie_index = 3, fde_offset = 140 +FDE[40]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[41]: low_pc = 0x804c6a0, length = 36 +FDE[41]: bytes = 18 00 00 00 a8 00 00 00 a0 c6 04 08 24 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[41]: cie_offset = 1412, cie_index = 3, fde_offset = 168 +FDE[41]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[42]: low_pc = 0x804c6d0, length = 98 +FDE[42]: bytes = 24 00 00 00 c4 00 00 00 d0 c6 04 08 62 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 43 2e 10 00 00 00 +FDE[42]: cie_offset = 1412, cie_index = 3, fde_offset = 196 +FDE[42]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 43 2e 10 00 00 00 +FDE[43]: low_pc = 0x804c740, length = 107 +FDE[43]: bytes = 24 00 00 00 ec 00 00 00 40 c7 04 08 6b 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 53 2e 10 7b 2e 00 00 +FDE[43]: cie_offset = 1412, cie_index = 3, fde_offset = 236 +FDE[43]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 53 2e 10 7b 2e 00 00 +FDE[44]: low_pc = 0x804c7b0, length = 256 +FDE[44]: bytes = 24 00 00 00 14 01 00 00 b0 c7 04 08 00 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 bf 2e 10 00 00 00 +FDE[44]: cie_offset = 1412, cie_index = 3, fde_offset = 276 +FDE[44]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 02 bf 2e 10 00 00 00 +FDE[45]: low_pc = 0x804c8b0, length = 78 +FDE[45]: bytes = 1c 00 00 00 3c 01 00 00 b0 c8 04 08 4e 00 00 00 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 00 00 +FDE[45]: cie_offset = 1412, cie_index = 3, fde_offset = 316 +FDE[45]: instructions = 41 0e 08 85 02 42 0d 05 41 86 03 41 83 04 00 00 +FDE[46]: low_pc = 0x804c900, length = 480 +FDE[46]: bytes = 40 00 00 00 5c 01 00 00 00 c9 04 08 e0 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 7d 2e 10 4c 2e 00 02 48 2e 10 02 54 2e 00 78 2e 10 4c 2e 00 02 44 2e 10 79 2e 08 49 2e 10 48 2e 00 00 00 +FDE[46]: cie_offset = 1412, cie_index = 3, fde_offset = 348 +FDE[46]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 7d 2e 10 4c 2e 00 02 48 2e 10 02 54 2e 00 78 2e 10 4c 2e 00 02 44 2e 10 79 2e 08 49 2e 10 48 2e 00 00 00 +FDE[47]: low_pc = 0x804cae0, length = 37 +FDE[47]: bytes = 1c 00 00 00 a0 01 00 00 e0 ca 04 08 25 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 52 2e 10 00 00 +FDE[47]: cie_offset = 1412, cie_index = 3, fde_offset = 416 +FDE[47]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 52 2e 10 00 00 +FDE[48]: low_pc = 0x804cb10, length = 128 +FDE[48]: bytes = 2c 00 00 00 c0 01 00 00 10 cb 04 08 80 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10 +FDE[48]: cie_offset = 1412, cie_index = 3, fde_offset = 448 +FDE[48]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10 +FDE[49]: low_pc = 0x804cb90, length = 128 +FDE[49]: bytes = 2c 00 00 00 f0 01 00 00 90 cb 04 08 80 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10 +FDE[49]: cie_offset = 1412, cie_index = 3, fde_offset = 496 +FDE[49]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 62 2e 10 56 2e 08 49 2e 10 48 2e 00 6c 2e 10 +FDE[50]: low_pc = 0x804cc10, length = 45 +FDE[50]: bytes = 18 00 00 00 20 02 00 00 10 cc 04 08 2d 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[50]: cie_offset = 1412, cie_index = 3, fde_offset = 544 +FDE[50]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[51]: low_pc = 0x804cc40, length = 43 +FDE[51]: bytes = 18 00 00 00 3c 02 00 00 40 cc 04 08 2b 00 00 00 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[51]: cie_offset = 1412, cie_index = 3, fde_offset = 572 +FDE[51]: instructions = 41 0e 08 85 02 42 0d 05 41 83 03 00 +FDE[52]: low_pc = 0x804cde0, length = 89 +FDE[52]: bytes = 20 00 00 00 18 00 00 00 e0 cd 04 08 59 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 6d 2e 20 00 00 00 +FDE[52]: cie_offset = 2008, cie_index = 4, fde_offset = 24 +FDE[52]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 6d 2e 20 00 00 00 +FDE[53]: low_pc = 0x804ce40, length = 217 +FDE[53]: bytes = 20 00 00 00 3c 00 00 00 40 ce 04 08 d9 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 40 2e 20 00 00 +FDE[53]: cie_offset = 2008, cie_index = 4, fde_offset = 60 +FDE[53]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 02 40 2e 20 00 00 +FDE[54]: low_pc = 0x804d010, length = 117 +FDE[54]: bytes = 24 00 00 00 60 00 00 00 10 d0 04 08 75 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5c 2e 10 02 48 2e 20 +FDE[54]: cie_offset = 2008, cie_index = 4, fde_offset = 96 +FDE[54]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 5c 2e 10 02 48 2e 20 +FDE[55]: low_pc = 0x804d090, length = 190 +FDE[55]: bytes = 24 00 00 00 88 00 00 00 90 d0 04 08 be 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 64 2e 10 02 89 2e 20 +FDE[55]: cie_offset = 2008, cie_index = 4, fde_offset = 136 +FDE[55]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 64 2e 10 02 89 2e 20 +FDE[56]: low_pc = 0x804d150, length = 101 +FDE[56]: bytes = 24 00 00 00 b0 00 00 00 50 d1 04 08 65 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 73 2e 20 00 +FDE[56]: cie_offset = 2008, cie_index = 4, fde_offset = 176 +FDE[56]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 73 2e 20 00 +FDE[57]: low_pc = 0x804d1c0, length = 480 +FDE[57]: bytes = 28 00 00 00 d8 00 00 00 c0 d1 04 08 e0 01 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 56 2e 10 02 f5 2e 20 02 91 2e 10 +FDE[57]: cie_offset = 2008, cie_index = 4, fde_offset = 216 +FDE[57]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 56 2e 10 02 f5 2e 20 02 91 2e 10 +FDE[58]: low_pc = 0x804d3a0, length = 897 +FDE[58]: bytes = 28 00 00 00 04 01 00 00 a0 d3 04 08 81 03 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 03 61 01 2e 20 00 00 00 +FDE[58]: cie_offset = 2008, cie_index = 4, fde_offset = 260 +FDE[58]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 03 61 01 2e 20 00 00 00 +FDE[59]: low_pc = 0x804d730, length = 238 +FDE[59]: bytes = 24 00 00 00 30 01 00 00 30 d7 04 08 ee 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 02 8f 2e 20 +FDE[59]: cie_offset = 2008, cie_index = 4, fde_offset = 304 +FDE[59]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 41 86 04 41 83 05 61 2e 10 02 8f 2e 20 +FDE[60]: low_pc = 0x804e220, length = 73 +FDE[60]: bytes = 20 00 00 00 58 01 00 00 20 e2 04 08 49 00 00 00 41 0e 08 85 02 42 0d 05 41 87 03 44 86 04 74 2e 20 00 00 00 +FDE[60]: cie_offset = 2008, cie_index = 4, fde_offset = 344 +FDE[60]: instructions = 41 0e 08 85 02 42 0d 05 41 87 03 44 86 04 74 2e 20 00 00 00 +no FDE at 8048400 +no FDE at 804842c +no FDE at 8048454 +no FDE at 8048455 +FDE[@80493fc]: cie_offset = 0, cie_index = 0, fde_offset = 28 +EOF + +rm -f testfile3 testfile4 show-ciefde.out + +exit 0 diff --git a/tests/run-show-die-info.sh b/tests/run-show-die-info.sh new file mode 100644 index 00000000..04263268 --- /dev/null +++ b/tests/run-show-die-info.sh @@ -0,0 +1,988 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2003, 2004 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile5.bz2 > testfile5 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile2.bz2 > testfile2 2>/dev/null || exit 0 + +./show-die-info testfile5 testfile2 > show-die-info.out + +diff -u show-die-info.out - <<"EOF" +file: testfile5 +New CU: off = 0, hsize = 11, ab = 0, as = 4, os = 4 + DW_TAG_compile_unit + Name : b.c + Offset : 11 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x804842c + high PC : 0x8048436 + language : 1 + directory : /home/drepper/gnu/new-bu/build/ttt + producer : GNU C 2.96 20000731 (Red Hat Linux 7.0) + DW_TAG_subprogram + Name : bar + Offset : 104 + CU offset : 104 + Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x804842c + high PC : 0x8048436 + DW_TAG_base_type + Name : int + Offset : 127 + CU offset : 127 + Attrs : name byte_size encoding + byte size : 4 +New CU: off = 135, hsize = 11, ab = 54, as = 4, os = 4 + DW_TAG_compile_unit + Name : f.c + Offset : 146 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x8048438 + high PC : 0x8048442 + language : 1 + directory : /home/drepper/gnu/new-bu/build/ttt + producer : GNU C 2.96 20000731 (Red Hat Linux 7.0) + DW_TAG_subprogram + Name : foo + Offset : 239 + CU offset : 104 + Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x8048438 + high PC : 0x8048442 + DW_TAG_base_type + Name : int + Offset : 262 + CU offset : 127 + Attrs : name byte_size encoding + byte size : 4 +New CU: off = 270, hsize = 11, ab = 108, as = 4, os = 4 + DW_TAG_compile_unit + Name : m.c + Offset : 281 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x8048444 + high PC : 0x8048472 + language : 1 + directory : /home/drepper/gnu/new-bu/build/ttt + producer : GNU C 2.96 20000731 (Red Hat Linux 7.0) + DW_TAG_subprogram + Name : main + Offset : 374 + CU offset : 104 + Attrs : sibling name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x8048444 + high PC : 0x8048472 + DW_TAG_subprogram + Name : bar + Offset : 402 + CU offset : 132 + Attrs : sibling name decl_file decl_line declaration external type + DW_TAG_unspecified_parameters + Name : * NO NAME * + Offset : 419 + CU offset : 149 + Attrs : + DW_TAG_subprogram + Name : foo + Offset : 421 + CU offset : 151 + Attrs : name decl_file decl_line declaration external type + DW_TAG_unspecified_parameters + Name : * NO NAME * + Offset : 434 + CU offset : 164 + Attrs : + DW_TAG_base_type + Name : int + Offset : 437 + CU offset : 167 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_variable + Name : a + Offset : 444 + CU offset : 174 + Attrs : location name decl_file decl_line external type +file: testfile2 +New CU: off = 0, hsize = 11, ab = 0, as = 4, os = 4 + DW_TAG_compile_unit + Name : b.c + Offset : 11 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x10000470 + high PC : 0x10000490 + language : 1 + directory : /shoggoth/drepper + producer : GNU C 2.96-laurel-000912 + DW_TAG_subprogram + Name : bar + Offset : 72 + CU offset : 72 + Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x10000470 + high PC : 0x10000490 + DW_TAG_base_type + Name : int + Offset : 95 + CU offset : 95 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_typedef + Name : size_t + Offset : 102 + CU offset : 102 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : unsigned int + Offset : 116 + CU offset : 116 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_typedef + Name : __gnuc_va_list + Offset : 132 + CU offset : 132 + Attrs : name decl_file decl_line type + DW_TAG_array_type + Name : __builtin_va_list + Offset : 154 + CU offset : 154 + Attrs : sibling name type + DW_TAG_subrange_type + Name : * NO NAME * + Offset : 181 + CU offset : 181 + Attrs : upper_bound type + DW_TAG_base_type + Name : unsigned int + Offset : 188 + CU offset : 188 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_structure_type + Name : __va_list_tag + Offset : 204 + CU offset : 204 + Attrs : sibling name byte_size decl_file decl_line + byte size : 12 + DW_TAG_member + Name : gpr + Offset : 226 + CU offset : 226 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : fpr + Offset : 240 + CU offset : 240 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : overflow_arg_area + Offset : 254 + CU offset : 254 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : reg_save_area + Offset : 282 + CU offset : 282 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_base_type + Name : unsigned char + Offset : 307 + CU offset : 307 + Attrs : name byte_size encoding + byte size : 1 + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 324 + CU offset : 324 + Attrs : byte_size + byte size : 4 + DW_TAG_typedef + Name : __u_char + Offset : 326 + CU offset : 326 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __u_short + Offset : 342 + CU offset : 342 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : short unsigned int + Offset : 359 + CU offset : 359 + Attrs : name byte_size encoding + byte size : 2 + DW_TAG_typedef + Name : __u_int + Offset : 381 + CU offset : 381 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __u_long + Offset : 396 + CU offset : 396 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : long unsigned int + Offset : 412 + CU offset : 412 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_typedef + Name : __u_quad_t + Offset : 433 + CU offset : 433 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : long long unsigned int + Offset : 451 + CU offset : 451 + Attrs : name byte_size encoding + byte size : 8 + DW_TAG_typedef + Name : __quad_t + Offset : 477 + CU offset : 477 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : long long int + Offset : 493 + CU offset : 493 + Attrs : name byte_size encoding + byte size : 8 + DW_TAG_typedef + Name : __int8_t + Offset : 510 + CU offset : 510 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : signed char + Offset : 526 + CU offset : 526 + Attrs : name byte_size encoding + byte size : 1 + DW_TAG_typedef + Name : __uint8_t + Offset : 541 + CU offset : 541 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __int16_t + Offset : 558 + CU offset : 558 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : short int + Offset : 575 + CU offset : 575 + Attrs : name byte_size encoding + byte size : 2 + DW_TAG_typedef + Name : __uint16_t + Offset : 588 + CU offset : 588 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __int32_t + Offset : 606 + CU offset : 606 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __uint32_t + Offset : 623 + CU offset : 623 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __int64_t + Offset : 641 + CU offset : 641 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __uint64_t + Offset : 658 + CU offset : 658 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __qaddr_t + Offset : 676 + CU offset : 676 + Attrs : name decl_file decl_line type + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 693 + CU offset : 693 + Attrs : byte_size type + byte size : 4 + DW_TAG_typedef + Name : __dev_t + Offset : 699 + CU offset : 699 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __uid_t + Offset : 714 + CU offset : 714 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __gid_t + Offset : 729 + CU offset : 729 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __ino_t + Offset : 744 + CU offset : 744 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __mode_t + Offset : 759 + CU offset : 759 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __nlink_t + Offset : 775 + CU offset : 775 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __off_t + Offset : 792 + CU offset : 792 + Attrs : name decl_file decl_line type + DW_TAG_base_type + Name : long int + Offset : 807 + CU offset : 807 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_typedef + Name : __loff_t + Offset : 819 + CU offset : 819 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __pid_t + Offset : 835 + CU offset : 835 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __ssize_t + Offset : 850 + CU offset : 850 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __rlim_t + Offset : 867 + CU offset : 867 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __rlim64_t + Offset : 883 + CU offset : 883 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __id_t + Offset : 901 + CU offset : 901 + Attrs : name decl_file decl_line type + DW_TAG_structure_type + Name : * NO NAME * + Offset : 915 + CU offset : 915 + Attrs : sibling byte_size decl_file decl_line + byte size : 8 + DW_TAG_member + Name : __val + Offset : 923 + CU offset : 923 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_array_type + Name : * NO NAME * + Offset : 940 + CU offset : 940 + Attrs : sibling type + DW_TAG_subrange_type + Name : * NO NAME * + Offset : 949 + CU offset : 949 + Attrs : upper_bound type + DW_TAG_typedef + Name : __fsid_t + Offset : 956 + CU offset : 956 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __daddr_t + Offset : 972 + CU offset : 972 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __caddr_t + Offset : 989 + CU offset : 989 + Attrs : name decl_file decl_line type + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 1006 + CU offset : 1006 + Attrs : byte_size type + byte size : 4 + DW_TAG_base_type + Name : char + Offset : 1012 + CU offset : 1012 + Attrs : name byte_size encoding + byte size : 1 + DW_TAG_typedef + Name : __time_t + Offset : 1020 + CU offset : 1020 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __swblk_t + Offset : 1036 + CU offset : 1036 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __clock_t + Offset : 1053 + CU offset : 1053 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __fd_mask + Offset : 1070 + CU offset : 1070 + Attrs : name decl_file decl_line type + DW_TAG_structure_type + Name : * NO NAME * + Offset : 1087 + CU offset : 1087 + Attrs : sibling byte_size decl_file decl_line + byte size : 128 + DW_TAG_member + Name : __fds_bits + Offset : 1095 + CU offset : 1095 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_array_type + Name : * NO NAME * + Offset : 1117 + CU offset : 1117 + Attrs : sibling type + DW_TAG_subrange_type + Name : * NO NAME * + Offset : 1126 + CU offset : 1126 + Attrs : upper_bound type + DW_TAG_typedef + Name : __fd_set + Offset : 1133 + CU offset : 1133 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __key_t + Offset : 1149 + CU offset : 1149 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __ipc_pid_t + Offset : 1164 + CU offset : 1164 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __blkcnt_t + Offset : 1183 + CU offset : 1183 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __blkcnt64_t + Offset : 1201 + CU offset : 1201 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __fsblkcnt_t + Offset : 1221 + CU offset : 1221 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __fsblkcnt64_t + Offset : 1241 + CU offset : 1241 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __fsfilcnt_t + Offset : 1263 + CU offset : 1263 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __fsfilcnt64_t + Offset : 1283 + CU offset : 1283 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __ino64_t + Offset : 1305 + CU offset : 1305 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __off64_t + Offset : 1322 + CU offset : 1322 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __t_scalar_t + Offset : 1339 + CU offset : 1339 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __t_uscalar_t + Offset : 1359 + CU offset : 1359 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : __intptr_t + Offset : 1380 + CU offset : 1380 + Attrs : name decl_file decl_line type + DW_TAG_structure_type + Name : _IO_FILE + Offset : 1398 + CU offset : 1398 + Attrs : sibling name byte_size decl_file decl_line + byte size : 152 + DW_TAG_member + Name : _flags + Offset : 1415 + CU offset : 1415 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_read_ptr + Offset : 1432 + CU offset : 1432 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_read_end + Offset : 1455 + CU offset : 1455 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_read_base + Offset : 1478 + CU offset : 1478 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_write_base + Offset : 1502 + CU offset : 1502 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_write_ptr + Offset : 1527 + CU offset : 1527 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_write_end + Offset : 1551 + CU offset : 1551 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_buf_base + Offset : 1575 + CU offset : 1575 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_buf_end + Offset : 1598 + CU offset : 1598 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_save_base + Offset : 1620 + CU offset : 1620 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_backup_base + Offset : 1644 + CU offset : 1644 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _IO_save_end + Offset : 1670 + CU offset : 1670 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _markers + Offset : 1693 + CU offset : 1693 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _chain + Offset : 1712 + CU offset : 1712 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _fileno + Offset : 1729 + CU offset : 1729 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _blksize + Offset : 1747 + CU offset : 1747 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _old_offset + Offset : 1766 + CU offset : 1766 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _cur_column + Offset : 1788 + CU offset : 1788 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _vtable_offset + Offset : 1810 + CU offset : 1810 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _shortbuf + Offset : 1835 + CU offset : 1835 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _lock + Offset : 1855 + CU offset : 1855 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _offset + Offset : 1871 + CU offset : 1871 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _unused2 + Offset : 1889 + CU offset : 1889 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_structure_type + Name : _IO_marker + Offset : 1909 + CU offset : 1909 + Attrs : sibling name byte_size decl_file decl_line + byte size : 12 + DW_TAG_member + Name : _next + Offset : 1928 + CU offset : 1928 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _sbuf + Offset : 1944 + CU offset : 1944 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_member + Name : _pos + Offset : 1960 + CU offset : 1960 + Attrs : name data_member_location decl_file decl_line type + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 1976 + CU offset : 1976 + Attrs : byte_size type + byte size : 4 + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 1982 + CU offset : 1982 + Attrs : byte_size type + byte size : 4 + DW_TAG_array_type + Name : * NO NAME * + Offset : 1988 + CU offset : 1988 + Attrs : sibling type + DW_TAG_subrange_type + Name : * NO NAME * + Offset : 1997 + CU offset : 1997 + Attrs : upper_bound type + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 2004 + CU offset : 2004 + Attrs : byte_size + byte size : 4 + DW_TAG_array_type + Name : * NO NAME * + Offset : 2006 + CU offset : 2006 + Attrs : sibling type + DW_TAG_subrange_type + Name : * NO NAME * + Offset : 2015 + CU offset : 2015 + Attrs : upper_bound type + DW_TAG_typedef + Name : FILE + Offset : 2022 + CU offset : 2022 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : wchar_t + Offset : 2034 + CU offset : 2034 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : wint_t + Offset : 2050 + CU offset : 2050 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : _G_int16_t + Offset : 2065 + CU offset : 2065 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : _G_int32_t + Offset : 2083 + CU offset : 2083 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : _G_uint16_t + Offset : 2101 + CU offset : 2101 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : _G_uint32_t + Offset : 2120 + CU offset : 2120 + Attrs : name decl_file decl_line type + DW_TAG_structure_type + Name : _IO_jump_t + Offset : 2139 + CU offset : 2139 + Attrs : name declaration + DW_TAG_typedef + Name : _IO_lock_t + Offset : 2152 + CU offset : 2152 + Attrs : name decl_file decl_line + DW_TAG_typedef + Name : _IO_FILE + Offset : 2166 + CU offset : 2166 + Attrs : name decl_file decl_line type + DW_TAG_structure_type + Name : _IO_FILE_plus + Offset : 2182 + CU offset : 2182 + Attrs : name declaration + DW_TAG_typedef + Name : __io_read_fn + Offset : 2198 + CU offset : 2198 + Attrs : name decl_file decl_line type + DW_TAG_subroutine_type + Name : * NO NAME * + Offset : 2219 + CU offset : 2219 + Attrs : sibling prototyped type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2229 + CU offset : 2229 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2234 + CU offset : 2234 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2239 + CU offset : 2239 + Attrs : type + DW_TAG_typedef + Name : __io_write_fn + Offset : 2245 + CU offset : 2245 + Attrs : name decl_file decl_line type + DW_TAG_subroutine_type + Name : * NO NAME * + Offset : 2267 + CU offset : 2267 + Attrs : sibling prototyped type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2277 + CU offset : 2277 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2282 + CU offset : 2282 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2287 + CU offset : 2287 + Attrs : type + DW_TAG_pointer_type + Name : * NO NAME * + Offset : 2293 + CU offset : 2293 + Attrs : byte_size type + byte size : 4 + DW_TAG_const_type + Name : * NO NAME * + Offset : 2299 + CU offset : 2299 + Attrs : type + DW_TAG_typedef + Name : __io_seek_fn + Offset : 2304 + CU offset : 2304 + Attrs : name decl_file decl_line type + DW_TAG_subroutine_type + Name : * NO NAME * + Offset : 2325 + CU offset : 2325 + Attrs : sibling prototyped type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2335 + CU offset : 2335 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2340 + CU offset : 2340 + Attrs : type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2345 + CU offset : 2345 + Attrs : type + DW_TAG_typedef + Name : __io_close_fn + Offset : 2351 + CU offset : 2351 + Attrs : name decl_file decl_line type + DW_TAG_subroutine_type + Name : * NO NAME * + Offset : 2373 + CU offset : 2373 + Attrs : sibling prototyped type + DW_TAG_formal_parameter + Name : * NO NAME * + Offset : 2383 + CU offset : 2383 + Attrs : type + DW_TAG_typedef + Name : fpos_t + Offset : 2389 + CU offset : 2389 + Attrs : name decl_file decl_line type + DW_TAG_typedef + Name : off_t + Offset : 2403 + CU offset : 2403 + Attrs : name decl_file decl_line type +New CU: off = 2418, hsize = 11, ab = 213, as = 4, os = 4 + DW_TAG_compile_unit + Name : f.c + Offset : 2429 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x10000490 + high PC : 0x100004b0 + language : 1 + directory : /shoggoth/drepper + producer : GNU C 2.96-laurel-000912 + DW_TAG_subprogram + Name : foo + Offset : 2490 + CU offset : 72 + Attrs : name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x10000490 + high PC : 0x100004b0 + DW_TAG_base_type + Name : int + Offset : 2513 + CU offset : 95 + Attrs : name byte_size encoding + byte size : 4 +New CU: off = 2521, hsize = 11, ab = 267, as = 4, os = 4 + DW_TAG_compile_unit + Name : m.c + Offset : 2532 + CU offset : 11 + Attrs : name stmt_list low_pc high_pc language comp_dir producer + low PC : 0x100004b0 + high PC : 0x10000514 + language : 1 + directory : /shoggoth/drepper + producer : GNU C 2.96-laurel-000912 + DW_TAG_subprogram + Name : main + Offset : 2593 + CU offset : 72 + Attrs : sibling name low_pc high_pc prototyped decl_file decl_line external frame_base type + low PC : 0x100004b0 + high PC : 0x10000514 + DW_TAG_subprogram + Name : bar + Offset : 2621 + CU offset : 100 + Attrs : sibling name decl_file decl_line declaration external type + DW_TAG_unspecified_parameters + Name : * NO NAME * + Offset : 2638 + CU offset : 117 + Attrs : + DW_TAG_subprogram + Name : foo + Offset : 2640 + CU offset : 119 + Attrs : name decl_file decl_line declaration external type + DW_TAG_unspecified_parameters + Name : * NO NAME * + Offset : 2653 + CU offset : 132 + Attrs : + DW_TAG_base_type + Name : int + Offset : 2656 + CU offset : 135 + Attrs : name byte_size encoding + byte size : 4 + DW_TAG_variable + Name : a + Offset : 2663 + CU offset : 142 + Attrs : location name decl_file decl_line external type +EOF + +rm -f testfile2 testfile5 show-die-info.out + +exit 0 diff --git a/tests/run-strip-test.sh b/tests/run-strip-test.sh new file mode 100644 index 00000000..aab37f48 --- /dev/null +++ b/tests/run-strip-test.sh @@ -0,0 +1,33 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2003 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile11.bz2 > testfile11 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile7.bz2 > testfile7 2>/dev/null || exit 0 + +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/strip -o testfile.temp testfile11 + +cmp testfile7 testfile.temp + +# Check elflint and the expected result. +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/elflint -q testfile.temp + +rm -f testfile11 testfile7 testfile.temp + +exit 0 diff --git a/tests/run-strip-test2.sh b/tests/run-strip-test2.sh new file mode 100644 index 00000000..f385a865 --- /dev/null +++ b/tests/run-strip-test2.sh @@ -0,0 +1,33 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile8.bz2 > testfile8 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile9.bz2 > testfile9 2>/dev/null || exit 0 + +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/strip -o testfile.temp testfile8 + +cmp testfile9 testfile.temp + +# Check elflint and the expected result. +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/elflint -q testfile.temp + +rm -f testfile8 testfile9 testfile.temp + +exit 0 diff --git a/tests/run-strip-test3.sh b/tests/run-strip-test3.sh new file mode 100644 index 00000000..5ff4a5a9 --- /dev/null +++ b/tests/run-strip-test3.sh @@ -0,0 +1,33 @@ +#! /bin/sh +# Copyright (C) 1999, 2000, 2002, 2003 Red Hat, Inc. +# Written by Ulrich Drepper <drepper@redhat.com>, 1999. +# +# This program is Open Source software; you can redistribute it and/or +# modify it under the terms of the Open Software License version 1.0 as +# published by the Open Source Initiative. +# +# You should have received a copy of the Open Software License along +# with this program; if not, you may obtain a copy of the Open Software +# License version 1.0 from http://www.opensource.org/licenses/osl.php or +# by writing the Open Source Initiative c/o Lawrence Rosen, Esq., +# 3001 King Ranch Road, Ukiah, CA 95482. +set -e + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile12.bz2 > testfile12 2>/dev/null || exit 0 + +# Don't fail if we cannot decompress the file. +bunzip2 -c $srcdir/testfile13.bz2 > testfile13 2>/dev/null || exit 0 + +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/strip -o testfile.temp testfile12 + +cmp testfile13 testfile.temp + +# Check elflint and the expected result. +LD_LIBRARY_PATH=../libebl:../libelf${LD_LIBRARY_PATH:+:}$LD_LIBRARY_PATH \ + ../src/elflint -q testfile.temp + +rm -f testfile12 testfile13 testfile.temp + +exit 0 diff --git a/tests/saridx.c b/tests/saridx.c new file mode 100644 index 00000000..4abc892f --- /dev/null +++ b/tests/saridx.c @@ -0,0 +1,253 @@ +/* Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <error.h> +#include <fcntl.h> +#include <gelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <time.h> +#include <unistd.h> + + +static const char *machines[] = +{ +#define MACHINE(name) [name] = #name + MACHINE (EM_NONE), + MACHINE (EM_M32), + MACHINE (EM_SPARC), + MACHINE (EM_386), + MACHINE (EM_68K), + MACHINE (EM_88K), + MACHINE (EM_860), + MACHINE (EM_MIPS), + MACHINE (EM_MIPS_RS3_LE), + MACHINE (EM_PARISC), + MACHINE (EM_VPP500), + MACHINE (EM_SPARC32PLUS), + MACHINE (EM_960), + MACHINE (EM_PPC), + MACHINE (EM_PPC64), + MACHINE (EM_V800), + MACHINE (EM_FR20), + MACHINE (EM_RH32), + MACHINE (EM_RCE), + MACHINE (EM_ARM), + MACHINE (EM_FAKE_ALPHA), + MACHINE (EM_SH), + MACHINE (EM_SPARCV9), + MACHINE (EM_TRICORE), + MACHINE (EM_ARC), + MACHINE (EM_H8_300), + MACHINE (EM_H8_300H), + MACHINE (EM_H8S), + MACHINE (EM_H8_500), + MACHINE (EM_IA_64), + MACHINE (EM_MIPS_X), + MACHINE (EM_COLDFIRE), + MACHINE (EM_68HC12), + MACHINE (EM_MMA), + MACHINE (EM_PCP), + MACHINE (EM_NCPU), + MACHINE (EM_NDR1), + MACHINE (EM_STARCORE), + MACHINE (EM_ME16), + MACHINE (EM_ST100), + MACHINE (EM_TINYJ), + MACHINE (EM_FX66), + MACHINE (EM_ST9PLUS), + MACHINE (EM_ST7), + MACHINE (EM_68HC16), + MACHINE (EM_68HC11), + MACHINE (EM_68HC08), + MACHINE (EM_68HC05), + MACHINE (EM_SVX), + MACHINE (EM_ST19), + MACHINE (EM_VAX) +}; + + +int +main (int argc, char *argv[]) +{ + int fd; + Elf *elf; + Elf_Cmd cmd; + size_t n; + int arg = 1; + int verbose = 0; + + /* Recognize optional verbosity flag. */ + if (arg < argc && strcmp (argv[arg], "-v") == 0) + { + verbose = 1; + ++arg; + } + + /* Any more arguments available. */ + if (arg >= argc) + error (EXIT_FAILURE, 0, "No input file given"); + + /* Open the input file. */ + fd = open (argv[arg], O_RDONLY); + if (fd == -1) + { + perror ("cannot open input file"); + exit (1); + } + + /* Set the ELF version we are using here. */ + if (elf_version (EV_CURRENT) == EV_NONE) + { + puts ("ELF library too old"); + exit (1); + } + + /* Start reading the file. */ + cmd = ELF_C_READ; + elf = elf_begin (fd, cmd, NULL); + if (elf == NULL) + { + printf ("elf_begin: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* If it is no archive punt. */ + if (elf_kind (elf) != ELF_K_AR) + { + printf ("%s is not an archive\n", argv[1]); + exit (1); + } + + if (verbose) + { + /* The verbose variant. We print a lot of information. */ + Elf *subelf; + char buf[100]; + time_t t; + + /* Get the elements of the archive one after the other. */ + while ((subelf = elf_begin (fd, cmd, elf)) != NULL) + { + /* The the header for this element. */ + Elf_Arhdr *arhdr = elf_getarhdr (subelf); + + if (arhdr == NULL) + { + printf ("cannot get arhdr: %s\n", elf_errmsg (-1)); + break; + } + + switch (elf_kind (subelf)) + { + case ELF_K_ELF: + fputs ("ELF file:\n", stdout); + break; + + case ELF_K_AR: + fputs ("archive:\n", stdout); + break; + + default: + fputs ("unknown file:\n", stdout); + break; + } + + /* Print general information. */ + t = arhdr->ar_date; + strftime (buf, sizeof buf, "%Y-%m-%dT%H:%M:%S%z", gmtime (&t)); + printf (" name : \"%s\"\n" + " time : %s\n" + " uid : %ld\n" + " gid : %ld\n" + " mode : %o\n" + " size : %ld\n" + " rawname : \"%s\"\n", + arhdr->ar_name, + buf, + (long int) arhdr->ar_uid, + (long int) arhdr->ar_gid, + arhdr->ar_mode, + (long int) arhdr->ar_size, + arhdr->ar_rawname); + + /* For ELF files we can provide some more information. */ + if (elf_kind (subelf) == ELF_K_ELF) + { + GElf_Ehdr ehdr; + + /* Get the ELF header. */ + if (gelf_getehdr (subelf, &ehdr) == NULL) + printf (" *** cannot get ELF header: %s\n", elf_errmsg (-1)); + else + { + printf (" binary class : %s\n", + ehdr.e_ident[EI_CLASS] == ELFCLASS32 + ? "ELFCLASS32" : "ELFCLASS64"); + printf (" data encoding: %s\n", + ehdr.e_ident[EI_DATA] == ELFDATA2LSB + ? "ELFDATA2LSB" : "ELFDATA2MSB"); + printf (" binary type : %s\n", + ehdr.e_type == ET_REL + ? "relocatable" + : (ehdr.e_type == ET_EXEC + ? "executable" + : (ehdr.e_type == ET_DYN + ? "dynamic" + : "core file"))); + printf (" machine : %s\n", + (ehdr.e_machine >= (sizeof (machines) + / sizeof (machines[0])) + || machines[ehdr.e_machine] == NULL) + ? "???" + : machines[ehdr.e_machine]); + } + } + + /* Get next archive element. */ + cmd = elf_next (subelf); + if (elf_end (subelf) != 0) + printf ("error while freeing sub-ELF descriptor: %s\n", + elf_errmsg (-1)); + } + } + else + { + /* The simple version. Only print a bit of information. */ + Elf_Arsym *arsym = elf_getarsym (elf, &n); + + if (n == 0) + printf ("no symbol table in archive: %s\n", elf_errmsg (-1)); + else + { + --n; + + while (n-- > 0) + printf ("name = \"%s\", offset = %ld, hash = %lx\n", + arsym[n].as_name, (long int) arsym[n].as_off, + arsym[n].as_hash); + } + } + + /* Free the ELF handle. */ + if (elf_end (elf) != 0) + printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1)); + + /* Close the underlying file. */ + close (fd); + + return 0; +} diff --git a/tests/scnnames.c b/tests/scnnames.c new file mode 100644 index 00000000..de30312e --- /dev/null +++ b/tests/scnnames.c @@ -0,0 +1,81 @@ +/* Copyright (C) 1998, 1999, 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <errno.h> +#include <fcntl.h> +#include <gelf.h> +#include <stdlib.h> +#include <stdio.h> +#include <string.h> + +int +main (int argc, char *argv[]) +{ + Elf *elf; + int fd; + GElf_Ehdr ehdr; + size_t strndx; + Elf_Scn *scn; + + fd = open (argv[1], O_RDONLY); + if (fd == -1) + { + printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot open ELF file: %s\n", elf_errmsg (-1)); + exit (1); + } + + if (elf_kind (elf) != ELF_K_ELF) + { + printf ("\"%s\" is not an ELF file\n", argv[1]); + exit (1); + } + + if (gelf_getehdr (elf, &ehdr) == NULL) + { + printf ("cannot get the ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + strndx = ehdr.e_shstrndx; + + scn = NULL; + while ((scn = elf_nextscn (elf, scn)) != NULL) + { + char *name = NULL; + GElf_Shdr shdr; + + if (gelf_getshdr (scn, &shdr) != NULL) + name = elf_strptr (elf, strndx, (size_t) shdr.sh_name); + + printf ("section: `%s'\n", name); + } + + if (elf_end (elf) != 0) + { + printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + return 0; +} diff --git a/tests/sectiondump.c b/tests/sectiondump.c new file mode 100644 index 00000000..f19a2151 --- /dev/null +++ b/tests/sectiondump.c @@ -0,0 +1,178 @@ +/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <errno.h> +#include <error.h> +#include <fcntl.h> +#include <gelf.h> +#include <inttypes.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> + + +/* Prototypes for local functions. */ +static int handle_section (Elf *elf, Elf_Scn *scn); +static void print_bytes (Elf_Data *data); +static void print_symtab (Elf *elf, Elf_Data *data); + + +int +main (int argc, char *argv[]) +{ + Elf *elf; + int fd; + int cnt; + + if (argc <= 1) + exit (1); + + /* Open the test file. This is given as the first parameter to the + program. */ + fd = open (argv[1], O_RDONLY); + if (fd == -1) + error (EXIT_FAILURE, errno, "cannot open input file `%s'", argv[1]); + + /* Set the library versio we expect. */ + elf_version (EV_CURRENT); + + /* Create the ELF descriptor. */ + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + error (EXIT_FAILURE, 0, "cannot create ELF descriptor: %s", + elf_errmsg (0)); + + /* Now proces all the sections mentioned in the rest of the command line. */ + for (cnt = 2; cnt < argc; ++cnt) + if (handle_section (elf, elf_getscn (elf, atoi (argv[cnt]))) != 0) + /* When we encounter an error stop immediately. */ + error (EXIT_FAILURE, 0, "while processing section %d: %s", cnt, + elf_errmsg (0)); + + /* Close the descriptor. */ + if (elf_end (elf) != 0) + error (EXIT_FAILURE, 0, "failure while closing ELF descriptor: %s", + elf_errmsg (0)); + + return 0; +} + + +static int +handle_section (Elf *elf, Elf_Scn *scn) +{ + GElf_Ehdr *ehdr; + GElf_Ehdr ehdr_mem; + GElf_Shdr *shdr; + GElf_Shdr shdr_mem; + Elf_Data *data; + + /* First get the ELF and section header. */ + ehdr = gelf_getehdr (elf, &ehdr_mem); + shdr = gelf_getshdr (scn, &shdr_mem); + if (ehdr == NULL || shdr == NULL) + return 1; + + /* Print the information from the ELF section header. */ + printf ("name = %s\n" + "type = %" PRId32 "\n" + "flags = %" PRIx64 "\n" + "addr = %" PRIx64 "\n" + "offset = %" PRIx64 "\n" + "size = %" PRId64 "\n" + "link = %" PRId32 "\n" + "info = %" PRIx32 "\n" + "addralign = %" PRIx64 "\n" + "entsize = %" PRId64 "\n", + elf_strptr (elf, ehdr->e_shstrndx, shdr->sh_name), + shdr->sh_type, + shdr->sh_flags, + shdr->sh_addr, + shdr->sh_offset, + shdr->sh_size, + shdr->sh_link, + shdr->sh_info, + shdr->sh_addralign, + shdr->sh_entsize); + + /* Get the section data now. */ + data = elf_getdata (scn, NULL); + if (data == NULL) + return 1; + + /* Now proces the different section types accordingly. */ + switch (shdr->sh_type) + { + case SHT_SYMTAB: + print_symtab (elf, data); + break; + + case SHT_PROGBITS: + default: + print_bytes (data); + break; + } + + /* Separate form the next section. */ + puts (""); + + /* All done correctly. */ + return 0; +} + + +static void +print_bytes (Elf_Data *data) +{ + size_t size = data->d_size; + off_t offset = data->d_off; + unsigned char *buf = (unsigned char *) data->d_buf; + size_t cnt; + + for (cnt = 0; cnt < size; cnt += 16) + { + size_t inner; + + printf ("%*Zx: ", sizeof (size_t) == 4 ? 8 : 16, (size_t) offset + cnt); + + for (inner = 0; inner < 16 && cnt + inner < size; ++inner) + printf (" %02hhx", buf[cnt + inner]); + + puts (""); + } +} + + +static void +print_symtab (Elf *elf, Elf_Data *data) +{ + int class = gelf_getclass (elf); + size_t nsym = data->d_size / (class == ELFCLASS32 + ? sizeof (Elf32_Sym) : sizeof (Elf64_Sym)); + size_t cnt; + + for (cnt = 0; cnt < nsym; ++cnt) + { + GElf_Sym sym_mem; + GElf_Sym *sym = gelf_getsym (data, cnt, &sym_mem); + + printf ("%5Zu: %*" PRIx64 " %6" PRIx64 " %4d\n", + cnt, + class == ELFCLASS32 ? 8 : 16, + sym->st_value, + sym->st_size, + GELF_ST_TYPE (sym->st_info)); + } +} diff --git a/tests/show-abbrev.c b/tests/show-abbrev.c new file mode 100644 index 00000000..7017932f --- /dev/null +++ b/tests/show-abbrev.c @@ -0,0 +1,127 @@ +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <fcntl.h> +#include <inttypes.h> +#include <libdw.h> +#include <stdio.h> +#include <unistd.h> + + +int +main (int argc, char *argv[]) +{ + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + Dwarf *dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable: %s\n", argv[cnt], dwarf_errmsg (-1)); + close (fd); + continue; + } + + Dwarf_Off cuoff = 0; + Dwarf_Off old_cuoff = 0; + size_t hsize; + while (dwarf_nextcu (dbg, cuoff, &cuoff, &hsize, NULL, NULL, NULL) == 0) + { + /* Get the DIE for the CU. */ + Dwarf_Die die; + if (dwarf_offdie (dbg, old_cuoff + hsize, &die) == NULL) + /* Something went wrong. */ + break; + + Dwarf_Off offset = 0; + + while (1) + { + size_t length; + Dwarf_Abbrev *abbrev = dwarf_getabbrev (&die, offset, &length); + if (abbrev == NULL) + /* End of the list. */ + break; + + unsigned tag = dwarf_getabbrevtag (abbrev); + if (tag == 0) + { + printf ("dwarf_getabbrevtag at offset %llu returned error: %s\n", + (unsigned long long int) offset, + dwarf_errmsg (-1)); + break; + } + + unsigned code = dwarf_getabbrevcode (abbrev); + if (code == 0) + { + printf ("dwarf_getabbrevcode at offset %llu returned error: %s\n", + (unsigned long long int) offset, + dwarf_errmsg (-1)); + break; + } + + int children = dwarf_abbrevhaschildren (abbrev); + if (children < 0) + { + printf ("dwarf_abbrevhaschildren at offset %llu returned error: %s\n", + (unsigned long long int) offset, + dwarf_errmsg (-1)); + break; + } + + printf ("abbrev[%llu]: code = %u, tag = %u, children = %d\n", + (unsigned long long int) offset, code, tag, children); + + size_t attrcnt; + if (dwarf_getattrcnt (abbrev, &attrcnt) != 0) + { + printf ("dwarf_getattrcnt at offset %llu returned error: %s\n", + (unsigned long long int) offset, + dwarf_errmsg (-1)); + break; + } + + unsigned int attr_num; + unsigned int attr_form; + Dwarf_Off aboffset; + size_t j; + for (j = 0; j < attrcnt; ++j) + if (dwarf_getabbrevattr (abbrev, j, &attr_num, &attr_form, + &aboffset)) + printf ("dwarf_getabbrevattr for abbrev[%llu] and index %zu failed\n", + (unsigned long long int) offset, j); + else + printf ("abbrev[%llu]: attr[%zu]: code = %u, form = %u, offset = %" PRIu64 "\n", + (unsigned long long int) offset, j, attr_num, + attr_form, (uint64_t) aboffset); + + offset += length; + } + + old_cuoff = cuoff; + } + + if (dwarf_end (dbg) != 0) + printf ("dwarf_end failed for %s: %s\n", argv[cnt], + dwarf_errmsg (-1)); + + close (fd); + } + + return 0; +} diff --git a/tests/show-die-info.c b/tests/show-die-info.c new file mode 100644 index 00000000..d4f992f3 --- /dev/null +++ b/tests/show-die-info.c @@ -0,0 +1,475 @@ +/* Copyright (C) 1998, 1999, 2000, 2001, 2002, 2004 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <dwarf.h> +#include <inttypes.h> +#include <libelf.h> +#include <libdw.h> +#include <fcntl.h> +#include <stdio.h> +#include <string.h> +#include <unistd.h> + + +static const char *tagnames[] = +{ + [DW_TAG_array_type] = "DW_TAG_array_type", + [DW_TAG_class_type] = "DW_TAG_class_type", + [DW_TAG_entry_point] = "DW_TAG_entry_point", + [DW_TAG_enumeration_type] = "DW_TAG_enumeration_type", + [DW_TAG_formal_parameter] = "DW_TAG_formal_parameter", + [DW_TAG_imported_declaration] = "DW_TAG_imported_declaration", + [DW_TAG_label] = "DW_TAG_label", + [DW_TAG_lexical_block] = "DW_TAG_lexical_block", + [DW_TAG_member] = "DW_TAG_member", + [DW_TAG_pointer_type] = "DW_TAG_pointer_type", + [DW_TAG_reference_type] = "DW_TAG_reference_type", + [DW_TAG_compile_unit] = "DW_TAG_compile_unit", + [DW_TAG_string_type] = "DW_TAG_string_type", + [DW_TAG_structure_type] = "DW_TAG_structure_type", + [DW_TAG_subroutine_type] = "DW_TAG_subroutine_type", + [DW_TAG_typedef] = "DW_TAG_typedef", + [DW_TAG_union_type] = "DW_TAG_union_type", + [DW_TAG_unspecified_parameters] = "DW_TAG_unspecified_parameters", + [DW_TAG_variant] = "DW_TAG_variant", + [DW_TAG_common_block] = "DW_TAG_common_block", + [DW_TAG_common_inclusion] = "DW_TAG_common_inclusion", + [DW_TAG_inheritance] = "DW_TAG_inheritance", + [DW_TAG_inlined_subroutine] = "DW_TAG_inlined_subroutine", + [DW_TAG_module] = "DW_TAG_module", + [DW_TAG_ptr_to_member_type] = "DW_TAG_ptr_to_member_type", + [DW_TAG_set_type] = "DW_TAG_set_type", + [DW_TAG_subrange_type] = "DW_TAG_subrange_type", + [DW_TAG_with_stmt] = "DW_TAG_with_stmt", + [DW_TAG_access_declaration] = "DW_TAG_access_declaration", + [DW_TAG_base_type] = "DW_TAG_base_type", + [DW_TAG_catch_block] = "DW_TAG_catch_block", + [DW_TAG_const_type] = "DW_TAG_const_type", + [DW_TAG_constant] = "DW_TAG_constant", + [DW_TAG_enumerator] = "DW_TAG_enumerator", + [DW_TAG_file_type] = "DW_TAG_file_type", + [DW_TAG_friend] = "DW_TAG_friend", + [DW_TAG_namelist] = "DW_TAG_namelist", + [DW_TAG_namelist_item] = "DW_TAG_namelist_item", + [DW_TAG_packed_type] = "DW_TAG_packed_type", + [DW_TAG_subprogram] = "DW_TAG_subprogram", + [DW_TAG_template_type_param] = "DW_TAG_template_type_param", + [DW_TAG_template_value_param] = "DW_TAG_template_value_param", + [DW_TAG_thrown_type] = "DW_TAG_thrown_type", + [DW_TAG_try_block] = "DW_TAG_try_block", + [DW_TAG_variant_part] = "DW_TAG_variant_part", + [DW_TAG_variable] = "DW_TAG_variable", + [DW_TAG_volatile_type] = "DW_TAG_volatile_type" +}; +#define ntagnames (sizeof (tagnames) / sizeof (tagnames[0])) + + +const struct +{ + int code; + const char *name; +} attrs[] = +{ + { DW_AT_sibling, "sibling" }, + { DW_AT_location, "location" }, + { DW_AT_name, "name" }, + { DW_AT_ordering, "ordering" }, + { DW_AT_subscr_data, "subscr_data" }, + { DW_AT_byte_size, "byte_size" }, + { DW_AT_bit_offset, "bit_offset" }, + { DW_AT_bit_size, "bit_size" }, + { DW_AT_element_list, "element_list" }, + { DW_AT_stmt_list, "stmt_list" }, + { DW_AT_low_pc, "low_pc" }, + { DW_AT_high_pc, "high_pc" }, + { DW_AT_language, "language" }, + { DW_AT_member, "member" }, + { DW_AT_discr, "discr" }, + { DW_AT_discr_value, "discr_value" }, + { DW_AT_visibility, "visibility" }, + { DW_AT_import, "import" }, + { DW_AT_string_length, "string_length" }, + { DW_AT_common_reference, "common_reference" }, + { DW_AT_comp_dir, "comp_dir" }, + { DW_AT_const_value, "const_value" }, + { DW_AT_containing_type, "containing_type" }, + { DW_AT_default_value, "default_value" }, + { DW_AT_inline, "inline" }, + { DW_AT_is_optional, "is_optional" }, + { DW_AT_lower_bound, "lower_bound" }, + { DW_AT_producer, "producer" }, + { DW_AT_prototyped, "prototyped" }, + { DW_AT_return_addr, "return_addr" }, + { DW_AT_start_scope, "start_scope" }, + { DW_AT_stride_size, "stride_size" }, + { DW_AT_upper_bound, "upper_bound" }, + { DW_AT_abstract_origin, "abstract_origin" }, + { DW_AT_accessibility, "accessibility" }, + { DW_AT_address_class, "address_class" }, + { DW_AT_artificial, "artificial" }, + { DW_AT_base_types, "base_types" }, + { DW_AT_calling_convention, "calling_convention" }, + { DW_AT_count, "count" }, + { DW_AT_data_member_location, "data_member_location" }, + { DW_AT_decl_column, "decl_column" }, + { DW_AT_decl_file, "decl_file" }, + { DW_AT_decl_line, "decl_line" }, + { DW_AT_declaration, "declaration" }, + { DW_AT_discr_list, "discr_list" }, + { DW_AT_encoding, "encoding" }, + { DW_AT_external, "external" }, + { DW_AT_frame_base, "frame_base" }, + { DW_AT_friend, "friend" }, + { DW_AT_identifier_case, "identifier_case" }, + { DW_AT_macro_info, "macro_info" }, + { DW_AT_namelist_items, "namelist_items" }, + { DW_AT_priority, "priority" }, + { DW_AT_segment, "segment" }, + { DW_AT_specification, "specification" }, + { DW_AT_static_link, "static_link" }, + { DW_AT_type, "type" }, + { DW_AT_use_location, "use_location" }, + { DW_AT_variable_parameter, "variable_parameter" }, + { DW_AT_virtuality, "virtuality" }, + { DW_AT_vtable_elem_location, "vtable_elem_location" }, + { DW_AT_MIPS_fde, "MIPS_fde" }, + { DW_AT_MIPS_loop_begin, "MIPS_loop_begin" }, + { DW_AT_MIPS_tail_loop_begin, "MIPS_tail_loop_begin" }, + { DW_AT_MIPS_epilog_begin, "MIPS_epilog_begin" }, + { DW_AT_MIPS_loop_unroll_factor, "MIPS_loop_unroll_factor" }, + { DW_AT_MIPS_software_pipeline_depth, "MIPS_software_pipeline_depth" }, + { DW_AT_MIPS_linkage_name, "MIPS_linkage_name" }, + { DW_AT_MIPS_stride, "MIPS_stride" }, + { DW_AT_MIPS_abstract_name, "MIPS_abstract_name" }, + { DW_AT_MIPS_clone_origin, "MIPS_clone_origin" }, + { DW_AT_MIPS_has_inlines, "MIPS_has_inlines" }, + { DW_AT_MIPS_stride_byte, "MIPS_stride_byte" }, + { DW_AT_MIPS_stride_elem, "MIPS_stride_elem" }, + { DW_AT_MIPS_ptr_dopetype, "MIPS_ptr_dopetype" }, + { DW_AT_MIPS_allocatable_dopetype, "MIPS_allocatable_dopetype" }, + { DW_AT_MIPS_assumed_shape_dopetype, "MIPS_assumed_shape_dopetype" }, + { DW_AT_MIPS_assumed_size, "MIPS_assumed_size" }, + { DW_AT_sf_names, "sf_names" }, + { DW_AT_src_info, "src_info" }, + { DW_AT_mac_info, "mac_info" }, + { DW_AT_src_coords, "src_coords" }, + { DW_AT_body_begin, "body_begin" }, + { DW_AT_body_end, "body_end" } +}; +#define nattrs (sizeof (attrs) / sizeof (attrs[0])) + + +void +handle (Dwarf *dbg, Dwarf_Die *die, int n) +{ + Dwarf_Die child; + unsigned int tag; + const char *str; + char buf[30]; + const char *name; + Dwarf_Off off; + Dwarf_Off cuoff; + size_t cnt; + Dwarf_Addr addr; + int i; + + tag = dwarf_tag (die); + if (tag != DW_TAG_invalid) + { + if (tag < ntagnames) + str = tagnames[tag]; + else + { + snprintf (buf, sizeof buf, "%#x", tag); + str = buf; + } + } + else + str = "* NO TAG *"; + + name = dwarf_diename (die); + if (name == 0) + name = "* NO NAME *"; + + off = dwarf_dieoffset (die); + cuoff = dwarf_cuoffset (die); + + printf ("%*s%s\n", n * 5, "", str); + printf ("%*s Name : %s\n", n * 5, "", name); + printf ("%*s Offset : %lld\n", n * 5, "", (long long int) off); + printf ("%*s CU offset : %lld\n", n * 5, "", (long long int) cuoff); + + printf ("%*s Attrs :", n * 5, ""); + for (cnt = 0; cnt < nattrs; ++cnt) + if (dwarf_hasattr (die, attrs[cnt].code)) + printf (" %s", attrs[cnt].name); + puts (""); + + if (dwarf_hasattr (die, DW_AT_low_pc) && dwarf_lowpc (die, &addr) == 0) + { + Dwarf_Attribute attr; + Dwarf_Addr addr2; + printf ("%*s low PC : %#llx\n", + n * 5, "", (unsigned long long int) addr); + + if (dwarf_attr (die, DW_AT_low_pc, &attr) == NULL + || dwarf_formaddr (&attr, &addr2) != 0 + || addr != addr2) + puts ("************* DW_AT_low_pc verify failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_addr)) + puts ("************* DW_AT_low_pc form failed ************"); + else if (dwarf_whatform (&attr) != DW_FORM_addr) + puts ("************* DW_AT_low_pc form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_low_pc) + puts ("************* DW_AT_low_pc attr failed ************"); + } + if (dwarf_hasattr (die, DW_AT_high_pc) && dwarf_highpc (die, &addr) == 0) + { + Dwarf_Attribute attr; + Dwarf_Addr addr2; + printf ("%*s high PC : %#llx\n", + n * 5, "", (unsigned long long int) addr); + if (dwarf_attr (die, DW_AT_high_pc, &attr) == NULL + || dwarf_formaddr (&attr, &addr2) != 0 + || addr != addr2) + puts ("************* DW_AT_high_pc verify failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_addr)) + puts ("************* DW_AT_high_pc form failed ************"); + else if (dwarf_whatform (&attr) != DW_FORM_addr) + puts ("************* DW_AT_high_pc form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_high_pc) + puts ("************* DW_AT_high_pc attr failed ************"); + } + + if (dwarf_hasattr (die, DW_AT_byte_size) && (i = dwarf_bytesize (die)) != -1) + { + Dwarf_Attribute attr; + Dwarf_Word u2; + unsigned int u; + printf ("%*s byte size : %d\n", n * 5, "", i); + if (dwarf_attr (die, DW_AT_byte_size, &attr) == NULL + || dwarf_formudata (&attr, &u2) != 0 + || i != (int) u2) + puts ("************* DW_AT_byte_size verify failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_data1) + && ! dwarf_hasform (&attr, DW_FORM_data2) + && ! dwarf_hasform (&attr, DW_FORM_data4) + && ! dwarf_hasform (&attr, DW_FORM_data8) + && ! dwarf_hasform (&attr, DW_FORM_sdata) + && ! dwarf_hasform (&attr, DW_FORM_udata)) + puts ("************* DW_AT_byte_size form failed ************"); + else if ((u = dwarf_whatform (&attr)) == 0 + || (u != DW_FORM_data1 + && u != DW_FORM_data2 + && u != DW_FORM_data4 + && u != DW_FORM_data8 + && u != DW_FORM_sdata + && u != DW_FORM_udata)) + puts ("************* DW_AT_byte_size form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_byte_size) + puts ("************* DW_AT_byte_size attr failed ************"); + } + if (dwarf_hasattr (die, DW_AT_bit_size) && (i = dwarf_bitsize (die)) != -1) + { + Dwarf_Attribute attr; + Dwarf_Word u2; + unsigned int u; + printf ("%*s bit size : %d\n", n * 5, "", i); + if (dwarf_attr (die, DW_AT_bit_size, &attr) == NULL + || dwarf_formudata (&attr, &u2) != 0 + || i != (int) u2) + puts ("************* DW_AT_bit_size test failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_data1) + && ! dwarf_hasform (&attr, DW_FORM_data2) + && ! dwarf_hasform (&attr, DW_FORM_data4) + && ! dwarf_hasform (&attr, DW_FORM_data8) + && ! dwarf_hasform (&attr, DW_FORM_sdata) + && ! dwarf_hasform (&attr, DW_FORM_udata)) + puts ("************* DW_AT_bit_size form failed ************"); + else if ((u = dwarf_whatform (&attr)) == 0 + || (u != DW_FORM_data1 + && u != DW_FORM_data2 + && u != DW_FORM_data4 + && u != DW_FORM_data8 + && u != DW_FORM_sdata + && u != DW_FORM_udata)) + puts ("************* DW_AT_bit_size form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_bit_size) + puts ("************* DW_AT_bit_size attr failed ************"); + } + if (dwarf_hasattr (die, DW_AT_bit_offset) + && (i = dwarf_bitoffset (die)) != -1) + { + Dwarf_Attribute attr; + Dwarf_Word u2; + unsigned int u; + printf ("%*s bit offset: %d\n", n * 5, "", i); + if (dwarf_attr (die, DW_AT_bit_offset, &attr) == NULL + || dwarf_formudata (&attr, &u2) != 0 + || i != (int) u2) + puts ("************* DW_AT_bit_offset test failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_data1) + && ! dwarf_hasform (&attr, DW_FORM_data2) + && ! dwarf_hasform (&attr, DW_FORM_data4) + && ! dwarf_hasform (&attr, DW_FORM_data8) + && ! dwarf_hasform (&attr, DW_FORM_sdata) + && ! dwarf_hasform (&attr, DW_FORM_udata)) + puts ("************* DW_AT_bit_offset form failed ************"); + else if ((u = dwarf_whatform (&attr)) == 0 + || (u != DW_FORM_data1 + && u != DW_FORM_data2 + && u != DW_FORM_data4 + && u != DW_FORM_data8 + && u != DW_FORM_sdata + && u != DW_FORM_udata)) + puts ("************* DW_AT_bit_offset form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_bit_offset) + puts ("************* DW_AT_bit_offset attr failed ************"); + } + + if (dwarf_hasattr (die, DW_AT_language) && (i = dwarf_srclang (die)) != -1) + { + Dwarf_Attribute attr; + Dwarf_Word u2; + unsigned int u; + printf ("%*s language : %d\n", n * 5, "", i); + if (dwarf_attr (die, DW_AT_language, &attr) == NULL + || dwarf_formudata (&attr, &u2) != 0 + || i != (int) u2) + puts ("************* DW_AT_language test failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_data1) + && ! dwarf_hasform (&attr, DW_FORM_data2) + && ! dwarf_hasform (&attr, DW_FORM_data4) + && ! dwarf_hasform (&attr, DW_FORM_data8) + && ! dwarf_hasform (&attr, DW_FORM_sdata) + && ! dwarf_hasform (&attr, DW_FORM_udata)) + puts ("************* DW_AT_language form failed ************"); + else if ((u = dwarf_whatform (&attr)) == 0 + || (u != DW_FORM_data1 + && u != DW_FORM_data2 + && u != DW_FORM_data4 + && u != DW_FORM_data8 + && u != DW_FORM_sdata + && u != DW_FORM_udata)) + puts ("************* DW_AT_language form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_language) + puts ("************* DW_AT_language attr failed ************"); + } + + if (dwarf_hasattr (die, DW_AT_ordering) + && (i = dwarf_arrayorder (die)) != -1) + { + Dwarf_Attribute attr; + Dwarf_Word u2; + unsigned int u; + printf ("%*s ordering : %d\n", n * 5, "", i); + if (dwarf_attr (die, DW_AT_ordering, &attr) == NULL + || dwarf_formudata (&attr, &u2) != 0 + || i != (int) u2) + puts ("************* DW_AT_ordering test failed ************"); + else if (! dwarf_hasform (&attr, DW_FORM_data1) + && ! dwarf_hasform (&attr, DW_FORM_data2) + && ! dwarf_hasform (&attr, DW_FORM_data4) + && ! dwarf_hasform (&attr, DW_FORM_data8) + && ! dwarf_hasform (&attr, DW_FORM_sdata) + && ! dwarf_hasform (&attr, DW_FORM_udata)) + puts ("************* DW_AT_ordering failed ************"); + else if ((u = dwarf_whatform (&attr)) == 0 + || (u != DW_FORM_data1 + && u != DW_FORM_data2 + && u != DW_FORM_data4 + && u != DW_FORM_data8 + && u != DW_FORM_sdata + && u != DW_FORM_udata)) + puts ("************* DW_AT_ordering form (2) failed ************"); + else if (dwarf_whatattr (&attr) != DW_AT_ordering) + puts ("************* DW_AT_ordering attr failed ************"); + } + + if (dwarf_hasattr (die, DW_AT_comp_dir)) + { + Dwarf_Attribute attr; + if (dwarf_attr (die, DW_AT_comp_dir, &attr) == NULL + || (name = dwarf_formstring (&attr)) == NULL) + puts ("************* DW_AT_comp_dir attr failed ************"); + else + printf ("%*s directory : %s\n", n * 5, "", name); + } + + if (dwarf_hasattr (die, DW_AT_producer)) + { + Dwarf_Attribute attr; + if (dwarf_attr (die, DW_AT_producer, &attr) == NULL + || (name = dwarf_formstring (&attr)) == NULL) + puts ("************* DW_AT_comp_dir attr failed ************"); + else + printf ("%*s producer : %s\n", n * 5, "", name); + } + + if (dwarf_haschildren (die) != 0 && dwarf_child (die, &child) == 0) + handle (dbg, &child, n + 1); + if (dwarf_siblingof (die, die) == 0) + handle (dbg, die, n); +} + + +int +main (int argc, char *argv[]) +{ + int cnt; + + for (cnt = 1; cnt < argc; ++cnt) + { + int fd = open (argv[cnt], O_RDONLY); + Dwarf *dbg; + + printf ("file: %s\n", basename (argv[cnt])); + + dbg = dwarf_begin (fd, DWARF_C_READ); + if (dbg == NULL) + { + printf ("%s not usable\n", argv[cnt]); + close (fd); + continue; + } + + Dwarf_Off off = 0; + Dwarf_Off old_off = 0; + size_t hsize; + Dwarf_Off abbrev; + uint8_t addresssize; + uint8_t offsetsize; + while (dwarf_nextcu (dbg, off, &off, &hsize, &abbrev, &addresssize, + &offsetsize) == 0) + { + printf ("New CU: off = %llu, hsize = %zu, ab = %llu, as = %" PRIu8 + ", os = %" PRIu8 "\n", + (unsigned long long int) old_off, hsize, + (unsigned long long int) abbrev, addresssize, + offsetsize); + + Dwarf_Die die; + if (dwarf_offdie (dbg, old_off + hsize, &die) != NULL) + handle (dbg, &die, 1); + + old_off = off; + } + + dwarf_end (dbg); + close (fd); + } + + return 0; +} diff --git a/tests/showptable.c b/tests/showptable.c new file mode 100644 index 00000000..afc1f26d --- /dev/null +++ b/tests/showptable.c @@ -0,0 +1,129 @@ +/* Copyright (C) 1998, 1999, 2000, 2001, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 1998. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <config.h> + +#include <errno.h> +#include <fcntl.h> +#include <gelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +int +main (int argc, char *argv[]) +{ + Elf *elf; + int fd; + GElf_Ehdr ehdr; + int cnt; + + fd = open (argv[1], O_RDONLY); + if (fd == -1) + { + printf ("cannot open \"%s\": %s\n", argv[1], strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf = elf_begin (fd, ELF_C_READ, NULL); + if (elf == NULL) + { + printf ("cannot open ELF file: %s\n", elf_errmsg (-1)); + exit (1); + } + + if (elf_kind (elf) != ELF_K_ELF) + { + printf ("\"%s\" is not an ELF file\n", argv[1]); + exit (1); + } + + if (gelf_getehdr (elf, &ehdr) == NULL) + { + printf ("cannot get the ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + printf ("idx type %*s %*s %*s %*s %*s align flags\n", + gelf_getclass (elf) == ELFCLASS32 ? 9 : 17, "offset", + gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, "vaddr", + gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, "paddr", + gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, "filesz", + gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, "memsz"); + + for (cnt = 0; cnt < ehdr.e_phnum; ++cnt) + { + static const char *typenames[] = + { + [PT_NULL] = "NULL", + [PT_LOAD] = "LOAD", + [PT_DYNAMIC] = "DYNAMIC", + [PT_INTERP] = "INTERP", + [PT_NOTE] = "NOTE", + [PT_SHLIB] = "SHLIB", + [PT_PHDR] = "PHDR" + }; + GElf_Phdr mem; + GElf_Phdr *phdr = gelf_getphdr (elf, cnt, &mem); + char buf[19]; + const char *p_type = typenames[phdr->p_type]; + + /* If we don't know the name of the type we use the number value. */ + if (phdr->p_type >= PT_NUM) + { + snprintf (buf, sizeof (buf), "%x", phdr->p_type); + p_type = buf; + } + + printf ("%3d %-7s %#0*llx %#0*llx %#0*llx %#0*llx %#0*llx %#6llx ", + cnt, p_type, + gelf_getclass (elf) == ELFCLASS32 ? 9 : 17, + (unsigned long long int) phdr->p_offset, + gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, + (unsigned long long int) phdr->p_vaddr, + gelf_getclass (elf) == ELFCLASS32 ? 10 : 18, + (unsigned long long int) phdr->p_paddr, + gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, + (unsigned long long int) phdr->p_filesz, + gelf_getclass (elf) == ELFCLASS32 ? 9 : 12, + (unsigned long long int) phdr->p_memsz, + (unsigned long long int) phdr->p_align); + + putc_unlocked ((phdr->p_flags & PF_X) ? 'X' : ' ', stdout); + putc_unlocked ((phdr->p_flags & PF_W) ? 'W' : ' ', stdout); + putc_unlocked ((phdr->p_flags & PF_R) ? 'R' : ' ', stdout); + + putc_unlocked ('\n', stdout); + + if (phdr->p_type == PT_INTERP) + { + /* We can show the user the name of the interpreter. */ + size_t maxsize; + char *filedata = elf_rawfile (elf, &maxsize); + + if (filedata != NULL && phdr->p_offset < maxsize) + printf ("\t[Requesting program interpreter: %s]\n", + filedata + phdr->p_offset); + } + } + + if (elf_end (elf) != 0) + { + printf ("error while freeing ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + return 0; +} diff --git a/tests/test-nlist.c b/tests/test-nlist.c new file mode 100644 index 00000000..40eb320a --- /dev/null +++ b/tests/test-nlist.c @@ -0,0 +1,79 @@ +/* Copyright (C) 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2000. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#include <nlist.h> +#include <stdio.h> +#include <stdlib.h> + + +int var = 1; + +int bss; + + +int +foo (int a) +{ + return a; +} + +int +main (int argc, char *argv[]) +{ + struct nlist nl[6] = + { + [0] = { .n_name = "var" }, + [1] = { .n_name = "bss" }, + [2] = { .n_name = "main" }, + [3] = { .n_name = "foo" }, + [4] = { .n_name = "not-there" }, + [5] = { .n_name = NULL }, + }; + int cnt; + int result = 0; + + if (nlist (".libs/test-nlist", nl) != 0 + && nlist ("./test-nlist", nl) != 0) + { + puts ("nlist failed"); + exit (1); + } + + for (cnt = 0; nl[cnt].n_name != NULL; ++cnt) + { + if (argc > 1) + /* For debugging. */ + printf ("nl[%d].n_name = \"%s\"\n" + "nl[%d].n_value = %ld\n" + "nl[%d].n_scnum = %d\n" + "nl[%d].n_type = %u\n" + "nl[%d].n_sclass = %d\n" + "nl[%d].n_numaux = %d\n\n", + cnt, nl[cnt].n_name, + cnt, nl[cnt].n_value, + cnt, nl[cnt].n_scnum, + cnt, nl[cnt].n_type, + cnt, nl[cnt].n_sclass, + cnt, nl[cnt].n_numaux); + + if ((cnt != 4 && nl[cnt].n_value == 0 && nl[cnt].n_scnum == 0 + && nl[cnt].n_type == 0 && nl[cnt].n_sclass == 0 + && nl[cnt].n_numaux == 0) + || (cnt == 4 && (nl[cnt].n_value != 0 || nl[cnt].n_scnum != 0 + || nl[cnt].n_type != 0 || nl[cnt].n_sclass != 0 + || nl[cnt].n_numaux != 0))) + result = 1; + } + + return foo (result); +} diff --git a/tests/testfile.bz2 b/tests/testfile.bz2 Binary files differnew file mode 100644 index 00000000..bde9b126 --- /dev/null +++ b/tests/testfile.bz2 diff --git a/tests/testfile10.bz2 b/tests/testfile10.bz2 Binary files differnew file mode 100644 index 00000000..e9dd5046 --- /dev/null +++ b/tests/testfile10.bz2 diff --git a/tests/testfile11.bz2 b/tests/testfile11.bz2 Binary files differnew file mode 100644 index 00000000..d094b848 --- /dev/null +++ b/tests/testfile11.bz2 diff --git a/tests/testfile12.bz2 b/tests/testfile12.bz2 Binary files differnew file mode 100644 index 00000000..8bb5ad33 --- /dev/null +++ b/tests/testfile12.bz2 diff --git a/tests/testfile13.bz2 b/tests/testfile13.bz2 Binary files differnew file mode 100644 index 00000000..3b0bcb93 --- /dev/null +++ b/tests/testfile13.bz2 diff --git a/tests/testfile2.bz2 b/tests/testfile2.bz2 Binary files differnew file mode 100644 index 00000000..0771311b --- /dev/null +++ b/tests/testfile2.bz2 diff --git a/tests/testfile3.bz2 b/tests/testfile3.bz2 Binary files differnew file mode 100644 index 00000000..30a456c7 --- /dev/null +++ b/tests/testfile3.bz2 diff --git a/tests/testfile4.bz2 b/tests/testfile4.bz2 Binary files differnew file mode 100644 index 00000000..25b25dfc --- /dev/null +++ b/tests/testfile4.bz2 diff --git a/tests/testfile5.bz2 b/tests/testfile5.bz2 Binary files differnew file mode 100644 index 00000000..247313e0 --- /dev/null +++ b/tests/testfile5.bz2 diff --git a/tests/testfile6.bz2 b/tests/testfile6.bz2 Binary files differnew file mode 100644 index 00000000..fd376b27 --- /dev/null +++ b/tests/testfile6.bz2 diff --git a/tests/testfile7.bz2 b/tests/testfile7.bz2 Binary files differnew file mode 100644 index 00000000..73452bbb --- /dev/null +++ b/tests/testfile7.bz2 diff --git a/tests/testfile8.bz2 b/tests/testfile8.bz2 Binary files differnew file mode 100644 index 00000000..1ff4994c --- /dev/null +++ b/tests/testfile8.bz2 diff --git a/tests/testfile9.bz2 b/tests/testfile9.bz2 Binary files differnew file mode 100644 index 00000000..40454bce --- /dev/null +++ b/tests/testfile9.bz2 diff --git a/tests/update1.c b/tests/update1.c new file mode 100644 index 00000000..decb09ba --- /dev/null +++ b/tests/update1.c @@ -0,0 +1,120 @@ +/* Test program for elf_update function. + Copyright (C) 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2000. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +int +main (int argc, char *argv[]) +{ + const char *fname = "xxx"; + int fd; + Elf *elf; + Elf32_Ehdr *ehdr; + int i; + + fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666); + if (fd == -1) + { + printf ("cannot open `%s': %s\n", fname, strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Create an ELF header. */ + ehdr = elf32_newehdr (elf); + if (ehdr == NULL) + { + printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + ehdr->e_ident[0] = 42; + ehdr->e_ident[4] = 1; + ehdr->e_ident[5] = 1; + ehdr->e_ident[6] = 2; + ehdr->e_ident[9] = 2; + ehdr->e_version = 1; + ehdr->e_ehsize = 1; + + /* Write out the file. */ + if (elf_update (elf, ELF_C_WRITE) < 0) + { + printf ("failure in elf_update: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Create an ELF header. */ + ehdr = elf32_newehdr (elf); + if (ehdr == NULL) + { + printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + if (elf_end (elf) != 0) + { + printf ("failure in elf_end: %s\n", elf_errmsg (-1)); + exit (1); + } + + return 0; +} diff --git a/tests/update2.c b/tests/update2.c new file mode 100644 index 00000000..c595fba7 --- /dev/null +++ b/tests/update2.c @@ -0,0 +1,143 @@ +/* Test program for elf_update function. + Copyright (C) 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2000. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + + +int +main (int argc, char *argv[]) +{ + const char *fname = "xxx"; + int fd; + Elf *elf; + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdr; + int i; + + fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666); + if (fd == -1) + { + printf ("cannot open `%s': %s\n", fname, strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Create an ELF header. */ + ehdr = elf32_newehdr (elf); + if (ehdr == NULL) + { + printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + ehdr->e_ident[0] = 42; + ehdr->e_ident[4] = 1; + ehdr->e_ident[5] = 1; + ehdr->e_ident[6] = 2; + ehdr->e_type = ET_EXEC; + ehdr->e_version = 1; + ehdr->e_ehsize = 1; + elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY); + + /* Create the program header. */ + phdr = elf32_newphdr (elf, 1); + if (phdr == NULL) + { + printf ("cannot create program header: %s\n", elf_errmsg (-1)); + exit (1); + } + + phdr[0].p_type = PT_PHDR; + elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY); + + /* Let the library compute the internal structure information. */ + if (elf_update (elf, ELF_C_NULL) < 0) + { + printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1)); + exit (1); + } + + ehdr = elf32_getehdr (elf); + + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_vaddr = ehdr->e_phoff; + phdr[0].p_paddr = ehdr->e_phoff; + phdr[0].p_flags = PF_R | PF_X; + phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_align = sizeof (Elf32_Word); + + /* Write out the file. */ + if (elf_update (elf, ELF_C_WRITE) < 0) + { + printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + if (elf_end (elf) != 0) + { + printf ("failure in elf_end: %s\n", elf_errmsg (-1)); + exit (1); + } + + return 0; +} diff --git a/tests/update3.c b/tests/update3.c new file mode 100644 index 00000000..06bc8ff6 --- /dev/null +++ b/tests/update3.c @@ -0,0 +1,198 @@ +/* Test program for elf_update function. + Copyright (C) 2000, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2000. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <libebl.h> + + +int +main (int argc, char *argv[]) +{ + const char *fname = "xxx"; + int fd; + Elf *elf; + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdr; + Elf_Scn *scn; + Elf32_Shdr *shdr; + Elf_Data *data; + struct Ebl_Strtab *shst; + struct Ebl_Strent *shstrtabse; + int i; + + fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666); + if (fd == -1) + { + printf ("cannot open `%s': %s\n", fname, strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf_fill (0x42); + + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Create an ELF header. */ + ehdr = elf32_newehdr (elf); + if (ehdr == NULL) + { + printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + ehdr->e_ident[0] = 42; + ehdr->e_ident[4] = 1; + ehdr->e_ident[5] = 1; + ehdr->e_ident[6] = 2; + ehdr->e_type = ET_EXEC; + ehdr->e_version = 1; + ehdr->e_ehsize = 1; + elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY); + + /* Create the program header. */ + phdr = elf32_newphdr (elf, 1); + if (phdr == NULL) + { + printf ("cannot create program header: %s\n", elf_errmsg (-1)); + exit (1); + } + + phdr[0].p_type = PT_PHDR; + elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY); + + shst = ebl_strtabinit (true); + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + + shstrtabse = ebl_strtabadd (shst, ".shstrtab", 0); + + shdr->sh_type = SHT_STRTAB; + shdr->sh_flags = 0; + shdr->sh_addr = 0; + shdr->sh_link = SHN_UNDEF; + shdr->sh_info = SHN_UNDEF; + shdr->sh_addralign = 1; + shdr->sh_entsize = 0; + + /* We have to store the section index in the ELF header. */ + ehdr->e_shstrndx = elf_ndxscn (scn); + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* No more sections, finalize the section header string table. */ + ebl_strtabfinalize (shst, data); + + shdr->sh_name = ebl_strtaboffset (shstrtabse); + + /* Let the library compute the internal structure information. */ + if (elf_update (elf, ELF_C_NULL) < 0) + { + printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1)); + exit (1); + } + + ehdr = elf32_getehdr (elf); + + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_vaddr = ehdr->e_phoff; + phdr[0].p_paddr = ehdr->e_phoff; + phdr[0].p_flags = PF_R | PF_X; + phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_align = sizeof (Elf32_Word); + + /* Write out the file. */ + if (elf_update (elf, ELF_C_WRITE) < 0) + { + printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1)); + exit (1); + } + + /* We don't need the string table anymore. */ + ebl_strtabfree (shst); + + /* And the data allocated in the .shstrtab section. */ + free (data->d_buf); + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + if (elf_end (elf) != 0) + { + printf ("failure in elf_end: %s\n", elf_errmsg (-1)); + exit (1); + } + + return 0; +} diff --git a/tests/update4.c b/tests/update4.c new file mode 100644 index 00000000..17ef4702 --- /dev/null +++ b/tests/update4.c @@ -0,0 +1,353 @@ +/* Test program for elf_update function. + Copyright (C) 2000, 2001, 2002 Red Hat, Inc. + Written by Ulrich Drepper <drepper@redhat.com>, 2000. + + This program is Open Source software; you can redistribute it and/or + modify it under the terms of the Open Software License version 1.0 as + published by the Open Source Initiative. + + You should have received a copy of the Open Software License along + with this program; if not, you may obtain a copy of the Open Software + License version 1.0 from http://www.opensource.org/licenses/osl.php or + by writing the Open Source Initiative c/o Lawrence Rosen, Esq., + 3001 King Ranch Road, Ukiah, CA 95482. */ + +#ifdef HAVE_CONFIG_H +# include <config.h> +#endif + +#include <errno.h> +#include <fcntl.h> +#include <libelf.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <unistd.h> + +#include <libebl.h> + + +int +main (int argc, char *argv[]) +{ + const char fname[] = "xxx"; + int fd; + Elf *elf; + Elf32_Ehdr *ehdr; + Elf32_Phdr *phdr; + Elf_Scn *scn; + Elf32_Shdr *shdr; + Elf_Data *data; + struct Ebl_Strtab *shst; + struct Ebl_Strent *firstse; + struct Ebl_Strent *secondse; + struct Ebl_Strent *thirdse; + struct Ebl_Strent *fourthse; + struct Ebl_Strent *shstrtabse; + int i; + + fd = open (fname, O_RDWR | O_CREAT | O_TRUNC, 0666); + if (fd == -1) + { + printf ("cannot open `%s': %s\n", fname, strerror (errno)); + exit (1); + } + + elf_version (EV_CURRENT); + + elf_fill (0x42); + + elf = elf_begin (fd, ELF_C_WRITE, NULL); + if (elf == NULL) + { + printf ("cannot create ELF descriptor: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Create an ELF header. */ + ehdr = elf32_newehdr (elf); + if (ehdr == NULL) + { + printf ("cannot create ELF header: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + ehdr->e_ident[0] = 42; + ehdr->e_ident[4] = 1; + ehdr->e_ident[5] = 1; + ehdr->e_ident[6] = 2; + ehdr->e_type = ET_EXEC; + ehdr->e_version = 1; + ehdr->e_ehsize = 1; + elf_flagehdr (elf, ELF_C_SET, ELF_F_DIRTY); + + /* Create the program header. */ + phdr = elf32_newphdr (elf, 1); + if (phdr == NULL) + { + printf ("cannot create program header: %s\n", elf_errmsg (-1)); + exit (1); + } + + phdr[0].p_type = PT_PHDR; + elf_flagphdr (elf, ELF_C_SET, ELF_F_DIRTY); + + shst = ebl_strtabinit (true); + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create first section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for first section: %s\n", elf_errmsg (-1)); + exit (1); + } + + firstse = ebl_strtabadd (shst, ".first", 0); + + shdr->sh_type = SHT_PROGBITS; + shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR; + shdr->sh_addr = 0; + shdr->sh_link = 0; + shdr->sh_info = 0; + shdr->sh_entsize = 1; + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data first section: %s\n", elf_errmsg (-1)); + exit (1); + } + + data->d_buf = "hello"; + data->d_type = ELF_T_BYTE; + data->d_version = EV_CURRENT; + data->d_size = 5; + data->d_align = 16; + + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create second section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for second section: %s\n", elf_errmsg (-1)); + exit (1); + } + + secondse = ebl_strtabadd (shst, ".second", 0); + + shdr->sh_type = SHT_PROGBITS; + shdr->sh_flags = SHF_ALLOC | SHF_WRITE; + shdr->sh_addr = 0; + shdr->sh_link = 0; + shdr->sh_info = 0; + shdr->sh_entsize = 1; + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data second section: %s\n", elf_errmsg (-1)); + exit (1); + } + + data->d_buf = "world"; + data->d_type = ELF_T_BYTE; + data->d_version = EV_CURRENT; + data->d_size = 5; + data->d_align = 16; + + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create third section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for third section: %s\n", elf_errmsg (-1)); + exit (1); + } + + thirdse = ebl_strtabadd (shst, ".third", 0); + + shdr->sh_type = SHT_PROGBITS; + shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR; + shdr->sh_addr = 0; + shdr->sh_link = 0; + shdr->sh_info = 0; + shdr->sh_entsize = 1; + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data third section: %s\n", elf_errmsg (-1)); + exit (1); + } + + data->d_buf = "!!!!!"; + data->d_type = ELF_T_BYTE; + data->d_version = EV_CURRENT; + data->d_size = 5; + data->d_align = 16; + + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create fourth section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for fourth section: %s\n", elf_errmsg (-1)); + exit (1); + } + + fourthse = ebl_strtabadd (shst, ".fourth", 0); + + shdr->sh_type = SHT_NOBITS; + shdr->sh_flags = SHF_ALLOC | SHF_EXECINSTR; + shdr->sh_addr = 0; + shdr->sh_link = 0; + shdr->sh_info = 0; + shdr->sh_entsize = 1; + shdr->sh_size = 100; + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data fourth section: %s\n", elf_errmsg (-1)); + exit (1); + } + + data->d_buf = NULL; + data->d_type = ELF_T_BYTE; + data->d_version = EV_CURRENT; + data->d_size = 100; + data->d_align = 16; + + + scn = elf_newscn (elf); + if (scn == NULL) + { + printf ("cannot create SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + shdr = elf32_getshdr (scn); + if (shdr == NULL) + { + printf ("cannot get header for SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + + shstrtabse = ebl_strtabadd (shst, ".shstrtab", 0); + + shdr->sh_type = SHT_STRTAB; + shdr->sh_flags = 0; + shdr->sh_addr = 0; + shdr->sh_link = SHN_UNDEF; + shdr->sh_info = SHN_UNDEF; + shdr->sh_entsize = 1; + + /* We have to store the section index in the ELF header. */ + ehdr->e_shstrndx = elf_ndxscn (scn); + + data = elf_newdata (scn); + if (data == NULL) + { + printf ("cannot create data SHSTRTAB section: %s\n", elf_errmsg (-1)); + exit (1); + } + + /* No more sections, finalize the section header string table. */ + ebl_strtabfinalize (shst, data); + + elf32_getshdr (elf_getscn (elf, 1))->sh_name = ebl_strtaboffset (firstse); + elf32_getshdr (elf_getscn (elf, 2))->sh_name = ebl_strtaboffset (secondse); + elf32_getshdr (elf_getscn (elf, 3))->sh_name = ebl_strtaboffset (thirdse); + elf32_getshdr (elf_getscn (elf, 4))->sh_name = ebl_strtaboffset (fourthse); + shdr->sh_name = ebl_strtaboffset (shstrtabse); + + /* Let the library compute the internal structure information. */ + if (elf_update (elf, ELF_C_NULL) < 0) + { + printf ("failure in elf_update(NULL): %s\n", elf_errmsg (-1)); + exit (1); + } + + ehdr = elf32_getehdr (elf); + + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_offset = ehdr->e_phoff; + phdr[0].p_vaddr = ehdr->e_phoff; + phdr[0].p_paddr = ehdr->e_phoff; + phdr[0].p_flags = PF_R | PF_X; + phdr[0].p_filesz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_memsz = ehdr->e_phnum * elf32_fsize (ELF_T_PHDR, 1, EV_CURRENT); + phdr[0].p_align = sizeof (Elf32_Word); + + /* Write out the file. */ + if (elf_update (elf, ELF_C_WRITE) < 0) + { + printf ("failure in elf_update(WRITE): %s\n", elf_errmsg (-1)); + exit (1); + } + + /* We don't need the string table anymore. */ + ebl_strtabfree (shst); + + /* And the data allocated in the .shstrtab section. */ + free (data->d_buf); + + /* Print the ELF header values. */ + if (argc > 1) + { + for (i = 0; i < EI_NIDENT; ++i) + printf (" %02x", ehdr->e_ident[i]); + printf ("\ +\ntype = %hu\nmachine = %hu\nversion = %u\nentry = %u\nphoff = %u\n" + "shoff = %u\nflags = %u\nehsize = %hu\nphentsize = %hu\n" + "phnum = %hu\nshentsize = %hu\nshnum = %hu\nshstrndx = %hu\n", + ehdr->e_type, ehdr->e_machine, ehdr->e_version, ehdr->e_entry, + ehdr->e_phoff, ehdr->e_shoff, ehdr->e_flags, ehdr->e_ehsize, + ehdr->e_phentsize, ehdr->e_phnum, ehdr->e_shentsize, + ehdr->e_shnum, ehdr->e_shstrndx); + } + + if (elf_end (elf) != 0) + { + printf ("failure in elf_end: %s\n", elf_errmsg (-1)); + exit (1); + } + + unlink (fname); + + return 0; +} |