1*7fd79137SRobert Mustacchi /* 2*7fd79137SRobert Mustacchi 3*7fd79137SRobert Mustacchi Copyright (C) 2000-2005 Silicon Graphics, Inc. All Rights Reserved. 4*7fd79137SRobert Mustacchi Portions Copyright (C) 2008-2010 David Anderson. All Rights Reserved. 5*7fd79137SRobert Mustacchi 6*7fd79137SRobert Mustacchi This program is free software; you can redistribute it and/or modify it 7*7fd79137SRobert Mustacchi under the terms of version 2.1 of the GNU Lesser General Public License 8*7fd79137SRobert Mustacchi as published by the Free Software Foundation. 9*7fd79137SRobert Mustacchi 10*7fd79137SRobert Mustacchi This program is distributed in the hope that it would be useful, but 11*7fd79137SRobert Mustacchi WITHOUT ANY WARRANTY; without even the implied warranty of 12*7fd79137SRobert Mustacchi MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 13*7fd79137SRobert Mustacchi 14*7fd79137SRobert Mustacchi Further, this software is distributed without any warranty that it is 15*7fd79137SRobert Mustacchi free of the rightful claim of any third person regarding infringement 16*7fd79137SRobert Mustacchi or the like. Any license provided herein, whether implied or 17*7fd79137SRobert Mustacchi otherwise, applies only to this software file. Patent licenses, if 18*7fd79137SRobert Mustacchi any, provided herein do not apply to combinations of this program with 19*7fd79137SRobert Mustacchi other software, or any other product whatsoever. 20*7fd79137SRobert Mustacchi 21*7fd79137SRobert Mustacchi You should have received a copy of the GNU Lesser General Public 22*7fd79137SRobert Mustacchi License along with this program; if not, write the Free Software 23*7fd79137SRobert Mustacchi Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301, 24*7fd79137SRobert Mustacchi USA. 25*7fd79137SRobert Mustacchi 26*7fd79137SRobert Mustacchi Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane, 27*7fd79137SRobert Mustacchi Mountain View, CA 94043, or: 28*7fd79137SRobert Mustacchi 29*7fd79137SRobert Mustacchi http://www.sgi.com 30*7fd79137SRobert Mustacchi 31*7fd79137SRobert Mustacchi For further information regarding this notice, see: 32*7fd79137SRobert Mustacchi 33*7fd79137SRobert Mustacchi http://oss.sgi.com/projects/GenInfo/NoticeExplan 34*7fd79137SRobert Mustacchi 35*7fd79137SRobert Mustacchi */ 36*7fd79137SRobert Mustacchi 37*7fd79137SRobert Mustacchi 38*7fd79137SRobert Mustacchi 39*7fd79137SRobert Mustacchi #include "config.h" 40*7fd79137SRobert Mustacchi #include "dwarf_incl.h" 41*7fd79137SRobert Mustacchi #ifdef HAVE_ELF_H 42*7fd79137SRobert Mustacchi #include <elf.h> 43*7fd79137SRobert Mustacchi #endif 44*7fd79137SRobert Mustacchi 45*7fd79137SRobert Mustacchi #include <stdio.h> 46*7fd79137SRobert Mustacchi #include <sys/stat.h> 47*7fd79137SRobert Mustacchi #include <sys/types.h> 48*7fd79137SRobert Mustacchi #include <stdlib.h> 49*7fd79137SRobert Mustacchi 50*7fd79137SRobert Mustacchi /* Array to hold string representation of errors. Any time a 51*7fd79137SRobert Mustacchi define is added to the list in libdwarf.h, a string should be 52*7fd79137SRobert Mustacchi added to this Array 53*7fd79137SRobert Mustacchi */ 54*7fd79137SRobert Mustacchi 55*7fd79137SRobert Mustacchi const char *_dwarf_errmsgs[] = { 56*7fd79137SRobert Mustacchi 57*7fd79137SRobert Mustacchi "No error (0)\n", 58*7fd79137SRobert Mustacchi "DW_DLE_VMM 1 dwarf format/library version mismatch", 59*7fd79137SRobert Mustacchi "DW_DLE_MAP 2 memory map failure", 60*7fd79137SRobert Mustacchi "DW_DLE_LEE 3 libelf error", 61*7fd79137SRobert Mustacchi "DW_DLE_NDS 4 no debug section", 62*7fd79137SRobert Mustacchi "DW_DLE_NLS 5 no line section ", 63*7fd79137SRobert Mustacchi "DW_DLE_ID 6 invalid descriptor for query ", 64*7fd79137SRobert Mustacchi "DW_DLE_IOF 7 I/O failure ", 65*7fd79137SRobert Mustacchi "DW_DLE_MAF 8 memory allocation failure ", 66*7fd79137SRobert Mustacchi "DW_DLE_IA 9 invalid argument ", 67*7fd79137SRobert Mustacchi "DW_DLE_MDE 10 mangled debugging entry ", 68*7fd79137SRobert Mustacchi "DW_DLE_MLE 11 mangled line number entry ", 69*7fd79137SRobert Mustacchi "DW_DLE_FNO 12 file not open ", 70*7fd79137SRobert Mustacchi "DW_DLE_FNR 13 file not a regular file ", 71*7fd79137SRobert Mustacchi "DW_DLE_FWA 14 file open with wrong access ", 72*7fd79137SRobert Mustacchi "DW_DLE_NOB 15 not an object file ", 73*7fd79137SRobert Mustacchi "DW_DLE_MOF 16 mangled object file header ", 74*7fd79137SRobert Mustacchi "DW_DLE_EOLL 17 end of location list entries ", 75*7fd79137SRobert Mustacchi "DW_DLE_NOLL 18 no location list section ", 76*7fd79137SRobert Mustacchi "DW_DLE_BADOFF 19 Invalid offset ", 77*7fd79137SRobert Mustacchi "DW_DLE_EOS 20 end of section ", 78*7fd79137SRobert Mustacchi "DW_DLE_ATRUNC 21 abbreviations section appears truncated", 79*7fd79137SRobert Mustacchi "DW_DLE_BADBITC 22 Address size passed to dwarf bad", 80*7fd79137SRobert Mustacchi 81*7fd79137SRobert Mustacchi "DW_DLE_DBG_ALLOC 23 Unable to malloc a Dwarf_Debug structure", 82*7fd79137SRobert Mustacchi "DW_DLE_FSTAT_ERROR 24 The file fd passed to dwarf_init " 83*7fd79137SRobert Mustacchi "cannot be fstat()ed", 84*7fd79137SRobert Mustacchi "DW_DLE_FSTAT_MODE_ERROR 25 The file mode bits do not " 85*7fd79137SRobert Mustacchi "indicate that the file being opened via " 86*7fd79137SRobert Mustacchi "dwarf_init() is a normal file", 87*7fd79137SRobert Mustacchi "DW_DLE_INIT_ACCESS_WRONG 26 A call to dwarf_init had an " 88*7fd79137SRobert Mustacchi "access of other than DW_DLC_READ", 89*7fd79137SRobert Mustacchi "DW_DLE_ELF_BEGIN_ERROR 27 a call to " 90*7fd79137SRobert Mustacchi "elf_begin(... ELF_C_READ_MMAP... ) failed", 91*7fd79137SRobert Mustacchi "DW_DLE_ELF_GETEHDR_ERROR 28 a call to " 92*7fd79137SRobert Mustacchi "elf32_getehdr() or elf64_getehdr() failed", 93*7fd79137SRobert Mustacchi "DW_DLE_ELF_GETSHDR_ERROR 29 a call to " 94*7fd79137SRobert Mustacchi "elf32_getshdr() or elf64_getshdr() failed", 95*7fd79137SRobert Mustacchi "DW_DLE_ELF_STRPTR_ERROR 30 a call to " 96*7fd79137SRobert Mustacchi "elf_strptr() failed trying to get a section name", 97*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_INFO_DUPLICATE 31 Only one .debug_info " 98*7fd79137SRobert Mustacchi "section is allowed", 99*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_INFO_NULL 32 .debug_info section present but " 100*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 101*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_ABBREV_DUPLICATE 33 Only one .debug_abbrev " 102*7fd79137SRobert Mustacchi "section is allowed", 103*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_ABBREV_NULL 34 .debug_abbrev section present but " 104*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 105*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_ARANGES_DUPLICATE 35 Only one .debug_aranges " 106*7fd79137SRobert Mustacchi "section is allowed", 107*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_ARANGES_NULL 36 .debug_aranges section present but " 108*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 109*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LINE_DUPLICATE 37 Only one .debug_line " 110*7fd79137SRobert Mustacchi "section is allowed", 111*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LINE_NULL (38) .debug_line section present but " 112*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 113*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LOC_DUPLICATE (39) Only one .debug_loc " 114*7fd79137SRobert Mustacchi "section is allowed", 115*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LOC_NULL (40) .debug_loc section present but " 116*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 117*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACINFO_DUPLICATE (41) Only one .debug_macinfo " 118*7fd79137SRobert Mustacchi "section is allowed", 119*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACINFO_NULL (42) .debug_macinfo section present but " 120*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 121*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_PUBNAMES_DUPLICATE (43) Only one .debug_pubnames " 122*7fd79137SRobert Mustacchi "section is allowed", 123*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_PUBNAMES_NULL (44) .debug_pubnames section present but " 124*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 125*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_STR_DUPLICATE (45) Only one .debug_str " 126*7fd79137SRobert Mustacchi "section is allowed", 127*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_STR_NULL (46) .debug_str section present but " 128*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 129*7fd79137SRobert Mustacchi "DW_DLE_CU_LENGTH_ERROR (47)", 130*7fd79137SRobert Mustacchi "DW_DLE_VERSION_STAMP_ERROR (48)", 131*7fd79137SRobert Mustacchi "DW_DLE_ABBREV_OFFSET_ERROR (49)", 132*7fd79137SRobert Mustacchi "DW_DLE_ADDRESS_SIZE_ERROR (50)", 133*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_INFO_PTR_NULL (51)", 134*7fd79137SRobert Mustacchi "DW_DLE_DIE_NULL (52)", 135*7fd79137SRobert Mustacchi "DW_DLE_STRING_OFFSET_BAD (53)", 136*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LINE_LENGTH_BAD (54)", 137*7fd79137SRobert Mustacchi "DW_DLE_LINE_PROLOG_LENGTH_BAD (55)", 138*7fd79137SRobert Mustacchi "DW_DLE_LINE_NUM_OPERANDS_BAD", 139*7fd79137SRobert Mustacchi "DW_DLE_LINE_SET_ADDR_ERROR", 140*7fd79137SRobert Mustacchi "DW_DLE_LINE_EXT_OPCODE_BAD", 141*7fd79137SRobert Mustacchi "DW_DLE_DWARF_LINE_NULL", 142*7fd79137SRobert Mustacchi "DW_DLE_INCL_DIR_NUM_BAD", 143*7fd79137SRobert Mustacchi "DW_DLE_LINE_FILE_NUM_BAD", 144*7fd79137SRobert Mustacchi "DW_DLE_ALLOC_FAIL", 145*7fd79137SRobert Mustacchi "DW_DLE_NO_CALLBACK_FUNC", 146*7fd79137SRobert Mustacchi "DW_DLE_SECT_ALLOC", 147*7fd79137SRobert Mustacchi "DW_DLE_FILE_ENTRY_ALLOC", 148*7fd79137SRobert Mustacchi "DW_DLE_LINE_ALLOC", 149*7fd79137SRobert Mustacchi "DW_DLE_FPGM_ALLOC", 150*7fd79137SRobert Mustacchi "DW_DLE_INCDIR_ALLOC", 151*7fd79137SRobert Mustacchi "DW_DLE_STRING_ALLOC", 152*7fd79137SRobert Mustacchi "DW_DLE_CHUNK_ALLOC", 153*7fd79137SRobert Mustacchi "DW_DLE_BYTEOFF_ERR", 154*7fd79137SRobert Mustacchi "DW_DLE_CIE_ALLOC", 155*7fd79137SRobert Mustacchi "DW_DLE_FDE_ALLOC", 156*7fd79137SRobert Mustacchi "DW_DLE_REGNO_OVFL", 157*7fd79137SRobert Mustacchi "DW_DLE_CIE_OFFS_ALLOC", 158*7fd79137SRobert Mustacchi "DW_DLE_WRONG_ADDRESS", 159*7fd79137SRobert Mustacchi "DW_DLE_EXTRA_NEIGHBORS", 160*7fd79137SRobert Mustacchi "DW_DLE_WRONG_TAG", 161*7fd79137SRobert Mustacchi "DW_DLE_DIE_ALLOC", 162*7fd79137SRobert Mustacchi "DW_DLE_PARENT_EXISTS", 163*7fd79137SRobert Mustacchi "DW_DLE_DBG_NULL", 164*7fd79137SRobert Mustacchi "DW_DLE_DEBUGLINE_ERROR", 165*7fd79137SRobert Mustacchi "DW_DLE_DEBUGFRAME_ERROR", 166*7fd79137SRobert Mustacchi "DW_DLE_DEBUGINFO_ERROR", 167*7fd79137SRobert Mustacchi "DW_DLE_ATTR_ALLOC", 168*7fd79137SRobert Mustacchi "DW_DLE_ABBREV_ALLOC", 169*7fd79137SRobert Mustacchi "DW_DLE_OFFSET_UFLW", 170*7fd79137SRobert Mustacchi "DW_DLE_ELF_SECT_ERR", 171*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FRAME_LENGTH_BAD", 172*7fd79137SRobert Mustacchi "DW_DLE_FRAME_VERSION_BAD", 173*7fd79137SRobert Mustacchi "DW_DLE_CIE_RET_ADDR_REG_ERROR", 174*7fd79137SRobert Mustacchi "DW_DLE_FDE_NULL", 175*7fd79137SRobert Mustacchi "DW_DLE_FDE_DBG_NULL", 176*7fd79137SRobert Mustacchi "DW_DLE_CIE_NULL", 177*7fd79137SRobert Mustacchi "DW_DLE_CIE_DBG_NULL", 178*7fd79137SRobert Mustacchi "DW_DLE_FRAME_TABLE_COL_BAD", 179*7fd79137SRobert Mustacchi "DW_DLE_PC_NOT_IN_FDE_RANGE", 180*7fd79137SRobert Mustacchi "DW_DLE_CIE_INSTR_EXEC_ERROR", 181*7fd79137SRobert Mustacchi "DW_DLE_FRAME_INSTR_EXEC_ERROR", 182*7fd79137SRobert Mustacchi "DW_DLE_FDE_PTR_NULL", 183*7fd79137SRobert Mustacchi "DW_DLE_RET_OP_LIST_NULL", 184*7fd79137SRobert Mustacchi "DW_DLE_LINE_CONTEXT_NULL", 185*7fd79137SRobert Mustacchi "DW_DLE_DBG_NO_CU_CONTEXT", 186*7fd79137SRobert Mustacchi "DW_DLE_DIE_NO_CU_CONTEXT", 187*7fd79137SRobert Mustacchi "DW_DLE_FIRST_DIE_NOT_CU", 188*7fd79137SRobert Mustacchi "DW_DLE_NEXT_DIE_PTR_NULL", 189*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FRAME_DUPLICATE Only one .debug_frame " 190*7fd79137SRobert Mustacchi "section is allowed", 191*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FRAME_NULL .debug_frame section present but " 192*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 193*7fd79137SRobert Mustacchi "DW_DLE_ABBREV_DECODE_ERROR", 194*7fd79137SRobert Mustacchi "DW_DLE_DWARF_ABBREV_NULL", 195*7fd79137SRobert Mustacchi "DW_DLE_ATTR_NULL", 196*7fd79137SRobert Mustacchi "DW_DLE_DIE_BAD", 197*7fd79137SRobert Mustacchi "DW_DLE_DIE_ABBREV_BAD", 198*7fd79137SRobert Mustacchi "DW_DLE_ATTR_FORM_BAD", 199*7fd79137SRobert Mustacchi "DW_DLE_ATTR_NO_CU_CONTEXT", 200*7fd79137SRobert Mustacchi "DW_DLE_ATTR_FORM_SIZE_BAD", 201*7fd79137SRobert Mustacchi "DW_DLE_ATTR_DBG_NULL", 202*7fd79137SRobert Mustacchi "DW_DLE_BAD_REF_FORM", 203*7fd79137SRobert Mustacchi "DW_DLE_ATTR_FORM_OFFSET_BAD", 204*7fd79137SRobert Mustacchi "DW_DLE_LINE_OFFSET_BAD", 205*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_STR_OFFSET_BAD", 206*7fd79137SRobert Mustacchi "DW_DLE_STRING_PTR_NULL", 207*7fd79137SRobert Mustacchi "DW_DLE_PUBNAMES_VERSION_ERROR", 208*7fd79137SRobert Mustacchi "DW_DLE_PUBNAMES_LENGTH_BAD", 209*7fd79137SRobert Mustacchi "DW_DLE_GLOBAL_NULL", 210*7fd79137SRobert Mustacchi "DW_DLE_GLOBAL_CONTEXT_NULL", 211*7fd79137SRobert Mustacchi "DW_DLE_DIR_INDEX_BAD", 212*7fd79137SRobert Mustacchi "DW_DLE_LOC_EXPR_BAD", 213*7fd79137SRobert Mustacchi "DW_DLE_DIE_LOC_EXPR_BAD", 214*7fd79137SRobert Mustacchi "DW_DLE_ADDR_ALLOC", 215*7fd79137SRobert Mustacchi "DW_DLE_OFFSET_BAD", 216*7fd79137SRobert Mustacchi "DW_DLE_MAKE_CU_CONTEXT_FAIL", 217*7fd79137SRobert Mustacchi "DW_DLE_REL_ALLOC", 218*7fd79137SRobert Mustacchi "DW_DLE_ARANGE_OFFSET_BAD", 219*7fd79137SRobert Mustacchi "DW_DLE_SEGMENT_SIZE_BAD", 220*7fd79137SRobert Mustacchi "DW_DLE_ARANGE_LENGTH_BAD", 221*7fd79137SRobert Mustacchi "DW_DLE_ARANGE_DECODE_ERROR", 222*7fd79137SRobert Mustacchi "DW_DLE_ARANGES_NULL", 223*7fd79137SRobert Mustacchi "DW_DLE_ARANGE_NULL", 224*7fd79137SRobert Mustacchi "DW_DLE_NO_FILE_NAME", 225*7fd79137SRobert Mustacchi "DW_DLE_NO_COMP_DIR", 226*7fd79137SRobert Mustacchi "DW_DLE_CU_ADDRESS_SIZE_BAD", 227*7fd79137SRobert Mustacchi "DW_DLE_INPUT_ATTR_BAD", 228*7fd79137SRobert Mustacchi "DW_DLE_EXPR_NULL", 229*7fd79137SRobert Mustacchi "DW_DLE_BAD_EXPR_OPCODE", 230*7fd79137SRobert Mustacchi "DW_DLE_EXPR_LENGTH_BAD", 231*7fd79137SRobert Mustacchi "DW_DLE_MULTIPLE_RELOC_IN_EXPR", 232*7fd79137SRobert Mustacchi "DW_DLE_ELF_GETIDENT_ERROR", 233*7fd79137SRobert Mustacchi "DW_DLE_NO_AT_MIPS_FDE", 234*7fd79137SRobert Mustacchi "DW_DLE_NO_CIE_FOR_FDE", 235*7fd79137SRobert Mustacchi "DW_DLE_DIE_ABBREV_LIST_NULL", 236*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FUNCNAMES_DUPLICATE", 237*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FUNCNAMES_NULL .debug_funcnames section present but " 238*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 239*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR", 240*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD", 241*7fd79137SRobert Mustacchi "DW_DLE_FUNC_NULL", 242*7fd79137SRobert Mustacchi "DW_DLE_FUNC_CONTEXT_NULL", 243*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_TYPENAMES_DUPLICATE", 244*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_TYPENAMES_NULL .debug_typenames section present but " 245*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 246*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR", 247*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD", 248*7fd79137SRobert Mustacchi "DW_DLE_TYPE_NULL", 249*7fd79137SRobert Mustacchi "DW_DLE_TYPE_CONTEXT_NULL", 250*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_VARNAMES_DUPLICATE", 251*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_VARNAMES_NULL .debug_varnames section present but " 252*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 253*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_VARNAMES_VERSION_ERROR", 254*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_VARNAMES_LENGTH_BAD", 255*7fd79137SRobert Mustacchi "DW_DLE_VAR_NULL", 256*7fd79137SRobert Mustacchi "DW_DLE_VAR_CONTEXT_NULL", 257*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_WEAKNAMES_DUPLICATE", 258*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_WEAKNAMES_NULL .debug_weaknames section present but " 259*7fd79137SRobert Mustacchi "elf_getdata() failed or section is zero-length", 260*7fd79137SRobert Mustacchi 261*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR", 262*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD", 263*7fd79137SRobert Mustacchi "DW_DLE_WEAK_NULL", 264*7fd79137SRobert Mustacchi "DW_DLE_WEAK_CONTEXT_NULL (175)", 265*7fd79137SRobert Mustacchi "DW_DLE_LOCDESC_COUNT_WRONG (176)", 266*7fd79137SRobert Mustacchi "DW_DLE_MACINFO_STRING_NULL (177)", 267*7fd79137SRobert Mustacchi "DW_DLE_MACINFO_STRING_EMPTY (178)", 268*7fd79137SRobert Mustacchi "DW_DLE_MACINFO_INTERNAL_ERROR_SPACE (179)", 269*7fd79137SRobert Mustacchi "DW_DLE_MACINFO_MALLOC_FAIL (180)", 270*7fd79137SRobert Mustacchi "DW_DLE_DEBUGMACINFO_ERROR (181)", 271*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACRO_LENGTH_BAD (182)", 272*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACRO_MAX_BAD (183)", 273*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACRO_INTERNAL_ERR (184)", 274*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACRO_MALLOC_SPACE (185)", 275*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_MACRO_INCONSISTENT (186)", 276*7fd79137SRobert Mustacchi "DW_DLE_DF_NO_CIE_AUGMENTATION(187)", 277*7fd79137SRobert Mustacchi "DW_DLE_DF_REG_NUM_TOO_HIGH(188)", 278*7fd79137SRobert Mustacchi "DW_DLE_DF_MAKE_INSTR_NO_INIT(189)", 279*7fd79137SRobert Mustacchi "DW_DLE_DF_NEW_LOC_LESS_OLD_LOC(190)", 280*7fd79137SRobert Mustacchi "DW_DLE_DF_POP_EMPTY_STACK(191)", 281*7fd79137SRobert Mustacchi "DW_DLE_DF_ALLOC_FAIL(192)", 282*7fd79137SRobert Mustacchi "DW_DLE_DF_FRAME_DECODING_ERROR(193)", 283*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_LOC_SECTION_SHORT(194)", 284*7fd79137SRobert Mustacchi "DW_DLE_FRAME_AUGMENTATION_UNKNOWN(195)", 285*7fd79137SRobert Mustacchi "DW_DLE_PUBTYPE_CONTEXT(196)", 286*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD(197)", 287*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR(198)", 288*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_PUBTYPES_DUPLICATE(199)", 289*7fd79137SRobert Mustacchi "DW_DLE_FRAME_CIE_DECODE_ERROR(200)", 290*7fd79137SRobert Mustacchi "DW_DLE_FRAME_REGISTER_UNREPRESENTABLE(201)", 291*7fd79137SRobert Mustacchi "DW_DLE_FRAME_REGISTER_COUNT_MISMATCH(202)", 292*7fd79137SRobert Mustacchi "DW_DLE_LINK_LOOP(203)", 293*7fd79137SRobert Mustacchi "DW_DLE_STRP_OFFSET_BAD(204)", 294*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_RANGES_DUPLICATE(205)", 295*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_RANGES_OFFSET_BAD(206)", 296*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_RANGES_MISSING_END(207)", 297*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_RANGES_OUT_OF_MEM(208)", 298*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_SYMTAB_ERR(209)", 299*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_STRTAB_ERR(210)", 300*7fd79137SRobert Mustacchi "DW_DLE_RELOC_MISMATCH_INDEX(211)", 301*7fd79137SRobert Mustacchi "DW_DLE_RELOC_MISMATCH_RELOC_INDEX(212)", 302*7fd79137SRobert Mustacchi "DW_DLE_RELOC_MISMATCH_STRTAB_INDEX(213)", 303*7fd79137SRobert Mustacchi "DW_DLE_RELOC_SECTION_MISMATCH(214)", 304*7fd79137SRobert Mustacchi "DW_DLE_RELOC_SECTION_MISSING_INDEX(215)", 305*7fd79137SRobert Mustacchi "DW_DLE_RELOC_SECTION_LENGTH_ODD(216)", 306*7fd79137SRobert Mustacchi "DW_DLE_RELOC_SECTION_PTR_NULL(217)", 307*7fd79137SRobert Mustacchi "DW_DLE_RELOC_SECTION_MALLOC_FAIL(218)", 308*7fd79137SRobert Mustacchi "DW_DLE_NO_ELF64_SUPPORT(219)", 309*7fd79137SRobert Mustacchi "DW_DLE_MISSING_ELF64_SUPPORT(220)", 310*7fd79137SRobert Mustacchi "DW_DLE_ORPHAN_FDE(221)", 311*7fd79137SRobert Mustacchi "DW_DLE_DUPLICATE_INST_BLOCK(222)", 312*7fd79137SRobert Mustacchi "DW_DLE_BAD_REF_SIG8_FORM(223)", 313*7fd79137SRobert Mustacchi "DW_DLE_ATTR_EXPRLOC_FORM_BAD(224)", 314*7fd79137SRobert Mustacchi "DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD(225)", 315*7fd79137SRobert Mustacchi "DW_DLE_NOT_REF_FORM(226)", 316*7fd79137SRobert Mustacchi "DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE(227)" 317*7fd79137SRobert Mustacchi }; 318*7fd79137SRobert Mustacchi 319*7fd79137SRobert Mustacchi 320*7fd79137SRobert Mustacchi 321*7fd79137SRobert Mustacchi 322*7fd79137SRobert Mustacchi /* 323*7fd79137SRobert Mustacchi This function performs error handling as described in the 324*7fd79137SRobert Mustacchi libdwarf consumer document section 3. Dbg is the Dwarf_debug 325*7fd79137SRobert Mustacchi structure being processed. Error is a pointer to the pointer 326*7fd79137SRobert Mustacchi to the error descriptor that will be returned. Errval is an 327*7fd79137SRobert Mustacchi error code listed in dwarf_error.h. 328*7fd79137SRobert Mustacchi */ 329*7fd79137SRobert Mustacchi void 330*7fd79137SRobert Mustacchi _dwarf_error(Dwarf_Debug dbg, Dwarf_Error * error, Dwarf_Sword errval) 331*7fd79137SRobert Mustacchi { 332*7fd79137SRobert Mustacchi Dwarf_Error errptr; 333*7fd79137SRobert Mustacchi 334*7fd79137SRobert Mustacchi /* 335*7fd79137SRobert Mustacchi Allow NULL dbg on entry, since sometimes that can happen and we 336*7fd79137SRobert Mustacchi want to report the upper-level error, not this one. */ 337*7fd79137SRobert Mustacchi if (error != NULL) { 338*7fd79137SRobert Mustacchi 339*7fd79137SRobert Mustacchi /* 340*7fd79137SRobert Mustacchi If dbg is NULL, use the alternate error struct. However, 341*7fd79137SRobert Mustacchi this will overwrite the earlier error. */ 342*7fd79137SRobert Mustacchi if (dbg != NULL) { 343*7fd79137SRobert Mustacchi errptr = 344*7fd79137SRobert Mustacchi (Dwarf_Error) _dwarf_get_alloc(dbg, DW_DLA_ERROR, 1); 345*7fd79137SRobert Mustacchi if (errptr == NULL) { 346*7fd79137SRobert Mustacchi fprintf(stderr, 347*7fd79137SRobert Mustacchi "Could not allocate Dwarf_Error structure, " 348*7fd79137SRobert Mustacchi "abort() in libdwarf.\n"); 349*7fd79137SRobert Mustacchi abort(); 350*7fd79137SRobert Mustacchi } 351*7fd79137SRobert Mustacchi } else { 352*7fd79137SRobert Mustacchi /* We have no dbg to work with. dwarf_init failed. We hack 353*7fd79137SRobert Mustacchi up a special area. */ 354*7fd79137SRobert Mustacchi errptr = _dwarf_special_no_dbg_error_malloc(); 355*7fd79137SRobert Mustacchi if (errptr == NULL) { 356*7fd79137SRobert Mustacchi fprintf(stderr, 357*7fd79137SRobert Mustacchi "Could not allocate Dwarf_Error structure, " 358*7fd79137SRobert Mustacchi "abort() in libdwarf..\n"); 359*7fd79137SRobert Mustacchi abort(); 360*7fd79137SRobert Mustacchi } 361*7fd79137SRobert Mustacchi } 362*7fd79137SRobert Mustacchi 363*7fd79137SRobert Mustacchi errptr->er_errval = errval; 364*7fd79137SRobert Mustacchi *error = errptr; 365*7fd79137SRobert Mustacchi return; 366*7fd79137SRobert Mustacchi } 367*7fd79137SRobert Mustacchi 368*7fd79137SRobert Mustacchi if (dbg != NULL && dbg->de_errhand != NULL) { 369*7fd79137SRobert Mustacchi errptr = (Dwarf_Error) _dwarf_get_alloc(dbg, DW_DLA_ERROR, 1); 370*7fd79137SRobert Mustacchi if (errptr == NULL) { 371*7fd79137SRobert Mustacchi fprintf(stderr, "Could not allocate Dwarf_Error structure," 372*7fd79137SRobert Mustacchi " abort() in libdwarf.\n"); 373*7fd79137SRobert Mustacchi abort(); 374*7fd79137SRobert Mustacchi } 375*7fd79137SRobert Mustacchi errptr->er_errval = errval; 376*7fd79137SRobert Mustacchi dbg->de_errhand(errptr, dbg->de_errarg); 377*7fd79137SRobert Mustacchi return; 378*7fd79137SRobert Mustacchi } 379*7fd79137SRobert Mustacchi fprintf(stderr, 380*7fd79137SRobert Mustacchi "abort() in libdwarf. No error argument, no handler.\n"); 381*7fd79137SRobert Mustacchi abort(); 382*7fd79137SRobert Mustacchi } 383*7fd79137SRobert Mustacchi 384*7fd79137SRobert Mustacchi 385*7fd79137SRobert Mustacchi Dwarf_Unsigned 386*7fd79137SRobert Mustacchi dwarf_errno(Dwarf_Error error) 387*7fd79137SRobert Mustacchi { 388*7fd79137SRobert Mustacchi if (error == NULL) { 389*7fd79137SRobert Mustacchi return (0); 390*7fd79137SRobert Mustacchi } 391*7fd79137SRobert Mustacchi 392*7fd79137SRobert Mustacchi return (error->er_errval); 393*7fd79137SRobert Mustacchi } 394*7fd79137SRobert Mustacchi 395*7fd79137SRobert Mustacchi 396*7fd79137SRobert Mustacchi /* 397*7fd79137SRobert Mustacchi */ 398*7fd79137SRobert Mustacchi char * 399*7fd79137SRobert Mustacchi dwarf_errmsg(Dwarf_Error error) 400*7fd79137SRobert Mustacchi { 401*7fd79137SRobert Mustacchi if (error == NULL) { 402*7fd79137SRobert Mustacchi return "Dwarf_Error is NULL"; 403*7fd79137SRobert Mustacchi } 404*7fd79137SRobert Mustacchi 405*7fd79137SRobert Mustacchi if (error->er_errval > (sizeof(_dwarf_errmsgs) / sizeof(char *))) { 406*7fd79137SRobert Mustacchi return "Dwarf_Error value out of range"; 407*7fd79137SRobert Mustacchi } 408*7fd79137SRobert Mustacchi 409*7fd79137SRobert Mustacchi return ((char *) _dwarf_errmsgs[error->er_errval]); 410*7fd79137SRobert Mustacchi } 411