pro_error.c revision 49d3bc91e27cd871b950d56c01398fa2f2e12ab4
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Copyright (C) 2000, 2002 Silicon Graphics, Inc. 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
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe USA.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pky,
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 "libdwarfdefs.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#include "pro_incl.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweextern char *_dwarf_errmsgs[];
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_P_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_p_error(Dwarf_P_Debug dbg,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_Error * error, Dwarf_Word errval)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_Error errptr;
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 ((Dwarf_Sword) errval < 0)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe printf("ERROR VALUE: %ld - %s\n",
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe (long) errval, _dwarf_errmsgs[-errval - 1]);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (error != NULL) {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe errptr = (Dwarf_Error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_Error_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (errptr == NULL) {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe fprintf(stderr,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "Could not allocate Dwarf_Error structure\n");
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe abort();
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe errptr->er_errval = (Dwarf_Sword) errval;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe *error = errptr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (dbg != NULL && dbg->de_errhand != NULL) {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe errptr = (Dwarf_Error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_Error_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (errptr == NULL) {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe fprintf(stderr,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe "Could not allocate Dwarf_Error structure\n");
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe abort();
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe errptr->er_errval = (Dwarf_Sword) errval;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe dbg->de_errhand(errptr, dbg->de_errarg);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe abort();
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}