07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/*
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000,2002,2004,2005,2006 Silicon Graphics, Inc. All Rights Reserved.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Portions Copyright 2008-2010 David Anderson, Inc. 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/* This source file used for SGI-IRIX rqs processing.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Unused otherwise.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe*/
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "config.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_incl.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include <stdio.h>
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe#include "dwarf_line.h"
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/*
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Return DW_DLV_OK or, if error,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe DW_DLV_ERROR.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Thru pointers, return 2 arrays and a count
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for rqs.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe*/
07dc1947c362e187fb955d283b692f8769dd5defRichard Loweint
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe_dwarf_line_address_offsets(Dwarf_Debug dbg,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Die die,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Addr ** addrs,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off ** offs,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Unsigned * returncount,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Error * err)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe{
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Addr *laddrs;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Off *loffsets;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Signed lcount;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Signed i;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe int res;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Dwarf_Line *linebuf;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe res = _dwarf_internal_srclines(die, &linebuf, &lcount, /* addrlist=
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe */ true,
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* linelist= */ false, err);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (res != DW_DLV_OK) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return res;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe laddrs = (Dwarf_Addr *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_get_alloc(dbg, DW_DLA_ADDR, lcount);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (laddrs == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_srclines_dealloc(dbg, linebuf, lcount);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_error(dbg, err, DW_DLE_ALLOC_FAIL);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return (DW_DLV_ERROR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe loffsets = (Dwarf_Off *)
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_get_alloc(dbg, DW_DLA_ADDR, lcount);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe if (loffsets == NULL) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_srclines_dealloc(dbg, linebuf, lcount);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe /* We already allocated what laddrs points at, so we'e better
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe deallocate that space since we are not going to return the
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe pointer to the caller. */
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_dealloc(dbg, laddrs, DW_DLA_ADDR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe _dwarf_error(dbg, err, DW_DLE_ALLOC_FAIL);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return (DW_DLV_ERROR);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe for (i = 0; i < lcount; i++) {
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe laddrs[i] = linebuf[i]->li_address;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe loffsets[i] = linebuf[i]->li_addr_line.li_offset;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe }
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe dwarf_srclines_dealloc(dbg, linebuf, lcount);
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *returncount = lcount;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *offs = loffsets;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe *addrs = laddrs;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe return DW_DLV_OK;
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe}
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe/*
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe It's impossible for callers of dwarf_srclines() to get to and
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe free all the resources (in particular, the li_context and its
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe lc_file_entries).
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe So this function, new July 2005, does it.
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe*/