07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000-2006 Silicon Graphics, Inc. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Portions Copyright (C) 2009-2010 David Anderson. All Rights Reserved.
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 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 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 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 Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Mountain View, CA 94043, or:
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe For further information regarding this notice, see:
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe http://oss.sgi.com/projects/GenInfo/NoticeExplan
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_arange.h" /* using Arange as a way to build a list */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Used by rqs (an IRIX application).
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Not needed except for that one application.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Should be moved to its own source file since
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe it is so rarely needed.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Returns DW_DLV_OK if returns the arrays.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Returns DW_DLV_NO_ENTRY if no section. ?? (How do I tell?)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Returns DW_DLV_ERROR if there is an error.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Uses DW_FRAME_CFA_COL because IRIX is only DWARF2
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe and that is what IRIX compilers and compatible
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe compilers support on IRIX.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe_dwarf_frame_address_offsets(Dwarf_Debug dbg, Dwarf_Addr ** addrlist,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe res = dwarf_get_fde_list(dbg, &cie_data, &cie_count,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe res = _dwarf_load_section(dbg, &dbg->de_debug_frame, err);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (i = 0; i < cie_count; i++) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe instoff = ciep->ci_cie_instr_start - dbg->de_debug_frame.dss_data;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe initial_instructions_length = ciep->ci_length +
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe ciep->ci_length_size + ciep->ci_extension_size -
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (ciep->ci_cie_instr_start - ciep->ci_cie_start);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe res = _dwarf_exec_frame_instr( /* make_instr */ true,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* search_pc= */ false,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* search_pc_val= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* location */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* Dwarf_frame= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* cie= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (j = 0; j < icount; ++j) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (finst->fp_base_op == 0 && finst->fp_extended_op == 1) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* is DW_CFA_set_loc */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Addr add = (Dwarf_Addr) finst->fp_offset;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off off = finst->fp_instr_offset + instoff;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_dealloc(dbg, frame_inst, DW_DLA_FRAME_BLOCK);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (i = 0; i < fde_count; i++) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe off = fdep->fd_initial_loc_pos - dbg->de_debug_frame.dss_data;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe instoff = fdep->fd_fde_instr_start - dbg->de_debug_frame.dss_data;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe fdep->fd_length_size + fdep->fd_extension_size -
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe (fdep->fd_fde_instr_start - fdep->fd_fde_start);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe instr_end = fdep->fd_fde_instr_start + instructions_length;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe res = _dwarf_exec_frame_instr( /* make_instr */ true,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* search_pc= */ false,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* search_pc_val= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* location */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* Dwarf_frame= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* cie= */ 0,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (j = 0; j < icount; ++j) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (finst2->fp_base_op == 0 && finst2->fp_extended_op == 1) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* is DW_CFA_set_loc */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Addr add = (Dwarf_Addr) finst2->fp_offset;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off off = finst2->fp_instr_offset + instoff;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_dealloc(dbg, frame_inst, DW_DLA_FRAME_BLOCK);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_get_alloc(dbg, DW_DLA_ADDR, arange_count);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_get_alloc(dbg, DW_DLA_ADDR, arange_count);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (i = 0; i < arange_count; i++) {