49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Portions Copyright (C) 2008-2010 David Anderson. All Rights Reserved.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe This program is free software; you can redistribute it and/or modify it
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe under the terms of version 2.1 of the GNU Lesser General Public License
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe as published by the Free Software Foundation.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe This program is distributed in the hope that it would be useful, but
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe WITHOUT ANY WARRANTY; without even the implied warranty of
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Further, this software is distributed without any warranty that it is
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe free of the rightful claim of any third person regarding infringement
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe or the like. Any license provided herein, whether implied or
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe otherwise, applies only to this software file. Patent licenses, if
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe any, provided herein do not apply to combinations of this program with
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe other software, or any other product whatsoever.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe You should have received a copy of the GNU Lesser General Public
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe License along with this program; if not, write the Free Software
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe USA.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Mountain View, CA 94043, or:
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe http://www.sgi.com
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe For further information regarding this notice, see:
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe http://oss.sgi.com/projects/GenInfo/NoticeExplan
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include "config.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include "dwarf_incl.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#ifdef HAVE_ELF_H
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <elf.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#endif
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <stdio.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <sys/stat.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <sys/types.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <stdlib.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* Array to hold string representation of errors. Any time a
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe define is added to the list in libdwarf.h, a string should be
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe added to this Array
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweconst char *_dwarf_errmsgs[] = {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "No error (0)\n",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_VMM 1 dwarf format/library version mismatch",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MAP 2 memory map failure",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LEE 3 libelf error",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NDS 4 no debug section",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NLS 5 no line section ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ID 6 invalid descriptor for query ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_IOF 7 I/O failure ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MAF 8 memory allocation failure ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_IA 9 invalid argument ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MDE 10 mangled debugging entry ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MLE 11 mangled line number entry ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FNO 12 file not open ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FNR 13 file not a regular file ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FWA 14 file open with wrong access ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NOB 15 not an object file ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MOF 16 mangled object file header ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_EOLL 17 end of location list entries ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NOLL 18 no location list section ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_BADOFF 19 Invalid offset ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_EOS 20 end of section ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATRUNC 21 abbreviations section appears truncated",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_BADBITC 22 Address size passed to dwarf bad",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DBG_ALLOC 23 Unable to malloc a Dwarf_Debug structure",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FSTAT_ERROR 24 The file fd passed to dwarf_init "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "cannot be fstat()ed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FSTAT_MODE_ERROR 25 The file mode bits do not "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "indicate that the file being opened via "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "dwarf_init() is a normal file",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_INIT_ACCESS_WRONG 26 A call to dwarf_init had an "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "access of other than DW_DLC_READ",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_BEGIN_ERROR 27 a call to "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_begin(... ELF_C_READ_MMAP... ) failed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_GETEHDR_ERROR 28 a call to "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf32_getehdr() or elf64_getehdr() failed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_GETSHDR_ERROR 29 a call to "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf32_getshdr() or elf64_getshdr() failed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_STRPTR_ERROR 30 a call to "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_strptr() failed trying to get a section name",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_INFO_DUPLICATE 31 Only one .debug_info "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_INFO_NULL 32 .debug_info section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_ABBREV_DUPLICATE 33 Only one .debug_abbrev "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_ABBREV_NULL 34 .debug_abbrev section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_ARANGES_DUPLICATE 35 Only one .debug_aranges "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_ARANGES_NULL 36 .debug_aranges section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_LINE_DUPLICATE 37 Only one .debug_line "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_LINE_NULL (38) .debug_line section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_LOC_DUPLICATE (39) Only one .debug_loc "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_LOC_NULL (40) .debug_loc section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACINFO_DUPLICATE (41) Only one .debug_macinfo "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACINFO_NULL (42) .debug_macinfo section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_PUBNAMES_DUPLICATE (43) Only one .debug_pubnames "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_PUBNAMES_NULL (44) .debug_pubnames section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_STR_DUPLICATE (45) Only one .debug_str "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_STR_NULL (46) .debug_str section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CU_LENGTH_ERROR (47)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_VERSION_STAMP_ERROR (48)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ABBREV_OFFSET_ERROR (49)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ADDRESS_SIZE_ERROR (50)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_INFO_PTR_NULL (51)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_NULL (52)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_STRING_OFFSET_BAD (53)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_LINE_LENGTH_BAD (54)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_PROLOG_LENGTH_BAD (55)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_NUM_OPERANDS_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_SET_ADDR_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_EXT_OPCODE_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DWARF_LINE_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_INCL_DIR_NUM_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_FILE_NUM_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ALLOC_FAIL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NO_CALLBACK_FUNC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_SECT_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FILE_ENTRY_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FPGM_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_INCDIR_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_STRING_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CHUNK_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_BYTEOFF_ERR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FDE_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_REGNO_OVFL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_OFFS_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_WRONG_ADDRESS",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_EXTRA_NEIGHBORS",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_WRONG_TAG",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_PARENT_EXISTS",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DBG_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUGLINE_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUGFRAME_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUGINFO_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ABBREV_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_OFFSET_UFLW",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_SECT_ERR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FRAME_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FRAME_VERSION_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_RET_ADDR_REG_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FDE_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FDE_DBG_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_DBG_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FRAME_TABLE_COL_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_PC_NOT_IN_FDE_RANGE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CIE_INSTR_EXEC_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FRAME_INSTR_EXEC_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FDE_PTR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_RET_OP_LIST_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_CONTEXT_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DBG_NO_CU_CONTEXT",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_NO_CU_CONTEXT",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FIRST_DIE_NOT_CU",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NEXT_DIE_PTR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FRAME_DUPLICATE Only one .debug_frame "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "section is allowed",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FRAME_NULL .debug_frame section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ABBREV_DECODE_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DWARF_ABBREV_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_ABBREV_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_FORM_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_NO_CU_CONTEXT",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_FORM_SIZE_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_DBG_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_BAD_REF_FORM",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ATTR_FORM_OFFSET_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LINE_OFFSET_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_STR_OFFSET_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_STRING_PTR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_PUBNAMES_VERSION_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_PUBNAMES_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_GLOBAL_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_GLOBAL_CONTEXT_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIR_INDEX_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LOC_EXPR_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_LOC_EXPR_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ADDR_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_OFFSET_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MAKE_CU_CONTEXT_FAIL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_REL_ALLOC",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ARANGE_OFFSET_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_SEGMENT_SIZE_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ARANGE_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ARANGE_DECODE_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ARANGES_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ARANGE_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NO_FILE_NAME",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NO_COMP_DIR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_CU_ADDRESS_SIZE_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_INPUT_ATTR_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_EXPR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_BAD_EXPR_OPCODE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_EXPR_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MULTIPLE_RELOC_IN_EXPR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_ELF_GETIDENT_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NO_AT_MIPS_FDE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_NO_CIE_FOR_FDE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DIE_ABBREV_LIST_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FUNCNAMES_DUPLICATE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FUNCNAMES_NULL .debug_funcnames section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FUNC_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_FUNC_CONTEXT_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_TYPENAMES_DUPLICATE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_TYPENAMES_NULL .debug_typenames section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_TYPE_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_TYPE_CONTEXT_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_VARNAMES_DUPLICATE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_VARNAMES_NULL .debug_varnames section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_VARNAMES_VERSION_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_VARNAMES_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_VAR_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_VAR_CONTEXT_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_WEAKNAMES_DUPLICATE",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_WEAKNAMES_NULL .debug_weaknames section present but "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "elf_getdata() failed or section is zero-length",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_WEAK_NULL",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_WEAK_CONTEXT_NULL (175)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_LOCDESC_COUNT_WRONG (176)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MACINFO_STRING_NULL (177)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MACINFO_STRING_EMPTY (178)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MACINFO_INTERNAL_ERROR_SPACE (179)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_MACINFO_MALLOC_FAIL (180)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUGMACINFO_ERROR (181)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACRO_LENGTH_BAD (182)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACRO_MAX_BAD (183)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACRO_INTERNAL_ERR (184)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACRO_MALLOC_SPACE (185)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DEBUG_MACRO_INCONSISTENT (186)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_NO_CIE_AUGMENTATION(187)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_REG_NUM_TOO_HIGH(188)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_MAKE_INSTR_NO_INIT(189)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_NEW_LOC_LESS_OLD_LOC(190)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_POP_EMPTY_STACK(191)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_ALLOC_FAIL(192)",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "DW_DLE_DF_FRAME_DECODING_ERROR(193)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_LOC_SECTION_SHORT(194)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_FRAME_AUGMENTATION_UNKNOWN(195)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_PUBTYPE_CONTEXT(196)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD(197)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR(198)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_PUBTYPES_DUPLICATE(199)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_FRAME_CIE_DECODE_ERROR(200)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_FRAME_REGISTER_UNREPRESENTABLE(201)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_FRAME_REGISTER_COUNT_MISMATCH(202)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_LINK_LOOP(203)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_STRP_OFFSET_BAD(204)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_RANGES_DUPLICATE(205)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_RANGES_OFFSET_BAD(206)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_RANGES_MISSING_END(207)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_RANGES_OUT_OF_MEM(208)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_SYMTAB_ERR(209)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_STRTAB_ERR(210)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_MISMATCH_INDEX(211)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_MISMATCH_RELOC_INDEX(212)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_MISMATCH_STRTAB_INDEX(213)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_SECTION_MISMATCH(214)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_SECTION_MISSING_INDEX(215)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_SECTION_LENGTH_ODD(216)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_SECTION_PTR_NULL(217)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_RELOC_SECTION_MALLOC_FAIL(218)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_NO_ELF64_SUPPORT(219)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_MISSING_ELF64_SUPPORT(220)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_ORPHAN_FDE(221)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DUPLICATE_INST_BLOCK(222)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_BAD_REF_SIG8_FORM(223)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_ATTR_EXPRLOC_FORM_BAD(224)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD(225)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_NOT_REF_FORM(226)",
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE(227)"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe};
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe This function performs error handling as described in the
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe libdwarf consumer document section 3. Dbg is the Dwarf_debug
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe structure being processed. Error is a pointer to the pointer
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe to the error descriptor that will be returned. Errval is an
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe error code listed in dwarf_error.h.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowevoid
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe_dwarf_error(Dwarf_Debug dbg, Dwarf_Error * error, Dwarf_Sword errval)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_Error errptr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Allow NULL dbg on entry, since sometimes that can happen and we
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe want to report the upper-level error, not this one. */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (error != NULL) {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /*
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe If dbg is NULL, use the alternate error struct. However,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe this will overwrite the earlier error. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (dbg != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe errptr =
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_Error) _dwarf_get_alloc(dbg, DW_DLA_ERROR, 1);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (errptr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe fprintf(stderr,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "Could not allocate Dwarf_Error structure, "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "abort() in libdwarf.\n");
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe abort();
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* We have no dbg to work with. dwarf_init failed. We hack
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe up a special area. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe errptr = _dwarf_special_no_dbg_error_malloc();
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (errptr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe fprintf(stderr,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "Could not allocate Dwarf_Error structure, "
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "abort() in libdwarf..\n");
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe abort();
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe errptr->er_errval = errval;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *error = errptr;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (dbg != NULL && dbg->de_errhand != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe errptr = (Dwarf_Error) _dwarf_get_alloc(dbg, DW_DLA_ERROR, 1);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (errptr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe fprintf(stderr, "Could not allocate Dwarf_Error structure,"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe " abort() in libdwarf.\n");
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe abort();
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe errptr->er_errval = errval;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dbg->de_errhand(errptr, dbg->de_errarg);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe fprintf(stderr,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe "abort() in libdwarf. No error argument, no handler.\n");
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe abort();
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_Unsigned
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_errno(Dwarf_Error error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (error == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return (0);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return (error->er_errval);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowechar *
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_errmsg(Dwarf_Error error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (error == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return "Dwarf_Error is NULL";
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (error->er_errval > (sizeof(_dwarf_errmsgs) / sizeof(char *))) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return "Dwarf_Error value out of range";
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return ((char *) _dwarf_errmsgs[error->er_errval]);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}