49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Portions Copyright 2002-2010 Sun Microsystems, 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
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 "libdwarfdefs.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <stdio.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include <string.h>
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include "pro_incl.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#include "pro_die.h"
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#ifndef R_MIPS_NONE
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define R_MIPS_NONE 0
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#endif
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* adds an attribute to a die */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowevoid _dwarf_pro_add_at_to_die(Dwarf_P_Die die, Dwarf_P_Attribute attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*----------------------------------------------------------------------------
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe This function creates a new die.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe tag: tag of the new die to be created
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe parent,child,left,right: specify neighbors of the new die. Only
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe one of these may be non-null
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe-----------------------------------------------------------------------------*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_P_Die
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_new_die(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Tag tag,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die parent,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die child,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die left, Dwarf_P_Die right, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die ret_die = 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die new_die = (Dwarf_P_Die)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Die_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(dbg, DW_DLE_DIE_ALLOC,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_die->di_parent = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_die->di_left = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_die->di_right = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_die->di_child = NULL;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_last_child = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_die->di_tag = tag;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_dbg = dbg;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_marker = 0;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe ret_die =
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_die_link(new_die, parent, child, left, right, error);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return ret_die;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*----------------------------------------------------------------------------
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe This function links up a die to specified neighbors
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe parent,child,left,right: specify neighbors of the new die. Only
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe one of these may be non-null
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe-----------------------------------------------------------------------------*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_P_Die
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_die_link(Dwarf_P_Die new_die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die parent,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die child,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die left, Dwarf_P_Die right, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* Count the # of non null neighbors. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe int n_nulls = 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (parent != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe n_nulls++;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (new_die->di_parent != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_LINK_LOOP,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_parent = parent;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (parent->di_child) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* di_last_child identifies the last sibling, the
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die we want to attach new_die to. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* ASSERT: if di_child is set so is di_last_child. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die former_lastchild = parent->di_last_child;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe parent->di_last_child = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* Attach to the new die to end of the sibling list. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe former_lastchild->di_right = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_left = former_lastchild;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe parent->di_child = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe parent->di_last_child = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (child != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe n_nulls++;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_child = child;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_last_child = child;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (child->di_parent) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_PARENT_EXISTS,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe child->di_parent = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (left != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe n_nulls++;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_left = left;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (left->di_right) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* There's already a right sibling of left,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe insert the new die in the list. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_right = left->di_right;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe left->di_right->di_left = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe left->di_right = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (new_die->di_parent) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_PARENT_EXISTS,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_parent = left->di_parent;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (right != NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe n_nulls++;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_right = right;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (right->di_left) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* There is already a left sibling of the right die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe insert the new die in the list. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_left = right->di_left;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe right->di_left->di_right = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe right->di_left = new_die;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (new_die->di_parent) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_PARENT_EXISTS,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe new_die->di_parent = right->di_parent;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (n_nulls > 1) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* Multiple neighbors! error! */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_EXTRA_NEIGHBORS,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Die) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return new_die;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard LoweDwarf_Unsigned
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_add_die_marker(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned marker,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(dbg, DW_DLE_DIE_NULL, DW_DLV_NOCOUNT);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_marker = marker;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return 0;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard LoweDwarf_Unsigned
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowedwarf_get_die_marker(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned * marker,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(dbg, DW_DLE_DIE_NULL, DW_DLV_NOCOUNT);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *marker = die->di_marker;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return 0;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*----------------------------------------------------------------------------
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe This function adds a die to dbg struct. It should be called using
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe the root of all the dies.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe-----------------------------------------------------------------------------*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_Unsigned
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_add_die_to_debug(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die first_die, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (first_die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(dbg, DW_DLE_DIE_NULL, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (first_die->di_tag != DW_TAG_compile_unit) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(dbg, DW_DLE_WRONG_TAG, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe dbg->de_dies = first_die;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweint
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe_dwarf_pro_add_AT_stmt_list(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die first_die, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Attribute new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe int uwordb_size = dbg->de_offset_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* Add AT_stmt_list attribute */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr = (Dwarf_P_Attribute)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg, sizeof(struct Dwarf_P_Attribute_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ATTR_ALLOC, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute = DW_AT_stmt_list;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute_form = dbg->de_ar_data_attribute_form;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_rel_type = dbg->de_offset_reloc;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_nbytes = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_next = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_reloc_len = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_data = (char *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg, uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr->ar_data == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ADDR_ALLOC, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned du = 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe WRITE_UNALIGNED(dbg, (void *) new_attr->ar_data,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (const void *) &du, sizeof(du), uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_pro_add_at_to_die(first_die, new_attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*-----------------------------------------------------------------------------
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Add AT_name attribute to die
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe------------------------------------------------------------------------------*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_P_Attribute
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_add_AT_name(Dwarf_P_Die die, char *name, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Attribute new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_DIE_NULL,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr = (Dwarf_P_Attribute)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(die->di_dbg,sizeof(struct Dwarf_P_Attribute_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ATTR_ALLOC,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* fill in the information */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute = DW_AT_name;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* assume that form is string, no debug_str yet */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute_form = DW_FORM_string;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_nbytes = strlen(name) + 1;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_next = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_reloc_len = 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_data = (char *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(die->di_dbg, strlen(name)+1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr->ar_data == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_STRING_ALLOC,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe strcpy(new_attr->ar_data, name);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_rel_type = R_MIPS_NONE;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* add attribute to the die */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_pro_add_at_to_die(die, new_attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*-----------------------------------------------------------------------------
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Add AT_comp_dir attribute to die
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe------------------------------------------------------------------------------*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_P_Attribute
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowedwarf_add_AT_comp_dir(Dwarf_P_Die ownerdie,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe char *current_working_directory,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Attribute new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (ownerdie == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_DIE_NULL,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr = (Dwarf_P_Attribute)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(ownerdie->di_dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe sizeof(struct Dwarf_P_Attribute_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ATTR_ALLOC,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* fill in the information */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute = DW_AT_comp_dir;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* assume that form is string, no debug_str yet */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute_form = DW_FORM_string;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_nbytes = strlen(current_working_directory) + 1;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_next = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_reloc_len = 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_data = (char *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(ownerdie->di_dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe strlen(current_working_directory)+1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr->ar_data == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_STRING_ALLOC,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (Dwarf_P_Attribute) DW_DLV_BADADDR);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe strcpy(new_attr->ar_data, current_working_directory);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_rel_type = R_MIPS_NONE;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* add attribute to the die */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_pro_add_at_to_die(ownerdie, new_attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweint
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe_dwarf_pro_add_AT_fde(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned offset, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Attribute new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe int uwordb_size = dbg->de_offset_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_DIE_NULL, -1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr = (Dwarf_P_Attribute)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg,sizeof(struct Dwarf_P_Attribute_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ATTR_ALLOC, -1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* fill in the information */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute = DW_AT_MIPS_fde;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute_form = dbg->de_ar_data_attribute_form;;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_rel_type = dbg->de_offset_reloc;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_nbytes = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_next = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_reloc_len = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_data = (char *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg, uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr->ar_data == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ADDR_ALLOC, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned du = offset;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe WRITE_UNALIGNED(dbg, (void *) new_attr->ar_data,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (const void *) &du, sizeof(du), uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_pro_add_at_to_die(die, new_attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweint
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe_dwarf_pro_add_AT_macro_info(Dwarf_P_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_P_Die die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned offset, Dwarf_Error * error)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Attribute new_attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe int uwordb_size = dbg->de_offset_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (die == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_DIE_NULL, -1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr = (Dwarf_P_Attribute)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg,sizeof(struct Dwarf_P_Attribute_s));
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ATTR_ALLOC, -1);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe /* fill in the information */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute = DW_AT_macro_info;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_attribute_form = dbg->de_ar_data_attribute_form;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_rel_type = dbg->de_offset_reloc;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_nbytes = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_next = NULL;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_reloc_len = uwordb_size;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe new_attr->ar_data = (char *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_p_get_alloc(dbg, uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (new_attr->ar_data == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DWARF_P_DBG_ERROR(NULL, DW_DLE_ADDR_ALLOC, DW_DLV_NOCOUNT);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned du = offset;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe WRITE_UNALIGNED(dbg, (void *) new_attr->ar_data,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (const void *) &du, sizeof(du), uwordb_size);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_pro_add_at_to_die(die, new_attr);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe return 0;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowevoid
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe_dwarf_pro_add_at_to_die(Dwarf_P_Die die, Dwarf_P_Attribute attr)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe{
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if (die->di_last_attr) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_last_attr->ar_next = attr;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_last_attr = attr;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_n_attr++;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe } else {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_n_attr = 1;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe die->di_attrs = die->di_last_attr = attr;
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe}