diff options
Diffstat (limited to 'usr/src/tools/ctf/dwarf/common/pro_opaque.h')
-rw-r--r-- | usr/src/tools/ctf/dwarf/common/pro_opaque.h | 484 |
1 files changed, 0 insertions, 484 deletions
diff --git a/usr/src/tools/ctf/dwarf/common/pro_opaque.h b/usr/src/tools/ctf/dwarf/common/pro_opaque.h deleted file mode 100644 index befc69faa6..0000000000 --- a/usr/src/tools/ctf/dwarf/common/pro_opaque.h +++ /dev/null @@ -1,484 +0,0 @@ -/* - - Copyright (C) 2000,2002,2004 Silicon Graphics, Inc. All Rights Reserved. - Portions Copyright 2002-2010 Sun Microsystems, 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. - - 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 - -*/ - - -#include <stddef.h> - -/* - Sgidefs included to define __uint32_t, - a guaranteed 4-byte quantity. -*/ -#include "libdwarfdefs.h" - -#define true 1 -#define false 0 - -/* to identify a cie */ -#define DW_CIE_ID ~(0x0) -#define DW_CIE_VERSION 1 - -/*Dwarf_Word is unsigned word usable for index, count in memory */ -/*Dwarf_Sword is signed word usable for index, count in memory */ -/* The are 32 or 64 bits depending if 64 bit longs or not, which -** fits the ILP32 and LP64 models -** These work equally well with ILP64. -*/ - -typedef unsigned long Dwarf_Word; -typedef long Dwarf_Sword; - - -typedef signed char Dwarf_Sbyte; -typedef unsigned char Dwarf_Ubyte; -typedef signed short Dwarf_Shalf; - -/* - On any change that makes libdwarf producer - incompatible, increment this number. - 1->2->3 ... - -*/ -#define PRO_VERSION_MAGIC 0xdead1 - - -/* these 2 are fixed sizes which must not vary with the -** ILP32/LP64 model. These two stay at 32 bit. -*/ -typedef __uint32_t Dwarf_ufixed; -typedef __int32_t Dwarf_sfixed; - -/* - producer: - This struct is used to hold information about all - debug* sections. On creating a new section, section - names and indices are added to this struct - definition in pro_section.h -*/ -typedef struct Dwarf_P_Section_Data_s *Dwarf_P_Section_Data; - -/* - producer: - This struct is used to hold entries in the include directories - part of statement prologue. Definition in pro_line.h -*/ -typedef struct Dwarf_P_Inc_Dir_s *Dwarf_P_Inc_Dir; - -/* - producer: - This struct holds file entries for the statement prologue. - Defined in pro_line.h -*/ -typedef struct Dwarf_P_F_Entry_s *Dwarf_P_F_Entry; - -/* - producer: - This struct holds information for each cie. Defn in pro_frame.h -*/ -typedef struct Dwarf_P_Cie_s *Dwarf_P_Cie; - -/* - producer: - Struct to hold line number information, different from - Dwarf_Line opaque type. -*/ -typedef struct Dwarf_P_Line_s *Dwarf_P_Line; - -/* - producer: - Struct to hold information about address ranges. -*/ -typedef struct Dwarf_P_Simple_nameentry_s *Dwarf_P_Simple_nameentry; -typedef struct Dwarf_P_Simple_name_header_s *Dwarf_P_Simple_name_header; -typedef struct Dwarf_P_Arange_s *Dwarf_P_Arange; -typedef struct Dwarf_P_Per_Reloc_Sect_s *Dwarf_P_Per_Reloc_Sect; -typedef struct Dwarf_P_Per_Sect_String_Attrs_s *Dwarf_P_Per_Sect_String_Attrs; - -/* Defined to get at the elf section numbers and section name - indices in symtab for the dwarf sections - Must match .rel.* names in _dwarf_rel_section_names - exactly. -*/ -#define DEBUG_INFO 0 -#define DEBUG_LINE 1 -#define DEBUG_ABBREV 2 -#define DEBUG_FRAME 3 -#define DEBUG_ARANGES 4 -#define DEBUG_PUBNAMES 5 -#define DEBUG_STR 6 -#define DEBUG_FUNCNAMES 7 -#define DEBUG_TYPENAMES 8 -#define DEBUG_VARNAMES 9 -#define DEBUG_WEAKNAMES 10 -#define DEBUG_MACINFO 11 -#define DEBUG_LOC 12 - - /* number of debug_* sections not including the relocations */ -#define NUM_DEBUG_SECTIONS DEBUG_LOC + 1 - - -struct Dwarf_P_Die_s { - Dwarf_Unsigned di_offset; /* offset in debug info */ - char *di_abbrev; /* abbreviation */ - Dwarf_Word di_abbrev_nbytes; /* # of bytes in abbrev */ - Dwarf_Tag di_tag; - Dwarf_P_Die di_parent; /* parent of current die */ - Dwarf_P_Die di_child; /* first child */ - /* The last child field makes linking up children an O(1) operation, - See pro_die.c. */ - Dwarf_P_Die di_last_child; - Dwarf_P_Die di_left; /* left sibling */ - Dwarf_P_Die di_right; /* right sibling */ - Dwarf_P_Attribute di_attrs; /* list of attributes */ - Dwarf_P_Attribute di_last_attr; /* last attribute */ - int di_n_attr; /* number of attributes */ - Dwarf_P_Debug di_dbg; /* For memory management */ - Dwarf_Unsigned di_marker; /* used to attach symbols to dies */ -}; - - -/* producer fields */ -struct Dwarf_P_Attribute_s { - Dwarf_Half ar_attribute; /* Attribute Value. */ - Dwarf_Half ar_attribute_form; /* Attribute Form. */ - Dwarf_P_Die ar_ref_die; /* die pointer if form ref */ - char *ar_data; /* data, format given by form */ - Dwarf_Unsigned ar_nbytes; /* no. of bytes of data */ - Dwarf_Unsigned ar_rel_symidx; /* when attribute has a - relocatable value, holds - index of symbol in SYMTAB */ - Dwarf_Ubyte ar_rel_type; /* relocation type */ - Dwarf_Word ar_rel_offset; /* Offset of relocation within block */ - char ar_reloc_len; /* Number of bytes that relocation - applies to. 4 or 8. Unused and may - be 0 if if ar_rel_type is - R_MIPS_NONE */ - Dwarf_P_Attribute ar_next; -}; - -/* A block of .debug_macinfo data: this forms a series of blocks. -** Each macinfo input is compressed immediately and put into -** the current block if room, else a newblock allocated. -** The space allocation is such that the block and the macinfo -** data are one malloc block: free with a pointer to this and the -** mb_data is freed automatically. -** Like the struct hack, but legal ANSI C. -*/ -struct dw_macinfo_block_s { - struct dw_macinfo_block_s *mb_next; - unsigned long mb_avail_len; - unsigned long mb_used_len; - unsigned long mb_macinfo_data_space_len; - char *mb_data; /* original malloc ptr. */ -}; - -/* dwarf_sn_kind is for the array of similarly-treated - name -> cu ties -*/ -enum dwarf_sn_kind { dwarf_snk_pubname, dwarf_snk_funcname, - dwarf_snk_weakname, dwarf_snk_typename, - dwarf_snk_varname, - dwarf_snk_entrycount /* this one must be last */ -}; - - - -/* The calls to add a varname etc use a list of - these as the list. -*/ -struct Dwarf_P_Simple_nameentry_s { - Dwarf_P_Die sne_die; - char *sne_name; - int sne_name_len; - Dwarf_P_Simple_nameentry sne_next; -}; - -/* An array of these, each of which heads a list - of Dwarf_P_Simple_nameentry -*/ -struct Dwarf_P_Simple_name_header_s { - Dwarf_P_Simple_nameentry sn_head; - Dwarf_P_Simple_nameentry sn_tail; - Dwarf_Signed sn_count; - - /* length that will be generated, not counting fixed header or - trailer */ - Dwarf_Signed sn_net_len; -}; -typedef int (*_dwarf_pro_reloc_name_func_ptr) (Dwarf_P_Debug dbg, - int sec_index, - Dwarf_Unsigned offset,/* r_offset */ - Dwarf_Unsigned symidx, - enum Dwarf_Rel_Type type, - int reltarget_length); - -typedef int (*_dwarf_pro_reloc_length_func_ptr) (Dwarf_P_Debug dbg, - int sec_index, Dwarf_Unsigned offset,/* r_offset */ - Dwarf_Unsigned start_symidx, - Dwarf_Unsigned end_symidx, - enum Dwarf_Rel_Type type, - int reltarget_length); -typedef int (*_dwarf_pro_transform_relocs_func_ptr) (Dwarf_P_Debug dbg, - Dwarf_Signed * - new_sec_count); - -/* - Each slot in a block of slots could be: - a binary stream relocation entry (32 or 64bit relocation data) - a SYMBOLIC relocation entry. - During creation sometimes we create multiple chained blocks, - but sometimes we create a single long block. - Before returning reloc data to caller, - we switch to a single, long-enough, - block. - - We make counters here Dwarf_Unsigned so that we - get sufficient alignment. Since we use space after - the struct (at malloc time) for user data which - must have Dwarf_Unsigned alignment, this - struct must have that alignment too. -*/ -struct Dwarf_P_Relocation_Block_s { - Dwarf_Unsigned rb_slots_in_block; /* slots in block, as created */ - Dwarf_Unsigned rb_next_slot_to_use; /* counter, start at 0. */ - struct Dwarf_P_Relocation_Block_s *rb_next; - char *rb_where_to_add_next; /* pointer to next slot (might be past - end, depending on - rb_next_slot_to_use) */ - char *rb_data; /* data area */ -}; - -/* One of these per potential relocation section - So one per actual dwarf section. - Left zeroed when not used (some sections have - no relocations). -*/ -struct Dwarf_P_Per_Reloc_Sect_s { - unsigned long pr_reloc_total_count; /* total number of entries - across all blocks */ - - unsigned long pr_slots_per_block_to_alloc; /* at Block alloc, this - is the default number of slots to use */ - - int pr_sect_num_of_reloc_sect; /* sect number returned by - de_callback_func() or de_callback_func_b() call, this is the sect - number of the relocation section. */ - - /* singly-linked list. add at and ('last') with count of blocks */ - struct Dwarf_P_Relocation_Block_s *pr_first_block; - struct Dwarf_P_Relocation_Block_s *pr_last_block; - unsigned long pr_block_count; -}; - -#define DEFAULT_SLOTS_PER_BLOCK 3 - -typedef struct memory_list_s { - struct memory_list_s *prev; - struct memory_list_s *next; -} memory_list_t; - -struct Dwarf_P_Per_Sect_String_Attrs_s { - int sect_sa_section_number; - unsigned sect_sa_n_alloc; - unsigned sect_sa_n_used; - Dwarf_P_String_Attr sect_sa_list; -}; - -/* Fields used by producer */ -struct Dwarf_P_Debug_s { - /* used to catch dso passing dbg to another DSO with incompatible - version of libdwarf See PRO_VERSION_MAGIC */ - int de_version_magic_number; - - Dwarf_Handler de_errhand; - Dwarf_Ptr de_errarg; - - /* Call back function, used to create .debug* sections. Provided - by user. Only of these used per dbg. */ - Dwarf_Callback_Func de_callback_func; - Dwarf_Callback_Func_b de_callback_func_b; - - /* Flags from producer_init call */ - Dwarf_Unsigned de_flags; - - /* This holds information on debug section stream output, including - the stream data */ - Dwarf_P_Section_Data de_debug_sects; - - /* Pointer to the 'current active' section */ - Dwarf_P_Section_Data de_current_active_section; - - /* Number of debug data streams globs. */ - Dwarf_Word de_n_debug_sect; - - /* File entry information, null terminated singly-linked list */ - Dwarf_P_F_Entry de_file_entries; - Dwarf_P_F_Entry de_last_file_entry; - Dwarf_Unsigned de_n_file_entries; - - /* Has the directories used to search for source files */ - Dwarf_P_Inc_Dir de_inc_dirs; - Dwarf_P_Inc_Dir de_last_inc_dir; - Dwarf_Unsigned de_n_inc_dirs; - - /* Has all the line number info for the stmt program */ - Dwarf_P_Line de_lines; - Dwarf_P_Line de_last_line; - - /* List of cie's for the debug unit */ - Dwarf_P_Cie de_frame_cies; - Dwarf_P_Cie de_last_cie; - Dwarf_Unsigned de_n_cie; - - /* Singly-linked list of fde's for the debug unit */ - Dwarf_P_Fde de_frame_fdes; - Dwarf_P_Fde de_last_fde; - Dwarf_Unsigned de_n_fde; - - /* First die, leads to all others */ - Dwarf_P_Die de_dies; - - /* Pointer to list of strings */ - char *de_strings; - - /* Pointer to chain of aranges */ - Dwarf_P_Arange de_arange; - Dwarf_P_Arange de_last_arange; - Dwarf_Sword de_arange_count; - - /* macinfo controls. */ - /* first points to beginning of the list during creation */ - struct dw_macinfo_block_s *de_first_macinfo; - - /* current points to the current, unfilled, block */ - struct dw_macinfo_block_s *de_current_macinfo; - - /* Pointer to the first section, to support reset_section_bytes */ - Dwarf_P_Section_Data de_first_debug_sect; - - /* handles pubnames, weaknames, etc. See dwarf_sn_kind in - pro_opaque.h */ - struct Dwarf_P_Simple_name_header_s - de_simple_name_headers[dwarf_snk_entrycount]; - - /* relocation data. not all sections will actally have relocation - info, of course */ - struct Dwarf_P_Per_Reloc_Sect_s de_reloc_sect[NUM_DEBUG_SECTIONS]; - int de_reloc_next_to_return; /* iterator on reloc sections - (SYMBOLIC output) */ - - /* used in remembering sections */ - int de_elf_sects[NUM_DEBUG_SECTIONS]; /* elf sect number of - the section itself, DEBUG_LINE for example */ - - Dwarf_Unsigned de_sect_name_idx[NUM_DEBUG_SECTIONS]; /* section - name index or handle for the name of the symbol for - DEBUG_LINE for example */ - - int de_offset_reloc; /* offset reloc type, R_MIPS_32 for - example. Specific to the ABI being - produced. Relocates offset size - field */ - int de_exc_reloc; /* reloc type specific to exception - table relocs. */ - int de_ptr_reloc; /* standard reloc type, R_MIPS_32 for - example. Specific to the ABI being - produced. relocates pointer size - field */ - - unsigned char de_offset_size; /* section offset. Here to - avoid test of abi in macro - at run time MIPS -n32 4, - -64 8. */ - - unsigned char de_pointer_size; /* size of pointer in target. - Here to avoid test of abi in - macro at run time MIPS -n32 - 4, -64 is 8. */ - - unsigned char de_is_64bit; /* non-zero if is 64bit. Else 32 bit: - used for passing this info as a flag - */ - unsigned char de_relocation_record_size; /* reloc record size - varies by ABI and - relocation-output - method (stream or - symbolic) */ - - unsigned char de_64bit_extension; /* non-zero if creating 64 bit - offsets using dwarf2-99 - extension proposal */ - - int de_ar_data_attribute_form; /* data8, data4 abi dependent */ - int de_ar_ref_attr_form; /* ref8 ref4 , abi dependent */ - - /* simple name relocations */ - _dwarf_pro_reloc_name_func_ptr de_reloc_name; - - /* relocations for a length, requiring a pair of symbols */ - _dwarf_pro_reloc_length_func_ptr de_reloc_pair; - - _dwarf_pro_transform_relocs_func_ptr de_transform_relocs_to_disk; - - /* following used for macro buffers */ - unsigned long de_compose_avail; - unsigned long de_compose_used_len; - - unsigned char de_same_endian; - void *(*de_copy_word) (void *, const void *, size_t); - - /* Add new fields at the END of this struct to preserve some hope - of sensible behavior on dbg passing between DSOs linked with - mismatched libdwarf producer versions. */ - - Dwarf_P_Marker de_markers; /* pointer to array of markers */ - unsigned de_marker_n_alloc; - unsigned de_marker_n_used; - int de_sect_sa_next_to_return; /* Iterator on sring attrib sects */ - /* String attributes data of each section. */ - struct Dwarf_P_Per_Sect_String_Attrs_s de_sect_string_attr[NUM_DEBUG_SECTIONS]; -}; - -#define CURRENT_VERSION_STAMP 2 - -Dwarf_Unsigned _dwarf_add_simple_name_entry(Dwarf_P_Debug dbg, - Dwarf_P_Die die, - char *entry_name, - enum dwarf_sn_kind - entrykind, - Dwarf_Error * error); - - -#define DISTINGUISHED_VALUE 0xffffffff /* 64bit extension flag */ |