diff options
Diffstat (limited to 'test')
63 files changed, 484 insertions, 229 deletions
diff --git a/test/ar/Makefile b/test/ar/Makefile index a62db09d9320f..d767a3934430f 100644 --- a/test/ar/Makefile +++ b/test/ar/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile 2141 2011-11-10 15:03:40Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ TOP= ../.. AR= ${TOP}/ar/ar @@ -17,4 +17,4 @@ clobber: clean SUBDIR= plugin -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/ar/plugin/Makefile b/test/ar/plugin/Makefile index 58e00fd1b2def..36e33a35687ce 100644 --- a/test/ar/plugin/Makefile +++ b/test/ar/plugin/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile 2080 2011-10-27 04:23:24Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ PLUGINS= ardiff teraser @@ -9,7 +9,7 @@ ${PLUGINS}: ${MAKE} -f Makefile.${plugin} .endfor -clean depend: +clean cleandepend depend: .for plugin in ${PLUGINS} ${MAKE} -f Makefile.${plugin} ${.TARGET} .endfor diff --git a/test/ar/plugin/Makefile.ardiff b/test/ar/plugin/Makefile.ardiff index 1558cfe6065cd..ec702c2ae5858 100644 --- a/test/ar/plugin/Makefile.ardiff +++ b/test/ar/plugin/Makefile.ardiff @@ -1,9 +1,7 @@ -# $Id: Makefile.ardiff 2096 2011-11-01 04:42:04Z jkoshy $ +# $Id: Makefile.ardiff 3120 2014-12-21 05:45:51Z kaiwang27 $ TOP= ../../.. -.include "${TOP}/mk/elftoolchain.os.mk" - PROG= ardiff NOMAN= noman diff --git a/test/ar/plugin/ardiff.c b/test/ar/plugin/ardiff.c index e54f6a9f6cdc0..907d1ea80da9f 100644 --- a/test/ar/plugin/ardiff.c +++ b/test/ar/plugin/ardiff.c @@ -12,7 +12,7 @@ * By default, it compares nothing and consider the test "not ok" * iff it encounters errors while reading archive. * - * $Id: ardiff.c 2142 2011-11-10 15:29:59Z jkoshy $ + * $Id: ardiff.c 3102 2014-10-29 21:09:01Z jkoshy $ */ #include <archive.h> @@ -93,9 +93,8 @@ main(int argc, char **argv) /* Open file 1 */ a1 = archive_read_new(); - archive_read_support_compression_none(a1); archive_read_support_format_ar(a1); - if (archive_read_open_file(a1, argv[0], + if (archive_read_open_filename(a1, argv[0], 1024*10)) { warnx("%s", archive_error_string(a1)); filediff(tc, "archive open failed", NULL); @@ -103,9 +102,8 @@ main(int argc, char **argv) /* Open file 2 */ a2 = archive_read_new(); - archive_read_support_compression_none(a2); archive_read_support_format_ar(a2); - if (archive_read_open_file(a2, argv[1], + if (archive_read_open_filename(a2, argv[1], 1024*10)) { warnx("%s", archive_error_string(a2)); filediff(tc, "archive open failed", NULL); @@ -233,10 +231,11 @@ static void incct(const char *pathname) { FILE *fp; - char buf[10], *_buf; + char buf[10]; if ((fp = fopen(pathname, "r")) != NULL) { - _buf = fgets(buf, 10, fp); + if (fgets(buf, 10, fp) != buf) + perror("fgets"); snprintf(buf, 10, "%d\n", atoi(buf) + 1); fclose(fp); } diff --git a/test/ar/plugin/teraser.c b/test/ar/plugin/teraser.c index 59d587f7f048d..d16752e7cefb3 100644 --- a/test/ar/plugin/teraser.c +++ b/test/ar/plugin/teraser.c @@ -2,7 +2,7 @@ * make it easy to `diff'. (option -e) * 2. Check the sanity of timestamp. (option -c) * - * $Id: teraser.c 2142 2011-11-10 15:29:59Z jkoshy $ + * $Id: teraser.c 3102 2014-10-29 21:09:01Z jkoshy $ */ #include <errno.h> @@ -28,7 +28,7 @@ main(int argc, char **argv) char opt; char checktime; char erasetime; - char buf[TSLEN + 1], *_buf; + char buf[TSLEN + 1]; char *tc; int fd; int ts; @@ -85,7 +85,8 @@ main(int argc, char **argv) if (ts <= now && ts >= now - TDELAY) { fprintf(stderr, "%s - timestamp ok\n", tc); if ((ps = fopen(PASSED, "r")) != NULL) { - _buf = fgets(buf, TSLEN, ps); + if (fgets(buf, TSLEN, ps) != buf) + perror("fgets"); snprintf(buf, TSLEN, "%d\n", atoi(buf) + 1); fclose(ps); @@ -98,7 +99,8 @@ main(int argc, char **argv) fprintf(stderr, "%s - timestamp not ok\n", tc); } if ((ct = fopen(COUNTER, "r")) != NULL) { - _buf = fgets(buf, TSLEN, ct); + if (fgets(buf, TSLEN, ct) != buf) + perror("fgets"); snprintf(buf, TSLEN, "%d\n", atoi(buf) + 1); fclose(ct); } diff --git a/test/elfcopy/Makefile b/test/elfcopy/Makefile index f1302f1339795..5114a68e7b2fe 100644 --- a/test/elfcopy/Makefile +++ b/test/elfcopy/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile 2141 2011-11-10 15:03:40Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ TOP= ../.. @@ -18,4 +18,4 @@ clobber: clean SUBDIR= plugin -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/elfcopy/plugin/Makefile b/test/elfcopy/plugin/Makefile index a72fbfe7d371e..36e33a35687ce 100644 --- a/test/elfcopy/plugin/Makefile +++ b/test/elfcopy/plugin/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile 2082 2011-10-27 04:38:32Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ PLUGINS= ardiff teraser @@ -9,7 +9,7 @@ ${PLUGINS}: ${MAKE} -f Makefile.${plugin} .endfor -clean depend: +clean cleandepend depend: .for plugin in ${PLUGINS} ${MAKE} -f Makefile.${plugin} ${.TARGET} .endfor diff --git a/test/elfcopy/plugin/Makefile.ardiff b/test/elfcopy/plugin/Makefile.ardiff index 7f371a7a975c1..a7baa0a0292b4 100644 --- a/test/elfcopy/plugin/Makefile.ardiff +++ b/test/elfcopy/plugin/Makefile.ardiff @@ -1,9 +1,7 @@ -# $Id: Makefile.ardiff 2096 2011-11-01 04:42:04Z jkoshy $ +# $Id: Makefile.ardiff 3121 2014-12-21 05:46:01Z kaiwang27 $ TOP= ../../.. -.include "${TOP}/mk/elftoolchain.os.mk" - PROG= ardiff NOMAN= diff --git a/test/elfcopy/plugin/ardiff.c b/test/elfcopy/plugin/ardiff.c index e54f6a9f6cdc0..907d1ea80da9f 100644 --- a/test/elfcopy/plugin/ardiff.c +++ b/test/elfcopy/plugin/ardiff.c @@ -12,7 +12,7 @@ * By default, it compares nothing and consider the test "not ok" * iff it encounters errors while reading archive. * - * $Id: ardiff.c 2142 2011-11-10 15:29:59Z jkoshy $ + * $Id: ardiff.c 3102 2014-10-29 21:09:01Z jkoshy $ */ #include <archive.h> @@ -93,9 +93,8 @@ main(int argc, char **argv) /* Open file 1 */ a1 = archive_read_new(); - archive_read_support_compression_none(a1); archive_read_support_format_ar(a1); - if (archive_read_open_file(a1, argv[0], + if (archive_read_open_filename(a1, argv[0], 1024*10)) { warnx("%s", archive_error_string(a1)); filediff(tc, "archive open failed", NULL); @@ -103,9 +102,8 @@ main(int argc, char **argv) /* Open file 2 */ a2 = archive_read_new(); - archive_read_support_compression_none(a2); archive_read_support_format_ar(a2); - if (archive_read_open_file(a2, argv[1], + if (archive_read_open_filename(a2, argv[1], 1024*10)) { warnx("%s", archive_error_string(a2)); filediff(tc, "archive open failed", NULL); @@ -233,10 +231,11 @@ static void incct(const char *pathname) { FILE *fp; - char buf[10], *_buf; + char buf[10]; if ((fp = fopen(pathname, "r")) != NULL) { - _buf = fgets(buf, 10, fp); + if (fgets(buf, 10, fp) != buf) + perror("fgets"); snprintf(buf, 10, "%d\n", atoi(buf) + 1); fclose(fp); } diff --git a/test/elfcopy/plugin/teraser.c b/test/elfcopy/plugin/teraser.c index 59d587f7f048d..0deb7cc906301 100644 --- a/test/elfcopy/plugin/teraser.c +++ b/test/elfcopy/plugin/teraser.c @@ -2,7 +2,7 @@ * make it easy to `diff'. (option -e) * 2. Check the sanity of timestamp. (option -c) * - * $Id: teraser.c 2142 2011-11-10 15:29:59Z jkoshy $ + * $Id: teraser.c 3102 2014-10-29 21:09:01Z jkoshy $ */ #include <errno.h> @@ -28,7 +28,7 @@ main(int argc, char **argv) char opt; char checktime; char erasetime; - char buf[TSLEN + 1], *_buf; + char buf[TSLEN + 1]; char *tc; int fd; int ts; @@ -85,7 +85,8 @@ main(int argc, char **argv) if (ts <= now && ts >= now - TDELAY) { fprintf(stderr, "%s - timestamp ok\n", tc); if ((ps = fopen(PASSED, "r")) != NULL) { - _buf = fgets(buf, TSLEN, ps); + if (fgets(buf, TSLEN, ps) != buf) + perror("fgets"); snprintf(buf, TSLEN, "%d\n", atoi(buf) + 1); fclose(ps); @@ -98,7 +99,8 @@ main(int argc, char **argv) fprintf(stderr, "%s - timestamp not ok\n", tc); } if ((ct = fopen(COUNTER, "r")) != NULL) { - _buf = fgets(buf, TSLEN, ct); + if (fgets(buf, TSLEN, ct) != NULL) + perror("fgets"); snprintf(buf, TSLEN, "%d\n", atoi(buf) + 1); fclose(ct); } diff --git a/test/elfcopy/tc/strip-empty-1/in/strip-empty-1.in.shar b/test/elfcopy/tc/strip-empty-1/in/strip-empty-1.in.shar new file mode 100644 index 0000000000000..6ff3cf214cc27 --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/in/strip-empty-1.in.shar @@ -0,0 +1,32 @@ +# This is a shell archive. Save it in a file, remove anything before +# this line, and then unpack it by entering "sh file". Note, it may +# create directories; files and directories will be owned by you and +# have default permissions. +# +# This archive contains: +# +# empty.o.uu +# +echo x - empty.o.uu +sed 's/^X//' >empty.o.uu << '446fa33c5b702a1d1fbfe3ec7a501a1a' +Xbegin 644 empty.o +XM?T5,1@(!`0D```````````$`/@`!`````````````````````````'`````` +XM`````````$```````$``!P`$```N<WEM=&%B`"YS=')T86(`+G-H<W1R=&%B +XM`"YT97AT`"YD871A`"YB<W,````````````````````````````````````` +XM```````````````````````````````````````````````````````;```` +XM`0````8```````````````````!````````````````````````````````$ +XM````````````````````(0````$````#````````````````````0``````` +XM````````````````````````!````````````````````"<````(`````P`` +XM`````````````````$````````````````````````````````0````````` +XM```````````1`````P````````````````````````!``````````"P````` +XM```````````````!`````````````````````0````(````````````````` +XM````````,`(```````!@``````````8````$````"``````````8```````` +XM``D````#`````````````````````````)`"`````````0`````````````` +XM``````$````````````````````````````````````````````````````` +XM`````P`!`````````````````````````````P`"```````````````````` +X;`````````P`#```````````````````````` +X` +Xend +446fa33c5b702a1d1fbfe3ec7a501a1a +exit + diff --git a/test/elfcopy/tc/strip-empty-1/out/strip-empty-1.out.shar b/test/elfcopy/tc/strip-empty-1/out/strip-empty-1.out.shar new file mode 100644 index 0000000000000..fc7063cd0e267 --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/out/strip-empty-1.out.shar @@ -0,0 +1,22 @@ +# This is a shell archive. Save it in a file, remove anything before +# this line, and then unpack it by entering "sh file". Note, it may +# create directories; files and directories will be owned by you and +# have default permissions. +# +# This archive contains: +# +# empty.o.uu +# +echo x - empty.o.uu +sed 's/^X//' >empty.o.uu << '446fa33c5b702a1d1fbfe3ec7a501a1a' +Xbegin 644 empty.o +XM?T5,1@(!`0D```````````$`/@`!`````````````````````````%`````` +XM`````````$```````$```@`!```N<VAS=')T86(````````````````````` +XM```````````````````````````````````````````````````````````` +XM`````````````0````,`````````````````````````0``````````+```` +X<`````````````````0`````````````````````` +X` +Xend +446fa33c5b702a1d1fbfe3ec7a501a1a +exit + diff --git a/test/elfcopy/tc/strip-empty-1/strip-empty-1.err b/test/elfcopy/tc/strip-empty-1/strip-empty-1.err new file mode 100644 index 0000000000000..e69de29bb2d1d --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/strip-empty-1.err diff --git a/test/elfcopy/tc/strip-empty-1/strip-empty-1.eval b/test/elfcopy/tc/strip-empty-1/strip-empty-1.eval new file mode 100644 index 0000000000000..573541ac9702d --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/strip-empty-1.eval @@ -0,0 +1 @@ +0 diff --git a/test/elfcopy/tc/strip-empty-1/strip-empty-1.out b/test/elfcopy/tc/strip-empty-1/strip-empty-1.out new file mode 100644 index 0000000000000..e69de29bb2d1d --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/strip-empty-1.out diff --git a/test/elfcopy/tc/strip-empty-1/strip-empty-1.sh b/test/elfcopy/tc/strip-empty-1/strip-empty-1.sh new file mode 100755 index 0000000000000..2ba44f887d971 --- /dev/null +++ b/test/elfcopy/tc/strip-empty-1/strip-empty-1.sh @@ -0,0 +1,6 @@ +# $Id$ +inittest strip-empty-1 tc/strip-empty-1 +extshar ${TESTDIR} +extshar ${RLTDIR} +runcmd "${STRIP} -R .text -R .data -R .bss -R .ARM.attributes -R .reginfo -R .gnu.attributes -R .MIPS.abiflags -R .pdr -R .xtensa.info empty.o" work true +rundiff true diff --git a/test/elfdump/Makefile b/test/elfdump/Makefile index fa9f176bd0f60..ceac4650543cf 100644 --- a/test/elfdump/Makefile +++ b/test/elfdump/Makefile @@ -1,21 +1,5 @@ -# $Id: Makefile 2137 2011-11-10 13:09:30Z jkoshy $ +# $Id: Makefile 3028 2014-04-18 16:20:43Z jkoshy $ TOP= ../.. -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.if !defined(TET_EXECUTE) -TET_EXECUTE= ${.OBJDIR} -.endif - -.PHONY: all clean clobber execute test - -all clean depend: - -execute test: - TET_EXECUTE="${TET_EXECUTE}" TET_ROOT="${TET_ROOT}" \ - TET_SUITE_ROOT="${.CURDIR}" \ - ${TET_ROOT}/bin/tcc -e . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} +.include "${TOP}/mk/elftoolchain.tetbase.mk" diff --git a/test/libdwarf/Makefile b/test/libdwarf/Makefile index ad239300bcf2b..fc9f5d1667e6e 100644 --- a/test/libdwarf/Makefile +++ b/test/libdwarf/Makefile @@ -1,34 +1,6 @@ -# -# $Id: Makefile 2137 2011-11-10 13:09:30Z jkoshy $ -# - -TOP= ../.. - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.if make(tccbuild) -TET_OPTIONS+= -b -.endif - -.if make(tccclean) -TET_OPTIONS+= -c -.endif - -.if make(execute) || make(test) -TET_OPTIONS+= -e -.endif - -.MAIN: all - -.PHONY: clobber execute tccbuild tccclean test - -execute tccbuild tccclean test: - TET_ROOT=${TET_ROOT} TET_SUITE_ROOT=${.CURDIR} \ - ${TET_ROOT}/bin/tcc ${TET_OPTIONS} . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} +# $Id: Makefile 3028 2014-04-18 16:20:43Z jkoshy $ +TOP= ../.. SUBDIR= ts -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.tetbase.mk" diff --git a/test/libdwarf/ts/Makefile b/test/libdwarf/ts/Makefile index 84d6e2404b142..05ddf91e16d4a 100644 --- a/test/libdwarf/ts/Makefile +++ b/test/libdwarf/ts/Makefile @@ -1,7 +1,9 @@ # -# $Id: Makefile 2084 2011-10-27 04:48:12Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ # +TOP= ../../.. + SUBDIR+= dwarf_init SUBDIR+= dwarf_next_cu_header SUBDIR+= dwarf_get_address_size @@ -22,4 +24,4 @@ SUBDIR+= dwarf_pubnames SUBDIR+= dwarf_macinfo SUBDIR+= dwarf_ranges -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/libdwarf/ts/Makefile.tset b/test/libdwarf/ts/Makefile.tset index af0f82a10dbc1..6546de89d2cf9 100644 --- a/test/libdwarf/ts/Makefile.tset +++ b/test/libdwarf/ts/Makefile.tset @@ -1,6 +1,4 @@ -# $Id: Makefile.tset 2198 2011-11-23 16:13:45Z jkoshy $ - -.include "${TOP}/mk/elftoolchain.os.mk" +# $Id: Makefile.tset 3122 2014-12-21 05:46:10Z kaiwang27 $ # libdwarf test suite uses libdwarf in /usr/local (i.e. SGI libdwarf), # if TCGEN is defined. @@ -15,6 +13,11 @@ LDADD+= -ldwarf DPADD+= ${LIBELF} LDADD+= -lelf +# Test cases do not have manual pages. +NOMAN= noman + +.include "${TOP}/mk/elftoolchain.os.mk" + # Determine the location of the XML handling library. .if ${OS_HOST} == FreeBSD LDADD+= -lbsdxml @@ -51,6 +54,3 @@ ${f}: ${TS_OBJROOT}/common/object/${f}.gz .if ${OS_HOST} != NetBSD WARNS?= 2 .endif - -# Test cases do not have manual pages. -NOMAN= noman diff --git a/test/libdwarf/ts/README b/test/libdwarf/ts/README index b163c50a7ccd9..0a041dcbd6042 100644 --- a/test/libdwarf/ts/README +++ b/test/libdwarf/ts/README @@ -1,4 +1,4 @@ -: $Id: README 2084 2011-10-27 04:48:12Z jkoshy $ +: $Id: README 3072 2014-06-23 03:08:44Z kaiwang27 $ Libdwarf test suite use XML files to describe test case, invocable component and test purpose. @@ -32,3 +32,15 @@ When a test case is compiled with 'make TCGEN=yes', it will instead link with SGI libdwarf and genearte XML files during TP execution. These generated XML files can then be used directly to test this libdwarf implementation. + +For example, to generate XML files for test case dwarf_next_cu_header: + +% cd /path/to/elftoolchain/test/libdwarf/ +# unsetenv TET_ROOT +% make clean && make TCGEN=yes +% cd ts/dwarf_next_cu_header +% setenv TET_ROOT /path/to/elftoolchain/test/tet +% env ICLIST=dt32-g1:dt64-g1:ec32-g1:ec64-g1:ld_symver.o-64-g1 ./tc_dwarf_next_cu_header + +(ICLIST defines a list of test objects on which the test case +generates. One gzipped XML file is generated for each test object.) diff --git a/test/libdwarf/ts/common/die_traverse2.c b/test/libdwarf/ts/common/die_traverse2.c new file mode 100644 index 0000000000000..059ca13cb1c02 --- /dev/null +++ b/test/libdwarf/ts/common/die_traverse2.c @@ -0,0 +1,120 @@ +/*- + * Copyright (c) 2010,2014 Kai Wang + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $Id: die_traverse2.c 3076 2014-06-23 23:54:01Z kaiwang27 $ + */ + +#include <assert.h> +#include <dwarf.h> +#include <libdwarf.h> + +#include "driver.h" + +static int die_cnt; + +/* + * DIE traverse function shared by test cases. (another version with + * .debug_types support) + */ + +static void +_die_traverse_recursive2(Dwarf_Debug dbg, Dwarf_Die die, + Dwarf_Bool is_info, void (*die_callback)(Dwarf_Die die)) +{ + Dwarf_Die die0; + Dwarf_Off offset; + Dwarf_Half tag; + Dwarf_Error de; + const char *tagname; + int r; + + assert(dbg != NULL && die != NULL && die_callback != NULL); + + if (dwarf_tag(die, &tag, &de) != DW_DLV_OK) { + tet_printf("dwarf_tag failed: %s\n", dwarf_errmsg(de)); + result = TET_FAIL; + } + tagname = NULL; + if (dwarf_get_TAG_name(tag, &tagname) != DW_DLV_OK) { + tet_infoline("dwarf_get_TAG_name failed"); + result = TET_FAIL; + } + offset = 0; + if (dwarf_dieoffset(die, &offset, &de) != DW_DLV_OK) { + tet_printf("dwarf_dieoffset failed: %s\n", dwarf_errmsg(de)); + result = TET_FAIL; + } + tet_printf("DIE #%d (%s) [%#x]\n", die_cnt++, tagname, offset); + + die_callback(die); + + /* Search children. */ + r = dwarf_child(die, &die0, &de); + if (r == DW_DLV_ERROR) + tet_printf("%s: dwarf_child failed: %s", __func__, + dwarf_errmsg(de)); + else if (r == DW_DLV_OK) + _die_traverse_recursive2(dbg, die0, is_info, die_callback); + + /* Search sibling. */ + r = dwarf_siblingof_b(dbg, die, &die0, is_info, &de); + if (r == DW_DLV_ERROR) + tet_printf("%s: dwarf_siblingof failed: %s", __func__, + dwarf_errmsg(de)); + else if (r == DW_DLV_OK) + _die_traverse_recursive2(dbg, die0, is_info, die_callback); +} + +static void +_die_traverse2(Dwarf_Debug dbg, Dwarf_Bool is_info, + void (*die_callback)(Dwarf_Die die)) +{ + Dwarf_Die die; + Dwarf_Error de; + Dwarf_Unsigned cu_next_offset; + + assert(dbg != NULL && die_callback != NULL); + + die_cnt = 0; + + if (is_info) { + TS_DWARF_CU_FOREACH2(dbg, 1, cu_next_offset, de) { + if (dwarf_siblingof_b(dbg, NULL, &die, 1, &de) != + DW_DLV_OK) + break; + _die_traverse_recursive2(dbg, die, 1, die_callback); + } + } else { + do { + TS_DWARF_CU_FOREACH2(dbg, 0, cu_next_offset, de) { + if (dwarf_siblingof_b(dbg, NULL, &die, 0, + &de) != DW_DLV_OK) + break; + _die_traverse_recursive2(dbg, die, 0, + die_callback); + } + } while (dwarf_next_types_section(dbg, &de) == DW_DLV_OK); + } +} diff --git a/test/libdwarf/ts/common/driver.h b/test/libdwarf/ts/common/driver.h index 7d84a017e386c..580683ffd17ee 100644 --- a/test/libdwarf/ts/common/driver.h +++ b/test/libdwarf/ts/common/driver.h @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: driver.h 2084 2011-10-27 04:48:12Z jkoshy $ + * $Id: driver.h 3074 2014-06-23 03:08:53Z kaiwang27 $ */ #ifndef _DRIVER_H_ @@ -62,9 +62,16 @@ struct dwarf_tp { while (dwarf_next_cu_header((D), NULL, NULL, NULL, NULL, &(N), \ &(DE)) == DW_DLV_OK) -#define TS_DWARF_DIE_TRAVERSE(D, CB) \ +#define TS_DWARF_CU_FOREACH2(D,I,N,DE) \ + while (dwarf_next_cu_header_c((D), (I), NULL, NULL, NULL, NULL, \ + NULL, NULL, NULL, NULL, &(N), &(DE)) == DW_DLV_OK) + +#define TS_DWARF_DIE_TRAVERSE(D,CB) \ _die_traverse((D), (CB)) +#define TS_DWARF_DIE_TRAVERSE2(D,I,CB) \ + _die_traverse2((D), (I), (CB)) + #ifndef TCGEN #define _TS_CHECK_VAR(X,S) do { \ diff --git a/test/libdwarf/ts/common/object/ld_symver.o-64-g1.gz b/test/libdwarf/ts/common/object/ld_symver.o-64-g1.gz Binary files differnew file mode 100644 index 0000000000000..5fd90579c8114 --- /dev/null +++ b/test/libdwarf/ts/common/object/ld_symver.o-64-g1.gz diff --git a/test/libdwarf/ts/dwarf_attrlist/Makefile b/test/libdwarf/ts/dwarf_attrlist/Makefile index 29cc2480527b8..beaf7e4bb4151 100644 --- a/test/libdwarf/ts/dwarf_attrlist/Makefile +++ b/test/libdwarf/ts/dwarf_attrlist/Makefile @@ -1,8 +1,8 @@ -# $Id: Makefile 2084 2011-10-27 04:48:12Z jkoshy $ +# $Id: Makefile 3083 2014-09-02 22:08:01Z kaiwang27 $ TOP= ../../../.. TS_SRCS= dwarf_attrlist.c -TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 +TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 ld_symver.o-64-g1 .include "${TOP}/mk/elftoolchain.tet.mk" diff --git a/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz Binary files differindex 9757123b7b2c5..78629601d1022 100644 --- a/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz Binary files differindex e4cf1c592c6d9..8b69a054fa4d1 100644 --- a/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_attrlist/dwarf_attrlist.c b/test/libdwarf/ts/dwarf_attrlist/dwarf_attrlist.c index fa6818ec1dcce..e8f29edc93668 100644 --- a/test/libdwarf/ts/dwarf_attrlist/dwarf_attrlist.c +++ b/test/libdwarf/ts/dwarf_attrlist/dwarf_attrlist.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dwarf_attrlist.c 2084 2011-10-27 04:48:12Z jkoshy $ + * $Id: dwarf_attrlist.c 3083 2014-09-02 22:08:01Z kaiwang27 $ */ #include <assert.h> @@ -48,7 +48,7 @@ static struct dwarf_tp dwarf_tp_array[] = { }; static int result = TET_UNRESOLVED; #include "driver.c" -#include "die_traverse.c" +#include "die_traverse2.c" static void _dwarf_attrlist(Dwarf_Die die) @@ -90,7 +90,8 @@ tp_dwarf_attrlist(void) TS_DWARF_INIT(dbg, fd, de); - TS_DWARF_DIE_TRAVERSE(dbg, _dwarf_attrlist); + TS_DWARF_DIE_TRAVERSE2(dbg, 1, _dwarf_attrlist); + TS_DWARF_DIE_TRAVERSE2(dbg, 0, _dwarf_attrlist); if (result == TET_UNRESOLVED) result = TET_PASS; diff --git a/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz Binary files differindex 3408f55c6e59d..f2a53356cc7c7 100644 --- a/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz Binary files differindex 13581a27d24c9..19faaf701f763 100644 --- a/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_attrlist/ld_symver.o-64-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/ld_symver.o-64-g1.xml.gz Binary files differnew file mode 100644 index 0000000000000..b78ab0abd9b25 --- /dev/null +++ b/test/libdwarf/ts/dwarf_attrlist/ld_symver.o-64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/Makefile b/test/libdwarf/ts/dwarf_die_query/Makefile index efcf1bc97c4e0..0f99aa3e1bbf5 100644 --- a/test/libdwarf/ts/dwarf_die_query/Makefile +++ b/test/libdwarf/ts/dwarf_die_query/Makefile @@ -1,8 +1,8 @@ -# $Id: Makefile 2084 2011-10-27 04:48:12Z jkoshy $ +# $Id: Makefile 3075 2014-06-23 03:08:57Z kaiwang27 $ TOP= ../../../.. TS_SRCS= dwarf_die_query.c -TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 dto64-g1 +TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 dto64-g1 ld_symver.o-64-g1 .include "${TOP}/mk/elftoolchain.tet.mk" diff --git a/test/libdwarf/ts/dwarf_die_query/dt32-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/dt32-g1.xml.gz Binary files differindex 2cda689a79455..1fc0851421177 100644 --- a/test/libdwarf/ts/dwarf_die_query/dt32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_die_query/dt32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz Binary files differindex 211645acbf436..6a1a6fd54759f 100644 --- a/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz Binary files differindex 7b2d38d04585e..2cd4ea5a2ff71 100644 --- a/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/dwarf_die_query.c b/test/libdwarf/ts/dwarf_die_query/dwarf_die_query.c index 45b9c44d1abef..5c99fc2304979 100644 --- a/test/libdwarf/ts/dwarf_die_query/dwarf_die_query.c +++ b/test/libdwarf/ts/dwarf_die_query/dwarf_die_query.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dwarf_die_query.c 2084 2011-10-27 04:48:12Z jkoshy $ + * $Id: dwarf_die_query.c 3075 2014-06-23 03:08:57Z kaiwang27 $ */ #include <assert.h> @@ -42,15 +42,18 @@ */ static void tp_dwarf_die_query(void); +static void tp_dwarf_die_query_types(void); static void tp_dwarf_die_query_sanity(void); static struct dwarf_tp dwarf_tp_array[] = { {"tp_dwarf_die_query", tp_dwarf_die_query}, + {"tp_dwarf_die_query_types", tp_dwarf_die_query_types}, {"tp_dwarf_die_query_sanity", tp_dwarf_die_query_sanity}, {NULL, NULL}, }; static int result = TET_UNRESOLVED; #include "driver.c" #include "die_traverse.c" +#include "die_traverse2.c" static void _dwarf_die_query(Dwarf_Die die) @@ -103,6 +106,27 @@ done: } static void +tp_dwarf_die_query_types(void) +{ + Dwarf_Debug dbg; + Dwarf_Error de; + int fd; + + result = TET_UNRESOLVED; + + TS_DWARF_INIT(dbg, fd, de); + + TS_DWARF_DIE_TRAVERSE2(dbg, 0, _dwarf_die_query); + + if (result == TET_UNRESOLVED) + result = TET_PASS; + +done: + TS_DWARF_FINISH(dbg, de); + TS_RESULT(result); +} + +static void tp_dwarf_die_query_sanity(void) { Dwarf_Debug dbg; diff --git a/test/libdwarf/ts/dwarf_die_query/ec32-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/ec32-g1.xml.gz Binary files differindex d54847f126eaa..0dde7100876f7 100644 --- a/test/libdwarf/ts/dwarf_die_query/ec32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_die_query/ec32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz Binary files differindex 21559130a6793..3c9890e18d005 100644 --- a/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_die_query/ld_symver.o-64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/ld_symver.o-64-g1.xml.gz Binary files differnew file mode 100644 index 0000000000000..c8de24e2c300f --- /dev/null +++ b/test/libdwarf/ts/dwarf_die_query/ld_symver.o-64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_form/Makefile b/test/libdwarf/ts/dwarf_form/Makefile index a64bd6f6f2ba2..a1f193ada1b2a 100644 --- a/test/libdwarf/ts/dwarf_form/Makefile +++ b/test/libdwarf/ts/dwarf_form/Makefile @@ -1,8 +1,8 @@ -# $Id: Makefile 2084 2011-10-27 04:48:12Z jkoshy $ +# $Id: Makefile 3084 2014-09-02 22:08:13Z kaiwang27 $ TOP= ../../../.. TS_SRCS= dwarf_form.c -TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 +TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 ld_symver.o-64-g1 .include "${TOP}/mk/elftoolchain.tet.mk" diff --git a/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz b/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz Binary files differindex b15226e85f107..afc398d021aa9 100644 --- a/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz Binary files differindex 62b6aa2687306..257b4687bd507 100644 --- a/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_form/dwarf_form.c b/test/libdwarf/ts/dwarf_form/dwarf_form.c index 8567b5a14491f..5ef73d3f486b6 100644 --- a/test/libdwarf/ts/dwarf_form/dwarf_form.c +++ b/test/libdwarf/ts/dwarf_form/dwarf_form.c @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dwarf_form.c 2084 2011-10-27 04:48:12Z jkoshy $ + * $Id: dwarf_form.c 3084 2014-09-02 22:08:13Z kaiwang27 $ */ #include <assert.h> @@ -48,7 +48,7 @@ static struct dwarf_tp dwarf_tp_array[] = { }; static int result = TET_UNRESOLVED; #include "driver.c" -#include "die_traverse.c" +#include "die_traverse2.c" static void _dwarf_form(Dwarf_Die die) @@ -62,11 +62,14 @@ _dwarf_form(Dwarf_Die die) Dwarf_Unsigned uvalue; Dwarf_Signed svalue; Dwarf_Block *block; + Dwarf_Sig8 sig8; + Dwarf_Ptr ptr; Dwarf_Error de; char *str; int i, r; int r_formref, r_global_formref, r_formaddr, r_formflag; int r_formudata, r_formsdata, r_formblock, r_formstring; + int r_formsig8, r_formexprloc; r = dwarf_attrlist(die, &attrlist, &attrcount, &de); if (r == DW_DLV_ERROR) { @@ -141,6 +144,16 @@ _dwarf_form(Dwarf_Die die) TS_CHECK_INT(r_formstring); if (r_formstring == DW_DLV_OK) TS_CHECK_STRING(str); + + r_formsig8 = dwarf_formsig8(at, &sig8, &de); + TS_CHECK_INT(r_formsig8); + if (r_formsig8 == DW_DLV_OK) + TS_CHECK_BLOCK(sig8.signature, 8); + + r_formexprloc = dwarf_formexprloc(at, &uvalue, &ptr, &de); + TS_CHECK_INT(r_formexprloc); + if (r_formexprloc == DW_DLV_OK) + TS_CHECK_BLOCK(ptr, uvalue); } } @@ -155,7 +168,8 @@ tp_dwarf_form(void) TS_DWARF_INIT(dbg, fd, de); - TS_DWARF_DIE_TRAVERSE(dbg, _dwarf_form); + TS_DWARF_DIE_TRAVERSE2(dbg, 1, _dwarf_form); + TS_DWARF_DIE_TRAVERSE2(dbg, 0, _dwarf_form); if (result == TET_UNRESOLVED) result = TET_PASS; diff --git a/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz b/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz Binary files differindex 8342c21cf7e12..bf8b65ed07b49 100644 --- a/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz Binary files differindex b046c5b902374..1c964962fc4e4 100644 --- a/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_form/ld_symver.o-64-g1.xml.gz b/test/libdwarf/ts/dwarf_form/ld_symver.o-64-g1.xml.gz Binary files differnew file mode 100644 index 0000000000000..22c60db868427 --- /dev/null +++ b/test/libdwarf/ts/dwarf_form/ld_symver.o-64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_next_cu_header/Makefile b/test/libdwarf/ts/dwarf_next_cu_header/Makefile index ef798c118a566..ad29f1efa8eee 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/Makefile +++ b/test/libdwarf/ts/dwarf_next_cu_header/Makefile @@ -1,8 +1,8 @@ -# $Id: Makefile 2084 2011-10-27 04:48:12Z jkoshy $ +# $Id: Makefile 3073 2014-06-23 03:08:49Z kaiwang27 $ TOP= ../../../.. TS_SRCS= dwarf_next_cu_header.c -TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 +TS_DATA= dt32-g1 dt64-g1 ec32-g1 ec64-g1 ld_symver.o-64-g1 .include "${TOP}/mk/elftoolchain.tet.mk" diff --git a/test/libdwarf/ts/dwarf_next_cu_header/dt32-g1.xml.gz b/test/libdwarf/ts/dwarf_next_cu_header/dt32-g1.xml.gz Binary files differindex e9f788ca68f3f..7ba737cc6e97e 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/dt32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_next_cu_header/dt32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_next_cu_header/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_next_cu_header/dt64-g1.xml.gz Binary files differindex 60dfb4202084d..93a44424c7d15 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/dt64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_next_cu_header/dt64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_next_cu_header/dwarf_next_cu_header.c b/test/libdwarf/ts/dwarf_next_cu_header/dwarf_next_cu_header.c index acfe506bb869f..b5a580d497535 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/dwarf_next_cu_header.c +++ b/test/libdwarf/ts/dwarf_next_cu_header/dwarf_next_cu_header.c @@ -1,5 +1,5 @@ /*- - * Copyright (c) 2010 Kai Wang + * Copyright (c) 2010,2014 Kai Wang * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: dwarf_next_cu_header.c 2084 2011-10-27 04:48:12Z jkoshy $ + * $Id: dwarf_next_cu_header.c 3073 2014-06-23 03:08:49Z kaiwang27 $ */ #include <assert.h> @@ -38,10 +38,12 @@ static void tp_dwarf_next_cu_header(void); static void tp_dwarf_next_cu_header_b(void); +static void tp_dwarf_next_cu_header_c(void); static void tp_dwarf_next_cu_header_loop(void); static struct dwarf_tp dwarf_tp_array[] = { {"tp_dwarf_next_cu_header", tp_dwarf_next_cu_header}, {"tp_dwarf_next_cu_header_b", tp_dwarf_next_cu_header_b}, + {"tp_dwarf_next_cu_header_c", tp_dwarf_next_cu_header_c}, {"tp_dwarf_next_cu_header_loop", tp_dwarf_next_cu_header_loop}, {NULL, NULL}, }; @@ -100,8 +102,8 @@ tp_dwarf_next_cu_header_b(void) TS_DWARF_INIT(dbg, fd, de); while (dwarf_next_cu_header_b(dbg, &cu_header_length, &cu_version, - &cu_abbrev_offset, &cu_pointer_size, &cu_offset_size, - &cu_extension_size, &cu_next_offset, &de) == DW_DLV_OK) { + &cu_abbrev_offset, &cu_pointer_size, &cu_offset_size, + &cu_extension_size, &cu_next_offset, &de) == DW_DLV_OK) { TS_CHECK_UINT(cu_header_length); TS_CHECK_UINT(cu_version); TS_CHECK_INT(cu_abbrev_offset); @@ -119,6 +121,64 @@ done: TS_RESULT(result); } +static void +tp_dwarf_next_cu_header_c(void) +{ + Dwarf_Debug dbg; + Dwarf_Error de; + Dwarf_Unsigned cu_header_length; + Dwarf_Half cu_version; + Dwarf_Off cu_abbrev_offset; + Dwarf_Half cu_pointer_size; + Dwarf_Half cu_offset_size; + Dwarf_Half cu_extension_size; + Dwarf_Sig8 cu_type_sig; + Dwarf_Unsigned cu_type_offset; + Dwarf_Unsigned cu_next_offset; + int fd, result; + + result = TET_UNRESOLVED; + + TS_DWARF_INIT(dbg, fd, de); + + while (dwarf_next_cu_header_c(dbg, 1, &cu_header_length, &cu_version, + &cu_abbrev_offset, &cu_pointer_size, &cu_offset_size, + &cu_extension_size, NULL, NULL, &cu_next_offset, &de) == + DW_DLV_OK) { + TS_CHECK_UINT(cu_header_length); + TS_CHECK_UINT(cu_version); + TS_CHECK_INT(cu_abbrev_offset); + TS_CHECK_UINT(cu_pointer_size); + TS_CHECK_UINT(cu_offset_size); + TS_CHECK_UINT(cu_extension_size); + TS_CHECK_UINT(cu_next_offset); + } + + do { + while (dwarf_next_cu_header_c(dbg, 0, &cu_header_length, + &cu_version, &cu_abbrev_offset, &cu_pointer_size, + &cu_offset_size, &cu_extension_size, &cu_type_sig, + &cu_type_offset, &cu_next_offset, &de) == DW_DLV_OK) { + TS_CHECK_UINT(cu_header_length); + TS_CHECK_UINT(cu_version); + TS_CHECK_INT(cu_abbrev_offset); + TS_CHECK_UINT(cu_pointer_size); + TS_CHECK_UINT(cu_offset_size); + TS_CHECK_UINT(cu_extension_size); + TS_CHECK_BLOCK(cu_type_sig.signature, 8); + TS_CHECK_UINT(cu_type_offset); + TS_CHECK_UINT(cu_next_offset); + } + } while (dwarf_next_types_section(dbg, &de) == DW_DLV_OK); + + if (result == TET_UNRESOLVED) + result = TET_PASS; + +done: + TS_DWARF_FINISH(dbg, de); + TS_RESULT(result); +} + #define _LOOP_COUNT 50 static void diff --git a/test/libdwarf/ts/dwarf_next_cu_header/ec32-g1.xml.gz b/test/libdwarf/ts/dwarf_next_cu_header/ec32-g1.xml.gz Binary files differindex 6efbf28a509d0..c613d8ec741ee 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/ec32-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_next_cu_header/ec32-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_next_cu_header/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_next_cu_header/ec64-g1.xml.gz Binary files differindex e03947ddbac55..180062815342f 100644 --- a/test/libdwarf/ts/dwarf_next_cu_header/ec64-g1.xml.gz +++ b/test/libdwarf/ts/dwarf_next_cu_header/ec64-g1.xml.gz diff --git a/test/libdwarf/ts/dwarf_next_cu_header/ld_symver.o-64-g1.xml.gz b/test/libdwarf/ts/dwarf_next_cu_header/ld_symver.o-64-g1.xml.gz Binary files differnew file mode 100644 index 0000000000000..adf56ab1f756e --- /dev/null +++ b/test/libdwarf/ts/dwarf_next_cu_header/ld_symver.o-64-g1.xml.gz diff --git a/test/libelf/Makefile b/test/libelf/Makefile index 903221d9bafa5..f7a3903e2b9e0 100644 --- a/test/libelf/Makefile +++ b/test/libelf/Makefile @@ -1,36 +1,6 @@ -# $Id: Makefile 2137 2011-11-10 13:09:30Z jkoshy $ - -TOP = ../.. - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.if !defined(TET_EXECUTE) -TET_EXECUTE= ${.OBJDIR} -.endif - -.if make(tccbuild) -TET_OPTIONS+= -b -.endif - -.if make(tccclean) -TET_OPTIONS+= -c -.endif - -.if make(execute) || make(test) -TET_OPTIONS+= -e -.endif - -.MAIN: all - -.PHONY: clobber execute tccbuild tccclean test - -execute tccbuild tccclean test: - TET_ROOT=${TET_ROOT} TET_EXECUTE=${TET_EXECUTE} \ - TET_SUITE_ROOT=${.CURDIR} ${TET_ROOT}/bin/tcc ${TET_OPTIONS} . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} +# $Id: Makefile 3028 2014-04-18 16:20:43Z jkoshy $ +TOP= ../.. SUBDIR= tset -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.tetbase.mk" diff --git a/test/libelf/tset/Makefile b/test/libelf/tset/Makefile index 707a3ab82137b..63e9586913062 100644 --- a/test/libelf/tset/Makefile +++ b/test/libelf/tset/Makefile @@ -1,7 +1,9 @@ # -# $Id: Makefile 1638 2011-07-10 15:43:19Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ # +TOP= ../../.. + SUBDIR+= common # must be first SUBDIR+= abi @@ -55,4 +57,4 @@ SUBDIR+= gelf_getehdr SUBDIR+= gelf_newehdr SUBDIR+= gelf_xlate -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/libelf/tset/elf_update/update.m4 b/test/libelf/tset/elf_update/update.m4 index e1d3e6b33f534..5d7e789a8e9ca 100644 --- a/test/libelf/tset/elf_update/update.m4 +++ b/test/libelf/tset/elf_update/update.m4 @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: update.m4 2833 2012-12-30 16:16:51Z jkoshy $ + * $Id: update.m4 3081 2014-07-28 08:53:14Z jkoshy $ */ #include <sys/types.h> @@ -743,7 +743,7 @@ tcSectionType$2$1(void) goto done; } - sh->sh_type = SHT_NULL - 1; + sh->sh_type = SHT_LOOS - 1; (void) elf_flagshdr(scn, ELF_C_SET, ELF_F_DIRTY); if ((offset = elf_update(e, ELF_C_NULL)) != (off_t) -1) { @@ -774,6 +774,88 @@ FN(64,`lsb') FN(64,`msb') /* + * Verify that sections with unrecognized sh_type values in the + * range [SHT_LOUSER,SHT_HIUSER], [SHT_LOPROC,SHT_HIPROC], + * and [SHT_LOOS,SHT_HIOS] are accepted. + */ + +define(`ADD_SECTION',` + if ((scn = elf_newscn(e)) == NULL) { + TP_UNRESOLVED("elf_newscn() failed: \"%s\".", + elf_errmsg(-1)); + goto done; + } + if ((sh = elf$1_getshdr(scn)) == NULL) { + TP_UNRESOLVED("elf$1_getshdr() failed: \"%s\".", + elf_errmsg(-1)); + goto done; + } + sh->sh_type = $2; + if ((d = elf_newdata(scn)) == NULL) { + TP_UNRESOLVED("elf_newdata() failed: \"%s\".", + elf_errmsg(-1)); + goto done; + } + d->d_align = 1; + d->d_buf = NULL; + d->d_size = 0; + d->d_off = (off_t) 0; + (void) elf_flagdata(d, ELF_C_SET, ELF_F_DIRTY); + (void) elf_flagshdr(scn, ELF_C_SET, ELF_F_DIRTY);') +undefine(`FN') +define(`FN',` +void +tcSectionTypeOSUserProcDefined_$2$1(void) +{ + int error, fd, result; + off_t offset; + Elf *e; + Elf_Data *d; + Elf_Scn *scn; + Elf$1_Shdr *sh; + + TP_CHECK_INITIALIZATION(); + + TP_ANNOUNCE("TOUPPER($2)$1: user, OS and processor specific " + "section types are accepted.") ; + + result = TET_UNRESOLVED; + e = NULL; + fd = -1; + + _TS_OPEN_FILE(e, "newehdr.$2$1", ELF_C_READ, fd, goto done;); + + /* + * Create two new sections, one of type SHT_LOOS (0x60000000UL), + * and the other of type SHT_HIUSER (0xFFFFFFFFUL). These + * should be accepted as valid sections. + */ + ADD_SECTION($1,`SHT_LOOS') + ADD_SECTION($1,`SHT_HIUSER') + + if ((offset = elf_update(e, ELF_C_NULL)) == (off_t) -1) { + TP_FAIL("elf_update() failed."); + goto done; + } + + result = TET_PASS; + + done: + if (e) + (void) elf_end(e); + if (fd) + (void) close(fd); + tet_result(result); +}') + +FN(32,`lsb') +FN(32,`msb') +FN(64,`lsb') +FN(64,`msb') + +undefine(`ADD_SECTION') + +/* * An Elf_Data descriptor that is malformed in various ways * should be rejected. */ diff --git a/test/libelftc/Makefile b/test/libelftc/Makefile index c9f086cc7b8d8..f7a3903e2b9e0 100644 --- a/test/libelftc/Makefile +++ b/test/libelftc/Makefile @@ -1,36 +1,6 @@ -# $Id: Makefile 2826 2012-12-29 16:39:18Z jkoshy $ - -TOP = ../.. - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.if !defined(TET_EXECUTE) -TET_EXECUTE= ${.OBJDIR} -.endif - -.if make(tccbuild) -TET_OPTIONS+= -b -.endif - -.if make(tccclean) -TET_OPTIONS+= -c -.endif - -.if make(execute) || make(test) -TET_OPTIONS+= -e -.endif - -.MAIN: all - -.PHONY: clobber execute tccbuild tccclean test - -execute tccbuild tccclean test: - TET_ROOT=${TET_ROOT} TET_EXECUTE=${TET_EXECUTE} \ - TET_SUITE_ROOT=${.CURDIR} ${TET_ROOT}/bin/tcc ${TET_OPTIONS} . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} +# $Id: Makefile 3028 2014-04-18 16:20:43Z jkoshy $ +TOP= ../.. SUBDIR= tset -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.tetbase.mk" diff --git a/test/libelftc/tset/Makefile b/test/libelftc/tset/Makefile index f0ba944fee21b..6602c88c37cac 100644 --- a/test/libelftc/tset/Makefile +++ b/test/libelftc/tset/Makefile @@ -1,7 +1,8 @@ -# $Id: Makefile 2861 2013-01-05 09:35:42Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ +TOP= ../../.. SUBDIR= SUBDIR+= elftc_string_table SUBDIR+= elftc_version -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/libelftc/tset/Makefile.tset b/test/libelftc/tset/Makefile.tset index b28e6f717b485..dc637a90263a7 100644 --- a/test/libelftc/tset/Makefile.tset +++ b/test/libelftc/tset/Makefile.tset @@ -1,8 +1,9 @@ -# $Id: Makefile.tset 2845 2012-12-31 04:19:35Z jkoshy $ +# $Id: Makefile.tset 3021 2014-04-17 16:32:00Z jkoshy $ -# All the test cases in this test suite need -lelftc. -DPADD+= ${LIBELFTC} -LDADD+= -lelftc +# All the test cases in this test suite need -lelftc. In addition, +# a few need -lelf. +DPADD+= ${LIBELFTC} ${LIBELF} +LDADD+= -lelftc -lelf GENERATE_TEST_SCAFFOLDING= yes diff --git a/test/libelftc/tset/elftc_string_table/string_table.m4 b/test/libelftc/tset/elftc_string_table/string_table.m4 index 0c6f730686db9..74e66c99c12bc 100644 --- a/test/libelftc/tset/elftc_string_table/string_table.m4 +++ b/test/libelftc/tset/elftc_string_table/string_table.m4 @@ -23,7 +23,7 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $Id: string_table.m4 2868 2013-01-06 13:28:47Z jkoshy $ + * $Id: string_table.m4 3021 2014-04-17 16:32:00Z jkoshy $ */ /* @@ -33,10 +33,12 @@ #include <errno.h> #include <fcntl.h> +#include <libelf.h> #include <libelftc.h> #include <stdlib.h> #include <stdio.h> #include <string.h> +#include <unistd.h> #include "tet_api.h" diff --git a/test/nm/Makefile b/test/nm/Makefile index df34d664a64fd..fc9f5d1667e6e 100644 --- a/test/nm/Makefile +++ b/test/nm/Makefile @@ -1,36 +1,6 @@ -# $Id: Makefile 2137 2011-11-10 13:09:30Z jkoshy $ - -TOP = ../.. - -.include "${TOP}/mk/elftoolchain.tetvars.mk" - -.if !defined(TET_EXECUTE) -TET_EXECUTE= ${.OBJDIR} -.endif - -.if make(tccbuild) -TET_OPTIONS+= -b -.endif - -.if make(tccclean) -TET_OPTIONS+= -c -.endif - -.if make(execute) || make(test) -TET_OPTIONS+= -e -.endif - -.MAIN: all - -.PHONY: clobber execute tccbuild tccclean test - -execute tccbuild tccclean test: - TET_EXECUTE=${TET_EXECUTE} TET_SUITE_ROOT=${.CURDIR} \ - TET_ROOT=${TET_ROOT} ${TET_ROOT}/bin/tcc ${TET_OPTIONS} . - -clobber: clean - rm -rf ${TET_RESULTS_DIR} ${TET_TMP_DIR} +# $Id: Makefile 3028 2014-04-18 16:20:43Z jkoshy $ +TOP= ../.. SUBDIR= ts -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.tetbase.mk" diff --git a/test/nm/ts/Makefile b/test/nm/ts/Makefile index b5352371f7d7d..6d23d32206bbd 100644 --- a/test/nm/ts/Makefile +++ b/test/nm/ts/Makefile @@ -1,4 +1,6 @@ -# $Id: Makefile 2085 2011-10-27 05:06:47Z jkoshy $ +# $Id: Makefile 3025 2014-04-18 16:20:25Z jkoshy $ + +TOP= ../../.. SUBDIR+= nm_archive1 SUBDIR+= nm_archive2 @@ -9,4 +11,4 @@ SUBDIR+= nm_option SUBDIR+= nm_shared_object1 SUBDIR+= nm_shared_object2 -.include <bsd.subdir.mk> +.include "${TOP}/mk/elftoolchain.subdir.mk" diff --git a/test/tet/Makefile b/test/tet/Makefile index e5396862ce2db..602ff6771fd43 100644 --- a/test/tet/Makefile +++ b/test/tet/Makefile @@ -1,7 +1,7 @@ # # Build TET from source. # -# $Id: Makefile 2117 2011-11-09 05:48:03Z jkoshy $ +# $Id: Makefile 3024 2014-04-18 16:20:11Z jkoshy $ # TOP= ../.. @@ -41,7 +41,7 @@ clean: clobber: rm -rf ${TET_ROOT} ${TET_BUILD_MARKER} ${TET_PATCH_MARKER} -depend test: .SILENT +cleandepend depend test: .SILENT true .else |
