diff options
Diffstat (limited to 'test/libdwarf/ts')
35 files changed, 270 insertions, 30 deletions
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 |
