--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tools/elf4rom/libs/dwarf-20071209/libdwarf/dwarf_opaque.h Fri Jan 15 09:07:44 2010 +0000
@@ -0,0 +1,301 @@
+/*
+
+ Copyright (C) 2000,2002,2003,2004,2005 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2007 David Anderson. 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.
+
+ Contact information: Silicon Graphics, Inc., 1500 Crittenden Lane,
+ Mountain View, CA 94043, or:
+
+ http://www.sgi.com
+
+ For further information regarding this notice, see:
+
+ http://oss.sgi.com/projects/GenInfo/NoticeExplan
+
+*/
+/* The versions applicable by section are:
+ DWARF2 DWARF3 DWARF4
+ .debug_info 2 3 4
+ .debug_abbrev - - -
+ .debug_frame 1 3 3
+ .debug_str - - -
+ .debug_loc - - -
+ .debug_line 2 3 3
+ .debug_aranges 2 2 2
+ .debug_ranges x - -
+ .debug_pubtypes x 2 2
+ .debug_pubnames 2 2 2
+ .debug_macinfo - - -
+*/
+
+#include <stddef.h>
+
+
+struct Dwarf_Die_s {
+ /*
+ Points to the start of the portion corresponding to this Die in
+ the .debug_info section. */
+ Dwarf_Byte_Ptr di_debug_info_ptr;
+
+ Dwarf_Abbrev_List di_abbrev_list;
+
+ /* Points to cu context for this die. */
+ Dwarf_CU_Context di_cu_context;
+};
+
+struct Dwarf_Attribute_s {
+ Dwarf_Half ar_attribute; /* Attribute Value. */
+ Dwarf_Half ar_attribute_form; /* Attribute Form. */
+ Dwarf_Half ar_attribute_form_direct;
+ /* Identical to ar_attribute_form except that if
+ the original form uleb was DW_FORM_indirect,
+ ar_attribute_form_direct contains DW_FORM_indirect
+ but ar_attribute_form contains the true form. */
+
+ Dwarf_CU_Context ar_cu_context;
+ Dwarf_Small *ar_debug_info_ptr;
+ Dwarf_Attribute ar_next;
+};
+
+/*
+ This structure provides the context for a compilation unit.
+ Thus, it contains the Dwarf_Debug, cc_dbg, that this cu
+ belongs to. It contains the information in the compilation
+ unit header, cc_length, cc_version_stamp, cc_abbrev_offset,
+ and cc_address_size, in the .debug_info section for that cu.
+ In addition, it contains the count, cc_count_cu, of the cu
+ number of that cu in the list of cu's in the .debug_info.
+ The count starts at 1, ie cc_count_cu is 1 for the first cu,
+ 2 for the second and so on. This struct also contains a
+ pointer, cc_abbrev_table, to a list of pairs of abbrev code
+ and a pointer to the start of that abbrev
+ in the .debug_abbrev section.
+
+ Each die will also contain a pointer to such a struct to
+ record the context for that die.
+
+ **Updated by dwarf_next_cu_header in dwarf_die_deliv.c
+*/
+struct Dwarf_CU_Context_s {
+ Dwarf_Debug cc_dbg;
+ Dwarf_Word cc_length;
+ Dwarf_Small cc_length_size;
+ Dwarf_Small cc_extension_size;
+ Dwarf_Half cc_version_stamp;
+ Dwarf_Sword cc_abbrev_offset;
+ Dwarf_Small cc_address_size;
+ Dwarf_Word cc_debug_info_offset;
+ Dwarf_Byte_Ptr cc_last_abbrev_ptr;
+ Dwarf_Hash_Table cc_abbrev_hash_table;
+ Dwarf_CU_Context cc_next;
+ unsigned char cc_offset_length;
+};
+
+
+struct Dwarf_Debug_s {
+ dwarf_elf_handle de_elf; /* see de_elf_must_close at end of struct */
+
+ Dwarf_Unsigned de_access;
+ Dwarf_Handler de_errhand;
+ Dwarf_Ptr de_errarg;
+
+ /*
+ Context for the compilation_unit just read by a call to
+ dwarf_next_cu_header. **Updated by dwarf_next_cu_header in
+ dwarf_die_deliv.c */
+ Dwarf_CU_Context de_cu_context;
+
+ /*
+ Points to linked list of CU Contexts for the CU's already read.
+ These are only CU's read by dwarf_next_cu_header(). */
+ Dwarf_CU_Context de_cu_context_list;
+
+ /*
+ Points to the last CU Context added to the list by
+ dwarf_next_cu_header(). */
+ Dwarf_CU_Context de_cu_context_list_end;
+
+ /*
+ This is the list of CU contexts read for dwarf_offdie(). These
+ may read ahead of dwarf_next_cu_header(). */
+ Dwarf_CU_Context de_offdie_cu_context;
+ Dwarf_CU_Context de_offdie_cu_context_end;
+
+ /* Offset of last byte of last CU read. */
+ Dwarf_Word de_info_last_offset;
+
+ /*
+ Number of bytes in the length, and offset field in various
+ .debug_* sections. It's not very meaningful, and is
+ only used in one 'approximate' calculation. */
+ Dwarf_Small de_length_size;
+
+ /* number of bytes in a pointer of the target in various .debug_
+ sections. 4 in 32bit, 8 in MIPS 64, ia64. */
+ Dwarf_Small de_pointer_size;
+
+ /* set at creation of a Dwarf_Debug to say if form_string should be
+ checked for valid length at every call. 0 means do the check.
+ non-zero means do not do the check. */
+ Dwarf_Small de_assume_string_in_bounds;
+
+ /*
+ Dwarf_Alloc_Hdr_s structs used to manage chunks that are
+ malloc'ed for each allocation type for structs. */
+ struct Dwarf_Alloc_Hdr_s de_alloc_hdr[ALLOC_AREA_REAL_TABLE_MAX];
+#ifdef DWARF_SIMPLE_MALLOC
+ struct simple_malloc_record_s * de_simple_malloc_base;
+#endif
+
+
+ /*
+ These fields are used to process debug_frame section. **Updated
+ by dwarf_get_fde_list in dwarf_frame.h */
+ /*
+ Points to contiguous block of pointers to Dwarf_Cie_s structs. */
+ Dwarf_Cie *de_cie_data;
+ /* Count of number of Dwarf_Cie_s structs. */
+ Dwarf_Signed de_cie_count;
+ /*
+ Points to contiguous block of pointers to Dwarf_Fde_s structs. */
+ Dwarf_Fde *de_fde_data;
+ /* Count of number of Dwarf_Fde_s structs. */
+ Dwarf_Signed de_fde_count;
+
+ Dwarf_Small *de_debug_info;
+ Dwarf_Small *de_debug_abbrev;
+ Dwarf_Small *de_debug_line;
+ Dwarf_Small *de_debug_loc;
+ Dwarf_Small *de_debug_aranges;
+ Dwarf_Small *de_debug_macinfo;
+ Dwarf_Small *de_debug_pubnames;
+ Dwarf_Small *de_debug_str;
+ Dwarf_Small *de_debug_frame;
+ Dwarf_Small *de_debug_pubtypes; /* DWARF3 .debug_pubtypes */
+ Dwarf_Small *de_debug_frame_eh_gnu; /* gnu for the g++ eh_frame
+ section */
+ Dwarf_Addr de_debug_frame_eh_addr; /* gnu for the g++ eh_frame
+ section. Section address
+ from Elf. Purpose: to handle
+ DW_EH_PE_pcrel encoding. */
+
+ Dwarf_Small *de_debug_funcnames;
+ Dwarf_Small *de_debug_typenames; /* SGI IRIX extension essentially
+ identical to DWARF3 .debug_pubtypes. */
+ Dwarf_Small *de_debug_varnames;
+ Dwarf_Small *de_debug_weaknames;
+
+ Dwarf_Unsigned de_debug_info_size;
+ Dwarf_Unsigned de_debug_abbrev_size;
+ Dwarf_Unsigned de_debug_line_size;
+ Dwarf_Unsigned de_debug_loc_size;
+ Dwarf_Unsigned de_debug_aranges_size;
+ Dwarf_Unsigned de_debug_macinfo_size;
+ Dwarf_Unsigned de_debug_pubnames_size;
+ Dwarf_Unsigned de_debug_str_size;
+ Dwarf_Unsigned de_debug_pubtypes_size; /* DWARF3 .debug_pubtypes*/
+
+
+ Dwarf_Unsigned de_debug_frame_size;
+
+ Dwarf_Unsigned de_debug_frame_size_eh_gnu; /* gnu for the g++
+ eh_frame section */
+
+ Dwarf_Unsigned de_debug_funcnames_size;
+ Dwarf_Unsigned de_debug_typenames_size;
+ Dwarf_Unsigned de_debug_varnames_size;
+ Dwarf_Unsigned de_debug_weaknames_size;
+
+ void *(*de_copy_word) (void *, const void *, size_t);
+ unsigned char de_same_endian;
+ unsigned char de_elf_must_close; /* if non-zero, then
+ it was dwarf_init (not dwarf_elf_init)
+ so must elf_end() */
+
+ /*
+ The following are used for storing section indicies.
+
+ After a Dwarf_Debug is initialized, a zero for any of
+ these indicies indicates an absent section.
+
+ If the ELF spec is ever changed to permit 32-bit section
+ indicies, these will need to be changed.
+ */
+ Dwarf_Half de_debug_aranges_index;
+ Dwarf_Half de_debug_line_index;
+ Dwarf_Half de_debug_loc_index;
+ Dwarf_Half de_debug_macinfo_index;
+ Dwarf_Half de_debug_pubnames_index;
+ Dwarf_Half de_debug_funcnames_index;
+ Dwarf_Half de_debug_typenames_index;
+ Dwarf_Half de_debug_varnames_index;
+ Dwarf_Half de_debug_weaknames_index;
+ Dwarf_Half de_debug_frame_index;
+ Dwarf_Half de_debug_frame_eh_gnu_index;
+ Dwarf_Half de_debug_str_index;
+ Dwarf_Half de_debug_info_index;
+ Dwarf_Half de_debug_abbrev_index;
+ Dwarf_Half de_debug_pubtypes_index; /* DWARF3 .debug_pubtypes */
+
+ /* Default is DW_FRAME_INITIAL_VALUE from header. */
+ Dwarf_Half de_frame_rule_initial_value;
+
+ /* Default is DW_FRAME_LAST_REG_NUM. */
+ Dwarf_Half de_frame_reg_rules_entry_count;
+
+
+ unsigned char de_big_endian_object; /* non-zero if big-endian
+ object opened. */
+};
+
+typedef struct Dwarf_Chain_s *Dwarf_Chain;
+struct Dwarf_Chain_s {
+ void *ch_item;
+ Dwarf_Chain ch_next;
+};
+
+
+#define CURRENT_VERSION_STAMP 2 /* DWARF2 */
+#define CURRENT_VERSION_STAMP3 3 /* DWARF3 */
+#define CURRENT_VERSION_STAMP4 3 /* DWARF4 */
+
+ /* Size of cu header version stamp field. */
+#define CU_VERSION_STAMP_SIZE sizeof(Dwarf_Half)
+
+ /* Size of cu header address size field. */
+#define CU_ADDRESS_SIZE_SIZE sizeof(Dwarf_Small)
+
+void *_dwarf_memcpy_swap_bytes(void *s1, const void *s2, size_t len);
+
+#define ORIGINAL_DWARF_OFFSET_SIZE 4
+#define DISTINGUISHED_VALUE 0xffffffff
+#define DISTINGUISHED_VALUE_OFFSET_SIZE 8
+
+/*
+ We don't load the sections until they are needed. This function is
+ used to load the section.
+ */
+int _dwarf_load_section(Dwarf_Debug,
+ Dwarf_Half,
+ Dwarf_Small **,
+ Dwarf_Error *);