1*2de3b87aSKai Wang/*- 2*2de3b87aSKai Wang * Copyright (c) 2009,2011 Kai Wang 3*2de3b87aSKai Wang * All rights reserved. 4*2de3b87aSKai Wang * 5*2de3b87aSKai Wang * Redistribution and use in source and binary forms, with or without 6*2de3b87aSKai Wang * modification, are permitted provided that the following conditions 7*2de3b87aSKai Wang * are met: 8*2de3b87aSKai Wang * 1. Redistributions of source code must retain the above copyright 9*2de3b87aSKai Wang * notice, this list of conditions and the following disclaimer. 10*2de3b87aSKai Wang * 2. Redistributions in binary form must reproduce the above copyright 11*2de3b87aSKai Wang * notice, this list of conditions and the following disclaimer in the 12*2de3b87aSKai Wang * documentation and/or other materials provided with the distribution. 13*2de3b87aSKai Wang * 14*2de3b87aSKai Wang * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15*2de3b87aSKai Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16*2de3b87aSKai Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17*2de3b87aSKai Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18*2de3b87aSKai Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19*2de3b87aSKai Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20*2de3b87aSKai Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21*2de3b87aSKai Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22*2de3b87aSKai Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23*2de3b87aSKai Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24*2de3b87aSKai Wang * SUCH DAMAGE. 25*2de3b87aSKai Wang * 26*2de3b87aSKai Wang * $Id: dwarf_nametbl.m4 2074 2011-10-27 03:34:33Z jkoshy $ 27*2de3b87aSKai Wang */ 28*2de3b87aSKai Wang 29*2de3b87aSKai Wangdefine(`MAKE_NAMETBL_API',` 30*2de3b87aSKai Wangint 31*2de3b87aSKai Wangdwarf_get_$1s(Dwarf_Debug dbg, Dwarf_$2 **$1s, 32*2de3b87aSKai Wang Dwarf_Signed *ret_count, Dwarf_Error *error) 33*2de3b87aSKai Wang{ 34*2de3b87aSKai Wang Dwarf_Section *ds; 35*2de3b87aSKai Wang int ret; 36*2de3b87aSKai Wang 37*2de3b87aSKai Wang if (dbg == NULL || $1s == NULL || ret_count == NULL) { 38*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 39*2de3b87aSKai Wang return (DW_DLV_ERROR); 40*2de3b87aSKai Wang } 41*2de3b87aSKai Wang 42*2de3b87aSKai Wang if (dbg->dbg_$1s == NULL) { 43*2de3b87aSKai Wang if ((ds = _dwarf_find_section(dbg, ".debug_$4")) != NULL) { 44*2de3b87aSKai Wang ret = _dwarf_nametbl_init(dbg, &dbg->dbg_$1s, ds, 45*2de3b87aSKai Wang error); 46*2de3b87aSKai Wang if (ret != DW_DLE_NONE) 47*2de3b87aSKai Wang return (DW_DLV_ERROR); 48*2de3b87aSKai Wang } 49*2de3b87aSKai Wang if (dbg->dbg_$1s == NULL) { 50*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_NO_ENTRY); 51*2de3b87aSKai Wang return (DW_DLV_NO_ENTRY); 52*2de3b87aSKai Wang } 53*2de3b87aSKai Wang } 54*2de3b87aSKai Wang 55*2de3b87aSKai Wang *$1s = dbg->dbg_$1s->ns_array; 56*2de3b87aSKai Wang *ret_count = dbg->dbg_$1s->ns_len; 57*2de3b87aSKai Wang 58*2de3b87aSKai Wang return (DW_DLV_OK); 59*2de3b87aSKai Wang} 60*2de3b87aSKai Wang 61*2de3b87aSKai Wangint 62*2de3b87aSKai Wangdwarf_$3name(Dwarf_$2 $1, char **ret_name, Dwarf_Error *error) 63*2de3b87aSKai Wang{ 64*2de3b87aSKai Wang Dwarf_Debug dbg; 65*2de3b87aSKai Wang 66*2de3b87aSKai Wang dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL; 67*2de3b87aSKai Wang 68*2de3b87aSKai Wang if ($1 == NULL || ret_name == NULL) { 69*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 70*2de3b87aSKai Wang return (DW_DLV_ERROR); 71*2de3b87aSKai Wang } 72*2de3b87aSKai Wang 73*2de3b87aSKai Wang *ret_name = $1->np_name; 74*2de3b87aSKai Wang 75*2de3b87aSKai Wang return (DW_DLV_OK); 76*2de3b87aSKai Wang} 77*2de3b87aSKai Wang 78*2de3b87aSKai Wangint 79*2de3b87aSKai Wangdwarf_$1_die_offset(Dwarf_$2 $1, Dwarf_Off *ret_offset, 80*2de3b87aSKai Wang Dwarf_Error *error) 81*2de3b87aSKai Wang{ 82*2de3b87aSKai Wang Dwarf_NameTbl nt; 83*2de3b87aSKai Wang Dwarf_Debug dbg; 84*2de3b87aSKai Wang 85*2de3b87aSKai Wang dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL; 86*2de3b87aSKai Wang 87*2de3b87aSKai Wang if ($1 == NULL || ret_offset == NULL) { 88*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 89*2de3b87aSKai Wang return (DW_DLV_ERROR); 90*2de3b87aSKai Wang } 91*2de3b87aSKai Wang 92*2de3b87aSKai Wang nt = $1->np_nt; 93*2de3b87aSKai Wang assert(nt != NULL); 94*2de3b87aSKai Wang 95*2de3b87aSKai Wang *ret_offset = nt->nt_cu_offset + $1->np_offset; 96*2de3b87aSKai Wang 97*2de3b87aSKai Wang return (DW_DLV_OK); 98*2de3b87aSKai Wang} 99*2de3b87aSKai Wang 100*2de3b87aSKai Wangint 101*2de3b87aSKai Wangdwarf_$1_cu_offset(Dwarf_$2 $1, Dwarf_Off *ret_offset, 102*2de3b87aSKai Wang Dwarf_Error *error) 103*2de3b87aSKai Wang{ 104*2de3b87aSKai Wang Dwarf_NameTbl nt; 105*2de3b87aSKai Wang Dwarf_Debug dbg; 106*2de3b87aSKai Wang 107*2de3b87aSKai Wang dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL; 108*2de3b87aSKai Wang 109*2de3b87aSKai Wang if ($1 == NULL || ret_offset == NULL) { 110*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 111*2de3b87aSKai Wang return (DW_DLV_ERROR); 112*2de3b87aSKai Wang } 113*2de3b87aSKai Wang 114*2de3b87aSKai Wang nt = $1->np_nt; 115*2de3b87aSKai Wang assert(nt != NULL); 116*2de3b87aSKai Wang 117*2de3b87aSKai Wang *ret_offset = nt->nt_cu_offset; 118*2de3b87aSKai Wang 119*2de3b87aSKai Wang return (DW_DLV_OK); 120*2de3b87aSKai Wang} 121*2de3b87aSKai Wang 122*2de3b87aSKai Wangint 123*2de3b87aSKai Wangdwarf_$1_name_offsets(Dwarf_$2 $1, char **ret_name, Dwarf_Off *die_offset, 124*2de3b87aSKai Wang Dwarf_Off *cu_offset, Dwarf_Error *error) 125*2de3b87aSKai Wang{ 126*2de3b87aSKai Wang Dwarf_CU cu; 127*2de3b87aSKai Wang Dwarf_Debug dbg; 128*2de3b87aSKai Wang Dwarf_NameTbl nt; 129*2de3b87aSKai Wang 130*2de3b87aSKai Wang dbg = $1 != NULL ? $1->np_nt->nt_cu->cu_dbg : NULL; 131*2de3b87aSKai Wang 132*2de3b87aSKai Wang if ($1 == NULL || ret_name == NULL || die_offset == NULL || 133*2de3b87aSKai Wang cu_offset == NULL) { 134*2de3b87aSKai Wang DWARF_SET_ERROR(dbg, error, DW_DLE_ARGUMENT); 135*2de3b87aSKai Wang return (DW_DLV_ERROR); 136*2de3b87aSKai Wang } 137*2de3b87aSKai Wang 138*2de3b87aSKai Wang nt = $1->np_nt; 139*2de3b87aSKai Wang assert(nt != NULL); 140*2de3b87aSKai Wang 141*2de3b87aSKai Wang cu = nt->nt_cu; 142*2de3b87aSKai Wang assert(cu != NULL); 143*2de3b87aSKai Wang 144*2de3b87aSKai Wang *ret_name = $1->np_name; 145*2de3b87aSKai Wang *die_offset = nt->nt_cu_offset + $1->np_offset; 146*2de3b87aSKai Wang *cu_offset = cu->cu_1st_offset; 147*2de3b87aSKai Wang 148*2de3b87aSKai Wang return (DW_DLV_OK); 149*2de3b87aSKai Wang} 150*2de3b87aSKai Wang 151*2de3b87aSKai Wangvoid 152*2de3b87aSKai Wangdwarf_$1s_dealloc(Dwarf_Debug dbg, Dwarf_$2 *$1s, Dwarf_Signed count) 153*2de3b87aSKai Wang{ 154*2de3b87aSKai Wang 155*2de3b87aSKai Wang (void) dbg; 156*2de3b87aSKai Wang (void) $1s; 157*2de3b87aSKai Wang (void) count; 158*2de3b87aSKai Wang} 159*2de3b87aSKai Wang') 160