Blame dwarfdump/print_gdbindex.c

Packit cdaae3
/*
Packit cdaae3
  Copyright 2014-2014 David Anderson. All rights reserved.
Packit cdaae3
Packit cdaae3
  This program is free software; you can redistribute it and/or modify it
Packit cdaae3
  under the terms of version 2 of the GNU General Public License as
Packit cdaae3
  published by the Free Software Foundation.
Packit cdaae3
Packit cdaae3
  This program is distributed in the hope that it would be useful, but
Packit cdaae3
  WITHOUT ANY WARRANTY; without even the implied warranty of
Packit cdaae3
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Packit cdaae3
Packit cdaae3
  Further, this software is distributed without any warranty that it is
Packit cdaae3
  free of the rightful claim of any third person regarding infringement
Packit cdaae3
  or the like.  Any license provided herein, whether implied or
Packit cdaae3
  otherwise, applies only to this software file.  Patent licenses, if
Packit cdaae3
  any, provided herein do not apply to combinations of this program with
Packit cdaae3
  other software, or any other product whatsoever.
Packit cdaae3
Packit cdaae3
  You should have received a copy of the GNU General Public License along
Packit cdaae3
  with this program; if not, write the Free Software Foundation, Inc., 51
Packit cdaae3
  Franklin Street - Fifth Floor, Boston MA 02110-1301, USA.
Packit cdaae3
*/
Packit cdaae3
Packit cdaae3
#include "globals.h"
Packit cdaae3
#include "naming.h"
Packit cdaae3
#include "esb.h"
Packit cdaae3
Packit cdaae3
#include "print_sections.h"
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
print_culist_array(Dwarf_Debug dbg,
Packit cdaae3
    Dwarf_Gdbindex  gdbindex,
Packit cdaae3
    Dwarf_Unsigned *cu_list_len,
Packit cdaae3
    Dwarf_Error * culist_err)
Packit cdaae3
{
Packit cdaae3
    Dwarf_Unsigned list_len = 0;
Packit cdaae3
    Dwarf_Unsigned i;
Packit cdaae3
    int res = dwarf_gdbindex_culist_array(gdbindex,
Packit cdaae3
        &list_len,culist_err);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_culist_array failed",res,*culist_err);
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    printf("  CU list. array length: %" DW_PR_DUu
Packit cdaae3
        " format: [entry#] cuoffset culength\n",
Packit cdaae3
        list_len);
Packit cdaae3
Packit cdaae3
    for( i  = 0; i < list_len; i++) {
Packit cdaae3
        Dwarf_Unsigned cuoffset = 0;
Packit cdaae3
        Dwarf_Unsigned culength = 0;
Packit cdaae3
        res = dwarf_gdbindex_culist_entry(gdbindex,i,
Packit cdaae3
            &cuoffset,&culength,culist_err);
Packit cdaae3
        if (res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_culist_entry failed",res,*culist_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        printf("    [%4" DW_PR_DUu "] 0x%"
Packit cdaae3
            DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " 0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
            i,
Packit cdaae3
            cuoffset,
Packit cdaae3
            culength);
Packit cdaae3
    }
Packit cdaae3
    printf("\n");
Packit cdaae3
    *cu_list_len = list_len;
Packit cdaae3
    return DW_DLV_OK;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
print_types_culist_array(Dwarf_Debug dbg,
Packit cdaae3
    Dwarf_Gdbindex  gdbindex,
Packit cdaae3
    Dwarf_Error * cular_err)
Packit cdaae3
{
Packit cdaae3
    Dwarf_Unsigned list_len = 0;
Packit cdaae3
    Dwarf_Unsigned i;
Packit cdaae3
    int res = dwarf_gdbindex_types_culist_array(gdbindex,
Packit cdaae3
        &list_len,cular_err);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_types_culist_array failed",res,*cular_err);
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    printf("  TU list. array length: %" DW_PR_DUu
Packit cdaae3
        " format: [entry#] cuoffset culength signature\n",
Packit cdaae3
        list_len);
Packit cdaae3
Packit cdaae3
    for( i  = 0; i < list_len; i++) {
Packit cdaae3
        Dwarf_Unsigned cuoffset = 0;
Packit cdaae3
        Dwarf_Unsigned culength = 0;
Packit cdaae3
        Dwarf_Unsigned signature = 0;
Packit cdaae3
Packit cdaae3
        res = dwarf_gdbindex_types_culist_entry(gdbindex,i,
Packit cdaae3
            &cuoffset,&culength,
Packit cdaae3
            &signature,
Packit cdaae3
            cular_err);
Packit cdaae3
        if (res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_culist_entry failed",res,*cular_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        printf("    [%4" DW_PR_DUu "] 0x%"
Packit cdaae3
            DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " 0x%" DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " 0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
            i,
Packit cdaae3
            cuoffset,
Packit cdaae3
            culength,
Packit cdaae3
            signature);
Packit cdaae3
    }
Packit cdaae3
    printf("\n");
Packit cdaae3
    return DW_DLV_OK;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
print_addressarea(Dwarf_Debug dbg,
Packit cdaae3
    Dwarf_Gdbindex  gdbindex,
Packit cdaae3
    Dwarf_Error * addra_err)
Packit cdaae3
{
Packit cdaae3
    Dwarf_Unsigned list_len = 0;
Packit cdaae3
    Dwarf_Unsigned i;
Packit cdaae3
    int res = dwarf_gdbindex_addressarea(gdbindex,
Packit cdaae3
        &list_len,addra_err);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_addressarea failed",res,*addra_err);
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    printf("  Address table array length: %" DW_PR_DUu
Packit cdaae3
        " format: [entry#] lowpc highpc cu-index\n",
Packit cdaae3
        list_len);
Packit cdaae3
Packit cdaae3
    for( i  = 0; i < list_len; i++) {
Packit cdaae3
        Dwarf_Unsigned lowpc = 0;
Packit cdaae3
        Dwarf_Unsigned highpc = 0;
Packit cdaae3
        Dwarf_Unsigned cu_index = 0;
Packit cdaae3
Packit cdaae3
        res = dwarf_gdbindex_addressarea_entry(gdbindex,i,
Packit cdaae3
            &lowpc,&highpc,
Packit cdaae3
            &cu_index,
Packit cdaae3
            addra_err);
Packit cdaae3
        if (res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_addressarea_entry failed",res,*addra_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        printf("    [%4" DW_PR_DUu "] 0x%"
Packit cdaae3
            DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " 0x%" DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " %4" DW_PR_DUu "\n",
Packit cdaae3
            i,
Packit cdaae3
            lowpc,
Packit cdaae3
            highpc,
Packit cdaae3
            cu_index);
Packit cdaae3
    }
Packit cdaae3
    printf("\n");
Packit cdaae3
    return DW_DLV_OK;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
const char *kind_list[] = {
Packit cdaae3
  "unknown(0)  ",
Packit cdaae3
  "type(1)     ",
Packit cdaae3
  "var-enum(2) ",
Packit cdaae3
  "function(3) ",
Packit cdaae3
  "other-sym(4)",
Packit cdaae3
  "reserved(5) ",
Packit cdaae3
  "function(6) ",
Packit cdaae3
  "reserved(7) ",
Packit cdaae3
};
Packit cdaae3
Packit cdaae3
static const char *
Packit cdaae3
get_kind(unsigned k)
Packit cdaae3
{
Packit cdaae3
    if (k <= 7) {
Packit cdaae3
        return kind_list[k];
Packit cdaae3
    }
Packit cdaae3
    return "kind-erroneous";
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
/*  NOTE: Returns pointer to static local string.
Packit cdaae3
    Use the returned pointer immediately or
Packit cdaae3
    things will not work properly.  */
Packit cdaae3
static char *
Packit cdaae3
cu_index_string(Dwarf_Unsigned index,
Packit cdaae3
    Dwarf_Unsigned culist_len)
Packit cdaae3
{
Packit cdaae3
    static char temp_space[40];
Packit cdaae3
    Dwarf_Unsigned type_index = 0;
Packit cdaae3
    if (index < culist_len) {
Packit cdaae3
        snprintf(temp_space,sizeof(temp_space), "%4" DW_PR_DUu,index);
Packit cdaae3
        return temp_space;
Packit cdaae3
    }
Packit cdaae3
    type_index = index-culist_len;
Packit cdaae3
    snprintf(temp_space,sizeof(temp_space),
Packit cdaae3
        "%4" DW_PR_DUu "(T%4" DW_PR_DUu ")",
Packit cdaae3
        index,type_index);
Packit cdaae3
    return temp_space;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
print_symtab_entry(Dwarf_Debug dbg,
Packit cdaae3
    Dwarf_Gdbindex gdbindex,
Packit cdaae3
    Dwarf_Unsigned index,
Packit cdaae3
    Dwarf_Unsigned symnameoffset,
Packit cdaae3
    Dwarf_Unsigned cuvecoffset,
Packit cdaae3
    Dwarf_Unsigned culist_len,
Packit cdaae3
    Dwarf_Error *sym_err)
Packit cdaae3
{
Packit cdaae3
    int res = 0;
Packit cdaae3
    const char *name = 0;
Packit cdaae3
    Dwarf_Unsigned cuvec_len = 0;
Packit cdaae3
    Dwarf_Unsigned ii = 0;
Packit cdaae3
Packit cdaae3
    if (symnameoffset == 0 && cuvecoffset == 0) {
Packit cdaae3
        if (verbose > 1) {
Packit cdaae3
            printf("        [%4" DW_PR_DUu "] \"empty-hash-entry\"\n", index);
Packit cdaae3
        }
Packit cdaae3
        return DW_DLV_OK;
Packit cdaae3
    }
Packit cdaae3
    res = dwarf_gdbindex_string_by_offset(gdbindex,
Packit cdaae3
        symnameoffset,&name,sym_err);
Packit cdaae3
    if(res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_string_by_offset failed",res,*sym_err);
Packit cdaae3
        *sym_err = 0;
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    res = dwarf_gdbindex_cuvector_length(gdbindex,
Packit cdaae3
        cuvecoffset,&cuvec_len,sym_err);
Packit cdaae3
    if( res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_cuvector_length failed",res,*sym_err);
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    if (verbose > 1) {
Packit cdaae3
        printf("     [%4" DW_PR_DUu "]"
Packit cdaae3
            "stroff 0x%"    DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " cuvecoff 0x%"    DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
            " cuveclen 0x%"    DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
            index,symnameoffset,cuvecoffset,cuvec_len);
Packit cdaae3
    }
Packit cdaae3
    for(ii = 0; ii < cuvec_len; ++ii ) {
Packit cdaae3
        Dwarf_Unsigned attributes = 0;
Packit cdaae3
        Dwarf_Unsigned cu_index = 0;
Packit cdaae3
        Dwarf_Unsigned reserved1 = 0;
Packit cdaae3
        Dwarf_Unsigned symbol_kind = 0;
Packit cdaae3
        Dwarf_Unsigned is_static = 0;
Packit cdaae3
Packit cdaae3
        res = dwarf_gdbindex_cuvector_inner_attributes(
Packit cdaae3
            gdbindex,cuvecoffset,ii,
Packit cdaae3
            &attributes,sym_err);
Packit cdaae3
        if( res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_cuvector_inner_attributes failed",res,*sym_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        res = dwarf_gdbindex_cuvector_instance_expand_value(gdbindex,
Packit cdaae3
            attributes, &cu_index,&reserved1,&symbol_kind, &is_static,
Packit cdaae3
            sym_err);
Packit cdaae3
        if( res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_cuvector_instance_expand_value failed",res,*sym_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        /*  if cu_index is > the cu-count, then it  refers
Packit cdaae3
            to a tu_index of  'cu_index - cu-count' */
Packit cdaae3
        if (cuvec_len == 1) {
Packit cdaae3
            printf("  [%4" DW_PR_DUu "]"
Packit cdaae3
                "%s"
Packit cdaae3
                " [%s %s] \"%s\"\n",
Packit cdaae3
                index,
Packit cdaae3
                cu_index_string(cu_index,culist_len),
Packit cdaae3
                is_static?
Packit cdaae3
                    "static ":
Packit cdaae3
                    "global ",
Packit cdaae3
                get_kind(symbol_kind),
Packit cdaae3
                name);
Packit cdaae3
        } else if (ii == 0) {
Packit cdaae3
            printf("  [%4" DW_PR_DUu "] \"%s\"\n" ,
Packit cdaae3
                index,
Packit cdaae3
                name);
Packit cdaae3
            printf("         %s [%s %s]\n",
Packit cdaae3
                cu_index_string(cu_index,culist_len),
Packit cdaae3
                is_static?
Packit cdaae3
                    "static ":
Packit cdaae3
                    "global ",
Packit cdaae3
                get_kind(symbol_kind));
Packit cdaae3
        }else{
Packit cdaae3
            printf("         %s [%s %s]\n",
Packit cdaae3
                cu_index_string(cu_index,culist_len),
Packit cdaae3
                is_static?
Packit cdaae3
                    "static ":
Packit cdaae3
                    "global ",
Packit cdaae3
                get_kind(symbol_kind));
Packit cdaae3
        }
Packit cdaae3
        if (verbose > 1) {
Packit cdaae3
            printf("        [%4" DW_PR_DUu "]"
Packit cdaae3
                "attr 0x%"    DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
                " cuindx 0x%"    DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
                " kind 0x%"    DW_PR_XZEROS DW_PR_DUx
Packit cdaae3
                " static 0x%"    DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
                ii,attributes,cu_index,symbol_kind,is_static);
Packit cdaae3
        }
Packit cdaae3
Packit cdaae3
    }
Packit cdaae3
    return DW_DLV_OK;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
static int
Packit cdaae3
print_symboltable(Dwarf_Debug dbg,
Packit cdaae3
    Dwarf_Gdbindex  gdbindex,
Packit cdaae3
    Dwarf_Unsigned culist_len,
Packit cdaae3
    Dwarf_Error * symt_err)
Packit cdaae3
{
Packit cdaae3
    Dwarf_Unsigned list_len = 0;
Packit cdaae3
    Dwarf_Unsigned i;
Packit cdaae3
    int res = dwarf_gdbindex_symboltable_array(gdbindex,
Packit cdaae3
        &list_len,symt_err);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        print_error_and_continue(dbg,
Packit cdaae3
            "dwarf_gdbindex_symboltable failed",res,*symt_err);
Packit cdaae3
        return res;
Packit cdaae3
    }
Packit cdaae3
    printf("\n  Symbol table: length %" DW_PR_DUu
Packit cdaae3
        " format: [entry#] symindex cuindex [type] \"name\" or \n",
Packit cdaae3
        list_len);
Packit cdaae3
    printf("                          "
Packit cdaae3
        " format: [entry#]  \"name\" , list of  cuindex [type]\n");
Packit cdaae3
Packit cdaae3
    for( i  = 0; i < list_len; i++) {
Packit cdaae3
        Dwarf_Unsigned symnameoffset = 0;
Packit cdaae3
        Dwarf_Unsigned cuvecoffset = 0;
Packit cdaae3
        res = dwarf_gdbindex_symboltable_entry(gdbindex,i,
Packit cdaae3
            &symnameoffset,&cuvecoffset,
Packit cdaae3
            symt_err);
Packit cdaae3
        if (res != DW_DLV_OK) {
Packit cdaae3
            print_error_and_continue(dbg,
Packit cdaae3
                "dwarf_gdbindex_symboltable_entry failed",res,*symt_err);
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
        res = print_symtab_entry(dbg,gdbindex,i,symnameoffset,cuvecoffset,
Packit cdaae3
            culist_len,symt_err);
Packit cdaae3
        if (res != DW_DLV_OK) {
Packit cdaae3
            return res;
Packit cdaae3
        }
Packit cdaae3
    }
Packit cdaae3
    printf("\n");
Packit cdaae3
    return DW_DLV_OK;
Packit cdaae3
}
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
Packit cdaae3
extern void
Packit cdaae3
print_gdb_index(Dwarf_Debug dbg)
Packit cdaae3
{
Packit cdaae3
    Dwarf_Gdbindex  gdbindex = 0;
Packit cdaae3
    Dwarf_Unsigned version = 0;
Packit cdaae3
    Dwarf_Unsigned cu_list_offset = 0;
Packit cdaae3
    Dwarf_Unsigned types_cu_list_offset = 0;
Packit cdaae3
    Dwarf_Unsigned address_area_offset = 0;
Packit cdaae3
    Dwarf_Unsigned symbol_table_offset = 0;
Packit cdaae3
    Dwarf_Unsigned constant_pool_offset = 0;
Packit cdaae3
    Dwarf_Unsigned section_size = 0;
Packit cdaae3
    Dwarf_Unsigned unused = 0;
Packit cdaae3
    Dwarf_Error error = 0;
Packit cdaae3
    const char *section_name = 0;
Packit cdaae3
    Dwarf_Unsigned culist_len = 0;
Packit cdaae3
Packit cdaae3
    int res = 0;
Packit cdaae3
    current_section_id = DEBUG_GDB_INDEX;
Packit cdaae3
    res = dwarf_gdbindex_header(dbg, &gdbindex,
Packit cdaae3
        &version,
Packit cdaae3
        &cu_list_offset,
Packit cdaae3
        &types_cu_list_offset,
Packit cdaae3
        &address_area_offset,
Packit cdaae3
        &symbol_table_offset,
Packit cdaae3
        &constant_pool_offset,
Packit cdaae3
        &section_size,
Packit cdaae3
        &unused,
Packit cdaae3
        &section_name,
Packit cdaae3
        &error);
Packit cdaae3
Packit cdaae3
    if (!glflags.gf_do_print_dwarf) {
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
    if(res == DW_DLV_NO_ENTRY) {
Packit cdaae3
        /*  Silently! The section is rare so lets
Packit cdaae3
            say nothing. */
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
    if (!section_name || !*section_name) {
Packit cdaae3
        section_name = ".gdb_index";
Packit cdaae3
    }
Packit cdaae3
    printf("\n%s\n",section_name);
Packit cdaae3
    if( res == DW_DLV_ERROR) {
Packit cdaae3
        print_error(dbg,"dwarf_gdbindex_header",res,error);
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
Packit cdaae3
    printf("  Version             : "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx  "\n",
Packit cdaae3
        version);
Packit cdaae3
    printf("  CU list offset      : "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
        cu_list_offset);
Packit cdaae3
    printf("  Address area offset : "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
        types_cu_list_offset);
Packit cdaae3
    printf("  Symbol table offset : "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
        address_area_offset);
Packit cdaae3
    printf("  Constant pool offset: "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
        constant_pool_offset);
Packit cdaae3
    printf("  section size        : "
Packit cdaae3
        "0x%" DW_PR_XZEROS DW_PR_DUx "\n",
Packit cdaae3
        section_size);
Packit cdaae3
Packit cdaae3
Packit cdaae3
    res = print_culist_array(dbg,gdbindex,&culist_len,&error);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        if (res == DW_DLV_ERROR) {
Packit cdaae3
            dwarf_dealloc(dbg,error, DW_DLA_ERROR);
Packit cdaae3
            error = 0;
Packit cdaae3
        }
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
    res = print_types_culist_array(dbg,gdbindex,&error);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        if (res == DW_DLV_ERROR) {
Packit cdaae3
            dwarf_dealloc(dbg,error, DW_DLA_ERROR);
Packit cdaae3
            error = 0;
Packit cdaae3
        }
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
    res = print_addressarea(dbg,gdbindex,&error);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        if (res == DW_DLV_ERROR) {
Packit cdaae3
            dwarf_dealloc(dbg,error, DW_DLA_ERROR);
Packit cdaae3
            error = 0;
Packit cdaae3
        }
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
    res = print_symboltable(dbg,gdbindex,culist_len,&error);
Packit cdaae3
    if (res != DW_DLV_OK) {
Packit cdaae3
        if (res == DW_DLV_ERROR) {
Packit cdaae3
            dwarf_dealloc(dbg,error, DW_DLA_ERROR);
Packit cdaae3
            error = 0;
Packit cdaae3
        }
Packit cdaae3
        return;
Packit cdaae3
    }
Packit cdaae3
}
Packit cdaae3