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