1260684Skaiw/*-
2260684Skaiw * Copyright (c) 2009,2011 Kai Wang
3260684Skaiw * All rights reserved.
4260684Skaiw *
5260684Skaiw * Redistribution and use in source and binary forms, with or without
6260684Skaiw * modification, are permitted provided that the following conditions
7260684Skaiw * are met:
8260684Skaiw * 1. Redistributions of source code must retain the above copyright
9260684Skaiw *    notice, this list of conditions and the following disclaimer.
10260684Skaiw * 2. Redistributions in binary form must reproduce the above copyright
11260684Skaiw *    notice, this list of conditions and the following disclaimer in the
12260684Skaiw *    documentation and/or other materials provided with the distribution.
13260684Skaiw *
14260684Skaiw * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15260684Skaiw * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16260684Skaiw * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17260684Skaiw * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18260684Skaiw * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19260684Skaiw * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20260684Skaiw * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21260684Skaiw * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22260684Skaiw * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23260684Skaiw * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24260684Skaiw * SUCH DAMAGE.
25260684Skaiw *
26260684Skaiw * $Id: dwarf_nametbl.m4 2074 2011-10-27 03:34:33Z jkoshy $
27260684Skaiw */
28260684Skaiw
29260684Skaiwdefine(`MAKE_NAMETBL_API',`
30260684Skaiwint
31260684Skaiwdwarf_get_$1s(Dwarf_Debug dbg, Dwarf_$2 **$1s,
32260684Skaiw    Dwarf_Signed *ret_count, Dwarf_Error *error)
33260684Skaiw{
34260684Skaiw	Dwarf_Section *ds;
35260684Skaiw	int ret;
36260684Skaiw
37260684Skaiw	if (dbg == NULL || $1s == NULL || ret_count == NULL) {
38260684Skaiw		DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
39260684Skaiw		return (DW_DLV_ERROR);
40260684Skaiw	}
41260684Skaiw
42260684Skaiw	if (dbg->dbg_$1s == NULL) {
43260684Skaiw		if ((ds = _dwarf_find_section(dbg, ".debug_$4")) != NULL) {
44260684Skaiw			ret = _dwarf_nametbl_init(dbg, &dbg->dbg_$1s, ds,
45260684Skaiw			    error);
46260684Skaiw			if (ret != DW_DLE_NONE)
47260684Skaiw				return (DW_DLV_ERROR);
48260684Skaiw		}
49260684Skaiw		if (dbg->dbg_$1s == NULL) {
50260684Skaiw			DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY);
51260684Skaiw			return (DW_DLV_NO_ENTRY);
52260684Skaiw		}
53260684Skaiw	}
54260684Skaiw
55260684Skaiw	*$1s = dbg->dbg_$1s->ns_array;
56260684Skaiw	*ret_count = dbg->dbg_$1s->ns_len;
57260684Skaiw
58260684Skaiw	return (DW_DLV_OK);
59260684Skaiw}
60260684Skaiw
61260684Skaiwint
62260684Skaiwdwarf_$3name(Dwarf_$2 $1, char **ret_name, Dwarf_Error *error)
63260684Skaiw{
64260684Skaiw	Dwarf_Debug dbg;
65260684Skaiw
66260684Skaiw	dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL;
67260684Skaiw
68260684Skaiw	if ($1 == NULL || ret_name == NULL) {
69260684Skaiw		DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
70260684Skaiw		return (DW_DLV_ERROR);
71260684Skaiw	}
72260684Skaiw
73260684Skaiw	*ret_name = $1->np_name;
74260684Skaiw
75260684Skaiw	return (DW_DLV_OK);
76260684Skaiw}
77260684Skaiw
78260684Skaiwint
79260684Skaiwdwarf_$1_die_offset(Dwarf_$2 $1, Dwarf_Off *ret_offset,
80260684Skaiw    Dwarf_Error *error)
81260684Skaiw{
82260684Skaiw	Dwarf_NameTbl nt;
83260684Skaiw	Dwarf_Debug dbg;
84260684Skaiw
85260684Skaiw	dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL;
86260684Skaiw
87260684Skaiw	if ($1 == NULL || ret_offset == NULL) {
88260684Skaiw		DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
89260684Skaiw		return (DW_DLV_ERROR);
90260684Skaiw	}
91260684Skaiw
92260684Skaiw	nt = $1->np_nt;
93260684Skaiw	assert(nt != NULL);
94260684Skaiw
95260684Skaiw	*ret_offset = nt->nt_cu_offset + $1->np_offset;
96260684Skaiw
97260684Skaiw	return (DW_DLV_OK);
98260684Skaiw}
99260684Skaiw
100260684Skaiwint
101260684Skaiwdwarf_$1_cu_offset(Dwarf_$2 $1, Dwarf_Off *ret_offset,
102260684Skaiw    Dwarf_Error *error)
103260684Skaiw{
104260684Skaiw	Dwarf_NameTbl nt;
105260684Skaiw	Dwarf_Debug dbg;
106260684Skaiw
107260684Skaiw	dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL;
108260684Skaiw
109260684Skaiw	if ($1 == NULL || ret_offset == NULL) {
110260684Skaiw		DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
111260684Skaiw		return (DW_DLV_ERROR);
112260684Skaiw	}
113260684Skaiw
114260684Skaiw	nt = $1->np_nt;
115260684Skaiw	assert(nt != NULL);
116260684Skaiw
117260684Skaiw	*ret_offset = nt->nt_cu_offset;
118260684Skaiw
119260684Skaiw	return (DW_DLV_OK);
120260684Skaiw}
121260684Skaiw
122260684Skaiwint
123260684Skaiwdwarf_$1_name_offsets(Dwarf_$2 $1, char **ret_name, Dwarf_Off *die_offset,
124260684Skaiw    Dwarf_Off *cu_offset, Dwarf_Error *error)
125260684Skaiw{
126260684Skaiw	Dwarf_CU cu;
127260684Skaiw	Dwarf_Debug dbg;
128260684Skaiw	Dwarf_NameTbl nt;
129260684Skaiw
130260684Skaiw	dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL;
131260684Skaiw
132260684Skaiw	if ($1 == NULL || ret_name == NULL || die_offset == NULL ||
133260684Skaiw	    cu_offset == NULL) {
134260684Skaiw		DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT);
135260684Skaiw		return (DW_DLV_ERROR);
136260684Skaiw	}
137260684Skaiw
138260684Skaiw	nt = $1->np_nt;
139260684Skaiw	assert(nt != NULL);
140260684Skaiw
141260684Skaiw	cu = nt->nt_cu;
142260684Skaiw	assert(cu != NULL);
143260684Skaiw
144260684Skaiw	*ret_name = $1->np_name;
145260684Skaiw	*die_offset = nt->nt_cu_offset + $1->np_offset;
146260684Skaiw	*cu_offset = cu->cu_1st_offset;
147260684Skaiw
148260684Skaiw	return (DW_DLV_OK);
149260684Skaiw}
150260684Skaiw
151260684Skaiwvoid
152260684Skaiwdwarf_$1s_dealloc(Dwarf_Debug dbg, Dwarf_$2 *$1s, Dwarf_Signed count)
153260684Skaiw{
154260684Skaiw
155260684Skaiw	(void) dbg;
156260684Skaiw	(void) $1s;
157260684Skaiw	(void) count;
158260684Skaiw}
159260684Skaiw')
160