aboutsummaryrefslogtreecommitdiff
path: root/test/libdwarf/ts
diff options
context:
space:
mode:
Diffstat (limited to 'test/libdwarf/ts')
-rw-r--r--test/libdwarf/ts/Makefile6
-rw-r--r--test/libdwarf/ts/Makefile.tset12
-rw-r--r--test/libdwarf/ts/README14
-rw-r--r--test/libdwarf/ts/common/die_traverse2.c120
-rw-r--r--test/libdwarf/ts/common/driver.h11
-rw-r--r--test/libdwarf/ts/common/object/ld_symver.o-64-g1.gzbin0 -> 36785 bytes
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/Makefile4
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gzbin750 -> 750 bytes
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gzbin753 -> 753 bytes
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/dwarf_attrlist.c7
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gzbin5465 -> 5465 bytes
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gzbin5475 -> 5475 bytes
-rw-r--r--test/libdwarf/ts/dwarf_attrlist/ld_symver.o-64-g1.xml.gzbin0 -> 3754 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/Makefile4
-rw-r--r--test/libdwarf/ts/dwarf_die_query/dt32-g1.xml.gzbin1461 -> 1467 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gzbin1459 -> 1465 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gzbin1458 -> 1465 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/dwarf_die_query.c26
-rw-r--r--test/libdwarf/ts/dwarf_die_query/ec32-g1.xml.gzbin12687 -> 12695 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gzbin12685 -> 12692 bytes
-rw-r--r--test/libdwarf/ts/dwarf_die_query/ld_symver.o-64-g1.xml.gzbin0 -> 8494 bytes
-rw-r--r--test/libdwarf/ts/dwarf_form/Makefile4
-rw-r--r--test/libdwarf/ts/dwarf_form/dt32-g1.xml.gzbin8114 -> 9400 bytes
-rw-r--r--test/libdwarf/ts/dwarf_form/dt64-g1.xml.gzbin8140 -> 9406 bytes
-rw-r--r--test/libdwarf/ts/dwarf_form/dwarf_form.c20
-rw-r--r--test/libdwarf/ts/dwarf_form/ec32-g1.xml.gzbin89574 -> 101798 bytes
-rw-r--r--test/libdwarf/ts/dwarf_form/ec64-g1.xml.gzbin89610 -> 101875 bytes
-rw-r--r--test/libdwarf/ts/dwarf_form/ld_symver.o-64-g1.xml.gzbin0 -> 64812 bytes
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/Makefile4
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/dt32-g1.xml.gzbin244 -> 250 bytes
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/dt64-g1.xml.gzbin246 -> 252 bytes
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/dwarf_next_cu_header.c68
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/ec32-g1.xml.gzbin352 -> 372 bytes
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/ec64-g1.xml.gzbin358 -> 378 bytes
-rw-r--r--test/libdwarf/ts/dwarf_next_cu_header/ld_symver.o-64-g1.xml.gzbin0 -> 1970 bytes
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
new file mode 100644
index 0000000000000..5fd90579c8114
--- /dev/null
+++ b/test/libdwarf/ts/common/object/ld_symver.o-64-g1.gz
Binary files differ
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
index 9757123b7b2c5..78629601d1022 100644
--- a/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_attrlist/dt32-g1.xml.gz
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz
index e4cf1c592c6d9..8b69a054fa4d1 100644
--- a/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_attrlist/dt64-g1.xml.gz
Binary files differ
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
index 3408f55c6e59d..f2a53356cc7c7 100644
--- a/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_attrlist/ec32-g1.xml.gz
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz
index 13581a27d24c9..19faaf701f763 100644
--- a/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_attrlist/ec64-g1.xml.gz
Binary files differ
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
new file mode 100644
index 0000000000000..b78ab0abd9b25
--- /dev/null
+++ b/test/libdwarf/ts/dwarf_attrlist/ld_symver.o-64-g1.xml.gz
Binary files differ
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
index 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
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/dt64-g1.xml.gz
index 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
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/dto64-g1.xml.gz
index 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
Binary files differ
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
index 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
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_die_query/ec64-g1.xml.gz
index 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
Binary files differ
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
new file mode 100644
index 0000000000000..c8de24e2c300f
--- /dev/null
+++ b/test/libdwarf/ts/dwarf_die_query/ld_symver.o-64-g1.xml.gz
Binary files differ
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
index b15226e85f107..afc398d021aa9 100644
--- a/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_form/dt32-g1.xml.gz
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz b/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz
index 62b6aa2687306..257b4687bd507 100644
--- a/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_form/dt64-g1.xml.gz
Binary files differ
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
index 8342c21cf7e12..bf8b65ed07b49 100644
--- a/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_form/ec32-g1.xml.gz
Binary files differ
diff --git a/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz b/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz
index b046c5b902374..1c964962fc4e4 100644
--- a/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz
+++ b/test/libdwarf/ts/dwarf_form/ec64-g1.xml.gz
Binary files differ
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
new file mode 100644
index 0000000000000..22c60db868427
--- /dev/null
+++ b/test/libdwarf/ts/dwarf_form/ld_symver.o-64-g1.xml.gz
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ
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
index 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
Binary files differ
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
new file mode 100644
index 0000000000000..adf56ab1f756e
--- /dev/null
+++ b/test/libdwarf/ts/dwarf_next_cu_header/ld_symver.o-64-g1.xml.gz
Binary files differ