Files
libdwarf-code/libdwarf/dwarf_line2.c
David Anderson 4130f07d25 dwarfdump
* dwarfdump.c: Add enum line_flag_type_e so we can test
       all the srclines interfaces (4 of them). Expand -x
       for that too.
     * print_die.c: Support DW_FORM_GNU_strp_alt.
     * print_lines.c: Update for old and new srclines
       interfaces.
     * globals.h: Added the enum line_flag_e variable for
       recording -x line5= value.

libdwarf
     * checkexamples.c: Fixed data type in the example code.
     * dwarf.h: Updated comment about DW_FORM_GNU_strp_alt
     * dwarf_elf_access.c: Fixed trailing whitespace and
       removed debug printf that got left in.
     * dwarf_error.c: Add new TIED file errors.
       DW_DLE_NO_TIED_FILE_AVAILABLE, DW_DLE_NO_TIED_STRING_AVAILABLE.
     * dwarf_form.c: Added support for DW_FORM_GNU_strp_alt.
     * dwarf_init_finish.c: #if 0 routine all_sig8bits_zero().
    * dwarf_line.c: Now always notice windows-like c: etc
       as start of a full path. Ensure directories with \ are
       turned to / in line tables. (for full such transforms
       configure with --enable-windowspath ) Remove some debug #ifdef
       lines.
       Alter the linecontext interface to pass back table count,
       not linecount.
    * dwarf_line.h: Add commentary and lc_table_count field.
     * dwarf_line_table_reader_common.c: Fix indent/trailing whitespace.
       Now sets lc_table_count;
     * dwarf_opaque.h: Add _dwarf_get_string_from_tied() interface.
     * dwarf_print_lines.c: Remove trailing whitespace and some debug printf..
     * libdwarf.h.in: New error codes. Fix trailing whitespace. Expand
       commentary.
2015-10-15 09:27:28 -07:00

99 lines
3.1 KiB
C

/*
Copyright (C) 2000,2002,2004,2005,2006 Silicon Graphics, Inc. All Rights Reserved.
Portions Copyright 2008-2011 David Anderson, Inc. All rights reserved.
This program is free software; you can redistribute it and/or modify it
under the terms of version 2.1 of the GNU Lesser General Public License
as published by the Free Software Foundation.
This program is distributed in the hope that it would be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Further, this software is distributed without any warranty that it is
free of the rightful claim of any third person regarding infringement
or the like. Any license provided herein, whether implied or
otherwise, applies only to this software file. Patent licenses, if
any, provided herein do not apply to combinations of this program with
other software, or any other product whatsoever.
You should have received a copy of the GNU Lesser General Public
License along with this program; if not, write the Free Software
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston MA 02110-1301,
USA.
*/
/* This source file used for SGI-IRIX rqs processing.
Unused otherwise.
*/
#include "config.h"
#include "dwarf_incl.h"
#include <stdio.h>
#include "dwarf_line.h"
#ifdef __sgi /* SGI IRIX ONLY */
/* Return DW_DLV_OK or, if error,
DW_DLV_ERROR.
Thru pointers, return 2 arrays and a count
for rqs (IRIX run-time linker).
ONLY meant for SGI IRIX */
int
_dwarf_line_address_offsets(Dwarf_Debug dbg,
Dwarf_Die die,
Dwarf_Addr ** addrs,
Dwarf_Off ** offs,
Dwarf_Unsigned * returncount,
Dwarf_Error * err)
{
Dwarf_Addr *laddrs;
Dwarf_Off *loffsets;
Dwarf_Signed lcount;
Dwarf_Signed i;
int res;
Dwarf_Line *linebuf;
res = _dwarf_internal_srclines(die, /* version= */ NULL,
&linebuf, &lcount,
/* actuals= */ NULL, /* actualscount= */ NULL,
/* addrlist= */ true,
/* linelist= */ false,
err);
if (res != DW_DLV_OK) {
return res;
}
laddrs = (Dwarf_Addr *)
_dwarf_get_alloc(dbg, DW_DLA_ADDR, lcount);
if (laddrs == NULL) {
dwarf_srclines_dealloc(dbg, linebuf, lcount);
_dwarf_error(dbg, err, DW_DLE_ALLOC_FAIL);
return (DW_DLV_ERROR);
}
loffsets = (Dwarf_Off *)
_dwarf_get_alloc(dbg, DW_DLA_ADDR, lcount);
if (loffsets == NULL) {
dwarf_srclines_dealloc(dbg, linebuf, lcount);
/* We already allocated what laddrs points at, so we'e better
deallocate that space since we are not going to return the
pointer to the caller. */
dwarf_dealloc(dbg, laddrs, DW_DLA_ADDR);
_dwarf_error(dbg, err, DW_DLE_ALLOC_FAIL);
return (DW_DLV_ERROR);
}
for (i = 0; i < lcount; i++) {
laddrs[i] = linebuf[i]->li_address;
loffsets[i] = linebuf[i]->li_addr_line.li_offset;
}
dwarf_srclines_dealloc(dbg, linebuf, lcount);
*returncount = lcount;
*offs = loffsets;
*addrs = laddrs;
return DW_DLV_OK;
}
#endif /* __sgi */