07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/*
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000,2002,2004,2005 Silicon Graphics, Inc. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Portions Copyright (C) 2009-2010 David Anderson. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe This program is free software; you can redistribute it and/or modify it
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe under the terms of version 2.1 of the GNU Lesser General Public License
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe as published by the Free Software Foundation.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe This program is distributed in the hope that it would be useful, but
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe WITHOUT ANY WARRANTY; without even the implied warranty of
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Further, this software is distributed without any warranty that it is
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe free of the rightful claim of any third person regarding infringement
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe or the like. Any license provided herein, whether implied or
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe otherwise, applies only to this software file. Patent licenses, if
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe any, provided herein do not apply to combinations of this program with
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe other software, or any other product whatsoever.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe You should have received a copy of the GNU Lesser General Public
07dc1947c362e187fb955d283b692f8769dd5defRichard 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,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe USA.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Mountain View, CA 94043, or:
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe http://www.sgi.com
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe For further information regarding this notice, see:
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe http://oss.sgi.com/projects/GenInfo/NoticeExplan
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe*/
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/* Reads DWARF3 .debug_pubtypes section. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "config.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_incl.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include <stdio.h>
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_types.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_global.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_get_pubtypes(Dwarf_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Type ** types,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Signed * ret_type_count, Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe int res = _dwarf_load_section(dbg, &dbg->de_debug_pubtypes,error);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (res != DW_DLV_OK) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return res;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return _dwarf_internal_get_pubnames_like_data(dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dbg->de_debug_pubtypes.dss_data,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dbg->de_debug_pubtypes.dss_size,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_Global **) types, /* Type punning for sections
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe with identical format. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe ret_type_count, error,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLA_PUBTYPES_CONTEXT,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLA_GLOBAL, /* We don't have DW_DLA_PUBTYPES,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe so use DW_DLA_GLOBAL. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/* Deallocating fully requires deallocating the list
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe and all entries. But some internal data is
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe not exposed, so we need a function with internal knowledge.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe*/
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowevoid
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_pubtypes_dealloc(Dwarf_Debug dbg, Dwarf_Type * dwgl,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Signed count)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_internal_globals_dealloc(dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_Global *) dwgl,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe count,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLA_PUBTYPES_CONTEXT,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLA_GLOBAL, /* We don't have DW_DLA_PUBTYPES,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe so use DW_DLA_GLOBAL. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLA_LIST);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_pubtypename(Dwarf_Type type_in, char **ret_name,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Global type = (Dwarf_Global) type_in;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (type == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_error(NULL, error, DW_DLE_TYPE_NULL);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return (DW_DLV_ERROR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *ret_name = (char *) (type->gl_name);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return DW_DLV_OK;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_pubtype_type_die_offset(Dwarf_Type type_in,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off * ret_offset,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Global type = (Dwarf_Global) type_in;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return dwarf_global_die_offset(type, ret_offset, error);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_pubtype_cu_offset(Dwarf_Type type_in,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off * ret_offset, Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Global type = (Dwarf_Global) type_in;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return dwarf_global_cu_offset(type, ret_offset, error);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_pubtype_name_offsets(Dwarf_Type type_in,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe char **returned_name,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off * die_offset,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off * cu_die_offset,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Global type = (Dwarf_Global) type_in;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return dwarf_global_name_offsets(type,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe returned_name,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die_offset, cu_die_offset, error);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}