49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
07dc1947c362e187fb955d283b692f8769dd5defRichard Lowe Copyright (C) 2000,2004 Silicon Graphics, 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
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,
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
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* relocation section names */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweextern char *_dwarf_rel_section_names[];
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* section names */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweextern char *_dwarf_sectnames[];
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* struct to hold relocation entries. Its mantained as a linked
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe list of relocation structs, and will then be written at as a
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe whole into the relocation section. Whether its 32 bit or
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe 64 bit will be obtained from Dwarf_Debug pointer.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe struct stores a chunk of data pertaining to a section
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowestruct Dwarf_P_Section_Data_s {
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe int ds_elf_sect_no; /* elf section number */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe char *ds_data; /* data contained in section */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe unsigned long ds_nbytes; /* bytes of data used so far */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe unsigned long ds_orig_alloc; /* bytes allocated originally */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_P_Section_Data ds_next; /* next on the list */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe};
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* Used to allow a dummy initial struct (which we
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe drop before it gets used
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe This must not match any legitimate 'section' number.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define MAGIC_SECT_NO -3
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* Size of chunk of data allocated in one alloc
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Not clear if this is the best size.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Used to be just 4096 for user data, the section data struct
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe was a separate malloc.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define CHUNK_SIZE (4096 - sizeof (struct Dwarf_P_Section_Data_s))
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/*
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe chunk alloc routine -
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if chunk->ds_data is nil, it will alloc CHUNK_SIZE bytes,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe and return pointer to the beginning. If chunk is not nil,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe it will see if there's enoungh space for nbytes in current
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe chunk, if not, add new chunk to linked list, and return
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe a char * pointer to it. Return null if unsuccessful.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard LoweDwarf_Small *_dwarf_pro_buffer(Dwarf_P_Debug dbg, int sectno,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe unsigned long nbytes);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define GET_CHUNK(dbg,sectno,ptr,nbytes,error) \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe { \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe (ptr) = _dwarf_pro_buffer((dbg),(sectno),(nbytes)); \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe if ((ptr) == NULL) { \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe DWARF_P_DBG_ERROR(dbg,DW_DLE_CHUNK_ALLOC,-1); \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe } \
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe }
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Loweint
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe _dwarf_transform_arange_to_disk(Dwarf_P_Debug dbg,
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe Dwarf_Error * error);
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* These are for creating ELF section type codes.
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe*/
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#if defined(linux) || defined(__BEOS__) || !defined(SHT_MIPS_DWARF)
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe/* Intel's SoftSdv accepts only this */
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define SECTION_TYPE SHT_PROGBITS
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#else
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#define SECTION_TYPE SHT_MIPS_DWARF
49d3bc91e27cd871b950d56c01398fa2f2e12ab4Richard Lowe#endif