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