diff --git a/desmume/src/windows/DeSmuME_2005.vcproj b/desmume/src/windows/DeSmuME_2005.vcproj
index bb89ce398..fec748744 100644
--- a/desmume/src/windows/DeSmuME_2005.vcproj
+++ b/desmume/src/windows/DeSmuME_2005.vcproj
@@ -81,7 +81,7 @@
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
@@ -1004,6 +984,16 @@
Outputs=".libs\7z.tag"
/>
+
+
+
@@ -1014,6 +1004,16 @@
Outputs=".libs\7z.tag"
/>
+
+
+
@@ -1038,26 +1038,6 @@
Outputs=".libs\directx.tag"
/>
-
-
-
-
-
-
@@ -1068,6 +1048,16 @@
Outputs=".libs\directx.tag"
/>
+
+
+
@@ -1078,6 +1068,16 @@
Outputs=".libs\directx.tag"
/>
+
+
+
@@ -1102,26 +1102,6 @@
Outputs=".libs\glib-vc8.tag"
/>
-
-
-
-
-
-
@@ -1132,6 +1112,16 @@
Outputs=".libs\glib-vc8.tag"
/>
+
+
+
@@ -1142,6 +1132,16 @@
Outputs=".libs\glib-vc8.tag"
/>
+
+
+
@@ -1154,16 +1154,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1206,6 +1260,16 @@
Outputs=".libs\lua.tag"
/>
+
+
+
@@ -1230,26 +1294,6 @@
Outputs=".libs\wx.tag"
/>
-
-
-
-
-
-
@@ -1260,6 +1304,16 @@
Outputs=".libs\wx.tag"
/>
+
+
+
@@ -1270,6 +1324,16 @@
Outputs=".libs\wx.tag"
/>
+
+
+
@@ -1361,24 +1425,6 @@
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
-
-
-
-
-
-
@@ -1388,6 +1434,15 @@
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
+
+
+
@@ -1397,6 +1452,15 @@
XMLDocumentationFileName="$(IntDir)\$(InputName)1.xdc"
/>
+
+
+
@@ -1689,7 +1753,7 @@
/>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
@@ -1623,6 +1603,16 @@
Outputs=".libs\7z.tag"
/>
+
+
+
@@ -1633,6 +1623,16 @@
Outputs=".libs\7z.tag"
/>
+
+
+
@@ -1657,26 +1657,6 @@
Outputs=".libs\directx.tag"
/>
-
-
-
-
-
-
@@ -1687,6 +1667,16 @@
Outputs=".libs\directx.tag"
/>
+
+
+
@@ -1697,6 +1687,16 @@
Outputs=".libs\directx.tag"
/>
+
+
+
@@ -1721,26 +1721,6 @@
Outputs=".libs\glib-vc8.tag"
/>
-
-
-
-
-
-
@@ -1751,6 +1731,16 @@
Outputs=".libs\glib-vc8.tag"
/>
+
+
+
@@ -1761,6 +1751,16 @@
Outputs=".libs\glib-vc8.tag"
/>
+
+
+
@@ -1773,16 +1773,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -1825,6 +1879,16 @@
Outputs=".libs\lua.tag"
/>
+
+
+
@@ -1849,6 +1913,16 @@
Outputs=".libs\wx.tag"
/>
+
+
+
@@ -1859,6 +1933,16 @@
Outputs=".libs\wx.tag"
/>
+
+
+
@@ -1869,26 +1953,6 @@
Outputs=".libs\wx.tag"
/>
-
-
-
-
-
-
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/common.h b/desmume/src/windows/libelf_libdwarf/libdwarf/common.h
new file mode 100644
index 000000000..ab26b20d4
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/common.h
@@ -0,0 +1,47 @@
+/*
+ Copyright (C) 2009-2010 SN Systems. All Rights Reserved.
+ Portions Copyright (C) 2009-2010 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
+
+*/
+
+#ifndef common_INCLUDED
+#define common_INCLUDED
+
+#include
+
+
+void print_args(int argc, char *argv[]);
+void print_usage_message(const char *options[]);
+void print_version(const char * name);
+
+#endif /* common_INCLUDED */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf.h
new file mode 100644
index 000000000..1d3491c9b
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf.h
@@ -0,0 +1,1065 @@
+/*
+ Copyright (C) 2000,2001,2003,2004,2005,2006 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2002-2010 Sun Microsystems, Inc. All rights reserved.
+ Portions Copyright 2007-2010 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
+
+*/
+
+
+#ifndef __DWARF_H
+#define __DWARF_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/*
+ dwarf.h DWARF debugging information values
+ $Revision: 1.41 $ $Date: 2006/04/17 00:09:56 $
+
+ The comment "DWARF3" appears where there are
+ new entries from DWARF3 as of 2004, "DWARF3f"
+ where there are new entries as of the November 2005
+ public review document and other comments apply
+ where extension entries appear.
+
+ Extensions part of DWARF4 are marked DWARF4.
+
+ A few extension names have omitted the 'vendor id'
+ (See chapter 7, "Vendor Extensibility"). Please
+ always use a 'vendor id' string in extension names.
+
+ Vendors should use a vendor string in names and
+ whereever possible avoid duplicating values used by
+ other vendor extensions
+
+*/
+
+
+#define DW_TAG_array_type 0x01
+#define DW_TAG_class_type 0x02
+#define DW_TAG_entry_point 0x03
+#define DW_TAG_enumeration_type 0x04
+#define DW_TAG_formal_parameter 0x05
+#define DW_TAG_imported_declaration 0x08
+#define DW_TAG_label 0x0a
+#define DW_TAG_lexical_block 0x0b
+#define DW_TAG_member 0x0d
+#define DW_TAG_pointer_type 0x0f
+#define DW_TAG_reference_type 0x10
+#define DW_TAG_compile_unit 0x11
+#define DW_TAG_string_type 0x12
+#define DW_TAG_structure_type 0x13
+#define DW_TAG_subroutine_type 0x15
+#define DW_TAG_typedef 0x16
+#define DW_TAG_union_type 0x17
+#define DW_TAG_unspecified_parameters 0x18
+#define DW_TAG_variant 0x19
+#define DW_TAG_common_block 0x1a
+#define DW_TAG_common_inclusion 0x1b
+#define DW_TAG_inheritance 0x1c
+#define DW_TAG_inlined_subroutine 0x1d
+#define DW_TAG_module 0x1e
+#define DW_TAG_ptr_to_member_type 0x1f
+#define DW_TAG_set_type 0x20
+#define DW_TAG_subrange_type 0x21
+#define DW_TAG_with_stmt 0x22
+#define DW_TAG_access_declaration 0x23
+#define DW_TAG_base_type 0x24
+#define DW_TAG_catch_block 0x25
+#define DW_TAG_const_type 0x26
+#define DW_TAG_constant 0x27
+#define DW_TAG_enumerator 0x28
+#define DW_TAG_file_type 0x29
+#define DW_TAG_friend 0x2a
+#define DW_TAG_namelist 0x2b
+ /* Early releases of this header had the following
+ misspelled with a trailing 's' */
+#define DW_TAG_namelist_item 0x2c /* DWARF3/2 spelling */
+#define DW_TAG_namelist_items 0x2c /* SGI misspelling/typo */
+#define DW_TAG_packed_type 0x2d
+#define DW_TAG_subprogram 0x2e
+ /* The DWARF2 document had two spellings of the following
+ two TAGs, DWARF3 specifies the longer spelling. */
+#define DW_TAG_template_type_parameter 0x2f /* DWARF3/2 spelling*/
+#define DW_TAG_template_type_param 0x2f /* DWARF2 spelling*/
+#define DW_TAG_template_value_parameter 0x30 /* DWARF3/2 spelling*/
+#define DW_TAG_template_value_param 0x30 /* DWARF2 spelling*/
+#define DW_TAG_thrown_type 0x31
+#define DW_TAG_try_block 0x32
+#define DW_TAG_variant_part 0x33
+#define DW_TAG_variable 0x34
+#define DW_TAG_volatile_type 0x35
+#define DW_TAG_dwarf_procedure 0x36 /* DWARF3 */
+#define DW_TAG_restrict_type 0x37 /* DWARF3 */
+#define DW_TAG_interface_type 0x38 /* DWARF3 */
+#define DW_TAG_namespace 0x39 /* DWARF3 */
+#define DW_TAG_imported_module 0x3a /* DWARF3 */
+#define DW_TAG_unspecified_type 0x3b /* DWARF3 */
+#define DW_TAG_partial_unit 0x3c /* DWARF3 */
+#define DW_TAG_imported_unit 0x3d /* DWARF3 */
+ /* Do not use DW_TAG_mutable_type */
+#define DW_TAG_mutable_type 0x3e /* Withdrawn from DWARF3 by DWARF3f. */
+#define DW_TAG_condition 0x3f /* DWARF3f */
+#define DW_TAG_shared_type 0x40 /* DWARF3f */
+#define DW_TAG_type_unit 0x41 /* DWARF4 */
+#define DW_TAG_rvalue_reference_type 0x42 /* DWARF4 */
+#define DW_TAG_template_alias 0x43 /* DWARF4 */
+#define DW_TAG_lo_user 0x4080
+
+#define DW_TAG_MIPS_loop 0x4081
+
+/* HP extensions: ftp://ftp.hp.com/pub/lang/tools/WDB/wdb-4.0.tar.gz */
+#define DW_TAG_HP_array_descriptor 0x4090 /* HP */
+
+/* GNU extensions. The first 3 missing the GNU_. */
+#define DW_TAG_format_label 0x4101 /* GNU. Fortran. */
+#define DW_TAG_function_template 0x4102 /* GNU. For C++ */
+#define DW_TAG_class_template 0x4103 /* GNU. For C++ */
+#define DW_TAG_GNU_BINCL 0x4104 /* GNU */
+#define DW_TAG_GNU_EINCL 0x4105 /* GNU */
+
+
+/* GNU extension. http://gcc.gnu.org/wiki/TemplateParmsDwarf */
+#define DW_TAG_GNU_template_template_parameter 0x4106 /* GNU */
+#define DW_TAG_GNU_template_template_param 0x4106 /* GNU */
+#define DW_TAG_GNU_template_parameter_pack 0x4107 /* GNU */
+#define DW_TAG_GNU_formal_parameter_pack 0x4108 /* GNU */
+
+/* ALTIUM extensions */
+ /* DSP-C/Starcore __circ qualifier */
+#define DW_TAG_ALTIUM_circ_type 0x5101 /* ALTIUM */
+ /* Starcore __mwa_circ qualifier */
+#define DW_TAG_ALTIUM_mwa_circ_type 0x5102 /* ALTIUM */
+ /* Starcore __rev_carry qualifier */
+#define DW_TAG_ALTIUM_rev_carry_type 0x5103 /* ALTIUM */
+ /* M16 __rom qualifier */
+#define DW_TAG_ALTIUM_rom 0x5111 /* ALTIUM */
+
+/* The following 3 are extensions to support UPC */
+#define DW_TAG_upc_shared_type 0x8765 /* UPC */
+#define DW_TAG_upc_strict_type 0x8766 /* UPC */
+#define DW_TAG_upc_relaxed_type 0x8767 /* UPC */
+
+/* PGI (STMicroelectronics) extensions. */
+#define DW_TAG_PGI_kanji_type 0xa000 /* PGI */
+#define DW_TAG_PGI_interface_block 0xa020 /* PGI */
+/* The following are SUN extensions */
+#define DW_TAG_SUN_function_template 0x4201 /* SUN */
+#define DW_TAG_SUN_class_template 0x4202 /* SUN */
+#define DW_TAG_SUN_struct_template 0x4203 /* SUN */
+#define DW_TAG_SUN_union_template 0x4204 /* SUN */
+#define DW_TAG_SUN_indirect_inheritance 0x4205 /* SUN */
+#define DW_TAG_SUN_codeflags 0x4206 /* SUN */
+#define DW_TAG_SUN_memop_info 0x4207 /* SUN */
+#define DW_TAG_SUN_omp_child_func 0x4208 /* SUN */
+#define DW_TAG_SUN_rtti_descriptor 0x4209 /* SUN */
+#define DW_TAG_SUN_dtor_info 0x420a /* SUN */
+#define DW_TAG_SUN_dtor 0x420b /* SUN */
+#define DW_TAG_SUN_f90_interface 0x420c /* SUN */
+#define DW_TAG_SUN_fortran_vax_structure 0x420d /* SUN */
+#define DW_TAG_SUN_hi 0x42ff /* SUN */
+
+
+#define DW_TAG_hi_user 0xffff
+
+#define DW_children_no 0
+#define DW_children_yes 1
+
+
+
+#define DW_FORM_addr 0x01
+#define DW_FORM_block2 0x03
+#define DW_FORM_block4 0x04
+#define DW_FORM_data2 0x05
+#define DW_FORM_data4 0x06
+#define DW_FORM_data8 0x07
+#define DW_FORM_string 0x08
+#define DW_FORM_block 0x09
+#define DW_FORM_block1 0x0a
+#define DW_FORM_data1 0x0b
+#define DW_FORM_flag 0x0c
+#define DW_FORM_sdata 0x0d
+#define DW_FORM_strp 0x0e
+#define DW_FORM_udata 0x0f
+#define DW_FORM_ref_addr 0x10
+#define DW_FORM_ref1 0x11
+#define DW_FORM_ref2 0x12
+#define DW_FORM_ref4 0x13
+#define DW_FORM_ref8 0x14
+#define DW_FORM_ref_udata 0x15
+#define DW_FORM_indirect 0x16
+#define DW_FORM_sec_offset 0x17 /* DWARF4 */
+#define DW_FORM_exprloc 0x18 /* DWARF4 */
+#define DW_FORM_flag_present 0x19 /* DWARF4 */
+#define DW_FORM_ref_sig8 0x20 /* DWARF4 */
+
+#define DW_AT_sibling 0x01
+#define DW_AT_location 0x02
+#define DW_AT_name 0x03
+#define DW_AT_ordering 0x09
+#define DW_AT_subscr_data 0x0a
+#define DW_AT_byte_size 0x0b
+#define DW_AT_bit_offset 0x0c
+#define DW_AT_bit_size 0x0d
+#define DW_AT_element_list 0x0f
+#define DW_AT_stmt_list 0x10
+#define DW_AT_low_pc 0x11
+#define DW_AT_high_pc 0x12
+#define DW_AT_language 0x13
+#define DW_AT_member 0x14
+#define DW_AT_discr 0x15
+#define DW_AT_discr_value 0x16
+#define DW_AT_visibility 0x17
+#define DW_AT_import 0x18
+#define DW_AT_string_length 0x19
+#define DW_AT_common_reference 0x1a
+#define DW_AT_comp_dir 0x1b
+#define DW_AT_const_value 0x1c
+#define DW_AT_containing_type 0x1d
+#define DW_AT_default_value 0x1e
+#define DW_AT_inline 0x20
+#define DW_AT_is_optional 0x21
+#define DW_AT_lower_bound 0x22
+#define DW_AT_producer 0x25
+#define DW_AT_prototyped 0x27
+#define DW_AT_return_addr 0x2a
+#define DW_AT_start_scope 0x2c
+#define DW_AT_bit_stride 0x2e /* DWARF3 name */
+#define DW_AT_stride_size 0x2e /* DWARF2 name */
+#define DW_AT_upper_bound 0x2f
+#define DW_AT_abstract_origin 0x31
+#define DW_AT_accessibility 0x32
+#define DW_AT_address_class 0x33
+#define DW_AT_artificial 0x34
+#define DW_AT_base_types 0x35
+#define DW_AT_calling_convention 0x36
+#define DW_AT_count 0x37
+#define DW_AT_data_member_location 0x38
+#define DW_AT_decl_column 0x39
+#define DW_AT_decl_file 0x3a
+#define DW_AT_decl_line 0x3b
+#define DW_AT_declaration 0x3c
+#define DW_AT_discr_list 0x3d
+#define DW_AT_encoding 0x3e
+#define DW_AT_external 0x3f
+#define DW_AT_frame_base 0x40
+#define DW_AT_friend 0x41
+#define DW_AT_identifier_case 0x42
+#define DW_AT_macro_info 0x43
+#define DW_AT_namelist_item 0x44
+#define DW_AT_priority 0x45
+#define DW_AT_segment 0x46
+#define DW_AT_specification 0x47
+#define DW_AT_static_link 0x48
+#define DW_AT_type 0x49
+#define DW_AT_use_location 0x4a
+#define DW_AT_variable_parameter 0x4b
+#define DW_AT_virtuality 0x4c
+#define DW_AT_vtable_elem_location 0x4d
+#define DW_AT_allocated 0x4e /* DWARF3 */
+#define DW_AT_associated 0x4f /* DWARF3 */
+#define DW_AT_data_location 0x50 /* DWARF3 */
+#define DW_AT_byte_stride 0x51 /* DWARF3f */
+#define DW_AT_stride 0x51 /* DWARF3 (do not use) */
+#define DW_AT_entry_pc 0x52 /* DWARF3 */
+#define DW_AT_use_UTF8 0x53 /* DWARF3 */
+#define DW_AT_extension 0x54 /* DWARF3 */
+#define DW_AT_ranges 0x55 /* DWARF3 */
+#define DW_AT_trampoline 0x56 /* DWARF3 */
+#define DW_AT_call_column 0x57 /* DWARF3 */
+#define DW_AT_call_file 0x58 /* DWARF3 */
+#define DW_AT_call_line 0x59 /* DWARF3 */
+#define DW_AT_description 0x5a /* DWARF3 */
+#define DW_AT_binary_scale 0x5b /* DWARF3f */
+#define DW_AT_decimal_scale 0x5c /* DWARF3f */
+#define DW_AT_small 0x5d /* DWARF3f */
+#define DW_AT_decimal_sign 0x5e /* DWARF3f */
+#define DW_AT_digit_count 0x5f /* DWARF3f */
+#define DW_AT_picture_string 0x60 /* DWARF3f */
+#define DW_AT_mutable 0x61 /* DWARF3f */
+#define DW_AT_threads_scaled 0x62 /* DWARF3f */
+#define DW_AT_explicit 0x63 /* DWARF3f */
+#define DW_AT_object_pointer 0x64 /* DWARF3f */
+#define DW_AT_endianity 0x65 /* DWARF3f */
+#define DW_AT_elemental 0x66 /* DWARF3f */
+#define DW_AT_pure 0x67 /* DWARF3f */
+#define DW_AT_recursive 0x68 /* DWARF3f */
+#define DW_AT_signature 0x69 /* DWARF4 */
+#define DW_AT_main_subprogram 0x6a /* DWARF4 */
+#define DW_AT_data_bit_offset 0x6b /* DWARF4 */
+#define DW_AT_const_expr 0x6c /* DWARF4 */
+#define DW_AT_enum_class 0x6d /* DWARF4 */
+#define DW_AT_linkage_name 0x6e /* DWARF4 */
+
+/* In extensions, we attempt to include the vendor extension
+ in the name even when the vendor leaves it out. */
+
+/* HP extensions. */
+#define DW_AT_HP_block_index 0x2000 /* HP */
+
+/* Follows extension so dwarfdump prints the most-likely-useful name. */
+#define DW_AT_lo_user 0x2000
+
+#define DW_AT_MIPS_fde 0x2001 /* MIPS/SGI */
+#define DW_AT_MIPS_loop_begin 0x2002 /* MIPS/SGI */
+#define DW_AT_MIPS_tail_loop_begin 0x2003 /* MIPS/SGI */
+#define DW_AT_MIPS_epilog_begin 0x2004 /* MIPS/SGI */
+#define DW_AT_MIPS_loop_unroll_factor 0x2005 /* MIPS/SGI */
+#define DW_AT_MIPS_software_pipeline_depth 0x2006 /* MIPS/SGI */
+#define DW_AT_MIPS_linkage_name 0x2007 /* MIPS/SGI, GNU, and others.*/
+#define DW_AT_MIPS_stride 0x2008 /* MIPS/SGI */
+#define DW_AT_MIPS_abstract_name 0x2009 /* MIPS/SGI */
+#define DW_AT_MIPS_clone_origin 0x200a /* MIPS/SGI */
+#define DW_AT_MIPS_has_inlines 0x200b /* MIPS/SGI */
+#define DW_AT_MIPS_stride_byte 0x200c /* MIPS/SGI */
+#define DW_AT_MIPS_stride_elem 0x200d /* MIPS/SGI */
+#define DW_AT_MIPS_ptr_dopetype 0x200e /* MIPS/SGI */
+#define DW_AT_MIPS_allocatable_dopetype 0x200f /* MIPS/SGI */
+#define DW_AT_MIPS_assumed_shape_dopetype 0x2010 /* MIPS/SGI */
+#define DW_AT_MIPS_assumed_size 0x2011 /* MIPS/SGI */
+
+/* HP extensions. */
+#define DW_AT_HP_unmodifiable 0x2001 /* conflict: MIPS */
+#define DW_AT_HP_actuals_stmt_list 0x2010 /* conflict: MIPS */
+#define DW_AT_HP_proc_per_section 0x2011 /* conflict: MIPS */
+#define DW_AT_HP_raw_data_ptr 0x2012 /* HP */
+#define DW_AT_HP_pass_by_reference 0x2013 /* HP */
+#define DW_AT_HP_opt_level 0x2014 /* HP */
+#define DW_AT_HP_prof_version_id 0x2015 /* HP */
+#define DW_AT_HP_opt_flags 0x2016 /* HP */
+#define DW_AT_HP_cold_region_low_pc 0x2017 /* HP */
+#define DW_AT_HP_cold_region_high_pc 0x2018 /* HP */
+#define DW_AT_HP_all_variables_modifiable 0x2019 /* HP */
+#define DW_AT_HP_linkage_name 0x201a /* HP */
+#define DW_AT_HP_prof_flags 0x201b /* HP */
+
+#define DW_AT_CPQ_discontig_ranges 0x2001 /* COMPAQ/HP */
+#define DW_AT_CPQ_semantic_events 0x2002 /* COMPAQ/HP */
+#define DW_AT_CPQ_split_lifetimes_var 0x2003 /* COMPAQ/HP */
+#define DW_AT_CPQ_split_lifetimes_rtn 0x2004 /* COMPAQ/HP */
+#define DW_AT_CPQ_prologue_length 0x2005 /* COMPAQ/HP */
+
+#define DW_AT_INTEL_other_endian 0x2026 /* Intel, 1 if byte swapped. */
+
+/* GNU extensions. */
+#define DW_AT_sf_names 0x2101 /* GNU */
+#define DW_AT_src_info 0x2102 /* GNU */
+#define DW_AT_mac_info 0x2103 /* GNU */
+#define DW_AT_src_coords 0x2104 /* GNU */
+#define DW_AT_body_begin 0x2105 /* GNU */
+#define DW_AT_body_end 0x2106 /* GNU */
+#define DW_AT_GNU_vector 0x2107 /* GNU */
+#define DW_AT_GNU_template_name 0x2108 /* GNU */
+
+/* ALTIUM extension: ALTIUM Compliant location lists (flag) */
+#define DW_AT_ALTIUM_loclist 0x2300 /* ALTIUM */
+
+/* Sun extensions */
+#define DW_AT_SUN_template 0x2201 /* SUN */
+#define DW_AT_VMS_rtnbeg_pd_address 0x2201 /* VMS */
+#define DW_AT_SUN_alignment 0x2202 /* SUN */
+#define DW_AT_SUN_vtable 0x2203 /* SUN */
+#define DW_AT_SUN_count_guarantee 0x2204 /* SUN */
+#define DW_AT_SUN_command_line 0x2205 /* SUN */
+#define DW_AT_SUN_vbase 0x2206 /* SUN */
+#define DW_AT_SUN_compile_options 0x2207 /* SUN */
+#define DW_AT_SUN_language 0x2208 /* SUN */
+#define DW_AT_SUN_browser_file 0x2209 /* SUN */
+#define DW_AT_SUN_vtable_abi 0x2210 /* SUN */
+#define DW_AT_SUN_func_offsets 0x2211 /* SUN */
+#define DW_AT_SUN_cf_kind 0x2212 /* SUN */
+#define DW_AT_SUN_vtable_index 0x2213 /* SUN */
+#define DW_AT_SUN_omp_tpriv_addr 0x2214 /* SUN */
+#define DW_AT_SUN_omp_child_func 0x2215 /* SUN */
+#define DW_AT_SUN_func_offset 0x2216 /* SUN */
+#define DW_AT_SUN_memop_type_ref 0x2217 /* SUN */
+#define DW_AT_SUN_profile_id 0x2218 /* SUN */
+#define DW_AT_SUN_memop_signature 0x2219 /* SUN */
+#define DW_AT_SUN_obj_dir 0x2220 /* SUN */
+#define DW_AT_SUN_obj_file 0x2221 /* SUN */
+#define DW_AT_SUN_original_name 0x2222 /* SUN */
+#define DW_AT_SUN_hwcprof_signature 0x2223 /* SUN */
+#define DW_AT_SUN_amd64_parmdump 0x2224 /* SUN */
+#define DW_AT_SUN_part_link_name 0x2225 /* SUN */
+#define DW_AT_SUN_link_name 0x2226 /* SUN */
+#define DW_AT_SUN_pass_with_const 0x2227 /* SUN */
+#define DW_AT_SUN_return_with_const 0x2228 /* SUN */
+#define DW_AT_SUN_import_by_name 0x2229 /* SUN */
+#define DW_AT_SUN_f90_pointer 0x222a /* SUN */
+#define DW_AT_SUN_pass_by_ref 0x222b /* SUN */
+#define DW_AT_SUN_f90_allocatable 0x222c /* SUN */
+#define DW_AT_SUN_f90_assumed_shape_array 0x222d /* SUN */
+#define DW_AT_SUN_c_vla 0x222e /* SUN */
+#define DW_AT_SUN_return_value_ptr 0x2230 /* SUN */
+#define DW_AT_SUN_dtor_start 0x2231 /* SUN */
+#define DW_AT_SUN_dtor_length 0x2232 /* SUN */
+#define DW_AT_SUN_dtor_state_initial 0x2233 /* SUN */
+#define DW_AT_SUN_dtor_state_final 0x2234 /* SUN */
+#define DW_AT_SUN_dtor_state_deltas 0x2235 /* SUN */
+#define DW_AT_SUN_import_by_lname 0x2236 /* SUN */
+#define DW_AT_SUN_f90_use_only 0x2237 /* SUN */
+#define DW_AT_SUN_namelist_spec 0x2238 /* SUN */
+#define DW_AT_SUN_is_omp_child_func 0x2239 /* SUN */
+#define DW_AT_SUN_fortran_main_alias 0x223a /* SUN */
+#define DW_AT_SUN_fortran_based 0x223b /* SUN */
+
+/* UPC extension */
+#define DW_AT_upc_threads_scaled 0x3210 /* UPC */
+
+/* PGI (STMicroelectronics) extensions. */
+#define DW_AT_PGI_lbase 0x3a00 /* PGI. Block, constant, reference. This attribute is an ASTPLAB extension used to describe the array local base. */
+#define DW_AT_PGI_soffset 0x3a01 /* PGI. Block, constant, reference. ASTPLAB adds this attribute to describe the section offset, or the offset to the first element in the dimension. */
+#define DW_AT_PGI_lstride 0x3a02 /* PGI. Block, constant, reference. ASTPLAB adds this attribute to describe the linear stride or the distance between elements in the dimension. */
+
+/* Apple Extensions for closures */
+#define DW_AT_APPLE_closure 0x3fe4 /* Apple */
+/* Apple Extensions for Objective-C runtime info */
+#define DW_AT_APPLE_major_runtime_vers 0x3fe5 /* Apple */
+#define DW_AT_APPLE_runtime_class 0x3fe6 /* Apple */
+
+
+#define DW_AT_hi_user 0x3fff
+
+#define DW_OP_addr 0x03
+#define DW_OP_deref 0x06
+#define DW_OP_const1u 0x08
+#define DW_OP_const1s 0x09
+#define DW_OP_const2u 0x0a
+#define DW_OP_const2s 0x0b
+#define DW_OP_const4u 0x0c
+#define DW_OP_const4s 0x0d
+#define DW_OP_const8u 0x0e
+#define DW_OP_const8s 0x0f
+#define DW_OP_constu 0x10
+#define DW_OP_consts 0x11
+#define DW_OP_dup 0x12
+#define DW_OP_drop 0x13
+#define DW_OP_over 0x14
+#define DW_OP_pick 0x15
+#define DW_OP_swap 0x16
+#define DW_OP_rot 0x17
+#define DW_OP_xderef 0x18
+#define DW_OP_abs 0x19
+#define DW_OP_and 0x1a
+#define DW_OP_div 0x1b
+#define DW_OP_minus 0x1c
+#define DW_OP_mod 0x1d
+#define DW_OP_mul 0x1e
+#define DW_OP_neg 0x1f
+#define DW_OP_not 0x20
+#define DW_OP_or 0x21
+#define DW_OP_plus 0x22
+#define DW_OP_plus_uconst 0x23
+#define DW_OP_shl 0x24
+#define DW_OP_shr 0x25
+#define DW_OP_shra 0x26
+#define DW_OP_xor 0x27
+#define DW_OP_bra 0x28
+#define DW_OP_eq 0x29
+#define DW_OP_ge 0x2a
+#define DW_OP_gt 0x2b
+#define DW_OP_le 0x2c
+#define DW_OP_lt 0x2d
+#define DW_OP_ne 0x2e
+#define DW_OP_skip 0x2f
+#define DW_OP_lit0 0x30
+#define DW_OP_lit1 0x31
+#define DW_OP_lit2 0x32
+#define DW_OP_lit3 0x33
+#define DW_OP_lit4 0x34
+#define DW_OP_lit5 0x35
+#define DW_OP_lit6 0x36
+#define DW_OP_lit7 0x37
+#define DW_OP_lit8 0x38
+#define DW_OP_lit9 0x39
+#define DW_OP_lit10 0x3a
+#define DW_OP_lit11 0x3b
+#define DW_OP_lit12 0x3c
+#define DW_OP_lit13 0x3d
+#define DW_OP_lit14 0x3e
+#define DW_OP_lit15 0x3f
+#define DW_OP_lit16 0x40
+#define DW_OP_lit17 0x41
+#define DW_OP_lit18 0x42
+#define DW_OP_lit19 0x43
+#define DW_OP_lit20 0x44
+#define DW_OP_lit21 0x45
+#define DW_OP_lit22 0x46
+#define DW_OP_lit23 0x47
+#define DW_OP_lit24 0x48
+#define DW_OP_lit25 0x49
+#define DW_OP_lit26 0x4a
+#define DW_OP_lit27 0x4b
+#define DW_OP_lit28 0x4c
+#define DW_OP_lit29 0x4d
+#define DW_OP_lit30 0x4e
+#define DW_OP_lit31 0x4f
+#define DW_OP_reg0 0x50
+#define DW_OP_reg1 0x51
+#define DW_OP_reg2 0x52
+#define DW_OP_reg3 0x53
+#define DW_OP_reg4 0x54
+#define DW_OP_reg5 0x55
+#define DW_OP_reg6 0x56
+#define DW_OP_reg7 0x57
+#define DW_OP_reg8 0x58
+#define DW_OP_reg9 0x59
+#define DW_OP_reg10 0x5a
+#define DW_OP_reg11 0x5b
+#define DW_OP_reg12 0x5c
+#define DW_OP_reg13 0x5d
+#define DW_OP_reg14 0x5e
+#define DW_OP_reg15 0x5f
+#define DW_OP_reg16 0x60
+#define DW_OP_reg17 0x61
+#define DW_OP_reg18 0x62
+#define DW_OP_reg19 0x63
+#define DW_OP_reg20 0x64
+#define DW_OP_reg21 0x65
+#define DW_OP_reg22 0x66
+#define DW_OP_reg23 0x67
+#define DW_OP_reg24 0x68
+#define DW_OP_reg25 0x69
+#define DW_OP_reg26 0x6a
+#define DW_OP_reg27 0x6b
+#define DW_OP_reg28 0x6c
+#define DW_OP_reg29 0x6d
+#define DW_OP_reg30 0x6e
+#define DW_OP_reg31 0x6f
+#define DW_OP_breg0 0x70
+#define DW_OP_breg1 0x71
+#define DW_OP_breg2 0x72
+#define DW_OP_breg3 0x73
+#define DW_OP_breg4 0x74
+#define DW_OP_breg5 0x75
+#define DW_OP_breg6 0x76
+#define DW_OP_breg7 0x77
+#define DW_OP_breg8 0x78
+#define DW_OP_breg9 0x79
+#define DW_OP_breg10 0x7a
+#define DW_OP_breg11 0x7b
+#define DW_OP_breg12 0x7c
+#define DW_OP_breg13 0x7d
+#define DW_OP_breg14 0x7e
+#define DW_OP_breg15 0x7f
+#define DW_OP_breg16 0x80
+#define DW_OP_breg17 0x81
+#define DW_OP_breg18 0x82
+#define DW_OP_breg19 0x83
+#define DW_OP_breg20 0x84
+#define DW_OP_breg21 0x85
+#define DW_OP_breg22 0x86
+#define DW_OP_breg23 0x87
+#define DW_OP_breg24 0x88
+#define DW_OP_breg25 0x89
+#define DW_OP_breg26 0x8a
+#define DW_OP_breg27 0x8b
+#define DW_OP_breg28 0x8c
+#define DW_OP_breg29 0x8d
+#define DW_OP_breg30 0x8e
+#define DW_OP_breg31 0x8f
+#define DW_OP_regx 0x90
+#define DW_OP_fbreg 0x91
+#define DW_OP_bregx 0x92
+#define DW_OP_piece 0x93
+#define DW_OP_deref_size 0x94
+#define DW_OP_xderef_size 0x95
+#define DW_OP_nop 0x96
+#define DW_OP_push_object_address 0x97 /* DWARF3 */
+#define DW_OP_call2 0x98 /* DWARF3 */
+#define DW_OP_call4 0x99 /* DWARF3 */
+#define DW_OP_call_ref 0x9a /* DWARF3 */
+#define DW_OP_form_tls_address 0x9b /* DWARF3f */
+#define DW_OP_call_frame_cfa 0x9c /* DWARF3f */
+#define DW_OP_bit_piece 0x9d /* DWARF3f */
+#define DW_OP_implicit_value 0x9e /* DWARF4 */
+#define DW_OP_stack_value 0x9f /* DWARF4 */
+
+
+ /* GNU extensions. */
+#define DW_OP_GNU_push_tls_address 0xe0 /* GNU */
+
+/* Follows extension so dwarfdump prints the most-likely-useful name. */
+#define DW_OP_lo_user 0xe0
+
+ /* HP extensions. */
+#define DW_OP_HP_unknown 0xe0 /* HP conflict: GNU */
+#define DW_OP_HP_is_value 0xe1 /* HP */
+#define DW_OP_HP_fltconst4 0xe2 /* HP */
+#define DW_OP_HP_fltconst8 0xe3 /* HP */
+#define DW_OP_HP_mod_range 0xe4 /* HP */
+#define DW_OP_HP_unmod_range 0xe5 /* HP */
+#define DW_OP_HP_tls 0xe6 /* HP */
+
+#define DW_OP_INTEL_bit_piece 0xe8 /* Intel: made obsolete by DW_OP_bit_piece above. */
+
+
+ /* Apple extension. */
+#define DW_OP_APPLE_uninit 0xf0 /* Apple */
+
+#define DW_OP_hi_user 0xff
+
+#define DW_ATE_address 0x1
+#define DW_ATE_boolean 0x2
+#define DW_ATE_complex_float 0x3
+#define DW_ATE_float 0x4
+#define DW_ATE_signed 0x5
+#define DW_ATE_signed_char 0x6
+#define DW_ATE_unsigned 0x7
+#define DW_ATE_unsigned_char 0x8
+#define DW_ATE_imaginary_float 0x9 /* DWARF3 */
+#define DW_ATE_packed_decimal 0xa /* DWARF3f */
+#define DW_ATE_numeric_string 0xb /* DWARF3f */
+#define DW_ATE_edited 0xc /* DWARF3f */
+#define DW_ATE_signed_fixed 0xd /* DWARF3f */
+#define DW_ATE_unsigned_fixed 0xe /* DWARF3f */
+#define DW_ATE_decimal_float 0xf /* DWARF3f */
+
+
+/* ALTIUM extensions. x80, x81 */
+#define DW_ATE_ALTIUM_fract 0x80 /* ALTIUM __fract type */
+
+/* Follows extension so dwarfdump prints the most-likely-useful name. */
+#define DW_ATE_lo_user 0x80
+
+/* Shown here to help dwarfdump build script. */
+#define DW_ATE_ALTIUM_accum 0x81 /* ALTIUM __accum type */
+
+/* HP Floating point extensions. */
+#define DW_ATE_HP_float80 0x80 /* (80 bit). HP */
+
+
+#define DW_ATE_HP_complex_float80 0x81 /* Complex (80 bit). HP */
+#define DW_ATE_HP_float128 0x82 /* (128 bit). HP */
+#define DW_ATE_HP_complex_float128 0x83 /* Complex (128 bit). HP */
+#define DW_ATE_HP_floathpintel 0x84 /* (82 bit IA64). HP */
+#define DW_ATE_HP_imaginary_float80 0x85 /* HP */
+#define DW_ATE_HP_imaginary_float128 0x86 /* HP */
+
+/* Sun extensions */
+#define DW_ATE_SUN_interval_float 0x91
+#define DW_ATE_SUN_imaginary_float 0x92 /* Obsolete: See DW_ATE_imaginary_float */
+
+#define DW_ATE_hi_user 0xff
+
+
+/* Decimal Sign codes. */
+#define DW_DS_unsigned 0x01 /* DWARF3f */
+#define DW_DS_leading_overpunch 0x02 /* DWARF3f */
+#define DW_DS_trailing_overpunch 0x03 /* DWARF3f */
+#define DW_DS_leading_separate 0x04 /* DWARF3f */
+
+#define DW_DS_trailing_separate 0x05 /* DWARF3f */
+
+/* Endian code name. */
+#define DW_END_default 0x00 /* DWARF3f */
+#define DW_END_big 0x01 /* DWARF3f */
+#define DW_END_little 0x02 /* DWARF3f */
+
+#define DW_END_lo_user 0x40 /* DWARF3f */
+#define DW_END_hi_user 0xff /* DWARF3f */
+
+/* For use with DW_TAG_SUN_codeflags
+ * If DW_TAG_SUN_codeflags is accepted as a dwarf standard, then
+ * standard dwarf ATCF entries start at 0x01
+ */
+#define DW_ATCF_lo_user 0x40 /* SUN */
+#define DW_ATCF_SUN_mop_bitfield 0x41 /* SUN */
+#define DW_ATCF_SUN_mop_spill 0x42 /* SUN */
+#define DW_ATCF_SUN_mop_scopy 0x43 /* SUN */
+#define DW_ATCF_SUN_func_start 0x44 /* SUN */
+#define DW_ATCF_SUN_end_ctors 0x45 /* SUN */
+#define DW_ATCF_SUN_branch_target 0x46 /* SUN */
+#define DW_ATCF_SUN_mop_stack_probe 0x47 /* SUN */
+#define DW_ATCF_SUN_func_epilog 0x48 /* SUN */
+#define DW_ATCF_hi_user 0xff /* SUN */
+
+/* Accessibility code name. */
+#define DW_ACCESS_public 0x01
+#define DW_ACCESS_protected 0x02
+#define DW_ACCESS_private 0x03
+
+/* Visibility code name. */
+#define DW_VIS_local 0x01
+#define DW_VIS_exported 0x02
+#define DW_VIS_qualified 0x03
+
+/* Virtuality code name. */
+#define DW_VIRTUALITY_none 0x00
+#define DW_VIRTUALITY_virtual 0x01
+#define DW_VIRTUALITY_pure_virtual 0x02
+
+#define DW_LANG_C89 0x0001
+#define DW_LANG_C 0x0002
+#define DW_LANG_Ada83 0x0003
+#define DW_LANG_C_plus_plus 0x0004
+#define DW_LANG_Cobol74 0x0005
+#define DW_LANG_Cobol85 0x0006
+#define DW_LANG_Fortran77 0x0007
+#define DW_LANG_Fortran90 0x0008
+#define DW_LANG_Pascal83 0x0009
+#define DW_LANG_Modula2 0x000a
+#define DW_LANG_Java 0x000b /* DWARF3 */
+#define DW_LANG_C99 0x000c /* DWARF3 */
+#define DW_LANG_Ada95 0x000d /* DWARF3 */
+#define DW_LANG_Fortran95 0x000e /* DWARF3 */
+#define DW_LANG_PLI 0x000f /* DWARF3 */
+#define DW_LANG_ObjC 0x0010 /* DWARF3f */
+#define DW_LANG_ObjC_plus_plus 0x0011 /* DWARF3f */
+#define DW_LANG_UPC 0x0012 /* DWARF3f */
+#define DW_LANG_D 0x0013 /* DWARF3f */
+#define DW_LANG_Python 0x0014 /* DWARF4 */
+#define DW_LANG_lo_user 0x8000
+#define DW_LANG_Mips_Assembler 0x8001 /* MIPS */
+#define DW_LANG_Upc 0x8765 /* UPC, use
+ DW_LANG_UPC instead. */
+/* ALTIUM extension */
+#define DW_LANG_ALTIUM_Assembler 0x9101 /* ALTIUM */
+
+/* Sun extensions */
+#define DW_LANG_SUN_Assembler 0x9001 /* SUN */
+
+#define DW_LANG_hi_user 0xffff
+
+/* Identifier case name. */
+#define DW_ID_case_sensitive 0x00
+#define DW_ID_up_case 0x01
+#define DW_ID_down_case 0x02
+#define DW_ID_case_insensitive 0x03
+
+/* Calling Convention Name. */
+#define DW_CC_normal 0x01
+#define DW_CC_program 0x02
+#define DW_CC_nocall 0x03
+#define DW_CC_lo_user 0x40
+
+/* ALTIUM extensions. */
+/* Function is an interrupt handler, return address on system stack. */
+#define DW_CC_ALTIUM_interrupt 0x65 /* ALTIUM*/
+
+/* Near function model, return address on system stack. */
+#define DW_CC_ALTIUM_near_system_stack 0x66 /*ALTIUM */
+
+/* Near function model, return address on user stack. */
+#define DW_CC_ALTIUM_near_user_stack 0x67 /* ALTIUM */
+
+/* Huge function model, return address on user stack. */
+#define DW_CC_ALTIUM_huge_user_stack 0x68 /* ALTIUM */
+
+
+#define DW_CC_hi_user 0xff
+
+/* Inline Code Name. */
+#define DW_INL_not_inlined 0x00
+#define DW_INL_inlined 0x01
+#define DW_INL_declared_not_inlined 0x02
+#define DW_INL_declared_inlined 0x03
+
+/* Ordering Name. */
+#define DW_ORD_row_major 0x00
+#define DW_ORD_col_major 0x01
+
+/* Discriminant Descriptor Name. */
+#define DW_DSC_label 0x00
+#define DW_DSC_range 0x01
+
+/* Line number standard opcode name. */
+#define DW_LNS_copy 0x01
+#define DW_LNS_advance_pc 0x02
+#define DW_LNS_advance_line 0x03
+#define DW_LNS_set_file 0x04
+#define DW_LNS_set_column 0x05
+#define DW_LNS_negate_stmt 0x06
+#define DW_LNS_set_basic_block 0x07
+#define DW_LNS_const_add_pc 0x08
+#define DW_LNS_fixed_advance_pc 0x09
+#define DW_LNS_set_prologue_end 0x0a /* DWARF3 */
+#define DW_LNS_set_epilogue_begin 0x0b /* DWARF3 */
+#define DW_LNS_set_isa 0x0c /* DWARF3 */
+
+/* Line number extended opcode name. */
+#define DW_LNE_end_sequence 0x01
+#define DW_LNE_set_address 0x02
+#define DW_LNE_define_file 0x03
+#define DW_LNE_set_discriminator 0x04 /* DWARF4 */
+
+/* HP extensions. */
+#define DW_LNE_HP_negate_is_UV_update 0x11 /* 17 HP */
+#define DW_LNE_HP_push_context 0x12 /* 18 HP */
+#define DW_LNE_HP_pop_context 0x13 /* 19 HP */
+#define DW_LNE_HP_set_file_line_column 0x14 /* 20 HP */
+#define DW_LNE_HP_set_routine_name 0x15 /* 21 HP */
+#define DW_LNE_HP_set_sequence 0x16 /* 22 HP */
+#define DW_LNE_HP_negate_post_semantics 0x17 /* 23 HP */
+#define DW_LNE_HP_negate_function_exit 0x18 /* 24 HP */
+#define DW_LNE_HP_negate_front_end_logical 0x19 /* 25 HP */
+#define DW_LNE_HP_define_proc 0x20 /* 32 HP */
+
+#define DW_LNE_lo_user 0x80 /* DWARF3 */
+#define DW_LNE_hi_user 0xff /* DWARF3 */
+
+/* Macro information. */
+#define DW_MACINFO_define 0x01
+#define DW_MACINFO_undef 0x02
+#define DW_MACINFO_start_file 0x03
+#define DW_MACINFO_end_file 0x04
+#define DW_MACINFO_vendor_ext 0xff
+
+/* CFA operator compaction (a space saving measure, see
+ the DWARF standard) means DW_CFA_extended and DW_CFA_nop
+ have the same value here. */
+#define DW_CFA_advance_loc 0x40
+#define DW_CFA_offset 0x80
+#define DW_CFA_restore 0xc0
+#define DW_CFA_extended 0
+
+#define DW_CFA_nop 0x00
+#define DW_CFA_set_loc 0x01
+#define DW_CFA_advance_loc1 0x02
+#define DW_CFA_advance_loc2 0x03
+#define DW_CFA_advance_loc4 0x04
+#define DW_CFA_offset_extended 0x05
+#define DW_CFA_restore_extended 0x06
+#define DW_CFA_undefined 0x07
+#define DW_CFA_same_value 0x08
+#define DW_CFA_register 0x09
+#define DW_CFA_remember_state 0x0a
+#define DW_CFA_restore_state 0x0b
+#define DW_CFA_def_cfa 0x0c
+#define DW_CFA_def_cfa_register 0x0d
+#define DW_CFA_def_cfa_offset 0x0e
+#define DW_CFA_def_cfa_expression 0x0f /* DWARF3 */
+#define DW_CFA_expression 0x10 /* DWARF3 */
+#define DW_CFA_offset_extended_sf 0x11 /* DWARF3 */
+#define DW_CFA_def_cfa_sf 0x12 /* DWARF3 */
+#define DW_CFA_def_cfa_offset_sf 0x13 /* DWARF3 */
+#define DW_CFA_val_offset 0x14 /* DWARF3f */
+#define DW_CFA_val_offset_sf 0x15 /* DWARF3f */
+#define DW_CFA_val_expression 0x16 /* DWARF3f */
+
+#define DW_CFA_lo_user 0x1c
+#define DW_CFA_low_user 0x1c /* Incorrect spelling, do not use. */
+
+/* SGI/MIPS extension. */
+#define DW_CFA_MIPS_advance_loc8 0x1d /* MIPS */
+
+/* GNU extensions. */
+#define DW_CFA_GNU_window_save 0x2d /* GNU */
+#define DW_CFA_GNU_args_size 0x2e /* GNU */
+#define DW_CFA_GNU_negative_offset_extended 0x2f /* GNU */
+
+#define DW_CFA_high_user 0x3f
+
+/* GNU exception header encoding. See the Generic
+ Elf Specification of the Linux Standard Base (LSB).
+ http://refspecs.freestandards.org/LSB_3.0.0/LSB-Core-generic/LSB-Core-generic/dwarfext.html
+ The upper 4 bits indicate how the value is to be applied.
+ The lower 4 bits indicate the format of the data.
+*/
+#define DW_EH_PE_absptr 0x00 /* GNU */
+#define DW_EH_PE_uleb128 0x01 /* GNU */
+#define DW_EH_PE_udata2 0x02 /* GNU */
+#define DW_EH_PE_udata4 0x03 /* GNU */
+#define DW_EH_PE_udata8 0x04 /* GNU */
+#define DW_EH_PE_sleb128 0x09 /* GNU */
+#define DW_EH_PE_sdata2 0x0A /* GNU */
+#define DW_EH_PE_sdata4 0x0B /* GNU */
+#define DW_EH_PE_sdata8 0x0C /* GNU */
+
+#define DW_EH_PE_pcrel 0x10 /* GNU */
+#define DW_EH_PE_textrel 0x20 /* GNU */
+#define DW_EH_PE_datarel 0x30 /* GNU */
+#define DW_EH_PE_funcrel 0x40 /* GNU */
+#define DW_EH_PE_aligned 0x50 /* GNU */
+
+#define DW_EH_PE_omit 0xff /* GNU. Means no value present. */
+
+
+/* Mapping from machine registers and pseudo-regs into the .debug_frame table.
+ DW_FRAME entries are machine specific. These describe
+ MIPS/SGI R3000, R4K, R4400 and all later MIPS/SGI IRIX machines.
+ They describe a mapping from hardware register number to
+ the number used in the table to identify that register.
+
+ The CFA (Canonical Frame Address) described in DWARF is called
+ the Virtual Frame Pointer on MIPS/SGI machines.
+
+ The DW_FRAME* names here are MIPS/SGI specfic.
+ Libdwarf interfaces defined in 2008 make the
+ frame definitions
+ here (and the fixed table sizes they imply) obsolete.
+ They are left here for compatibility.
+*/
+/* Default column used for CFA in the libdwarf reader client.
+ Assumes reg 0 never appears as
+ a register in DWARF information. Usable for MIPS,
+ but never a good idea, really. */
+#define DW_FRAME_CFA_COL 0
+
+#define DW_FRAME_REG1 1 /* integer reg 1 */
+#define DW_FRAME_REG2 2 /* integer reg 2 */
+#define DW_FRAME_REG3 3 /* integer reg 3 */
+#define DW_FRAME_REG4 4 /* integer reg 4 */
+#define DW_FRAME_REG5 5 /* integer reg 5 */
+#define DW_FRAME_REG6 6 /* integer reg 6 */
+#define DW_FRAME_REG7 7 /* integer reg 7 */
+#define DW_FRAME_REG8 8 /* integer reg 8 */
+#define DW_FRAME_REG9 9 /* integer reg 9 */
+#define DW_FRAME_REG10 10 /* integer reg 10 */
+#define DW_FRAME_REG11 11 /* integer reg 11 */
+#define DW_FRAME_REG12 12 /* integer reg 12 */
+#define DW_FRAME_REG13 13 /* integer reg 13 */
+#define DW_FRAME_REG14 14 /* integer reg 14 */
+#define DW_FRAME_REG15 15 /* integer reg 15 */
+#define DW_FRAME_REG16 16 /* integer reg 16 */
+#define DW_FRAME_REG17 17 /* integer reg 17 */
+#define DW_FRAME_REG18 18 /* integer reg 18 */
+#define DW_FRAME_REG19 19 /* integer reg 19 */
+#define DW_FRAME_REG20 20 /* integer reg 20 */
+#define DW_FRAME_REG21 21 /* integer reg 21 */
+#define DW_FRAME_REG22 22 /* integer reg 22 */
+#define DW_FRAME_REG23 23 /* integer reg 23 */
+#define DW_FRAME_REG24 24 /* integer reg 24 */
+#define DW_FRAME_REG25 25 /* integer reg 25 */
+#define DW_FRAME_REG26 26 /* integer reg 26 */
+#define DW_FRAME_REG27 27 /* integer reg 27 */
+#define DW_FRAME_REG28 28 /* integer reg 28 */
+#define DW_FRAME_REG29 29 /* integer reg 29 */
+#define DW_FRAME_REG30 30 /* integer reg 30 */
+#define DW_FRAME_REG31 31 /* integer reg 31, aka ra */
+
+ /* MIPS1, 2 have only some of these 64-bit registers.
+ ** MIPS1 save/restore takes 2 instructions per 64-bit reg, and
+ ** in that case, the register is considered stored after the second
+ ** swc1.
+ */
+#define DW_FRAME_FREG0 32 /* 64-bit floating point reg 0 */
+#define DW_FRAME_FREG1 33 /* 64-bit floating point reg 1 */
+#define DW_FRAME_FREG2 34 /* 64-bit floating point reg 2 */
+#define DW_FRAME_FREG3 35 /* 64-bit floating point reg 3 */
+#define DW_FRAME_FREG4 36 /* 64-bit floating point reg 4 */
+#define DW_FRAME_FREG5 37 /* 64-bit floating point reg 5 */
+#define DW_FRAME_FREG6 38 /* 64-bit floating point reg 6 */
+#define DW_FRAME_FREG7 39 /* 64-bit floating point reg 7 */
+#define DW_FRAME_FREG8 40 /* 64-bit floating point reg 8 */
+#define DW_FRAME_FREG9 41 /* 64-bit floating point reg 9 */
+#define DW_FRAME_FREG10 42 /* 64-bit floating point reg 10 */
+#define DW_FRAME_FREG11 43 /* 64-bit floating point reg 11 */
+#define DW_FRAME_FREG12 44 /* 64-bit floating point reg 12 */
+#define DW_FRAME_FREG13 45 /* 64-bit floating point reg 13 */
+#define DW_FRAME_FREG14 46 /* 64-bit floating point reg 14 */
+#define DW_FRAME_FREG15 47 /* 64-bit floating point reg 15 */
+#define DW_FRAME_FREG16 48 /* 64-bit floating point reg 16 */
+#define DW_FRAME_FREG17 49 /* 64-bit floating point reg 17 */
+#define DW_FRAME_FREG18 50 /* 64-bit floating point reg 18 */
+#define DW_FRAME_FREG19 51 /* 64-bit floating point reg 19 */
+#define DW_FRAME_FREG20 52 /* 64-bit floating point reg 20 */
+#define DW_FRAME_FREG21 53 /* 64-bit floating point reg 21 */
+#define DW_FRAME_FREG22 54 /* 64-bit floating point reg 22 */
+#define DW_FRAME_FREG23 55 /* 64-bit floating point reg 23 */
+#define DW_FRAME_FREG24 56 /* 64-bit floating point reg 24 */
+#define DW_FRAME_FREG25 57 /* 64-bit floating point reg 25 */
+#define DW_FRAME_FREG26 58 /* 64-bit floating point reg 26 */
+#define DW_FRAME_FREG27 59 /* 64-bit floating point reg 27 */
+#define DW_FRAME_FREG28 60 /* 64-bit floating point reg 28 */
+#define DW_FRAME_FREG29 61 /* 64-bit floating point reg 29 */
+#define DW_FRAME_FREG30 62 /* 64-bit floating point reg 30 */
+#define DW_FRAME_FREG31 63 /* 64-bit floating point reg 31 */
+
+/* ***IMPORTANT NOTE, TARGET DEPENDENCY ****
+ The following 4 #defines are dependent on
+ the target cpu(s) that you apply libdwarf to.
+ Ensure that DW_FRAME_UNDEFINED_VAL and DW_FRAME_SAME_VAL
+ do not conflict with the range [0-DW_FRAME_STATIC_LINK].
+ The value 63 works for MIPS cpus at least up to the R16000.
+
+ For a cpu with more than 63 real registers
+ DW_FRAME_HIGHEST_NORMAL_REGISTER
+ must be increased for things to work properly!
+ Also ensure that DW_FRAME_UNDEFINED_VAL DW_FRAME_SAME_VAL
+ are not in the range [0-DW_FRAME_STATIC_LINK]
+
+ Having DW_FRAME_HIGHEST_NORMAL_REGISTER be higher than
+ is strictly needed is safe.
+
+*/
+
+#ifndef DW_FRAME_HIGHEST_NORMAL_REGISTER
+#define DW_FRAME_HIGHEST_NORMAL_REGISTER 63
+#endif
+/* This is the number of columns in the Frame Table.
+ This constant should
+ be kept in sync with DW_REG_TABLE_SIZE defined in libdwarf.h
+ It must also be large enough to be beyond the highest
+ compiler-defined-register (meaning DW_FRAME_RA_COL DW_FRAME_STATIC_LINK
+ in the MIPS/IRIX case */
+#ifndef DW_FRAME_LAST_REG_NUM
+#define DW_FRAME_LAST_REG_NUM (DW_FRAME_HIGHEST_NORMAL_REGISTER + 3)
+#endif
+
+
+/* Column recording ra (return address from a function call).
+ This is common to many architectures, but as a 'simple register'
+ is not necessarily adequate for all architectures.
+ For MIPS/IRIX this register number is actually recorded on disk
+ in the .debug_frame section.
+ */
+#define DW_FRAME_RA_COL (DW_FRAME_HIGHEST_NORMAL_REGISTER + 1)
+
+/* Column recording static link applicable to up-level
+ addressing, as in IRIX mp code, pascal, etc.
+ This is common to many architectures but
+ is not necessarily adequate for all architectures.
+ For MIPS/IRIX this register number is actually recorded on disk
+ in the .debug_frame section.
+*/
+#define DW_FRAME_STATIC_LINK (DW_FRAME_HIGHEST_NORMAL_REGISTER + 2)
+
+
+
+/*
+ DW_FRAME_UNDEFINED_VAL and DW_FRAME_SAME_VAL are
+ never on disk, just generated by libdwarf. See libdwarf.h
+ for their values.
+*/
+
+
+
+#define DW_CHILDREN_no 0x00
+#define DW_CHILDREN_yes 0x01
+
+#define DW_ADDR_none 0
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* __DWARF_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_abbrev.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_abbrev.h
new file mode 100644
index 000000000..b525924c8
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_abbrev.h
@@ -0,0 +1,55 @@
+/*
+
+ Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2008-2010 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
+
+*/
+
+
+
+
+/* In a given CU, one of these is (eventually) set up
+ for every abbreviation we need to find (and for all.
+ those ealier in the abbreviations for that CU).
+ So we don't want elements needlessly big.
+*/
+struct Dwarf_Abbrev_s {
+ /* No TAG should exceed DW_TAG_hi_user, 0xffff, but
+ we do allow a larger value here. */
+ Dwarf_Word ab_tag;
+ /* Abbreviations are numbered (normally sequentially from
+ 1 and so 16 bits is not enough! */
+ Dwarf_Word ab_code;
+ Dwarf_Small ab_has_child;
+ Dwarf_Byte_Ptr ab_abbrev_ptr;
+ Dwarf_Debug ab_dbg;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_addr_finder.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_addr_finder.h
new file mode 100644
index 000000000..0eda6d1c4
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_addr_finder.h
@@ -0,0 +1,55 @@
+/*
+ dwarf_addr_finder.h
+ $Source: /plroot/cmplrs.src/v7.4.5m/.RCS/PL/include/cmplrs/RCS/dwarf_addr_finder.h,v $
+ $Date: 2002/06/11 17:49:06 $
+
+ Defines user interface.
+
+*/
+
+/* return codes for functions
+*/
+#define DW_DLV_NO_ENTRY -1
+#define DW_DLV_OK 0
+#define DW_DLV_ERROR 1
+
+
+/* the following are the 'section' number passed to the called-back
+ function.
+ The called-back application must translate this to the
+ appropriate elf section number/pointer.
+
+ Putting this burden on the application avoids having to store
+ the numbers in the Dwarf_Debug structure (thereby saving space
+ for most consumers).
+*/
+#define DW_SECTION_INFO 0
+#define DW_SECTION_FRAME 1
+#define DW_SECTION_ARANGES 2
+#define DW_SECTION_LINE 3
+#define DW_SECTION_LOC 4 /* .debug_loc */
+
+/* section is one of the above codes: it specifies a section.
+ secoff is the offset in the dwarf section.
+ existingAddr is the value at the specified offset (so the
+ called back routine can sanity check the proceedings).
+ It's up to the caller to know the size of an address (4 or 8)
+ and update the right number of bytes.
+*/
+typedef int (*Dwarf_addr_callback_func) (int /*section*/,
+ Dwarf_Off /*secoff*/, Dwarf_Addr /*existingAddr*/);
+
+/* call this to do the work: it calls back thru cb_func
+ once per each address to be modified.
+ Once this returns you are done.
+ Returns DW_DLV_OK if finished ok.
+ Returns DW_DLV_ERROR if there was some kind of error, in which
+ the dwarf error number was passed back thu the dwerr ptr.
+ Returns DW_DLV_NO_ENTRY if there are no relevant dwarf sections,
+ so there were no addresses to be modified (and none
+ called back).
+*/
+int _dwarf_addr_finder(dwarf_elf_handle elf_file_ptr,
+ Dwarf_addr_callback_func cb_func,
+ int *dwerr);
+
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_alloc.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_alloc.h
new file mode 100644
index 000000000..3a61c692c
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_alloc.h
@@ -0,0 +1,177 @@
+/*
+
+ Copyright (C) 2000,2005 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2008-2010 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
+
+*/
+
+/* #define DWARF_SIMPLE_MALLOC 1 */
+
+Dwarf_Ptr _dwarf_get_alloc(Dwarf_Debug, Dwarf_Small, Dwarf_Unsigned);
+Dwarf_Debug _dwarf_get_debug(void);
+Dwarf_Debug _dwarf_setup_debug(Dwarf_Debug);
+int _dwarf_free_all_of_one_debug(Dwarf_Debug);
+
+typedef struct Dwarf_Alloc_Area_s *Dwarf_Alloc_Area;
+typedef struct Dwarf_Free_List_s *Dwarf_Free_List;
+
+/* ALLOC_AREA_INDEX_TABLE_MAX is the size of the
+ struct ial_s index_into_allocated array in dwarf_alloc.c
+*/
+#define ALLOC_AREA_INDEX_TABLE_MAX 45
+/* ALLOC_AREA_REAL_TABLE_MAX is the size of the array needed
+ to hold pointers to dwarf alloc chunk areas.
+ It's smaller as some of the index_into_allocated
+ entries (they look like {0,1,1,0,0} )
+ are treated specially and don't use 'chunks'.
+*/
+#define ALLOC_AREA_REAL_TABLE_MAX 32
+
+/*
+ This struct is used to chain all the deallocated
+ structs on the free list of each chain. The structs
+ are chained internally, by using the memory they
+ contain.
+*/
+struct Dwarf_Free_List_s {
+ Dwarf_Free_List fl_next;
+};
+
+
+/*
+ This struct is used to manage all the chunks malloc'ed
+ for a particular alloc_type. Many of the fields are
+ initialized by dwarf_init().
+*/
+struct Dwarf_Alloc_Hdr_s {
+
+ /* Count of actual number of structs user app holds pointers to
+ currently. */
+ Dwarf_Sword ah_struct_user_holds;
+
+ /*
+ Size of each struct that will be allocated for this alloc_type.
+ Initialized by dwarf_init(). */
+ Dwarf_Half ah_bytes_one_struct;
+
+ /*
+ Number of structs of this alloc_type that will be contained in
+ each chunk that is malloc'ed. Initialized by dwarf_init(). */
+ Dwarf_Word ah_structs_per_chunk;
+
+ /*
+ Number of bytes malloc'ed per chunk which is basically
+ (ah_bytes_one_struct+_DWARF_RESERVE) * ah_alloc_num. */
+ Dwarf_Word ah_bytes_malloc_per_chunk;
+
+ /* Count of chunks currently allocated for type. */
+ Dwarf_Sword ah_chunks_allocated;
+
+ /*
+ Points to a chain of Dwarf_Alloc_Area_s structs that represent
+ all the chunks currently allocated for the alloc_type. */
+ Dwarf_Alloc_Area ah_alloc_area_head;
+
+ /* Last Alloc Area that was allocated by malloc. The
+ free-space-search area looks here first and only if it is full
+ goes thru the list pointed to by ah_alloc_area_head. */
+ Dwarf_Alloc_Area ah_last_alloc_area;
+};
+
+
+/*
+ This struct is used to manage each chunk that is
+ malloc'ed for a particular alloc_type. For each
+ allocation type, the allocation header points to
+ a list of all the chunks malloc'ed for that type.
+*/
+struct Dwarf_Alloc_Area_s {
+
+ /* Points to the free list of structs in the chunk. */
+ Dwarf_Ptr aa_free_list;
+
+ /*
+ Count of the number of free structs in the chunk. This includes
+ both those on the free list, and in the blob. */
+ Dwarf_Sword aa_free_structs_in_chunk;
+
+ /*
+ Points to the first byte of the blob from which struct will be
+ allocated. A struct is put on the free_list only when it
+ dwarf_deallocated. Initial allocations are from the blob. */
+ Dwarf_Small *aa_blob_start;
+
+ /* Points just past the last byte of the blob. */
+ Dwarf_Small *aa_blob_end;
+
+ /* Points to alloc_hdr this alloc_area is linked to: The owner, in
+ other words. */
+ Dwarf_Alloc_Hdr aa_alloc_hdr;
+
+ /*
+ Used for chaining Dwarf_Alloc_Area_s atructs. Alloc areas are
+ doubly linked to enable deletion from the list in constant time. */
+ Dwarf_Alloc_Area aa_next;
+ Dwarf_Alloc_Area aa_prev;
+};
+
+struct Dwarf_Error_s *_dwarf_special_no_dbg_error_malloc(void);
+
+#ifdef DWARF_SIMPLE_MALLOC
+/*
+ DWARF_SIMPLE_MALLOC is for testing the hypothesis that the existing
+ complex malloc scheme in libdwarf is pointless complexity.
+
+ DWARF_SIMPLE_MALLOC also makes it easy for a malloc-tracing
+ tool to verify libdwarf malloc has no botches (though of course
+ such does not test the complicated standard-libdwarf-alloc code).
+
+*/
+
+struct simple_malloc_entry_s {
+ Dwarf_Small *se_addr;
+ unsigned long se_size;
+ short se_type;
+};
+#define DSM_BLOCK_COUNT (1000)
+#define DSM_BLOCK_SIZE (sizeof(struct simple_malloc_entry_s)*DSM_BLOCK_COUNT)
+
+/* we do this so dwarf_dealloc can really free everything */
+struct simple_malloc_record_s {
+ struct simple_malloc_record_s *sr_next;
+ int sr_used;
+ struct simple_malloc_entry_s sr_entry[DSM_BLOCK_COUNT];
+};
+
+
+
+#endif /* DWARF_SIMPLE_MALLOC */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_arange.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_arange.h
new file mode 100644
index 000000000..d6c537c45
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_arange.h
@@ -0,0 +1,71 @@
+/*
+
+ Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2010 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
+
+*/
+
+
+
+/* This structure is used to read an arange into. */
+struct Dwarf_Arange_s {
+
+ /* The segment selector. Only non-zero if Dwarf4, only
+ meaningful if ar_segment_selector_size non-zero */
+ Dwarf_Unsigned ar_segment_selector;
+
+ /* Starting address of the arange, ie low-pc. */
+ Dwarf_Addr ar_address;
+
+ /* Length of the arange. */
+ Dwarf_Unsigned ar_length;
+
+
+ /*
+ Offset into .debug_info of the start of the compilation-unit
+ containing this set of aranges. */
+ Dwarf_Off ar_info_offset;
+
+ /* Corresponding Dwarf_Debug. */
+ Dwarf_Debug ar_dbg;
+
+ Dwarf_Half ar_segment_selector_size;
+};
+
+
+
+int
+ _dwarf_get_aranges_addr_offsets(Dwarf_Debug dbg,
+ Dwarf_Addr ** addrs,
+ Dwarf_Off ** offsets,
+ Dwarf_Signed * count,
+ Dwarf_Error * error);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_base_types.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_base_types.h
new file mode 100644
index 000000000..00e2700a8
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_base_types.h
@@ -0,0 +1,123 @@
+/*
+
+ Copyright (C) 2000,2005 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2008-2010 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
+
+*/
+
+
+
+#include "libdwarfdefs.h"
+
+#define true 1
+#define false 0
+
+/* to identify a cie */
+#define DW_CIE_ID ~(0x0)
+#define DW_CIE_VERSION 1 /* DWARF2 */
+#define DW_CIE_VERSION3 3 /* DWARF3 */
+#define DW_CIE_VERSION4 4 /* DWARF4 */
+
+#define DW_CU_VERSION2 2
+#define DW_CU_VERSION3 3
+#define DW_CU_VERSION4 4
+
+/* DWARF2,3 and 4 */
+#define DW_ARANGES_VERSION2 2
+
+#define DW_LINE_VERSION2 2
+#define DW_LINE_VERSION3 3
+#define DW_LINE_VERSION4 4
+
+
+/*
+ These are allocation type codes for structs that
+ are internal to the Libdwarf Consumer library.
+*/
+#define DW_DLA_ABBREV_LIST DW_DLA_RANGES + 1
+#define DW_DLA_CHAIN DW_DLA_RANGES + 2
+#define DW_DLA_CU_CONTEXT DW_DLA_RANGES + 3
+#define DW_DLA_FRAME DW_DLA_RANGES + 4
+#define DW_DLA_GLOBAL_CONTEXT DW_DLA_RANGES + 5
+#define DW_DLA_FILE_ENTRY DW_DLA_RANGES + 6
+#define DW_DLA_LINE_CONTEXT DW_DLA_RANGES + 7
+#define DW_DLA_LOC_CHAIN DW_DLA_RANGES + 8
+#define DW_DLA_HASH_TABLE DW_DLA_RANGES + 9
+#define DW_DLA_FUNC_CONTEXT DW_DLA_RANGES + 10
+#define DW_DLA_TYPENAME_CONTEXT DW_DLA_RANGES + 11
+#define DW_DLA_VAR_CONTEXT DW_DLA_RANGES + 12
+#define DW_DLA_WEAK_CONTEXT DW_DLA_RANGES + 13
+#define DW_DLA_PUBTYPES_CONTEXT DW_DLA_RANGES + 14 /* DWARF3 */
+#define DW_DLA_HASH_TABLE_ENTRY DW_DLA_RANGES + 15
+
+/* Maximum number of allocation types for allocation routines. */
+#define MAX_DW_DLA DW_DLA_HASH_TABLE_ENTRY
+
+/*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 signed long Dwarf_Sword;
+
+typedef signed char Dwarf_Sbyte;
+typedef unsigned char Dwarf_Ubyte;
+typedef signed short Dwarf_Shalf;
+typedef Dwarf_Small *Dwarf_Byte_Ptr;
+
+/* these 2 are fixed sizes which must not vary with the
+** ILP32/LP64 model. Between these two, stay at 32 bit.
+*/
+typedef __uint32_t Dwarf_ufixed;
+typedef __int32_t Dwarf_sfixed;
+
+/*
+ In various places the code mistakenly associates
+ forms 8 bytes long with Dwarf_Signed or Dwarf_Unsigned
+ This is not a very portable assumption.
+ The following should be used instead for 64 bit integers.
+*/
+typedef __uint64_t Dwarf_ufixed64;
+typedef __int64_t Dwarf_sfixed64;
+
+
+typedef struct Dwarf_Abbrev_List_s *Dwarf_Abbrev_List;
+typedef struct Dwarf_File_Entry_s *Dwarf_File_Entry;
+typedef struct Dwarf_CU_Context_s *Dwarf_CU_Context;
+typedef struct Dwarf_Hash_Table_s *Dwarf_Hash_Table;
+typedef struct Dwarf_Hash_Table_Entry_s *Dwarf_Hash_Table_Entry;
+
+
+typedef struct Dwarf_Alloc_Hdr_s *Dwarf_Alloc_Hdr;
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_die_deliv.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_die_deliv.h
new file mode 100644
index 000000000..f1ecb153b
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_die_deliv.h
@@ -0,0 +1,57 @@
+/*
+
+ Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2008-2010 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
+
+*/
+
+
+
+
+/*
+ This struct holds information about a abbreviation.
+ It is put in the hash table for abbreviations for
+ a compile-unit.
+*/
+struct Dwarf_Abbrev_List_s {
+
+ Dwarf_Unsigned ab_code;
+ Dwarf_Half ab_tag;
+ Dwarf_Half ab_has_child;
+
+ /*
+ Points to start of attribute and form pairs in the .debug_abbrev
+ section for the abbrev. */
+ Dwarf_Byte_Ptr ab_abbrev_ptr;
+
+ struct Dwarf_Abbrev_List_s *ab_next;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_elf_access.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_elf_access.h
new file mode 100644
index 000000000..fd52c1793
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_elf_access.h
@@ -0,0 +1,55 @@
+#ifndef _DWARF_ELF_PORT_H
+#define _DWARF_ELF_PORT_H
+/*
+
+ Copyright (C) 2008-2010 David Anderson. All rights reserved.
+ Portions Copyright 2008-2010 Arxan Technologies, 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
+
+*/
+
+
+
+/* ELF (usually libelf) object access for the generic object file interface */
+
+int
+dwarf_elf_object_access_init(dwarf_elf_handle elf ,
+ int libdwarf_owns_elf,
+ Dwarf_Obj_Access_Interface** ret_obj,
+ int *err );
+
+void
+dwarf_elf_object_access_finish(Dwarf_Obj_Access_Interface* obj );
+
+/* End ELF object access for the generic object file interface */
+
+
+#endif
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_error.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_error.h
new file mode 100644
index 000000000..27acf70db
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_error.h
@@ -0,0 +1,43 @@
+/*
+
+ Copyright (C) 2000 Silicon Graphics, 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
+
+*/
+
+
+
+void _dwarf_error(Dwarf_Debug dbg, Dwarf_Error * error,
+ Dwarf_Sword errval);
+
+struct Dwarf_Error_s {
+ Dwarf_Sword er_errval;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_frame.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_frame.h
new file mode 100644
index 000000000..ceb686335
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_frame.h
@@ -0,0 +1,421 @@
+/*
+
+ Copyright (C) 2000, 2004, 2006 Silicon Graphics, 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
+
+*/
+
+
+
+/* The dwarf 2.0 standard dictates that only the following
+ * fields can be read when an unexpected augmentation string
+ * (in the cie) is encountered: CIE length, CIE_id, version and
+ * augmentation; FDE: length, CIE pointer, initial location and
+ * address range. Unfortunately, with the above restrictions, it
+ * is impossible to read the instruction table from a CIE or a FDE
+ * when a new augmentation string is encountered.
+ * To fix this problem, the following layout is used, if the
+ * augmentation string starts with the string "z".
+ * CIE FDE
+ * length length
+ * CIE_id CIE_pointer
+ * version initial_location
+ * augmentation address_range
+ * length_of_augmented_fields (*NEW*)
+ * code_alignment_factor Any new fields as necessary
+ * data_alignment_factor instruction_table
+ * return_address
+ * length_of_augmented fields
+ * Any new fields as necessary
+ * initial_instructions
+ *
+ * The type of all the old data items are the same as what is
+ * described in dwarf 2.0 standard. The length_of_augmented_fields
+ * is an LEB128 data item that denotes the size (in bytes) of
+ * the augmented fields (not including the size of
+ * "length_of_augmented_fields" itself).
+
+ * Handling of cie augmentation strings is necessarly a heuristic.
+ * See dwarf_frame.c for the currently known augmentation strings.
+
+
+ ---START SGI-ONLY COMMENT:
+ * SGI-IRIX versions of cie or fde were intended to use "z1", "z2" as the
+ * augmenter strings if required for new augmentation.
+ * However, that never happened (as of March 2005).
+ *
+ * The fde's augmented by the string "z" have a new field
+ * (signed constant, 4 byte field)
+ * called offset_into_exception_tables, following the
+ * length_of_augmented field. This field contains an offset
+ * into the "_MIPS_eh_region", which describes
+ * the IRIX CC exception handling tables.
+ ---END SGI-ONLY COMMENT
+
+
+ * GNU .eh_frame has an augmentation string of z[RLP]* (gcc 3.4)
+ * The similarity to IRIX 'z' (and proposed but never
+ * implemented IRIX z1, z2 etc) was confusing things.
+ * If the section is .eh_frame then 'z' means GNU exception
+ * information 'Augmentation Data' not IRIX 'z'.
+ * See The Linux Standard Base Core Specification version 3.0
+ */
+
+#define DW_DEBUG_FRAME_VERSION 1 /* DWARF2 */
+#define DW_DEBUG_FRAME_VERSION3 3 /* DWARF3 */
+#define DW_DEBUG_FRAME_VERSION4 4 /* DWARF4 */
+/* The following is SGI/IRIX specific, and probably no longer
+ in use anywhere. */
+#define DW_DEBUG_FRAME_AUGMENTER_STRING "mti v1"
+
+/* The value of the offset field for Cie's. */
+#define DW_CIE_OFFSET ~(0x0)
+
+/* The augmentation string may be NULL. */
+#define DW_EMPTY_STRING ""
+
+#define DW_FRAME_INSTR_OPCODE_SHIFT 6
+#define DW_FRAME_INSTR_OFFSET_MASK 0x3f
+
+/*
+ This struct denotes the rule for a register in a row of
+ the frame table. In other words, it is one element of
+ the table.
+*/
+struct Dwarf_Reg_Rule_s {
+
+ /*
+ Is a flag indicating whether the rule includes the offset
+ field, ie whether the ru_offset field is valid or not.
+ Applies only if DW_EXPR_OFFSET or DW_EXPR_VAL_OFFSET.
+ It is important, since reg+offset (offset of 0) is different from
+ just 'register' since the former means 'read memory at address
+ given by the sum of register contents plus offset to get the
+ value'. whereas the latter means 'the value is in the register'.
+
+ The 'register' numbers are either real registers (ie, table
+ columns defined as real registers) or defined entries that are
+ not really hardware registers, such as DW_FRAME_SAME_VAL or
+ DW_FRAME_CFA_COL.
+
+ */
+ Dwarf_Sbyte ru_is_off;
+
+ /* DW_EXPR_OFFSET (0, DWARF2)
+ DW_EXPR_VAL_OFFSET 1 (dwarf2/3)
+ DW_EXPR_EXPRESSION 2 (dwarf2/3)
+ DW_EXPR_VAL_EXPRESSION 3 (dwarf2/3)
+ See dwarf_frame.h. */
+ Dwarf_Sbyte ru_value_type;
+
+ /* Register involved in this rule. */
+ Dwarf_Half ru_register;
+
+ /* Offset to add to register, if indicated by ru_is_offset
+ and if DW_EXPR_OFFSET or DW_EXPR_VAL_OFFSET.
+ If DW_EXPR_EXPRESSION or DW_EXPR_VAL_EXPRESSION
+ this is DW_FORM_block block-length, not offset. */
+ Dwarf_Unsigned ru_offset_or_block_len;
+
+ /* For DW_EXPR_EXPRESSION DW_EXPR_VAL_EXPRESSION these is set,
+ else 0. */
+ Dwarf_Small *ru_block;
+};
+
+typedef struct Dwarf_Frame_s *Dwarf_Frame;
+
+/*
+ This structure represents a row of the frame table.
+ Fr_loc is the pc value for this row, and Fr_reg
+ contains the rule for each column.
+
+ Entry DW_FRAME_CFA_COL of fr_reg was the tradional MIPS
+ way of setting CFA. cfa_rule is the new one.
+*/
+struct Dwarf_Frame_s {
+
+ /* Pc value corresponding to this row of the frame table. */
+ Dwarf_Addr fr_loc;
+
+ /* Rules for all the registers in this row. */
+ struct Dwarf_Reg_Rule_s fr_cfa_rule;
+
+ /* fr_reg_count is the the number of
+ entries of the fr_reg array. */
+ unsigned long fr_reg_count;
+ struct Dwarf_Reg_Rule_s *fr_reg;
+
+ Dwarf_Frame fr_next;
+};
+
+typedef struct Dwarf_Frame_Op_List_s *Dwarf_Frame_Op_List;
+
+/* This is used to chain together Dwarf_Frame_Op structures. */
+struct Dwarf_Frame_Op_List_s {
+ Dwarf_Frame_Op *fl_frame_instr;
+ Dwarf_Frame_Op_List fl_next;
+};
+
+/* See dwarf_frame.c for the heuristics used to set the
+ Dwarf_Cie ci_augmentation_type.
+
+ This succinctly helps interpret the size and meaning of .debug_frame
+ and (for gcc) .eh_frame.
+
+ In the case of gcc .eh_frame (gcc 3.3, 3.4)
+ z may be followed by one or more of
+ L R P.
+
+*/
+enum Dwarf_augmentation_type {
+ aug_empty_string, /* Default empty augmentation string. */
+ aug_irix_exception_table, /* IRIX plain "z",
+ for exception handling, IRIX CC compiler.
+ Proposed z1 z2 ... never implemented. */
+ aug_gcc_eh_z, /* gcc z augmentation, (including
+ L R P variations). gcc 3.3 3.4 exception
+ handling in eh_frame. */
+ aug_irix_mti_v1, /* IRIX "mti v1" augmentation string. Probably
+ never in any released SGI-IRIX compiler. */
+ aug_eh, /* For gcc .eh_frame, "eh" is the string.,
+ gcc 1,2, egcs. Older values. */
+ aug_armcc, /* "armcc+" meaning the cfa calculation
+ is corrected to be standard (output by
+ Arm C RVCT 3.0 SP1 and later). See
+ http://sourceware.org/ml/gdb-patches/2006-12/msg00249.html
+ for details. */
+ aug_unknown, /* Unknown augmentation, we cannot do much. */
+ aug_past_last
+};
+
+
+/*
+ This structure contains all the pertinent info for a Cie. Most
+ of the fields are taken straight from the definition of a Cie.
+ Ci_cie_start points to the address (in .debug_frame) where this
+ Cie begins. Ci_cie_instr_start points to the first byte of the
+ frame instructions for this Cie. Ci_dbg points to the associated
+ Dwarf_Debug structure. Ci_initial_table is a pointer to the table
+ row generated by the instructions for this Cie.
+*/
+struct Dwarf_Cie_s {
+ Dwarf_Unsigned ci_length;
+ char *ci_augmentation;
+ Dwarf_Small ci_code_alignment_factor;
+ Dwarf_Sbyte ci_data_alignment_factor;
+ Dwarf_Small ci_return_address_register;
+ Dwarf_Small *ci_cie_start;
+ Dwarf_Small *ci_cie_instr_start;
+ Dwarf_Debug ci_dbg;
+ Dwarf_Frame ci_initial_table;
+ Dwarf_Cie ci_next;
+ Dwarf_Small ci_length_size;
+ Dwarf_Small ci_extension_size;
+ Dwarf_Half ci_cie_version_number;
+ enum Dwarf_augmentation_type ci_augmentation_type;
+
+ /* The following 2 for GNU .eh_frame exception handling
+ Augmentation Data. Set if ci_augmentation_type
+ is aug_gcc_eh_z. Zero if unused. */
+ Dwarf_Unsigned ci_gnu_eh_augmentation_len;
+ Dwarf_Ptr ci_gnu_eh_augmentation_bytes;
+
+ /* These are extracted from the gnu eh_frame
+ augmentation if the
+ augmentation begins with 'z'. See Linux LSB documents.
+ Otherwize these are zero. */
+ unsigned char ci_gnu_personality_handler_encoding;
+ unsigned char ci_gnu_lsda_encoding;
+ unsigned char ci_gnu_fde_begin_encoding;
+
+ /* If 'P' augmentation present, is handler addr. Else
+ is zero. */
+ Dwarf_Addr ci_gnu_personality_handler_addr;
+
+
+ /* In creating list of cie's (which will become an array)
+ record the position so fde can get it on fde creation. */
+ Dwarf_Unsigned ci_index;
+ Dwarf_Small * ci_section_ptr;
+ /* DWARF4 adds address size and segment size to the CIE: the .debug_info
+ section may not always be present to allow libdwarf to
+ find address_size from the compilation-unit. */
+ Dwarf_Half ci_address_size;
+ Dwarf_Half ci_segment_size;
+
+};
+
+/*
+ This structure contains all the pertinent info for a Fde.
+ Most of the fields are taken straight from the definition.
+ fd_cie_index is the index of the Cie associated with this
+ Fde in the list of Cie's for this debug_frame. Fd_cie
+ points to the corresponsing Dwarf_Cie structure. Fd_fde_start
+ points to the start address of the Fde. Fd_fde_instr_start
+ points to the start of the instructions for this Fde. Fd_dbg
+ points to the associated Dwarf_Debug structure.
+*/
+struct Dwarf_Fde_s {
+ Dwarf_Unsigned fd_length;
+ Dwarf_Addr fd_cie_offset;
+ Dwarf_Unsigned fd_cie_index;
+ Dwarf_Cie fd_cie;
+ Dwarf_Addr fd_initial_location;
+ Dwarf_Small *fd_initial_loc_pos;
+ Dwarf_Addr fd_address_range;
+ Dwarf_Small *fd_fde_start;
+ Dwarf_Small *fd_fde_instr_start;
+ Dwarf_Debug fd_dbg;
+
+ /* fd_offset_into_exception_tables is SGI/IRIX exception table
+ offset. Unused and zero if not IRIX .debug_frame. */
+ Dwarf_Signed fd_offset_into_exception_tables;
+
+ Dwarf_Fde fd_next;
+ Dwarf_Small fd_length_size;
+ Dwarf_Small fd_extension_size;
+ /* So we know from an fde which 'count' of fde-s in
+ Dwarf_Debug applies: eh or standard. */
+ Dwarf_Small fd_is_eh;
+ /* The following 2 for GNU .eh_frame exception handling
+ Augmentation Data. Set if CIE ci_augmentation_type
+ is aug_gcc_eh_z. Zero if unused. */
+ Dwarf_Unsigned fd_gnu_eh_augmentation_len;
+ Dwarf_Ptr fd_gnu_eh_augmentation_bytes;
+ Dwarf_Addr fd_gnu_eh_lsda; /* If 'L' augmentation letter
+ present: is address of the
+ Language Specific Data Area (LSDA). If not 'L" is zero. */
+
+ /* The following 3 are about the Elf section the FDEs come from. */
+ Dwarf_Small * fd_section_ptr;
+ Dwarf_Unsigned fd_section_length;
+ Dwarf_Unsigned fd_section_index;
+
+};
+
+
+int
+ _dwarf_frame_address_offsets(Dwarf_Debug dbg, Dwarf_Addr ** addrlist,
+ Dwarf_Off ** offsetlist,
+ Dwarf_Signed * returncount,
+ Dwarf_Error * err);
+
+int
+_dwarf_get_fde_list_internal(Dwarf_Debug dbg,
+ Dwarf_Cie ** cie_data,
+ Dwarf_Signed * cie_element_count,
+ Dwarf_Fde ** fde_data,
+ Dwarf_Signed * fde_element_count,
+ Dwarf_Small * section_ptr,
+ Dwarf_Unsigned section_index,
+ Dwarf_Unsigned section_length,
+ Dwarf_Unsigned cie_id_value,
+ int use_gnu_cie_calc, /* If non-zero,
+ this is gcc eh_frame. */
+ Dwarf_Error * error);
+
+enum Dwarf_augmentation_type
+_dwarf_get_augmentation_type(Dwarf_Debug dbg,
+ Dwarf_Small *augmentation_string,
+ int is_gcc_eh_frame);
+
+Dwarf_Unsigned _dwarf_get_return_address_reg(Dwarf_Small *frame_ptr,
+ int version,
+ unsigned long *size);
+
+/* Temporary recording of crucial cie/fde prefix data.
+ * Vastly simplifies some argument lists.
+ */
+struct cie_fde_prefix_s {
+ /* cf_start_addr is a pointer to the first byte of this fde/cie
+ we are reading now. */
+ Dwarf_Small * cf_start_addr;
+ Dwarf_Small * cf_addr_after_prefix;
+ Dwarf_Unsigned cf_length;
+ int cf_local_length_size;
+ int cf_local_extension_size;
+ Dwarf_Unsigned cf_cie_id;
+ Dwarf_Small * cf_cie_id_addr; /* used for eh_frame calculations. */
+
+ /* Simplifies passing around these values to create fde having
+ these here. */
+ /* cf_section_ptr is a pointer to the first byte
+ of the object section the prefix is read from. */
+ Dwarf_Small * cf_section_ptr;
+ Dwarf_Unsigned cf_section_index;
+ Dwarf_Unsigned cf_section_length;
+};
+
+int
+_dwarf_exec_frame_instr(Dwarf_Bool make_instr,
+ Dwarf_Frame_Op ** ret_frame_instr,
+ Dwarf_Bool search_pc,
+ Dwarf_Addr search_pc_val,
+ Dwarf_Addr initial_loc,
+ Dwarf_Small * start_instr_ptr,
+ Dwarf_Small * final_instr_ptr,
+ Dwarf_Frame table,
+ Dwarf_Cie cie,
+ Dwarf_Debug dbg,
+ Dwarf_Half reg_num_of_cfa,
+ Dwarf_Sword * returned_count,
+ int *returned_error);
+
+
+int dwarf_read_cie_fde_prefix(Dwarf_Debug dbg,
+ Dwarf_Small *frame_ptr_in,
+ Dwarf_Small *section_ptr_in,
+ Dwarf_Unsigned section_index_in,
+ Dwarf_Unsigned section_length_in,
+ struct cie_fde_prefix_s *prefix_out,
+ Dwarf_Error *error);
+
+int dwarf_create_fde_from_after_start(Dwarf_Debug dbg,
+ struct cie_fde_prefix_s * prefix,
+ Dwarf_Small *section_pointer,
+ Dwarf_Small *frame_ptr,
+ int use_gnu_cie_calc,
+ Dwarf_Cie cie_ptr_in,
+ Dwarf_Fde *fde_ptr_out,
+ Dwarf_Error *error);
+
+int dwarf_create_cie_from_after_start(Dwarf_Debug dbg,
+ struct cie_fde_prefix_s *prefix,
+ Dwarf_Small* section_pointer,
+ Dwarf_Small* frame_ptr,
+ Dwarf_Unsigned cie_count,
+ int use_gnu_cie_calc,
+ Dwarf_Cie *cie_ptr_out,
+ Dwarf_Error *error);
+
+
+int _dwarf_frame_constructor(Dwarf_Debug dbg,void * );
+void _dwarf_frame_destructor (void *);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_funcs.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_funcs.h
new file mode 100644
index 000000000..bf91c3215
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_funcs.h
@@ -0,0 +1,42 @@
+/*
+
+ Copyright (C) 2000, 2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+typedef struct Dwarf_Func_Context_s *Dwarf_Func_Context;
+
+
+/* struct never completed: see dwarf_global.h */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_global.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_global.h
new file mode 100644
index 000000000..c2bc2cdcc
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_global.h
@@ -0,0 +1,124 @@
+/*
+
+ Copyright (C) 2000,2004,2005 Silicon Graphics, 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
+
+*/
+
+
+
+
+typedef struct Dwarf_Global_Context_s *Dwarf_Global_Context;
+
+/*
+ This struct contains header information for a set of pubnames.
+ Essentially, they contain the context for a set of pubnames
+ belonging to a compilation-unit.
+
+ This is also used for the sgi-specific
+ weaknames, typenames, varnames, funcnames data:
+ the structs for those are incomplete and
+ instances of this are used instead.
+
+ Also used for DWARF3 .debug_pubtypes.
+
+*/
+struct Dwarf_Global_Context_s {
+
+ /* Length in .debug_pubnames (etc) of a set of names for a
+ compilation-unit. Dwarf_Word pu_length; The value is not made
+ available outside libdwarf and not used inside, so no need to
+ record it. */
+
+ /* For this context, size of a length. 4 or 8 */
+ unsigned char pu_length_size;
+
+ /* For this CU, size of the extension 0 except for dwarf2 extension
+ 64bit, in which case is 4. */
+ unsigned char pu_extension_size;
+
+ /*
+ Offset into .debug_info of the compilation-unit header (not DIE)
+ for this set of pubnames. */
+ Dwarf_Off pu_offset_of_cu_header;
+
+ /* Size of compilation-unit that these pubnames are in. */
+ Dwarf_Unsigned pu_info_length;
+
+ Dwarf_Debug pu_dbg;
+};
+
+
+/* This struct contains information for a single pubname. */
+struct Dwarf_Global_s {
+
+ /*
+ Offset from the start of the corresponding compilation-unit of
+ the DIE for the given pubname CU. */
+ Dwarf_Off gl_named_die_offset_within_cu;
+
+ /* Points to the given pubname. */
+ Dwarf_Small *gl_name;
+
+ /* Context for this pubname. */
+ Dwarf_Global_Context gl_context;
+};
+
+int _dwarf_internal_get_pubnames_like_data(Dwarf_Debug dbg,
+ Dwarf_Small *
+ section_data_ptr,
+ Dwarf_Unsigned
+ section_length,
+ Dwarf_Global ** globals,
+ Dwarf_Signed * return_count,
+ Dwarf_Error * error,
+ int context_code,
+ int global_code,
+ int length_err_num,
+ int version_err_num);
+
+void
+_dwarf_internal_globals_dealloc( Dwarf_Debug dbg, Dwarf_Global *dwgl,
+ Dwarf_Signed count,
+ int context_code,
+ int global_code,
+ int list_code);
+
+
+#ifdef __sgi /* __sgi should only be defined for IRIX/MIPS. */
+void _dwarf_fix_up_offset_irix(Dwarf_Debug dbg,
+ Dwarf_Unsigned *varp,
+ char *caller_site_name);
+#define FIX_UP_OFFSET_IRIX_BUG(ldbg,var,name) _dwarf_fix_up_offset_irix(ldbg,&var,name)
+#else
+#define FIX_UP_OFFSET_IRIX_BUG(ldbg,var,name)
+#endif
+
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_harmless.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_harmless.h
new file mode 100644
index 000000000..3d4d910ce
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_harmless.h
@@ -0,0 +1,31 @@
+/*
+
+ Copyright (C) 2010 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.
+
+*/
+
+
+
+void dwarf_harmless_init(struct Dwarf_Harmless_s *dhp,unsigned size);
+void dwarf_harmless_cleanout(struct Dwarf_Harmless_s *dhp);
+
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_incl.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_incl.h
new file mode 100644
index 000000000..df2fbf334
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_incl.h
@@ -0,0 +1,66 @@
+/*
+
+ Copyright (C) 2000, 2002, 2004 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2008-2010 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
+
+*/
+
+
+
+#ifndef DWARF_INCL_H
+#define DWARF_INCL_H
+#if (!defined(HAVE_RAW_LIBELF_OK) && defined(HAVE_LIBELF_OFF64_OK) )
+/* At a certain point libelf.h requires _GNU_SOURCE.
+ here we assume the criteria in configure determine that
+ usefully.
+*/
+#define _GNU_SOURCE 1
+#endif
+
+
+#include "libdwarfdefs.h"
+#include
+
+#ifdef HAVE_ELF_H
+#include
+#endif
+
+#include
+#include
+#include
+
+#include "dwarf_base_types.h"
+#include "dwarf_alloc.h"
+#include "dwarf_opaque.h"
+#include "dwarf_error.h"
+#include "dwarf_util.h"
+#endif /* DWARF_INCL_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_line.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_line.h
new file mode 100644
index 000000000..66d606275
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_line.h
@@ -0,0 +1,331 @@
+/*
+
+ Copyright (C) 2000, 2004, 2006 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2009-2010 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
+
+*/
+
+
+
+#define DW_EXTENDED_OPCODE 0
+
+/*
+ This is used as the starting value for an algorithm
+ to get the minimum difference between 2 values.
+ UINT_MAX is used as our approximation to infinity.
+*/
+#define MAX_LINE_DIFF UINT_MAX
+
+/* This is for a sanity check on line
+ table extended opcodes.
+ It is entirely arbitrary, and 100 is surely too small if
+ someone was inserting strings in the opcode. */
+#define DW_LNE_LEN_MAX 100
+
+
+/*
+ This structure is used to build a list of all the
+ files that are used in the current compilation unit.
+ All of the fields execpt fi_next have meanings that
+ are obvious from section 6.2.4 of the Libdwarf Doc.
+*/
+struct Dwarf_File_Entry_s {
+ /* Points to string naming the file. */
+ Dwarf_Small *fi_file_name;
+
+ /*
+ Index into the list of directories of the directory in which
+ this file exits. */
+ Dwarf_Sword fi_dir_index;
+
+ /* Time of last modification of the file. */
+ Dwarf_Unsigned fi_time_last_mod;
+
+ /* Length in bytes of the file. */
+ Dwarf_Unsigned fi_file_length;
+
+ /* Pointer for chaining file entries. */
+ Dwarf_File_Entry fi_next;
+};
+
+
+typedef struct Dwarf_Line_Context_s *Dwarf_Line_Context;
+
+/*
+ This structure provides the context in which the fields of
+ a Dwarf_Line structure are interpreted. They come from the
+ statement program prologue. **Updated by dwarf_srclines in
+ dwarf_line.c.
+*/
+struct Dwarf_Line_Context_s {
+ /*
+ Points to a chain of entries providing info about source files
+ for the current set of Dwarf_Line structures. File number
+ 'li_file 1' is last on the list, the first list entry is the
+ file numbered lc_file_entry_count. The numbering of the file
+ names matches the dwarf2/3 line table specification file table
+ and DW_LNE_define_file numbering rules. */
+ Dwarf_File_Entry lc_file_entries;
+ /*
+ Count of number of source files for this set of Dwarf_Line
+ structures. */
+ Dwarf_Sword lc_file_entry_count;
+ /*
+ Points to the portion of .debug_line section that contains a
+ list of strings naming the included directories. */
+ Dwarf_Small *lc_include_directories;
+
+ /* Count of the number of included directories. */
+ Dwarf_Sword lc_include_directories_count;
+
+ /* Count of the number of lines for this cu. */
+ Dwarf_Sword lc_line_count;
+
+ /* Points to name of compilation directory. */
+ Dwarf_Small *lc_compilation_directory;
+
+ Dwarf_Debug lc_dbg;
+
+ Dwarf_Half lc_version_number; /* DWARF2/3 version number, 2
+ for DWARF2, 3 for DWARF3. */
+};
+
+
+/*
+ This structure defines a row of the line table.
+ All of the fields except li_offset have the exact
+ same meaning that is defined in Section 6.2.2
+ of the Libdwarf Document.
+
+ li_offset is used by _dwarf_addr_finder() which is called
+ by rqs(1), an sgi utility for 'moving' shared libraries
+ as if the static linker (ld) had linked the shared library
+ at the newly-specified address. Most libdwarf-using
+ apps will ignore li_offset and _dwarf_addr_finder().
+
+*/
+struct Dwarf_Line_s {
+ Dwarf_Addr li_address; /* pc value of machine instr */
+ union addr_or_line_s {
+ struct li_inner_s {
+ Dwarf_Sword li_file; /* int identifying src file */
+ /* li_file is a number 1-N, indexing into a conceptual
+ source file table as described in dwarf2/3 spec line
+ table doc. (see Dwarf_File_Entry lc_file_entries; and
+ Dwarf_Sword lc_file_entry_count;) */
+
+ Dwarf_Sword li_line; /* source file line number. */
+ Dwarf_Half li_column; /* source file column number */
+ Dwarf_Small li_isa;
+
+ /* To save space, use bit flags. */
+ /* indicate start of stmt */
+ unsigned char li_is_stmt:1;
+
+ /* indicate start basic block */
+ unsigned char li_basic_block:1;
+
+ /* first post sequence instr */
+ unsigned char li_end_sequence:1;
+
+ unsigned char li_prologue_end:1;
+ unsigned char li_epilogue_begin:1;
+ } li_l_data;
+ Dwarf_Off li_offset; /* for rqs */
+ } li_addr_line;
+ Dwarf_Line_Context li_context; /* assoc Dwarf_Line_Context_s */
+};
+
+
+int _dwarf_line_address_offsets(Dwarf_Debug dbg,
+ Dwarf_Die die,
+ Dwarf_Addr ** addrs,
+ Dwarf_Off ** offs,
+ Dwarf_Unsigned * returncount,
+ Dwarf_Error * err);
+int _dwarf_internal_srclines(Dwarf_Die die,
+ Dwarf_Line ** linebuf,
+ Dwarf_Signed * count,
+ Dwarf_Bool doaddrs,
+ Dwarf_Bool dolines, Dwarf_Error * error);
+
+
+
+/* The LOP, WHAT_IS_OPCODE stuff is here so it can
+ be reused in 3 places. Seemed hard to keep
+ the 3 places the same without an inline func or
+ a macro.
+
+ Handling the line section where the header and the
+ file being processed do not match (unusual, but
+ planned for in the design of .debug_line)
+ is too tricky to recode this several times and keep
+ it right.
+
+ As it is the code starting up line-reading is duplicated
+ and that is just wrong to do. FIXME!
+*/
+#define LOP_EXTENDED 1
+#define LOP_DISCARD 2
+#define LOP_STANDARD 3
+#define LOP_SPECIAL 4
+
+#define WHAT_IS_OPCODE(type,opcode,base,opcode_length,line_ptr,highest_std) \
+ if( (opcode) < (base) ) { \
+ /* we know we must treat as a standard op \
+ or a special case. \
+ */ \
+ if((opcode) == DW_EXTENDED_OPCODE) { \
+ type = LOP_EXTENDED; \
+ } else if( ((highest_std)+1) >= (base)) { \
+ /* == Standard case: compile of \
+ dwarf_line.c and object \
+ have same standard op codes set. \
+ \
+ > Special case: compile of dwarf_line.c\
+ has things in standard op codes list \
+ in dwarf.h header not \
+ in the object: handle this as a standard\
+ op code in switch below. \
+ The header special ops overlap the \
+ object standard ops. \
+ The new standard op codes will not \
+ appear in the object. \
+ */ \
+ type = LOP_STANDARD; \
+ } else { \
+ /* These are standard opcodes in the object\
+ ** that were not defined in the header \
+ ** at the time dwarf_line.c \
+ ** was compiled. Provides the ability of \
+ ** out-of-date dwarf reader to read newer \
+ ** line table data transparently. \
+ */ \
+ type = LOP_DISCARD; \
+ } \
+ \
+ } else { \
+ /* Is a special op code. \
+ */ \
+ type = LOP_SPECIAL; \
+ }
+
+/* The following is from the dwarf definition of 'ubyte'
+ and is specifically mentioned in section 6.2.5.1, page 54
+ of the Rev 2.0.0 dwarf specification.
+*/
+
+#define MAX_LINE_OP_CODE 255
+
+
+/* The following structs (Line_Table_File_Entry_s,Line_Table_Prefix_s)
+ and functions allow refactoring common code into a single
+ reader routine.
+*/
+/* There can be zero of more of these needed for 1 line prologue. */
+struct Line_Table_File_Entry_s {
+ Dwarf_Small *lte_filename;
+ Dwarf_Unsigned lte_directory_index;
+ Dwarf_Unsigned lte_last_modification_time;
+ Dwarf_Unsigned lte_length_of_file;
+};
+
+/* Data picked up from the line table prologue for a single
+CU. */
+struct Line_Table_Prefix_s {
+
+ /* pf_total_length is the value of the length field for the line
+ table of this CU. So it does not count the length of itself (the
+ length value) for consistency with the say lenghts recorded in
+ DWARF2/3. */
+ Dwarf_Unsigned pf_total_length;
+
+ /* Length of the initial length field itself. */
+ Dwarf_Half pf_length_field_length;
+
+ /* The version is 2 for DWARF2, 3 for DWARF3 */
+ Dwarf_Half pf_version;
+
+ Dwarf_Unsigned pf_prologue_length;
+ Dwarf_Small pf_minimum_instruction_length;
+
+ /* Start and end of this CU line area. pf_line_ptr_start +
+ pf_total_length + pf_length_field_length == pf_line_ptr_end.
+ Meaning pf_line_ptr_start is before the length info. */
+ Dwarf_Small *pf_line_ptr_start;
+ Dwarf_Small *pf_line_ptr_end;
+
+ /* Used to check that decoding of the line prologue is done right. */
+ Dwarf_Small *pf_line_prologue_start;
+
+ Dwarf_Small pf_default_is_stmt;
+ Dwarf_Sbyte pf_line_base;
+ Dwarf_Small pf_line_range;
+
+ /* Highest std opcode (+1). */
+ Dwarf_Small pf_opcode_base;
+
+ /* pf_opcode_base -1 entries (each a count, normally the value of
+ each entry is 0 or 1). */
+ Dwarf_Small *pf_opcode_length_table;
+
+ Dwarf_Unsigned pf_include_directories_count;
+ /* Array of pointers to dir strings. pf_include_directories_count
+ entriesin the array. */
+ Dwarf_Small **pf_include_directories;
+
+ /* Count of entries in line_table_file_entries array. */
+ Dwarf_Unsigned pf_files_count;
+ struct Line_Table_File_Entry_s *pf_line_table_file_entries;
+
+ /* The number to treat as standard ops. This is a special
+ accomodation of gcc using the new standard opcodes but not
+ updating the version number. It's legal dwarf2, but much better
+ for the user to understand as dwarf3 when 'it looks ok'. */
+ Dwarf_Bool pf_std_op_count;
+
+};
+
+void dwarf_init_line_table_prefix(struct Line_Table_Prefix_s *pf);
+void dwarf_free_line_table_prefix(struct Line_Table_Prefix_s *pf);
+
+int dwarf_read_line_table_prefix(Dwarf_Debug dbg,
+ Dwarf_Small * data_start,
+ Dwarf_Unsigned data_length,
+ Dwarf_Small ** updated_data_start_out,
+ struct Line_Table_Prefix_s *prefix_out,
+ /* The following 2 arguments are solely for warning users
+ * when there is a surprising 'gap' in the .debug_line info. */
+ Dwarf_Small ** bogus_bytes_ptr,
+ Dwarf_Unsigned * bogus_bytes_count,
+ Dwarf_Error * err,
+ int * err_count_out);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_loc.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_loc.h
new file mode 100644
index 000000000..685d199f2
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_loc.h
@@ -0,0 +1,46 @@
+/*
+
+ Copyright (C) 2000, 2004 Silicon Graphics, 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
+
+*/
+
+
+
+typedef struct Dwarf_Loc_Chain_s *Dwarf_Loc_Chain;
+
+struct Dwarf_Loc_Chain_s {
+ Dwarf_Small lc_atom;
+ Dwarf_Unsigned lc_number;
+ Dwarf_Unsigned lc_number2;
+ Dwarf_Unsigned lc_offset;
+ Dwarf_Loc_Chain lc_next;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_macro.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_macro.h
new file mode 100644
index 000000000..31ea2e6e6
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_macro.h
@@ -0,0 +1,44 @@
+/*
+
+ Copyright (C) 2000, 2004 Silicon Graphics, 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
+
+*/
+
+
+/*
+
+
+ dwarf_macro.h
+
+ $Revision: 1.4 $ $Date: 2004/10/28 22:19:14 $
+
+*/
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_opaque.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_opaque.h
new file mode 100644
index 000000000..b235a9c7b
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_opaque.h
@@ -0,0 +1,339 @@
+/*
+
+ Copyright (C) 2000-2005 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2007-2010 David Anderson. All Rights Reserved.
+ Portions Copyright (C) 2008-2010 Arxan Technologies, 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
+
+*/
+/* The versions applicable by section are:
+ DWARF2 DWARF3 DWARF4
+ .debug_abbrev - - -
+ .debug_aranges 2 2 2
+ .debug_frame 1 3 4
+ .debug_info 2 3 4
+ .debug_line 2 3 4
+ .debug_loc - - -
+ .debug_macinfo - - -
+ .debug_pubtypes x 2 2
+ .debug_pubnames 2 2 2
+ .debug_ranges x - -
+ .debug_str - - -
+ .debug_types x x 4
+*/
+
+#include
+
+
+struct Dwarf_Die_s {
+ Dwarf_Byte_Ptr di_debug_info_ptr;
+ Dwarf_Abbrev_List di_abbrev_list;
+ Dwarf_CU_Context di_cu_context;
+ int di_abbrev_code;
+};
+
+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.
+
+ Notice that a pointer to the CU DIE itself is
+ Dwarf_Off off2 = cu_context->cc_debug_info_offset;
+ cu_die_info_ptr = dbg->de_debug_info.dss_data +
+ off2 + _dwarf_length_of_cu_header(dbg, off2);
+
+ **Updated by dwarf_next_cu_header in dwarf_die_deliv.c
+*/
+struct Dwarf_CU_Context_s {
+ Dwarf_Debug cc_dbg;
+ /* The sum of cc_length, cc_length_size, and cc_extension_size
+ is the total length of the CU including its header. */
+ Dwarf_Word cc_length;
+ /* cc_length_size is the size in bytes of an offset.
+ 4 for 32bit dwarf, 8 for 64bit dwarf (whether MIPS/IRIX
+ 64bit dwarf or standard 64bit dwarf using the extension
+ mechanism). */
+ Dwarf_Small cc_length_size;
+ /* cc_extension_size is zero unless this is standard
+ DWARF3 and later 64bit dwarf using the extension mechanism.
+ If it is the DWARF3 and later 64bit dwarf cc_extension
+ size is 4. So for 32bit dwarf and MIPS/IRIX 64bit dwarf
+ cc_extension_size is zero. */
+ Dwarf_Small cc_extension_size;
+ Dwarf_Half cc_version_stamp;
+ Dwarf_Sword cc_abbrev_offset;
+ Dwarf_Small cc_address_size;
+ /* cc_debug_info_offset is the offset in the section
+ of the CU header of this CU. Dwarf_Word
+ should be large enough. */
+ 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; */
+};
+
+/* Consolidates section-specific data in one place.
+ Section is an Elf specific term, intended as a general
+ term (for non-Elf objects some code must synthesize the
+ values somehow).
+ Makes adding more section-data much simpler. */
+struct Dwarf_Section_s {
+ Dwarf_Small * dss_data;
+ Dwarf_Unsigned dss_size;
+ Dwarf_Word dss_index;
+ /* dss_addr is the 'section address' which is only
+ non-zero for a GNU eh section.
+ Purpose: to handle DW_EH_PE_pcrel encoding. Leaving
+ it zero is fine for non-elf. */
+ Dwarf_Addr dss_addr;
+ Dwarf_Small dss_data_was_malloc;
+
+ /* For non-elf, leaving the following fields zero
+ will mean they are ignored. */
+ /* dss_link should be zero unless a section has a link
+ to another (sh_link). Used to access relocation data for
+ a section (and for symtab section, access its strtab). */
+ Dwarf_Word dss_link;
+ /* The following is used when reading .rela sections
+ (such sections appear in some .o files). */
+ Dwarf_Half dss_reloc_index; /* Zero means ignore the reloc fields. */
+ Dwarf_Small * dss_reloc_data;
+ Dwarf_Unsigned dss_reloc_size;
+ Dwarf_Addr dss_reloc_addr;
+ /* dss_reloc_symtab is the sh_link of a .rela to its .symtab, leave
+ it 0 if non-meaningful. */
+ Dwarf_Addr dss_reloc_symtab;
+ /* dss_reloc_link should be zero unless a reloc section has a link
+ to another (sh_link). Used to access the symtab for relocations
+ a section. */
+ Dwarf_Word dss_reloc_link;
+ /* Pointer to the elf symtab, used for elf .rela. Leave it 0
+ if not relevant. */
+ struct Dwarf_Section_s *dss_symtab;
+};
+
+/* Overview: if next_to_use== first, no error slots are used.
+ If next_to_use+1 (mod maxcount) == first the slots are all used
+*/
+struct Dwarf_Harmless_s {
+ unsigned dh_maxcount;
+ unsigned dh_next_to_use;
+ unsigned dh_first;
+ unsigned dh_errs_count;
+ char ** dh_errors;
+};
+
+struct Dwarf_Debug_s {
+ /* All file access methods and support data
+ are hidden in this structure.
+ We get a pointer, callers control the lifetime of the
+ structure and contents. */
+ struct Dwarf_Obj_Access_Interface_s *de_obj_file;
+
+ 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;
+ /* Keep eh (GNU) separate!. */
+ Dwarf_Cie *de_cie_data_eh;
+ Dwarf_Signed de_cie_count_eh;
+ /*
+ 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;
+ /* Keep eh (GNU) separate!. */
+ Dwarf_Fde *de_fde_data_eh;
+ Dwarf_Signed de_fde_count_eh;
+
+ struct Dwarf_Section_s de_debug_info;
+ struct Dwarf_Section_s de_debug_abbrev;
+ struct Dwarf_Section_s de_debug_line;
+ struct Dwarf_Section_s de_debug_loc;
+ struct Dwarf_Section_s de_debug_aranges;
+ struct Dwarf_Section_s de_debug_macinfo;
+ struct Dwarf_Section_s de_debug_pubnames;
+ struct Dwarf_Section_s de_debug_str;
+ struct Dwarf_Section_s de_debug_frame;
+
+ /* gnu: the g++ eh_frame section */
+ struct Dwarf_Section_s de_debug_frame_eh_gnu;
+
+ struct Dwarf_Section_s de_debug_pubtypes; /* DWARF3 .debug_pubtypes */
+
+ struct Dwarf_Section_s de_debug_funcnames;
+ struct Dwarf_Section_s de_debug_typenames; /* SGI IRIX extension essentially
+ identical to DWARF3 .debug_pubtypes. */
+ struct Dwarf_Section_s de_debug_varnames;
+ struct Dwarf_Section_s de_debug_weaknames;
+ struct Dwarf_Section_s de_debug_ranges;
+
+ /* For non-elf, simply leave the following two structs zeroed and
+ they will be ignored. */
+ struct Dwarf_Section_s de_elf_symtab;
+ struct Dwarf_Section_s de_elf_strtab;
+
+
+ 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() */
+
+ /* 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;
+
+ Dwarf_Half de_frame_cfa_col_number;
+ Dwarf_Half de_frame_same_value_number;
+ Dwarf_Half de_frame_undefined_value_number;
+
+ unsigned char de_big_endian_object; /* non-zero if big-endian
+ object opened. */
+
+ struct Dwarf_Harmless_s de_harmless_errors;
+};
+
+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 4 /* 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,
+ struct Dwarf_Section_s *,
+ Dwarf_Error *);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_types.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_types.h
new file mode 100644
index 000000000..ebd31c6c7
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_types.h
@@ -0,0 +1,41 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+typedef struct Dwarf_Type_Context_s *Dwarf_Type_Context;
+
+/* type never completed see dwarf_global.h */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_util.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_util.h
new file mode 100644
index 000000000..4046bb247
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_util.h
@@ -0,0 +1,311 @@
+#ifndef DWARF_UTIL_H
+#define DWARF_UTIL_H
+/*
+
+ Copyright (C) 2000,2003,2004 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright (C) 2007-2010 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 address of the Free Software Foundation is
+ Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
+ Boston, MA 02110-1301, USA.
+ SGI has moved from the Crittenden Lane address.
+*/
+
+
+
+
+/*
+ Decodes unsigned leb128 encoded numbers.
+ Make sure ptr is a pointer to a 1-byte type.
+ In 2003 and earlier this was a hand-inlined
+ version of _dwarf_decode_u_leb128() which did
+ not work correctly if Dwarf_Word was 64 bits.
+*/
+#define DECODE_LEB128_UWORD(ptr, value) \
+ do { \
+ Dwarf_Word uleblen; \
+ value = _dwarf_decode_u_leb128(ptr,&uleblen); \
+ ptr += uleblen; \
+ } while (0)
+
+/*
+ Decodes signed leb128 encoded numbers.
+ Make sure ptr is a pointer to a 1-byte type.
+ In 2003 and earlier this was a hand-inlined
+ version of _dwarf_decode_s_leb128() which did
+ not work correctly if Dwarf_Word was 64 bits.
+
+*/
+#define DECODE_LEB128_SWORD(ptr, value) \
+ do { \
+ Dwarf_Word sleblen; \
+ value = _dwarf_decode_s_leb128(ptr,&sleblen); \
+ ptr += sleblen; \
+ } while(0)
+
+
+/*
+ Skips leb128_encoded numbers that are guaranteed
+ to be no more than 4 bytes long. Same for both
+ signed and unsigned numbers.
+*/
+#define SKIP_LEB128_WORD(ptr) \
+ do{ if ((*(ptr++) & 0x80) != 0) { \
+ if ((*(ptr++) & 0x80) != 0) { \
+ if ((*(ptr++) & 0x80) != 0) { \
+ if ((*(ptr++) & 0x80) != 0) { \
+ } \
+ } \
+ } \
+ } } while (0)
+
+
+#define CHECK_DIE(die, error_ret_value) \
+do {if (die == NULL) { \
+ _dwarf_error(NULL, error, DW_DLE_DIE_NULL); \
+ return(error_ret_value); \
+ } \
+ if (die->di_cu_context == NULL) { \
+ _dwarf_error(NULL, error, DW_DLE_DIE_NO_CU_CONTEXT); \
+ return(error_ret_value); \
+ } \
+ if (die->di_cu_context->cc_dbg == NULL) { \
+ _dwarf_error(NULL, error, DW_DLE_DBG_NULL); \
+ return(error_ret_value); \
+ } \
+} while (0)
+
+
+/*
+ Reads 'source' for 'length' bytes from unaligned addr.
+
+ Avoids any constant-in-conditional warnings and
+ avoids a test in the generated code (for non-const cases,
+ which are in the majority.)
+ Uses a temp to avoid the test.
+ The decl here should avoid any problem of size in the temp.
+ This code is ENDIAN DEPENDENT
+ The memcpy args are the endian issue.
+*/
+typedef Dwarf_Unsigned BIGGEST_UINT;
+
+#ifdef WORDS_BIGENDIAN
+#define READ_UNALIGNED(dbg,dest,desttype, source, length) \
+ do { \
+ BIGGEST_UINT _ltmp = 0; \
+ dbg->de_copy_word( (((char *)(&_ltmp)) + sizeof(_ltmp) - length), \
+ source, length) ; \
+ dest = (desttype)_ltmp; \
+ } while (0)
+
+
+/*
+ This macro sign-extends a variable depending on the length.
+ It fills the bytes between the size of the destination and
+ the length with appropriate padding.
+ This code is ENDIAN DEPENDENT but dependent only
+ on host endianness, not object file endianness.
+ The memcpy args are the issue.
+*/
+#define SIGN_EXTEND(dest, length) \
+ do {if (*(Dwarf_Sbyte *)((char *)&dest + sizeof(dest) - length) < 0) {\
+ memcpy((char *)&dest, "\xff\xff\xff\xff\xff\xff\xff\xff", \
+ sizeof(dest) - length); \
+ } \
+ } while (0)
+#else /* LITTLE ENDIAN */
+
+#define READ_UNALIGNED(dbg,dest,desttype, source, length) \
+ do { \
+ BIGGEST_UINT _ltmp = 0; \
+ dbg->de_copy_word( (char *)(&_ltmp) , \
+ source, length) ; \
+ dest = (desttype)_ltmp; \
+ } while (0)
+
+
+/*
+ This macro sign-extends a variable depending on the length.
+ It fills the bytes between the size of the destination and
+ the length with appropriate padding.
+ This code is ENDIAN DEPENDENT but dependent only
+ on host endianness, not object file endianness.
+ The memcpy args are the issue.
+*/
+#define SIGN_EXTEND(dest, length) \
+ do {if (*(Dwarf_Sbyte *)((char *)&dest + (length-1)) < 0) {\
+ memcpy((char *)&dest+length, \
+ "\xff\xff\xff\xff\xff\xff\xff\xff", \
+ sizeof(dest) - length); \
+ } \
+ } while (0)
+
+#endif /* ! LITTLE_ENDIAN */
+
+
+
+/*
+ READ_AREA LENGTH reads the length (the older way
+ of pure 32 or 64 bit
+ or the new proposed dwarfv2.1 64bit-extension way)
+
+ It reads the bits from where rw_src_data_p points to
+ and updates the rw_src_data_p to point past what was just read.
+
+ It updates w_length_size (to the size of an offset, either 4 or 8)
+ and w_exten_size (set 0 unless this frame has the DWARF3,4 64bit
+ extension, in which case w_exten_size is set to 4).
+
+ r_dbg is just the current dbg pointer.
+ w_target is the output length field.
+ r_targtype is the output type. Always Dwarf_Unsigned so far.
+
+*/
+/* This one handles the v2.1 64bit extension
+ and 32bit (and MIPS fixed 64 bit via the
+ dwarf_init-set r_dbg->de_length_size)..
+ It does not recognize any but the one distingushed value
+ (the only one with defined meaning).
+ It assumes that no CU will have a length
+ 0xffffffxx (32bit length)
+ or
+ 0xffffffxx xxxxxxxx (64bit length)
+ which makes possible auto-detection of the extension.
+
+ This depends on knowing that only a non-zero length
+ is legitimate (AFAICT), and for IRIX non-standard -64
+ dwarf that the first 32 bits of the 64bit offset will be
+ zero (because the compiler could not handle a truly large
+ value as of Jan 2003 and because no app has that much debug
+ info anyway, at least not in the IRIX case).
+
+ At present not testing for '64bit elf' here as that
+ does not seem necessary (none of the 64bit length seems
+ appropriate unless it's ident[EI_CLASS] == ELFCLASS64).
+*/
+# define READ_AREA_LENGTH(r_dbg,w_target,r_targtype, \
+ rw_src_data_p,w_length_size,w_exten_size) \
+do { READ_UNALIGNED(r_dbg,w_target,r_targtype, \
+ rw_src_data_p, ORIGINAL_DWARF_OFFSET_SIZE); \
+ if(w_target == DISTINGUISHED_VALUE) { \
+ /* dwarf3 64bit extension */ \
+ w_length_size = DISTINGUISHED_VALUE_OFFSET_SIZE; \
+ rw_src_data_p += ORIGINAL_DWARF_OFFSET_SIZE; \
+ w_exten_size = ORIGINAL_DWARF_OFFSET_SIZE; \
+ READ_UNALIGNED(r_dbg,w_target,r_targtype, \
+ rw_src_data_p, DISTINGUISHED_VALUE_OFFSET_SIZE);\
+ rw_src_data_p += DISTINGUISHED_VALUE_OFFSET_SIZE; \
+ } else { \
+ if(w_target == 0 && r_dbg->de_big_endian_object) { \
+ /* IRIX 64 bit, big endian. This test */ \
+ /* is not a truly precise test, a precise test */ \
+ /* would check if the target was IRIX. */ \
+ READ_UNALIGNED(r_dbg,w_target,r_targtype, \
+ rw_src_data_p, DISTINGUISHED_VALUE_OFFSET_SIZE); \
+ w_length_size = DISTINGUISHED_VALUE_OFFSET_SIZE; \
+ rw_src_data_p += DISTINGUISHED_VALUE_OFFSET_SIZE; \
+ w_exten_size = 0; \
+ } else { \
+ /* standard 32 bit dwarf2/dwarf3 */ \
+ w_exten_size = 0; \
+ w_length_size = ORIGINAL_DWARF_OFFSET_SIZE; \
+ rw_src_data_p += w_length_size; \
+ } \
+ } } while(0)
+
+Dwarf_Unsigned
+_dwarf_decode_u_leb128(Dwarf_Small * leb128,
+ Dwarf_Word * leb128_length);
+
+Dwarf_Signed
+_dwarf_decode_s_leb128(Dwarf_Small * leb128,
+ Dwarf_Word * leb128_length);
+
+Dwarf_Unsigned
+_dwarf_get_size_of_val(Dwarf_Debug dbg,
+ Dwarf_Unsigned form,
+ Dwarf_Half address_size,
+ Dwarf_Small * val_ptr,
+ int v_length_size);
+
+struct Dwarf_Hash_Table_Entry_s;
+/* This single struct is the base for the hash table.
+ The intent is that once the total_abbrev_count across
+ all the entries is greater than 10*current_table_entry_count
+ one should build a new Dwarf_Hash_Table_Base_s, rehash
+ all the existing entries, and delete the old table and entries.
+ (10 is a heuristic, nothing magic about it, but once the
+ count gets to 30 or 40 times current_table_entry_count
+ things really slow down a lot. One (500MB) application had
+ 127000 abbreviations in one compilation unit)
+ The incoming 'code' is an abbrev number and those simply
+ increase linearly so the hashing is perfect always.
+*/
+struct Dwarf_Hash_Table_s {
+ unsigned long tb_table_entry_count;
+ unsigned long tb_total_abbrev_count;
+ /* Each table entry is a list of abbreviations. */
+ struct Dwarf_Hash_Table_Entry_s *tb_entries;
+};
+
+/*
+ This struct is used to build a hash table for the
+ abbreviation codes for a compile-unit.
+*/
+struct Dwarf_Hash_Table_Entry_s {
+ Dwarf_Abbrev_List at_head;
+};
+
+
+
+Dwarf_Abbrev_List
+_dwarf_get_abbrev_for_code(Dwarf_CU_Context cu_context,
+ Dwarf_Unsigned code);
+
+
+/* return 1 if string ends before 'endptr' else
+** return 0 meaning string is not properly terminated.
+** Presumption is the 'endptr' pts to end of some dwarf section data.
+*/
+int _dwarf_string_valid(void *startptr, void *endptr);
+
+Dwarf_Unsigned _dwarf_length_of_cu_header(Dwarf_Debug,
+ Dwarf_Unsigned offset);
+Dwarf_Unsigned _dwarf_length_of_cu_header_simple(Dwarf_Debug);
+
+int _dwarf_load_debug_info(Dwarf_Debug dbg, Dwarf_Error *error);
+void _dwarf_free_abbrev_hash_table_contents(Dwarf_Debug dbg,
+ struct Dwarf_Hash_Table_s* hash_table);
+int _dwarf_get_address_size(Dwarf_Debug dbg, Dwarf_Die die);
+
+#endif /* DWARF_UTIL_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_vars.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_vars.h
new file mode 100644
index 000000000..bd5f967e4
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_vars.h
@@ -0,0 +1,41 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+typedef struct Dwarf_Var_Context_s *Dwarf_Var_Context;
+
+/* struct never completed: see dwarf_global.h */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_weaks.h b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_weaks.h
new file mode 100644
index 000000000..d38f5f118
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/dwarf_weaks.h
@@ -0,0 +1,41 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+typedef struct Dwarf_Weak_Context_s *Dwarf_Weak_Context;
+
+/* struct never completed: see dwarf_global.h */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarf.h b/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarf.h
new file mode 100644
index 000000000..7e59d32f4
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarf.h
@@ -0,0 +1,2727 @@
+/*
+
+ Copyright (C) 2000-2010 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2007-2010 Sun Microsystems, Inc. All rights reserved.
+ Portions Copyright 2008-2010 David Anderson. All rights reserved.
+ Portions Copyright 2008-2010 Arxan Technologies, 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
+
+*/
+
+
+#ifndef _LIBDWARF_H
+#define _LIBDWARF_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+/*
+ libdwarf.h
+ $Revision: #9 $ $Date: 2008/01/17 $
+
+ For libdwarf producers and consumers
+
+ The interface is defined as having 8-byte signed and unsigned
+ values so it can handle 64-or-32bit target on 64-or-32bit host.
+ Addr is the native size: it represents pointers on
+ the host machine (not the target!).
+
+ This contains declarations for types and all producer
+ and consumer functions.
+
+ Function declarations are written on a single line each here
+ so one can use grep to each declaration in its entirety.
+ The declarations are a little harder to read this way, but...
+
+*/
+
+struct Elf;
+typedef struct Elf* dwarf_elf_handle;
+
+/* To enable printing with printf regardless of the
+ actual underlying data type, we define the DW_PR_xxx macros. */
+#if (_MIPS_SZLONG == 64)
+/* Special case for MIPS, so -64 (LP64) build gets simple -long-.
+ Non-MIPS LP64 or ILP64 environments should probably ensure
+ _MIPS_SZLONG set to 64 everywhere this header is #included.
+*/
+typedef int Dwarf_Bool; /* boolean type */
+typedef unsigned long Dwarf_Off; /* 4 or 8 byte file offset */
+typedef unsigned long Dwarf_Unsigned; /* 4 or 8 byte unsigned value */
+typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
+typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
+typedef signed long Dwarf_Signed; /* 4 or 8 byte signed value */
+typedef unsigned long Dwarf_Addr; /* target memory address */
+#define DW_PR_DUx "lx"
+#define DW_PR_DSx "lx"
+#define DW_PR_DUu "lu"
+#define DW_PR_DSd "ld"
+
+#else /* 32-bit */
+/* This is for ILP32, allowing i/o of 64bit dwarf info.
+ Also should be fine for LP64 and ILP64 cases.
+*/
+typedef int Dwarf_Bool; /* boolean type */
+typedef unsigned long long Dwarf_Off; /* 8 byte file offset */
+typedef unsigned long long Dwarf_Unsigned; /* 8 byte unsigned value*/
+typedef unsigned short Dwarf_Half; /* 2 byte unsigned value */
+typedef unsigned char Dwarf_Small; /* 1 byte unsigned value */
+typedef signed long long Dwarf_Signed; /* 8 byte signed value */
+typedef unsigned long long Dwarf_Addr; /* target memory address */
+#define DW_PR_DUx "llx"
+#define DW_PR_DSx "llx"
+#define DW_PR_DUu "llu"
+#define DW_PR_DSd "lld"
+#endif
+#ifdef HAVE_NONSTANDARD_PRINTF_64_FORMAT
+/* Windows does not use std C formatting, so allow it. */
+#undef DW_PR_DUx
+#undef DW_PR_DSx
+#undef DW_PR_DUu
+#undef DW_PR_DSd
+#define DW_PR_DUx "I64x"
+#define DW_PR_DSx "I64x"
+#define DW_PR_DUu "I64u"
+#define DW_PR_DSd "I64d"
+#endif /* HAVE_NONSTANDARD_FORMAT */
+
+typedef void* Dwarf_Ptr; /* host machine pointer */
+
+/* Used for DW_FORM_ref_sig8. It is not a string, it
+ is 8 bytes of a signature one would use to find
+ a type unit. See dwarf_formsig8()
+*/
+typedef struct {
+ char signature[8];
+} Dwarf_Sig8;
+
+/* Contains info on an uninterpreted block of data
+*/
+typedef struct {
+ Dwarf_Unsigned bl_len; /* length of block */
+ Dwarf_Ptr bl_data; /* uninterpreted data */
+ Dwarf_Small bl_from_loclist; /*non-0 if loclist, else debug_info*/
+ Dwarf_Unsigned bl_section_offset; /* Section (not CU) offset
+ which 'data' comes from. */
+} Dwarf_Block;
+
+
+/* location record
+*/
+typedef struct {
+ Dwarf_Small lr_atom; /* location operation */
+ Dwarf_Unsigned lr_number; /* operand */
+ Dwarf_Unsigned lr_number2; /* for OP_BREGx */
+ Dwarf_Unsigned lr_offset; /* offset in locexpr for OP_BRA etc */
+} Dwarf_Loc;
+
+
+/* location description
+*/
+typedef struct {
+ Dwarf_Addr ld_lopc; /* beginning of active range */
+ Dwarf_Addr ld_hipc; /* end of active range */
+ Dwarf_Half ld_cents; /* count of location records */
+ Dwarf_Loc* ld_s; /* pointer to list of same */
+ Dwarf_Small ld_from_loclist;
+ /* non-0 if loclist, else debug_info*/
+
+ Dwarf_Unsigned ld_section_offset; /* Section (not CU) offset
+ where loc-expr begins*/
+} Dwarf_Locdesc;
+
+/* First appears in DWARF3.
+ The dwr_addr1/addr2 data is either an offset (DW_RANGES_ENTRY)
+ or an address (dwr_addr2 in DW_RANGES_ADDRESS_SELECTION) or
+ both are zero (DW_RANGES_END).
+*/
+enum Dwarf_Ranges_Entry_Type { DW_RANGES_ENTRY,
+ DW_RANGES_ADDRESS_SELECTION,
+ DW_RANGES_END };
+typedef struct {
+ Dwarf_Addr dwr_addr1;
+ Dwarf_Addr dwr_addr2;
+ enum Dwarf_Ranges_Entry_Type dwr_type;
+} Dwarf_Ranges;
+
+/* Frame description instructions expanded.
+*/
+typedef struct {
+ Dwarf_Small fp_base_op;
+ Dwarf_Small fp_extended_op;
+ Dwarf_Half fp_register;
+
+ /* Value may be signed, depends on op.
+ Any applicable data_alignment_factor has
+ not been applied, this is the raw offset. */
+ Dwarf_Unsigned fp_offset;
+ Dwarf_Off fp_instr_offset;
+} Dwarf_Frame_Op; /* DWARF2 */
+
+typedef struct {
+ Dwarf_Small fp_base_op;
+ Dwarf_Small fp_extended_op;
+ Dwarf_Half fp_register;
+
+ /* Value may be signed, depends on op.
+ Any applicable data_alignment_factor has
+ not been applied, this is the raw offset. */
+ Dwarf_Unsigned fp_offset_or_block_len;
+ Dwarf_Small *fp_expr_block;
+
+ Dwarf_Off fp_instr_offset;
+} Dwarf_Frame_Op3; /* DWARF3 and DWARF2 compatible */
+
+/* ***IMPORTANT NOTE, TARGET DEPENDENCY ****
+ DW_REG_TABLE_SIZE must be at least as large as
+ the number of registers
+ (DW_FRAME_LAST_REG_NUM) as defined in dwarf.h
+ Preferably identical to DW_FRAME_LAST_REG_NUM.
+ Ensure [0-DW_REG_TABLE_SIZE] does not overlap
+ DW_FRAME_UNDEFINED_VAL or DW_FRAME_SAME_VAL.
+ Also ensure DW_FRAME_REG_INITIAL_VALUE is set to what
+ is appropriate to your cpu.
+ For various CPUs DW_FRAME_UNDEFINED_VAL is correct
+ as the value for DW_FRAME_REG_INITIAL_VALUE.
+
+ For consumer apps, this can be set dynamically: see
+ dwarf_set_frame_rule_table_size();
+ */
+#ifndef DW_REG_TABLE_SIZE
+#define DW_REG_TABLE_SIZE 66
+#endif
+
+/* For MIPS, DW_FRAME_SAME_VAL is the correct default value
+ for a frame register value. For other CPUS another value
+ may be better, such as DW_FRAME_UNDEFINED_VAL.
+ See dwarf_set_frame_rule_table_size
+*/
+#ifndef DW_FRAME_REG_INITIAL_VALUE
+#define DW_FRAME_REG_INITIAL_VALUE DW_FRAME_SAME_VAL
+#endif
+
+/* Taken as meaning 'undefined value', this is not
+ a column or register number.
+ Only present at libdwarf runtime in the consumer
+ interfaces. Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
+ size is changeable at runtime with the *reg3() interfaces,
+ and this value must be greater than the reg table size).
+*/
+#define DW_FRAME_UNDEFINED_VAL 1034
+
+/* Taken as meaning 'same value' as caller had, not a column
+ or register number.
+ Only present at libdwarf runtime in the consumer
+ interfaces. Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
+ size is changeable at runtime with the *reg3() interfaces,
+ and this value must be greater than the reg table size).
+*/
+#define DW_FRAME_SAME_VAL 1035
+
+/* For DWARF3 consumer interfaces, make the CFA a column with no
+ real table number. This is what should have been done
+ for the DWARF2 interfaces. This actually works for
+ both DWARF2 and DWARF3, but see the libdwarf documentation
+ on Dwarf_Regtable3 and dwarf_get_fde_info_for_reg3()
+ and dwarf_get_fde_info_for_all_regs3()
+ Do NOT use this with the older dwarf_get_fde_info_for_reg()
+ or dwarf_get_fde_info_for_all_regs() consumer interfaces.
+ Must be higher than any register count for *any* ABI
+ (ensures maximum applicability with minimum effort).
+ Ensure this is > DW_REG_TABLE_SIZE (the reg table
+ size is changeable at runtime with the *reg3() interfaces,
+ and this value must be greater than the reg table size).
+ Only present at libdwarf runtime in the consumer
+ interfaces. Never on disk.
+*/
+#define DW_FRAME_CFA_COL3 1436
+
+/* The following are all needed to evaluate DWARF3 register rules.
+*/
+#define DW_EXPR_OFFSET 0 /* DWARF2 only sees this. */
+#define DW_EXPR_VAL_OFFSET 1
+#define DW_EXPR_EXPRESSION 2
+#define DW_EXPR_VAL_EXPRESSION 3
+
+typedef struct Dwarf_Regtable_Entry_s {
+ /* For each index i (naming a hardware register with dwarf number
+ i) the following is true and defines the value of that register:
+
+ If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
+ it is not DWARF register number but
+ a place holder indicating the register has no defined value.
+ If dw_regnum is Register DW_FRAME_SAME_VAL
+ it is not DWARF register number but
+ a place holder indicating the register has the same
+ value in the previous frame.
+ DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL are
+ only present at libdwarf runtime. Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+
+ Otherwise: the register number is a DWARF register number
+ (see ABI documents for how this translates to hardware/
+ software register numbers in the machine hardware)
+ and the following applies:
+
+ if dw_value_type == DW_EXPR_OFFSET (the only case for dwarf2):
+ If dw_offset_relevant is non-zero, then
+ the value is stored at at the address CFA+N where
+ N is a signed offset.
+ Rule: Offset(N)
+ If dw_offset_relevant is zero, then the value of the register
+ is the value of (DWARF) register number dw_regnum.
+ Rule: register(F)
+ Other values of dw_value_type are an error.
+ */
+ Dwarf_Small dw_offset_relevant;
+
+ /* For DWARF2, always 0 */
+ Dwarf_Small dw_value_type;
+
+ Dwarf_Half dw_regnum;
+
+ /* The data type here should the larger of Dwarf_Addr
+ and Dwarf_Unsigned and Dwarf_Signed. */
+ Dwarf_Addr dw_offset;
+} Dwarf_Regtable_Entry;
+
+typedef struct Dwarf_Regtable_s {
+ struct Dwarf_Regtable_Entry_s rules[DW_REG_TABLE_SIZE];
+} Dwarf_Regtable;
+
+/* opaque type. Functional interface shown later. */
+struct Dwarf_Reg_value3_s;
+typedef struct Dwarf_Reg_value3_s Dwarf_Reg_Value3;
+
+typedef struct Dwarf_Regtable_Entry3_s {
+ /* For each index i (naming a hardware register with dwarf number
+ i) the following is true and defines the value of that register:
+
+ If dw_regnum is Register DW_FRAME_UNDEFINED_VAL
+ it is not DWARF register number but
+ a place holder indicating the register has no defined value.
+ If dw_regnum is Register DW_FRAME_SAME_VAL
+ it is not DWARF register number but
+ a place holder indicating the register has the same
+ value in the previous frame.
+ DW_FRAME_UNDEFINED_VAL, DW_FRAME_SAME_VAL and
+ DW_FRAME_CFA_COL3 are only present at libdwarf runtime.
+ Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+ Because DW_FRAME_SAME_VAL and DW_FRAME_UNDEFINED_VAL
+ and DW_FRAME_CFA_COL3 are defineable at runtime
+ consider the names symbolic in this comment, not absolute.
+
+ Otherwise: the register number is a DWARF register number
+ (see ABI documents for how this translates to hardware/
+ software register numbers in the machine hardware)
+ and the following applies:
+
+ In a cfa-defining entry (rt3_cfa_rule) the regnum is the
+ CFA 'register number'. Which is some 'normal' register,
+ not DW_FRAME_CFA_COL3, nor DW_FRAME_SAME_VAL, nor
+ DW_FRAME_UNDEFINED_VAL.
+
+ If dw_value_type == DW_EXPR_OFFSET (the only possible case for
+ dwarf2):
+ If dw_offset_relevant is non-zero, then
+ the value is stored at at the address
+ CFA+N where N is a signed offset.
+ dw_regnum is the cfa register rule which means
+ one ignores dw_regnum and uses the CFA appropriately.
+ So dw_offset_or_block_len is a signed value, really,
+ and must be printed/evaluated as such.
+ Rule: Offset(N)
+ If dw_offset_relevant is zero, then the value of the register
+ is the value of (DWARF) register number dw_regnum.
+ Rule: register(R)
+ If dw_value_type == DW_EXPR_VAL_OFFSET
+ the value of this register is CFA +N where N is a signed offset.
+ dw_regnum is the cfa register rule which means
+ one ignores dw_regnum and uses the CFA appropriately.
+ Rule: val_offset(N)
+ If dw_value_type == DW_EXPR_EXPRESSION
+ The value of the register is the value at the address
+ computed by evaluating the DWARF expression E.
+ Rule: expression(E)
+ The expression E byte stream is pointed to by dw_block_ptr.
+ The expression length in bytes is given by
+ dw_offset_or_block_len.
+ If dw_value_type == DW_EXPR_VAL_EXPRESSION
+ The value of the register is the value
+ computed by evaluating the DWARF expression E.
+ Rule: val_expression(E)
+ The expression E byte stream is pointed to by dw_block_ptr.
+ The expression length in bytes is given by
+ dw_offset_or_block_len.
+ Other values of dw_value_type are an error.
+ */
+ Dwarf_Small dw_offset_relevant;
+ Dwarf_Small dw_value_type;
+ Dwarf_Half dw_regnum;
+ Dwarf_Unsigned dw_offset_or_block_len;
+ Dwarf_Ptr dw_block_ptr;
+
+}Dwarf_Regtable_Entry3;
+
+/* For the DWARF3 version, moved the DW_FRAME_CFA_COL
+ out of the array and into its own struct.
+ Having it part of the array is not very easy to work
+ with from a portability point of view: changing
+ the number for every architecture is a pain (if one fails
+ to set it correctly a register rule gets clobbered when
+ setting CFA). With MIPS it just happened to be easy to use
+ DW_FRAME_CFA_COL (it was wrong conceptually but it was easy...).
+
+ rt3_rules and rt3_reg_table_size must be filled in before
+ calling libdwarf. Filled in with a pointer to an array
+ (pointer and array set up by the calling application)
+ of rt3_reg_table_size Dwarf_Regtable_Entry3_s structs.
+ libdwarf does not allocate or deallocate space for the
+ rules, you must do so. libdwarf will initialize the
+ contents rules array, you do not need to do so (though
+ if you choose to initialize the array somehow that is ok:
+ libdwarf will overwrite your initializations with its own).
+
+*/
+typedef struct Dwarf_Regtable3_s {
+ struct Dwarf_Regtable_Entry3_s rt3_cfa_rule;
+
+ Dwarf_Half rt3_reg_table_size;
+ struct Dwarf_Regtable_Entry3_s * rt3_rules;
+} Dwarf_Regtable3;
+
+
+/* Use for DW_EPXR_STANDARD., DW_EXPR_VAL_OFFSET.
+ Returns DW_DLV_OK if the value is available.
+ If DW_DLV_OK returns the regnum and offset thru the pointers
+ (which the consumer must use appropriately).
+*/
+int dwarf_frame_get_reg_register(struct Dwarf_Regtable_Entry3_s *reg_in,
+ Dwarf_Small *offset_relevant,
+ Dwarf_Half *regnum_out,
+ Dwarf_Signed *offset_out);
+
+/* Use for DW_EXPR_EXPRESSION, DW_EXPR_VAL_EXPRESSION.
+ Returns DW_DLV_OK if the value is available.
+ The caller must pass in the address of a valid
+ Dwarf_Block (the caller need not initialize it).
+*/
+int dwarf_frame_get_reg_expression(struct Dwarf_Regtable_Entry3_s *reg_in,
+ Dwarf_Block *block_out);
+
+
+/* For DW_DLC_SYMBOLIC_RELOCATIONS output to caller
+ v2, adding drd_length: some relocations are 4 and
+ some 8 bytes (pointers are 8, section offsets 4) in
+ some dwarf environments. (MIPS relocations are all one
+ size in any given ABI.) Changing drd_type to an unsigned char
+ to keep struct size down.
+*/
+enum Dwarf_Rel_Type {
+ dwarf_drt_none, /* Should not get to caller */
+ dwarf_drt_data_reloc, /* Simple normal relocation. */
+ dwarf_drt_segment_rel, /* Special reloc, exceptions. */
+ /* dwarf_drt_first_of_length_pair and drt_second
+ are for for the .word end - begin case. */
+ dwarf_drt_first_of_length_pair,
+ dwarf_drt_second_of_length_pair
+};
+
+typedef struct Dwarf_P_Marker_s * Dwarf_P_Marker;
+struct Dwarf_P_Marker_s {
+ Dwarf_Unsigned ma_marker;
+ Dwarf_Unsigned ma_offset;
+};
+
+typedef struct Dwarf_Relocation_Data_s * Dwarf_Relocation_Data;
+struct Dwarf_Relocation_Data_s {
+ unsigned char drd_type; /* Cast to/from Dwarf_Rel_Type
+ to keep size small in struct. */
+ unsigned char drd_length; /* Length in bytes of data being
+ relocated. 4 for 32bit data,
+ 8 for 64bit data. */
+ Dwarf_Unsigned drd_offset; /* Where the data to reloc is. */
+ Dwarf_Unsigned drd_symbol_index;
+};
+
+typedef struct Dwarf_P_String_Attr_s * Dwarf_P_String_Attr;
+struct Dwarf_P_String_Attr_s {
+ Dwarf_Unsigned sa_offset; /* Offset of string attribute data */
+ Dwarf_Unsigned sa_nbytes;
+};
+
+
+/* Opaque types for Consumer Library. */
+typedef struct Dwarf_Debug_s* Dwarf_Debug;
+typedef struct Dwarf_Die_s* Dwarf_Die;
+typedef struct Dwarf_Line_s* Dwarf_Line;
+typedef struct Dwarf_Global_s* Dwarf_Global;
+typedef struct Dwarf_Func_s* Dwarf_Func;
+typedef struct Dwarf_Type_s* Dwarf_Type;
+typedef struct Dwarf_Var_s* Dwarf_Var;
+typedef struct Dwarf_Weak_s* Dwarf_Weak;
+typedef struct Dwarf_Error_s* Dwarf_Error;
+typedef struct Dwarf_Attribute_s* Dwarf_Attribute;
+typedef struct Dwarf_Abbrev_s* Dwarf_Abbrev;
+typedef struct Dwarf_Fde_s* Dwarf_Fde;
+typedef struct Dwarf_Cie_s* Dwarf_Cie;
+typedef struct Dwarf_Arange_s* Dwarf_Arange;
+
+/* Opaque types for Producer Library. */
+typedef struct Dwarf_P_Debug_s* Dwarf_P_Debug;
+typedef struct Dwarf_P_Die_s* Dwarf_P_Die;
+typedef struct Dwarf_P_Attribute_s* Dwarf_P_Attribute;
+typedef struct Dwarf_P_Fde_s* Dwarf_P_Fde;
+typedef struct Dwarf_P_Expr_s* Dwarf_P_Expr;
+typedef Dwarf_Unsigned Dwarf_Tag;
+
+
+/* error handler function
+*/
+typedef void (*Dwarf_Handler)(Dwarf_Error /*error*/, Dwarf_Ptr /*errarg*/);
+
+
+/* Begin libdwarf Object File Interface declarations.
+
+As of February 2008 there are multiple dwarf_reader object access
+initialization methods available:
+The traditional dwarf_elf_init() and dwarf_init() and dwarf_finish()
+ which assume libelf and POSIX file access.
+An object-file and library agnostic dwarf_object_init() and dwarf_object_finish()
+ which allow the coder to provide object access routines
+ abstracting away the elf interface. So there is no dependence in the
+ reader code on the object format and no dependence on libelf.
+ See the code in dwarf_elf_access.c and dwarf_original_elf_init.c
+ to see an example of initializing the structures mentioned below.
+
+Projects using dwarf_elf_init() or dwarf_init() can ignore
+the Dwarf_Obj_Access* structures entirely as all these details
+are completed for you.
+
+*/
+
+typedef struct Dwarf_Obj_Access_Interface_s Dwarf_Obj_Access_Interface;
+typedef struct Dwarf_Obj_Access_Methods_s Dwarf_Obj_Access_Methods;
+typedef struct Dwarf_Obj_Access_Section_s Dwarf_Obj_Access_Section;
+
+
+/* Used in the get_section interface function
+ in Dwarf_Obj_Access_Section_s. Since libdwarf
+ depends on standard DWARF section names an object
+ format that has no such names (but has some
+ method of setting up 'sections equivalents')
+ must arrange to return standard DWARF section
+ names in the 'name' field. libdwarf does
+ not free the strings in 'name'. */
+struct Dwarf_Obj_Access_Section_s {
+ Dwarf_Addr addr;
+ Dwarf_Unsigned size;
+ const char* name;
+ /* Set link to zero if it is meaningless. If non-zero
+ it should be a link to a rela section or from symtab
+ to strtab. In Elf it is sh_link. */
+ Dwarf_Unsigned link;
+};
+
+/* Returned by the get_endianness function in
+ Dwarf_Obj_Access_Methods_s. */
+typedef enum {
+ DW_OBJECT_MSB,
+ DW_OBJECT_LSB
+} Dwarf_Endianness;
+
+/* The functions we need to access object data from libdwarf are declared here.
+
+ In these function pointer declarations
+ 'void *obj' is intended to be a pointer (the object field in
+ Dwarf_Obj_Access_Interface_s)
+ that hides the library-specific and object-specific data that makes
+ it possible to handle multiple object formats and multiple libraries.
+ It's not required that one handles multiple such in a single libdwarf
+ archive/shared-library (but not ruled out either).
+ See dwarf_elf_object_access_internals_t and dwarf_elf_access.c
+ for an example.
+
+*/
+struct Dwarf_Obj_Access_Methods_s {
+ /**
+ * get_section_info
+ *
+ * Get address, size, and name info about a section.
+ *
+ * Parameters
+ * section_index - Zero-based index.
+ * return_section - Pointer to a structure in which section info
+ * will be placed. Caller must provide a valid pointer to a
+ * structure area. The structure's contents will be overwritten
+ * by the call to get_section_info.
+ * error - A pointer to an integer in which an error code may be stored.
+ *
+ * Return
+ * DW_DLV_OK - Everything ok.
+ * DW_DLV_ERROR - Error occurred. Use 'error' to determine the
+ * libdwarf defined error.
+ * DW_DLV_NO_ENTRY - No such section.
+ */
+ int (*get_section_info)(void* obj, Dwarf_Half section_index,
+ Dwarf_Obj_Access_Section* return_section, int* error);
+ /**
+ * get_byte_order
+ *
+ * Get whether the object file represented by this interface is big-endian
+ * (DW_OBJECT_MSB) or little endian (DW_OBJECT_LSB).
+ *
+ * Parameters
+ * obj - Equivalent to 'this' in OO languages.
+ *
+ * Return
+ * Endianness of object. Cannot fail.
+ */
+ Dwarf_Endianness (*get_byte_order)(void* obj);
+ /**
+ * get_length_size
+ *
+ * Get the size of a length field in the underlying object file.
+ * libdwarf currently supports * 4 and 8 byte sizes, but may
+ * support larger in the future.
+ * Perhaps the return type should be an enumeration?
+ *
+ * Parameters
+ * obj - Equivalent to 'this' in OO languages.
+ *
+ * Return
+ * Size of length. Cannot fail.
+ */
+ Dwarf_Small (*get_length_size)(void* obj);
+ /**
+ * get_pointer_size
+ *
+ * Get the size of a pointer field in the underlying object file.
+ * libdwarf currently supports 4 and 8 byte sizes.
+ * Perhaps the return type should be an enumeration?
+
+ * Return
+ * Size of pointer. Cannot fail.
+ */
+ Dwarf_Small (*get_pointer_size)(void* obj);
+ /**
+ * get_section_count
+ *
+ * Get the number of sections in the object file.
+ *
+ * Parameters
+ *
+ * Return
+ * Number of sections
+ */
+ Dwarf_Unsigned (*get_section_count)(void* obj);
+ /**
+ * load_section
+ *
+ * Get a pointer to an array of bytes that represent the section.
+ *
+ * Parameters
+ * section_index - Zero-based index.
+ * return_data - The address of a pointer to which the section data block
+ * will be assigned.
+ * error - Pointer to an integer for returning libdwarf-defined
+ * error numbers.
+ *
+ * Return
+ * DW_DLV_OK - No error.
+ * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
+ * error number.
+ * DW_DLV_NO_ENTRY - No such section.
+ */
+ int (*load_section)(void* obj, Dwarf_Half section_index,
+ Dwarf_Small** return_data, int* error);
+
+ /**
+ * relocate_a_section
+ * If relocations are not supported leave this pointer NULL.
+ *
+ * Get a pointer to an array of bytes that represent the section.
+ *
+ * Parameters
+ * section_index - Zero-based index of the section to be relocated.
+ * error - Pointer to an integer for returning libdwarf-defined
+ * error numbers.
+ *
+ * Return
+ * DW_DLV_OK - No error.
+ * DW_DLV_ERROR - Error. Use 'error' to indicate a libdwarf-defined
+ * error number.
+ * DW_DLV_NO_ENTRY - No such section.
+ */
+ int (*relocate_a_section)(void* obj, Dwarf_Half section_index,
+ Dwarf_Debug dbg,
+ int* error);
+
+};
+
+
+
+/* These structures are allocated and deallocated by your code
+ when you are using the libdwarf Object File Interface
+ [dwarf_object_init() and dwarf_object_finish()] directly.
+ dwarf_object_finish() does not free
+ struct Dwarf_Obj_Access_Interface_s or its content.
+ (libdwarf does record a pointer to this struct: you must
+ ensure that pointer remains valid for as long as
+ a libdwarf instance is open (meaning
+ after dwarf_init() and before dwarf_finish()).
+
+ If you are reading Elf objects and libelf use dwarf_init()
+ or dwarf_elf_init() which take care of these details.
+*/
+struct Dwarf_Obj_Access_Interface_s {
+ /* object is a void* as it hides the data the object access routines
+ need (which varies by library in use and object format).
+ */
+ void* object;
+ const Dwarf_Obj_Access_Methods * methods;
+};
+
+/* End libdwarf Object File Interface */
+
+/*
+ Dwarf_dealloc() alloc_type arguments.
+ Argument points to:
+*/
+#define DW_DLA_STRING 0x01 /* char* */
+#define DW_DLA_LOC 0x02 /* Dwarf_Loc */
+#define DW_DLA_LOCDESC 0x03 /* Dwarf_Locdesc */
+#define DW_DLA_ELLIST 0x04 /* Dwarf_Ellist (not used)*/
+#define DW_DLA_BOUNDS 0x05 /* Dwarf_Bounds (not used) */
+#define DW_DLA_BLOCK 0x06 /* Dwarf_Block */
+#define DW_DLA_DEBUG 0x07 /* Dwarf_Debug */
+#define DW_DLA_DIE 0x08 /* Dwarf_Die */
+#define DW_DLA_LINE 0x09 /* Dwarf_Line */
+#define DW_DLA_ATTR 0x0a /* Dwarf_Attribute */
+#define DW_DLA_TYPE 0x0b /* Dwarf_Type (not used) */
+#define DW_DLA_SUBSCR 0x0c /* Dwarf_Subscr (not used) */
+#define DW_DLA_GLOBAL 0x0d /* Dwarf_Global */
+#define DW_DLA_ERROR 0x0e /* Dwarf_Error */
+#define DW_DLA_LIST 0x0f /* a list */
+#define DW_DLA_LINEBUF 0x10 /* Dwarf_Line* (not used) */
+#define DW_DLA_ARANGE 0x11 /* Dwarf_Arange */
+#define DW_DLA_ABBREV 0x12 /* Dwarf_Abbrev */
+#define DW_DLA_FRAME_OP 0x13 /* Dwarf_Frame_Op */
+#define DW_DLA_CIE 0x14 /* Dwarf_Cie */
+#define DW_DLA_FDE 0x15 /* Dwarf_Fde */
+#define DW_DLA_LOC_BLOCK 0x16 /* Dwarf_Loc Block (not used) */
+#define DW_DLA_FRAME_BLOCK 0x17 /* Dwarf_Frame Block (not used) */
+#define DW_DLA_FUNC 0x18 /* Dwarf_Func */
+#define DW_DLA_TYPENAME 0x19 /* Dwarf_Type */
+#define DW_DLA_VAR 0x1a /* Dwarf_Var */
+#define DW_DLA_WEAK 0x1b /* Dwarf_Weak */
+#define DW_DLA_ADDR 0x1c /* Dwarf_Addr sized entries */
+#define DW_DLA_RANGES 0x1d /* Dwarf_Ranges */
+
+/* The augmenter string for CIE */
+#define DW_CIE_AUGMENTER_STRING_V0 "z"
+
+/* dwarf_init() access arguments
+*/
+#define DW_DLC_READ 0 /* read only access */
+#define DW_DLC_WRITE 1 /* write only access */
+#define DW_DLC_RDWR 2 /* read/write access NOT SUPPORTED*/
+
+/* pro_init() access flag modifiers
+ If HAVE_DWARF2_99_EXTENSION is defined at libdwarf build time
+ and DW_DLC_OFFSET_SIZE_64 is passed in pro_init() flags then the DWARF3
+ 64 bit offset extension is used to generate 64 bit offsets.
+*/
+#define DW_DLC_SIZE_64 0x40000000 /* 32-bit address-size target */
+#define DW_DLC_SIZE_32 0x20000000 /* 64-bit address-size target */
+#define DW_DLC_OFFSET_SIZE_64 0x10000000 /* 64-bit offset-size DWARF */
+
+/* dwarf_pro_init() access flag modifiers
+*/
+#define DW_DLC_ISA_MIPS 0x00000000 /* MIPS target */
+#define DW_DLC_ISA_IA64 0x01000000 /* IA64 target */
+#define DW_DLC_STREAM_RELOCATIONS 0x02000000 /* Old style binary relocs */
+
+ /* Usable with assembly output because it is up to the producer to
+ deal with locations in whatever manner the producer code wishes.
+ Possibly emitting text an assembler will recognize. */
+#define DW_DLC_SYMBOLIC_RELOCATIONS 0x04000000
+
+#define DW_DLC_TARGET_BIGENDIAN 0x08000000 /* Big endian target */
+#define DW_DLC_TARGET_LITTLEENDIAN 0x00100000 /* Little endian target */
+
+#if 0
+ /*
+ The libdwarf producer interfaces jumble these two semantics together in
+ confusing ways. We *should* have flags like these...
+ But changing the code means a lot of diffs. So for now,
+ we leave things as they are
+ */
+ #define DW_DLC_SUN_OFFSET32 0x00010000 /* use 32-bit sec offsets */
+ #define DW_DLC_SUN_OFFSET64 0x00020000 /* use 64-bit sec offsets */
+ #define DW_DLC_SUN_POINTER32 0x00040000 /* use 4 for address_size */
+ #define DW_DLC_SUN_POINTER64 0x00080000 /* use 8 for address_size */
+#endif
+
+/* dwarf_pcline() slide arguments
+*/
+#define DW_DLS_BACKWARD -1 /* slide backward to find line */
+#define DW_DLS_NOSLIDE 0 /* match exactly without sliding */
+#define DW_DLS_FORWARD 1 /* slide forward to find line */
+
+/* libdwarf error numbers
+*/
+#define DW_DLE_NE 0 /* no error */
+#define DW_DLE_VMM 1 /* dwarf format/library version mismatch */
+#define DW_DLE_MAP 2 /* memory map failure */
+#define DW_DLE_LEE 3 /* libelf error */
+#define DW_DLE_NDS 4 /* no debug section */
+#define DW_DLE_NLS 5 /* no line section */
+#define DW_DLE_ID 6 /* invalid descriptor for query */
+#define DW_DLE_IOF 7 /* I/O failure */
+#define DW_DLE_MAF 8 /* memory allocation failure */
+#define DW_DLE_IA 9 /* invalid argument */
+#define DW_DLE_MDE 10 /* mangled debugging entry */
+#define DW_DLE_MLE 11 /* mangled line number entry */
+#define DW_DLE_FNO 12 /* file not open */
+#define DW_DLE_FNR 13 /* file not a regular file */
+#define DW_DLE_FWA 14 /* file open with wrong access */
+#define DW_DLE_NOB 15 /* not an object file */
+#define DW_DLE_MOF 16 /* mangled object file header */
+#define DW_DLE_EOLL 17 /* end of location list entries */
+#define DW_DLE_NOLL 18 /* no location list section */
+#define DW_DLE_BADOFF 19 /* Invalid offset */
+#define DW_DLE_EOS 20 /* end of section */
+#define DW_DLE_ATRUNC 21 /* abbreviations section appears truncated*/
+#define DW_DLE_BADBITC 22 /* Address size passed to dwarf bad*/
+ /* It is not an allowed size (64 or 32) */
+ /* Error codes defined by the current Libdwarf Implementation. */
+#define DW_DLE_DBG_ALLOC 23
+#define DW_DLE_FSTAT_ERROR 24
+#define DW_DLE_FSTAT_MODE_ERROR 25
+#define DW_DLE_INIT_ACCESS_WRONG 26
+#define DW_DLE_ELF_BEGIN_ERROR 27
+#define DW_DLE_ELF_GETEHDR_ERROR 28
+#define DW_DLE_ELF_GETSHDR_ERROR 29
+#define DW_DLE_ELF_STRPTR_ERROR 30
+#define DW_DLE_DEBUG_INFO_DUPLICATE 31
+#define DW_DLE_DEBUG_INFO_NULL 32
+#define DW_DLE_DEBUG_ABBREV_DUPLICATE 33
+#define DW_DLE_DEBUG_ABBREV_NULL 34
+#define DW_DLE_DEBUG_ARANGES_DUPLICATE 35
+#define DW_DLE_DEBUG_ARANGES_NULL 36
+#define DW_DLE_DEBUG_LINE_DUPLICATE 37
+#define DW_DLE_DEBUG_LINE_NULL 38
+#define DW_DLE_DEBUG_LOC_DUPLICATE 39
+#define DW_DLE_DEBUG_LOC_NULL 40
+#define DW_DLE_DEBUG_MACINFO_DUPLICATE 41
+#define DW_DLE_DEBUG_MACINFO_NULL 42
+#define DW_DLE_DEBUG_PUBNAMES_DUPLICATE 43
+#define DW_DLE_DEBUG_PUBNAMES_NULL 44
+#define DW_DLE_DEBUG_STR_DUPLICATE 45
+#define DW_DLE_DEBUG_STR_NULL 46
+#define DW_DLE_CU_LENGTH_ERROR 47
+#define DW_DLE_VERSION_STAMP_ERROR 48
+#define DW_DLE_ABBREV_OFFSET_ERROR 49
+#define DW_DLE_ADDRESS_SIZE_ERROR 50
+#define DW_DLE_DEBUG_INFO_PTR_NULL 51
+#define DW_DLE_DIE_NULL 52
+#define DW_DLE_STRING_OFFSET_BAD 53
+#define DW_DLE_DEBUG_LINE_LENGTH_BAD 54
+#define DW_DLE_LINE_PROLOG_LENGTH_BAD 55
+#define DW_DLE_LINE_NUM_OPERANDS_BAD 56
+#define DW_DLE_LINE_SET_ADDR_ERROR 57 /* No longer used. */
+#define DW_DLE_LINE_EXT_OPCODE_BAD 58
+#define DW_DLE_DWARF_LINE_NULL 59
+#define DW_DLE_INCL_DIR_NUM_BAD 60
+#define DW_DLE_LINE_FILE_NUM_BAD 61
+#define DW_DLE_ALLOC_FAIL 62
+#define DW_DLE_NO_CALLBACK_FUNC 63
+#define DW_DLE_SECT_ALLOC 64
+#define DW_DLE_FILE_ENTRY_ALLOC 65
+#define DW_DLE_LINE_ALLOC 66
+#define DW_DLE_FPGM_ALLOC 67
+#define DW_DLE_INCDIR_ALLOC 68
+#define DW_DLE_STRING_ALLOC 69
+#define DW_DLE_CHUNK_ALLOC 70
+#define DW_DLE_BYTEOFF_ERR 71
+#define DW_DLE_CIE_ALLOC 72
+#define DW_DLE_FDE_ALLOC 73
+#define DW_DLE_REGNO_OVFL 74
+#define DW_DLE_CIE_OFFS_ALLOC 75
+#define DW_DLE_WRONG_ADDRESS 76
+#define DW_DLE_EXTRA_NEIGHBORS 77
+#define DW_DLE_WRONG_TAG 78
+#define DW_DLE_DIE_ALLOC 79
+#define DW_DLE_PARENT_EXISTS 80
+#define DW_DLE_DBG_NULL 81
+#define DW_DLE_DEBUGLINE_ERROR 82
+#define DW_DLE_DEBUGFRAME_ERROR 83
+#define DW_DLE_DEBUGINFO_ERROR 84
+#define DW_DLE_ATTR_ALLOC 85
+#define DW_DLE_ABBREV_ALLOC 86
+#define DW_DLE_OFFSET_UFLW 87
+#define DW_DLE_ELF_SECT_ERR 88
+#define DW_DLE_DEBUG_FRAME_LENGTH_BAD 89
+#define DW_DLE_FRAME_VERSION_BAD 90
+#define DW_DLE_CIE_RET_ADDR_REG_ERROR 91
+#define DW_DLE_FDE_NULL 92
+#define DW_DLE_FDE_DBG_NULL 93
+#define DW_DLE_CIE_NULL 94
+#define DW_DLE_CIE_DBG_NULL 95
+#define DW_DLE_FRAME_TABLE_COL_BAD 96
+#define DW_DLE_PC_NOT_IN_FDE_RANGE 97
+#define DW_DLE_CIE_INSTR_EXEC_ERROR 98
+#define DW_DLE_FRAME_INSTR_EXEC_ERROR 99
+#define DW_DLE_FDE_PTR_NULL 100
+#define DW_DLE_RET_OP_LIST_NULL 101
+#define DW_DLE_LINE_CONTEXT_NULL 102
+#define DW_DLE_DBG_NO_CU_CONTEXT 103
+#define DW_DLE_DIE_NO_CU_CONTEXT 104
+#define DW_DLE_FIRST_DIE_NOT_CU 105
+#define DW_DLE_NEXT_DIE_PTR_NULL 106
+#define DW_DLE_DEBUG_FRAME_DUPLICATE 107
+#define DW_DLE_DEBUG_FRAME_NULL 108
+#define DW_DLE_ABBREV_DECODE_ERROR 109
+#define DW_DLE_DWARF_ABBREV_NULL 110
+#define DW_DLE_ATTR_NULL 111
+#define DW_DLE_DIE_BAD 112
+#define DW_DLE_DIE_ABBREV_BAD 113
+#define DW_DLE_ATTR_FORM_BAD 114
+#define DW_DLE_ATTR_NO_CU_CONTEXT 115
+#define DW_DLE_ATTR_FORM_SIZE_BAD 116
+#define DW_DLE_ATTR_DBG_NULL 117
+#define DW_DLE_BAD_REF_FORM 118
+#define DW_DLE_ATTR_FORM_OFFSET_BAD 119
+#define DW_DLE_LINE_OFFSET_BAD 120
+#define DW_DLE_DEBUG_STR_OFFSET_BAD 121
+#define DW_DLE_STRING_PTR_NULL 122
+#define DW_DLE_PUBNAMES_VERSION_ERROR 123
+#define DW_DLE_PUBNAMES_LENGTH_BAD 124
+#define DW_DLE_GLOBAL_NULL 125
+#define DW_DLE_GLOBAL_CONTEXT_NULL 126
+#define DW_DLE_DIR_INDEX_BAD 127
+#define DW_DLE_LOC_EXPR_BAD 128
+#define DW_DLE_DIE_LOC_EXPR_BAD 129
+#define DW_DLE_ADDR_ALLOC 130
+#define DW_DLE_OFFSET_BAD 131
+#define DW_DLE_MAKE_CU_CONTEXT_FAIL 132
+#define DW_DLE_REL_ALLOC 133
+#define DW_DLE_ARANGE_OFFSET_BAD 134
+#define DW_DLE_SEGMENT_SIZE_BAD 135
+#define DW_DLE_ARANGE_LENGTH_BAD 136
+#define DW_DLE_ARANGE_DECODE_ERROR 137
+#define DW_DLE_ARANGES_NULL 138
+#define DW_DLE_ARANGE_NULL 139
+#define DW_DLE_NO_FILE_NAME 140
+#define DW_DLE_NO_COMP_DIR 141
+#define DW_DLE_CU_ADDRESS_SIZE_BAD 142
+#define DW_DLE_INPUT_ATTR_BAD 143
+#define DW_DLE_EXPR_NULL 144
+#define DW_DLE_BAD_EXPR_OPCODE 145
+#define DW_DLE_EXPR_LENGTH_BAD 146
+#define DW_DLE_MULTIPLE_RELOC_IN_EXPR 147
+#define DW_DLE_ELF_GETIDENT_ERROR 148
+#define DW_DLE_NO_AT_MIPS_FDE 149
+#define DW_DLE_NO_CIE_FOR_FDE 150
+#define DW_DLE_DIE_ABBREV_LIST_NULL 151
+#define DW_DLE_DEBUG_FUNCNAMES_DUPLICATE 152
+#define DW_DLE_DEBUG_FUNCNAMES_NULL 153
+#define DW_DLE_DEBUG_FUNCNAMES_VERSION_ERROR 154
+#define DW_DLE_DEBUG_FUNCNAMES_LENGTH_BAD 155
+#define DW_DLE_FUNC_NULL 156
+#define DW_DLE_FUNC_CONTEXT_NULL 157
+#define DW_DLE_DEBUG_TYPENAMES_DUPLICATE 158
+#define DW_DLE_DEBUG_TYPENAMES_NULL 159
+#define DW_DLE_DEBUG_TYPENAMES_VERSION_ERROR 160
+#define DW_DLE_DEBUG_TYPENAMES_LENGTH_BAD 161
+#define DW_DLE_TYPE_NULL 162
+#define DW_DLE_TYPE_CONTEXT_NULL 163
+#define DW_DLE_DEBUG_VARNAMES_DUPLICATE 164
+#define DW_DLE_DEBUG_VARNAMES_NULL 165
+#define DW_DLE_DEBUG_VARNAMES_VERSION_ERROR 166
+#define DW_DLE_DEBUG_VARNAMES_LENGTH_BAD 167
+#define DW_DLE_VAR_NULL 168
+#define DW_DLE_VAR_CONTEXT_NULL 169
+#define DW_DLE_DEBUG_WEAKNAMES_DUPLICATE 170
+#define DW_DLE_DEBUG_WEAKNAMES_NULL 171
+#define DW_DLE_DEBUG_WEAKNAMES_VERSION_ERROR 172
+#define DW_DLE_DEBUG_WEAKNAMES_LENGTH_BAD 173
+#define DW_DLE_WEAK_NULL 174
+#define DW_DLE_WEAK_CONTEXT_NULL 175
+#define DW_DLE_LOCDESC_COUNT_WRONG 176
+#define DW_DLE_MACINFO_STRING_NULL 177
+#define DW_DLE_MACINFO_STRING_EMPTY 178
+#define DW_DLE_MACINFO_INTERNAL_ERROR_SPACE 179
+#define DW_DLE_MACINFO_MALLOC_FAIL 180
+#define DW_DLE_DEBUGMACINFO_ERROR 181
+#define DW_DLE_DEBUG_MACRO_LENGTH_BAD 182
+#define DW_DLE_DEBUG_MACRO_MAX_BAD 183
+#define DW_DLE_DEBUG_MACRO_INTERNAL_ERR 184
+#define DW_DLE_DEBUG_MACRO_MALLOC_SPACE 185
+#define DW_DLE_DEBUG_MACRO_INCONSISTENT 186
+#define DW_DLE_DF_NO_CIE_AUGMENTATION 187
+#define DW_DLE_DF_REG_NUM_TOO_HIGH 188
+#define DW_DLE_DF_MAKE_INSTR_NO_INIT 189
+#define DW_DLE_DF_NEW_LOC_LESS_OLD_LOC 190
+#define DW_DLE_DF_POP_EMPTY_STACK 191
+#define DW_DLE_DF_ALLOC_FAIL 192
+#define DW_DLE_DF_FRAME_DECODING_ERROR 193
+#define DW_DLE_DEBUG_LOC_SECTION_SHORT 194
+#define DW_DLE_FRAME_AUGMENTATION_UNKNOWN 195
+#define DW_DLE_PUBTYPE_CONTEXT 196 /* Unused. */
+#define DW_DLE_DEBUG_PUBTYPES_LENGTH_BAD 197
+#define DW_DLE_DEBUG_PUBTYPES_VERSION_ERROR 198
+#define DW_DLE_DEBUG_PUBTYPES_DUPLICATE 199
+#define DW_DLE_FRAME_CIE_DECODE_ERROR 200
+#define DW_DLE_FRAME_REGISTER_UNREPRESENTABLE 201
+#define DW_DLE_FRAME_REGISTER_COUNT_MISMATCH 202
+#define DW_DLE_LINK_LOOP 203
+#define DW_DLE_STRP_OFFSET_BAD 204
+#define DW_DLE_DEBUG_RANGES_DUPLICATE 205
+#define DW_DLE_DEBUG_RANGES_OFFSET_BAD 206
+#define DW_DLE_DEBUG_RANGES_MISSING_END 207
+#define DW_DLE_DEBUG_RANGES_OUT_OF_MEM 208
+#define DW_DLE_DEBUG_SYMTAB_ERR 209
+#define DW_DLE_DEBUG_STRTAB_ERR 210
+#define DW_DLE_RELOC_MISMATCH_INDEX 211
+#define DW_DLE_RELOC_MISMATCH_RELOC_INDEX 212
+#define DW_DLE_RELOC_MISMATCH_STRTAB_INDEX 213
+#define DW_DLE_RELOC_SECTION_MISMATCH 214
+#define DW_DLE_RELOC_SECTION_MISSING_INDEX 215
+#define DW_DLE_RELOC_SECTION_LENGTH_ODD 216
+#define DW_DLE_RELOC_SECTION_PTR_NULL 217
+#define DW_DLE_RELOC_SECTION_MALLOC_FAIL 218
+#define DW_DLE_NO_ELF64_SUPPORT 219
+#define DW_DLE_MISSING_ELF64_SUPPORT 220
+#define DW_DLE_ORPHAN_FDE 221
+#define DW_DLE_DUPLICATE_INST_BLOCK 222
+#define DW_DLE_BAD_REF_SIG8_FORM 223
+#define DW_DLE_ATTR_EXPRLOC_FORM_BAD 224
+#define DW_DLE_FORM_SEC_OFFSET_LENGTH_BAD 225
+#define DW_DLE_NOT_REF_FORM 226
+#define DW_DLE_DEBUG_FRAME_LENGTH_NOT_MULTIPLE 227
+
+
+
+ /* DW_DLE_LAST MUST EQUAL LAST ERROR NUMBER */
+#define DW_DLE_LAST 227
+#define DW_DLE_LO_USER 0x10000
+
+ /* Taken as meaning 'undefined value', this is not
+ a column or register number.
+ Only present at libdwarf runtime. Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+ */
+#define DW_FRAME_UNDEFINED_VAL 1034
+
+ /* Taken as meaning 'same value' as caller had, not a column
+ or register number
+ Only present at libdwarf runtime. Never on disk.
+ DW_FRAME_* Values present on disk are in dwarf.h
+ */
+#define DW_FRAME_SAME_VAL 1035
+
+
+
+/* error return values
+*/
+#define DW_DLV_BADADDR (~(Dwarf_Addr)0)
+ /* for functions returning target address */
+
+#define DW_DLV_NOCOUNT ((Dwarf_Signed)-1)
+ /* for functions returning count */
+
+#define DW_DLV_BADOFFSET (~(Dwarf_Off)0)
+ /* for functions returning offset */
+
+/* standard return values for functions */
+#define DW_DLV_NO_ENTRY -1
+#define DW_DLV_OK 0
+#define DW_DLV_ERROR 1
+
+/* Special values for offset_into_exception_table field of dwarf fde's. */
+/* The following value indicates that there is no Exception table offset
+ associated with a dwarf frame. */
+#define DW_DLX_NO_EH_OFFSET (-1LL)
+/* The following value indicates that the producer was unable to analyse the
+ source file to generate Exception tables for this function. */
+#define DW_DLX_EH_OFFSET_UNAVAILABLE (-2LL)
+
+
+/*===========================================================================*/
+/* Dwarf consumer interface initialization and termination operations */
+
+/* Initialization based on Unix open fd (using libelf internally). */
+int dwarf_init(int /*fd*/,
+ Dwarf_Unsigned /*access*/,
+ Dwarf_Handler /*errhand*/,
+ Dwarf_Ptr /*errarg*/,
+ Dwarf_Debug* /*dbg*/,
+ Dwarf_Error* /*error*/);
+
+/* Initialization based on libelf/sgi-fastlibelf open pointer. */
+int dwarf_elf_init(dwarf_elf_handle /*elf*/,
+ Dwarf_Unsigned /*access*/,
+ Dwarf_Handler /*errhand*/,
+ Dwarf_Ptr /*errarg*/,
+ Dwarf_Debug* /*dbg*/,
+ Dwarf_Error* /*error*/);
+
+/* Undocumented function for memory allocator. */
+void dwarf_print_memory_stats(Dwarf_Debug /*dbg*/);
+
+int dwarf_get_elf(Dwarf_Debug /*dbg*/,
+ dwarf_elf_handle* /*return_elfptr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_finish(Dwarf_Debug /*dbg*/, Dwarf_Error* /*error*/);
+
+
+int dwarf_object_init(Dwarf_Obj_Access_Interface* /* obj */,
+ Dwarf_Handler /* errhand */,
+ Dwarf_Ptr /* errarg */,
+ Dwarf_Debug* /* dbg */,
+ Dwarf_Error* /* error */);
+
+int dwarf_object_finish(Dwarf_Debug /* dbg */,
+ Dwarf_Error* /* error */);
+
+/* die traversal operations */
+int dwarf_next_cu_header_b(Dwarf_Debug /*dbg*/,
+ Dwarf_Unsigned* /*cu_header_length*/,
+ Dwarf_Half* /*version_stamp*/,
+ Dwarf_Off* /*abbrev_offset*/,
+ Dwarf_Half* /*address_size*/,
+ Dwarf_Half* /*length_size*/,
+ Dwarf_Half* /*extension_size*/,
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
+ Dwarf_Error* /*error*/);
+/* The following is now obsolete, though supported. November 2009. */
+int dwarf_next_cu_header(Dwarf_Debug /*dbg*/,
+ Dwarf_Unsigned* /*cu_header_length*/,
+ Dwarf_Half* /*version_stamp*/,
+ Dwarf_Off* /*abbrev_offset*/,
+ Dwarf_Half* /*address_size*/,
+ Dwarf_Unsigned* /*next_cu_header_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_siblingof(Dwarf_Debug /*dbg*/,
+ Dwarf_Die /*die*/,
+ Dwarf_Die* /*return_siblingdie*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_child(Dwarf_Die /*die*/,
+ Dwarf_Die* /*return_childdie*/,
+ Dwarf_Error* /*error*/);
+
+/* Finding die given global (not CU-relative) offset */
+int dwarf_offdie(Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*offset*/,
+ Dwarf_Die* /*return_die*/,
+ Dwarf_Error* /*error*/);
+
+/* Higher level functions (Unimplemented) */
+int dwarf_pcfile(Dwarf_Debug /*dbg*/,
+ Dwarf_Addr /*pc*/,
+ Dwarf_Die* /*return_die*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented */
+int dwarf_pcsubr(Dwarf_Debug /*dbg*/,
+ Dwarf_Addr /*pc*/,
+ Dwarf_Die* /*return_die*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented */
+int dwarf_pcscope(Dwarf_Debug /*dbg*/,
+ Dwarf_Addr /*pc*/,
+ Dwarf_Die* /*return_die*/,
+ Dwarf_Error* /*error*/);
+
+/* operations on DIEs */
+int dwarf_tag(Dwarf_Die /*die*/,
+ Dwarf_Half* /*return_tag*/,
+ Dwarf_Error* /*error*/);
+
+/* utility? */
+/* dwarf_dieoffset returns the global debug_info
+ section offset, not the CU relative offset. */
+int dwarf_dieoffset(Dwarf_Die /*die*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_CU_dieoffset_given_die returns
+ the global debug_info section offset of the CU die
+ that is the CU containing the given_die
+ (the passed in DIE can be any DIE).
+ This information makes it possible for a consumer to
+ find and print CU context information for any die.
+ See also dwarf_get_cu_die_offset_given_cu_header_offset(). */
+int dwarf_CU_dieoffset_given_die(Dwarf_Die /*given_die*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_die_CU_offset returns the CU relative offset
+ not the global debug_info section offset, given
+ any DIE in the CU. See also dwarf_CU_dieoffset_given_die().
+ */
+int dwarf_die_CU_offset(Dwarf_Die /*die*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_die_CU_offset_range(Dwarf_Die /*die*/,
+ Dwarf_Off* /*return_CU_header_offset*/,
+ Dwarf_Off* /*return_CU_length_bytes*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_attr (Dwarf_Die /*die*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Attribute * /*returned_attr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_diename(Dwarf_Die /*die*/,
+ char ** /*diename*/,
+ Dwarf_Error* /*error*/);
+
+/* Returns the abbrev code of the die. Cannot fail. */
+int dwarf_die_abbrev_code(Dwarf_Die /*die */);
+
+
+/* convenience functions, alternative to using dwarf_attrlist() */
+int dwarf_hasattr(Dwarf_Die /*die*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_loclist_n preferred over dwarf_loclist */
+int dwarf_loclist_n(Dwarf_Attribute /*attr*/,
+ Dwarf_Locdesc*** /*llbuf*/,
+ Dwarf_Signed * /*locCount*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_loclist(Dwarf_Attribute /*attr*/, /* inflexible! */
+ Dwarf_Locdesc** /*llbuf*/,
+ Dwarf_Signed * /*locCount*/,
+ Dwarf_Error* /*error*/);
+
+/* Extracts a dwarf expression from an expression byte stream.
+ Useful to get expressions from DW_CFA_def_cfa_expression
+ DW_CFA_expression DW_CFA_val_expression expression bytes.
+ 27 April 2009: dwarf_loclist_from_expr() interface with
+ no addr_size is obsolete but supported,
+ use dwarf_loclist_from_expr_a() instead.
+*/
+int dwarf_loclist_from_expr(Dwarf_Debug dbg,
+ Dwarf_Ptr expression_in,
+ Dwarf_Unsigned expression_length,
+ Dwarf_Locdesc ** llbuf,
+ Dwarf_Signed * listlen, Dwarf_Error * error);
+
+/* dwarf_loclist_from_expr_a() new 27 Apr 2009: added addr_size argument. */
+int dwarf_loclist_from_expr_a(Dwarf_Debug dbg,
+ Dwarf_Ptr expression_in,
+ Dwarf_Unsigned expression_length,
+ Dwarf_Half addr_size,
+ Dwarf_Locdesc ** llbuf,
+ Dwarf_Signed * listlen, Dwarf_Error * error);
+
+/* Unimplemented */
+int dwarf_stringlen(Dwarf_Die /*die*/,
+ Dwarf_Locdesc ** /*returned_locdesc*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented */
+int dwarf_subscrcnt(Dwarf_Die /*die*/,
+ Dwarf_Signed * /*returned_count*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented */
+int dwarf_nthsubscr(Dwarf_Die /*die*/,
+ Dwarf_Unsigned /*ssndx*/,
+ Dwarf_Die * /*returned_die*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_lowpc(Dwarf_Die /*die*/,
+ Dwarf_Addr * /*returned_addr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_highpc(Dwarf_Die /*die*/,
+ Dwarf_Addr * /*returned_addr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_bytesize(Dwarf_Die /*die*/,
+ Dwarf_Unsigned * /*returned_size*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented */
+int dwarf_isbitfield(Dwarf_Die /*die*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_bitsize(Dwarf_Die /*die*/,
+ Dwarf_Unsigned * /*returned_size*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_bitoffset(Dwarf_Die /*die*/,
+ Dwarf_Unsigned * /*returned_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_srclang(Dwarf_Die /*die*/,
+ Dwarf_Unsigned * /*returned_lang*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_arrayorder(Dwarf_Die /*die*/,
+ Dwarf_Unsigned * /*returned_order*/,
+ Dwarf_Error* /*error*/);
+
+/* end of convenience function list */
+
+/* this is the main interface to attributes of a DIE */
+int dwarf_attrlist(Dwarf_Die /*die*/,
+ Dwarf_Attribute** /*attrbuf*/,
+ Dwarf_Signed * /*attrcount*/,
+ Dwarf_Error* /*error*/);
+
+/* query operations for attributes */
+int dwarf_hasform(Dwarf_Attribute /*attr*/,
+ Dwarf_Half /*form*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_whatform(Dwarf_Attribute /*attr*/,
+ Dwarf_Half * /*returned_form*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_whatform_direct(Dwarf_Attribute /*attr*/,
+ Dwarf_Half * /*returned_form*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_whatattr(Dwarf_Attribute /*attr*/,
+ Dwarf_Half * /*returned_attr_num*/,
+ Dwarf_Error* /*error*/);
+
+/*
+ The following are concerned with the Primary Interface: getting
+ the actual data values. One function per 'kind' of FORM.
+*/
+/* dwarf_formref returns, thru return_offset, a CU-relative offset
+ and does not allow DW_FORM_ref_addr*/
+int dwarf_formref(Dwarf_Attribute /*attr*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+/* dwarf_global_formref returns, thru return_offset,
+ a debug_info-relative offset and does allow all reference forms*/
+int dwarf_global_formref(Dwarf_Attribute /*attr*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_formsig8 returns in the caller-provided 8 byte area
+ the 8 bytes of a DW_FORM_ref_sig8. Not a string. */
+int dwarf_formsig8(Dwarf_Attribute /*attr*/,
+ Dwarf_Sig8 * /*returned sig bytes*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formaddr(Dwarf_Attribute /*attr*/,
+ Dwarf_Addr * /*returned_addr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formflag(Dwarf_Attribute /*attr*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formudata(Dwarf_Attribute /*attr*/,
+ Dwarf_Unsigned * /*returned_val*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formsdata(Dwarf_Attribute /*attr*/,
+ Dwarf_Signed * /*returned_val*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formblock(Dwarf_Attribute /*attr*/,
+ Dwarf_Block ** /*returned_block*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formstring(Dwarf_Attribute /*attr*/,
+ char ** /*returned_string*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_formexprloc(Dwarf_Attribute /*attr*/,
+ Dwarf_Unsigned * /*return_exprlen*/,
+ Dwarf_Ptr * /*block_ptr*/,
+ Dwarf_Error * /*error*/);
+
+
+/* end attribute query operations. */
+
+/* line number operations */
+/* dwarf_srclines is the normal interface */
+int dwarf_srclines(Dwarf_Die /*die*/,
+ Dwarf_Line** /*linebuf*/,
+ Dwarf_Signed * /*linecount*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_srclines_dealloc, created July 2005, is the new
+ method for deallocating what dwarf_srclines returns.
+ More complete free than using dwarf_dealloc directly. */
+void dwarf_srclines_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Line* /*linebuf*/,
+ Dwarf_Signed /*count */);
+
+
+int dwarf_srcfiles(Dwarf_Die /*die*/,
+ char*** /*srcfiles*/,
+ Dwarf_Signed * /*filecount*/,
+ Dwarf_Error* /*error*/);
+
+/* Unimplemented. */
+int dwarf_dieline(Dwarf_Die /*die*/,
+ Dwarf_Line * /*returned_line*/,
+ Dwarf_Error * /*error*/);
+
+int dwarf_linebeginstatement(Dwarf_Line /*line*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_lineendsequence(Dwarf_Line /*line*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_lineno(Dwarf_Line /*line*/,
+ Dwarf_Unsigned * /*returned_lineno*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_line_srcfileno(Dwarf_Line /*line*/,
+ Dwarf_Unsigned * /*ret_fileno*/,
+ Dwarf_Error * /*error*/);
+
+int dwarf_lineaddr(Dwarf_Line /*line*/,
+ Dwarf_Addr * /*returned_addr*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_lineoff(Dwarf_Line /*line*/,
+ Dwarf_Signed * /*returned_lineoffset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_linesrc(Dwarf_Line /*line*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_lineblock(Dwarf_Line /*line*/,
+ Dwarf_Bool * /*returned_bool*/,
+ Dwarf_Error* /*error*/);
+
+/* tertiary interface to line info */
+/* Unimplemented */
+int dwarf_pclines(Dwarf_Debug /*dbg*/,
+ Dwarf_Addr /*pc*/,
+ Dwarf_Line** /*linebuf*/,
+ Dwarf_Signed * /*linecount*/,
+ Dwarf_Signed /*slide*/,
+ Dwarf_Error* /*error*/);
+/* end line number operations */
+
+/* global name space operations (.debug_pubnames access) */
+int dwarf_get_globals(Dwarf_Debug /*dbg*/,
+ Dwarf_Global** /*globals*/,
+ Dwarf_Signed * /*number_of_globals*/,
+ Dwarf_Error* /*error*/);
+void dwarf_globals_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Global* /*globals*/,
+ Dwarf_Signed /*number_of_globals*/);
+
+int dwarf_globname(Dwarf_Global /*glob*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_global_die_offset(Dwarf_Global /*global*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error * /*error*/);
+
+/* This returns the CU die global offset if one knows the
+ CU header global offset.
+ See also dwarf_CU_dieoffset_given_die(). */
+int dwarf_get_cu_die_offset_given_cu_header_offset(
+ Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*in_cu_header_offset*/,
+ Dwarf_Off * /*out_cu_die_offset*/,
+ Dwarf_Error * /*err*/);
+#ifdef __sgi /* pragma is sgi MIPS only */
+#pragma optional dwarf_get_cu_die_offset_given_cu_header_offset
+#endif
+
+int dwarf_global_cu_offset(Dwarf_Global /*global*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_global_name_offsets(Dwarf_Global /*global*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* Static function name operations. */
+int dwarf_get_funcs(Dwarf_Debug /*dbg*/,
+ Dwarf_Func** /*funcs*/,
+ Dwarf_Signed * /*number_of_funcs*/,
+ Dwarf_Error* /*error*/);
+void dwarf_funcs_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Func* /*funcs*/,
+ Dwarf_Signed /*number_of_funcs*/);
+
+int dwarf_funcname(Dwarf_Func /*func*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_func_die_offset(Dwarf_Func /*func*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_func_cu_offset(Dwarf_Func /*func*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_func_name_offsets(Dwarf_Func /*func*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* User-defined type name operations, SGI IRIX .debug_typenames section.
+ Same content as DWARF3 .debug_pubtypes, but defined years before
+ .debug_pubtypes was defined. SGI IRIX only. */
+int dwarf_get_types(Dwarf_Debug /*dbg*/,
+ Dwarf_Type** /*types*/,
+ Dwarf_Signed * /*number_of_types*/,
+ Dwarf_Error* /*error*/);
+void dwarf_types_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Type* /*types*/,
+ Dwarf_Signed /*number_of_types*/);
+
+
+int dwarf_typename(Dwarf_Type /*type*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_type_die_offset(Dwarf_Type /*type*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_type_cu_offset(Dwarf_Type /*type*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_type_name_offsets(Dwarf_Type /*type*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* User-defined type name operations, DWARF3 .debug_pubtypes section.
+*/
+int dwarf_get_pubtypes(Dwarf_Debug /*dbg*/,
+ Dwarf_Type** /*types*/,
+ Dwarf_Signed * /*number_of_types*/,
+ Dwarf_Error* /*error*/);
+void dwarf_pubtypes_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Type* /*pubtypes*/,
+ Dwarf_Signed /*number_of_pubtypes*/);
+
+
+int dwarf_pubtypename(Dwarf_Type /*type*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_pubtype_die_offset(Dwarf_Type /*type*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_pubtype_cu_offset(Dwarf_Type /*type*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_pubtype_name_offsets(Dwarf_Type /*type*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* File-scope static variable name operations. */
+int dwarf_get_vars(Dwarf_Debug /*dbg*/,
+ Dwarf_Var** /*vars*/,
+ Dwarf_Signed * /*number_of_vars*/,
+ Dwarf_Error* /*error*/);
+void dwarf_vars_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Var* /*vars*/,
+ Dwarf_Signed /*number_of_vars*/);
+
+
+int dwarf_varname(Dwarf_Var /*var*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_var_die_offset(Dwarf_Var /*var*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_var_cu_offset(Dwarf_Var /*var*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_var_name_offsets(Dwarf_Var /*var*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* weak name operations. */
+int dwarf_get_weaks(Dwarf_Debug /*dbg*/,
+ Dwarf_Weak** /*weaks*/,
+ Dwarf_Signed * /*number_of_weaks*/,
+ Dwarf_Error* /*error*/);
+void dwarf_weaks_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Weak* /*weaks*/,
+ Dwarf_Signed /*number_of_weaks*/);
+
+
+int dwarf_weakname(Dwarf_Weak /*weak*/,
+ char ** /*returned_name*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_weak_die_offset(Dwarf_Weak /*weak*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_weak_cu_offset(Dwarf_Weak /*weak*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_weak_name_offsets(Dwarf_Weak /*weak*/,
+ char ** /*returned_name*/,
+ Dwarf_Off* /*die_offset*/,
+ Dwarf_Off* /*cu_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* location list section operation. (.debug_loc access) */
+int dwarf_get_loclist_entry(Dwarf_Debug /*dbg*/,
+ Dwarf_Unsigned /*offset*/,
+ Dwarf_Addr* /*hipc*/,
+ Dwarf_Addr* /*lopc*/,
+ Dwarf_Ptr* /*data*/,
+ Dwarf_Unsigned* /*entry_len*/,
+ Dwarf_Unsigned* /*next_entry*/,
+ Dwarf_Error* /*error*/);
+
+/* abbreviation section operations */
+int dwarf_get_abbrev(Dwarf_Debug /*dbg*/,
+ Dwarf_Unsigned /*offset*/,
+ Dwarf_Abbrev * /*returned_abbrev*/,
+ Dwarf_Unsigned* /*length*/,
+ Dwarf_Unsigned* /*attr_count*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_abbrev_tag(Dwarf_Abbrev /*abbrev*/,
+ Dwarf_Half* /*return_tag_number*/,
+ Dwarf_Error* /*error*/);
+int dwarf_get_abbrev_code(Dwarf_Abbrev /*abbrev*/,
+ Dwarf_Unsigned* /*return_code_number*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_abbrev_children_flag(Dwarf_Abbrev /*abbrev*/,
+ Dwarf_Signed* /*return_flag*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_abbrev_entry(Dwarf_Abbrev /*abbrev*/,
+ Dwarf_Signed /*index*/,
+ Dwarf_Half * /*returned_attr_num*/,
+ Dwarf_Signed* /*form*/,
+ Dwarf_Off* /*offset*/,
+ Dwarf_Error* /*error*/);
+
+/* consumer string section operation */
+int dwarf_get_str(Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*offset*/,
+ char** /*string*/,
+ Dwarf_Signed * /*strlen_of_string*/,
+ Dwarf_Error* /*error*/);
+
+/* Consumer op on gnu .eh_frame info */
+int dwarf_get_fde_list_eh(
+ Dwarf_Debug /*dbg*/,
+ Dwarf_Cie** /*cie_data*/,
+ Dwarf_Signed* /*cie_element_count*/,
+ Dwarf_Fde** /*fde_data*/,
+ Dwarf_Signed* /*fde_element_count*/,
+ Dwarf_Error* /*error*/);
+
+
+/* consumer operations on frame info: .debug_frame */
+int dwarf_get_fde_list(Dwarf_Debug /*dbg*/,
+ Dwarf_Cie** /*cie_data*/,
+ Dwarf_Signed* /*cie_element_count*/,
+ Dwarf_Fde** /*fde_data*/,
+ Dwarf_Signed* /*fde_element_count*/,
+ Dwarf_Error* /*error*/);
+
+/* Release storage gotten by dwarf_get_fde_list_eh() or
+ dwarf_get_fde_list() */
+void dwarf_fde_cie_list_dealloc(Dwarf_Debug dbg,
+ Dwarf_Cie *cie_data,
+ Dwarf_Signed cie_element_count,
+ Dwarf_Fde *fde_data,
+ Dwarf_Signed fde_element_count);
+
+
+
+int dwarf_get_fde_range(Dwarf_Fde /*fde*/,
+ Dwarf_Addr* /*low_pc*/,
+ Dwarf_Unsigned* /*func_length*/,
+ Dwarf_Ptr* /*fde_bytes*/,
+ Dwarf_Unsigned* /*fde_byte_length*/,
+ Dwarf_Off* /*cie_offset*/,
+ Dwarf_Signed* /*cie_index*/,
+ Dwarf_Off* /*fde_offset*/,
+ Dwarf_Error* /*error*/);
+
+/* Useful for IRIX only: see dwarf_get_cie_augmentation_data()
+ dwarf_get_fde_augmentation_data() for GNU .eh_frame. */
+int dwarf_get_fde_exception_info(Dwarf_Fde /*fde*/,
+ Dwarf_Signed* /* offset_into_exception_tables */,
+ Dwarf_Error* /*error*/);
+
+
+int dwarf_get_cie_of_fde(Dwarf_Fde /*fde*/,
+ Dwarf_Cie * /*cie_returned*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_cie_info(Dwarf_Cie /*cie*/,
+ Dwarf_Unsigned * /*bytes_in_cie*/,
+ Dwarf_Small* /*version*/,
+ char ** /*augmenter*/,
+ Dwarf_Unsigned* /*code_alignment_factor*/,
+ Dwarf_Signed* /*data_alignment_factor*/,
+ Dwarf_Half* /*return_address_register_rule*/,
+ Dwarf_Ptr* /*initial_instructions*/,
+ Dwarf_Unsigned* /*initial_instructions_length*/,
+ Dwarf_Error* /*error*/);
+
+/* dwarf_get_cie_index new September 2009. */
+int dwarf_get_cie_index(
+ Dwarf_Cie /*cie*/,
+ Dwarf_Signed* /*index*/,
+ Dwarf_Error* /*error*/ );
+
+
+int dwarf_get_fde_instr_bytes(Dwarf_Fde /*fde*/,
+ Dwarf_Ptr * /*outinstrs*/, Dwarf_Unsigned * /*outlen*/,
+ Dwarf_Error * /*error*/);
+
+int dwarf_get_fde_info_for_all_regs(Dwarf_Fde /*fde*/,
+ Dwarf_Addr /*pc_requested*/,
+ Dwarf_Regtable* /*reg_table*/,
+ Dwarf_Addr* /*row_pc*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_fde_info_for_all_regs3(Dwarf_Fde /*fde*/,
+ Dwarf_Addr /*pc_requested*/,
+ Dwarf_Regtable3* /*reg_table*/,
+ Dwarf_Addr* /*row_pc*/,
+ Dwarf_Error* /*error*/);
+
+/* In this older interface DW_FRAME_CFA_COL is a meaningful
+ column (which does not work well with DWARF3 or
+ non-MIPS architectures). */
+int dwarf_get_fde_info_for_reg(Dwarf_Fde /*fde*/,
+ Dwarf_Half /*table_column*/,
+ Dwarf_Addr /*pc_requested*/,
+ Dwarf_Signed* /*offset_relevant*/,
+ Dwarf_Signed* /*register*/,
+ Dwarf_Signed* /*offset*/,
+ Dwarf_Addr* /*row_pc*/,
+ Dwarf_Error* /*error*/);
+
+/* See discussion of dw_value_type, libdwarf.h.
+ Use of DW_FRAME_CFA_COL is not meaningful in this interface.
+ See dwarf_get_fde_info_for_cfa_reg3().
+*/
+/* dwarf_get_fde_info_for_reg3 is useful on a single column, but
+ it is inefficient to iterate across all table_columns using this
+ function. Instead call dwarf_get_fde_info_for_all_regs3() and index
+ into the table it fills in. */
+int dwarf_get_fde_info_for_reg3(Dwarf_Fde /*fde*/,
+ Dwarf_Half /*table_column*/,
+ Dwarf_Addr /*pc_requested*/,
+ Dwarf_Small * /*value_type*/,
+ Dwarf_Signed * /*offset_relevant*/,
+ Dwarf_Signed* /*register*/,
+ Dwarf_Signed* /*offset_or_block_len*/,
+ Dwarf_Ptr * /*block_ptr */,
+ Dwarf_Addr* /*row_pc_out*/,
+ Dwarf_Error* /*error*/);
+
+/* Use this to get the cfa. */
+int dwarf_get_fde_info_for_cfa_reg3(Dwarf_Fde /*fde*/,
+ Dwarf_Addr /*pc_requested*/,
+ Dwarf_Small * /*value_type*/,
+ Dwarf_Signed * /*offset_relevant*/,
+ Dwarf_Signed* /*register*/,
+ Dwarf_Signed* /*offset_or_block_len*/,
+ Dwarf_Ptr * /*block_ptr */,
+ Dwarf_Addr* /*row_pc_out*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_fde_for_die(Dwarf_Debug /*dbg*/,
+ Dwarf_Die /*subr_die */,
+ Dwarf_Fde * /*returned_fde*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_fde_n(Dwarf_Fde* /*fde_data*/,
+ Dwarf_Unsigned /*fde_index*/,
+ Dwarf_Fde * /*returned_fde*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_fde_at_pc(Dwarf_Fde* /*fde_data*/,
+ Dwarf_Addr /*pc_of_interest*/,
+ Dwarf_Fde * /*returned_fde*/,
+ Dwarf_Addr* /*lopc*/,
+ Dwarf_Addr* /*hipc*/,
+ Dwarf_Error* /*error*/);
+
+/* GNU .eh_frame augmentation information, raw form, see
+ Linux Standard Base Core Specification version 3.0 . */
+int dwarf_get_cie_augmentation_data(Dwarf_Cie /* cie*/,
+ Dwarf_Small ** /* augdata */,
+ Dwarf_Unsigned * /* augdata_len */,
+ Dwarf_Error* /*error*/);
+/* GNU .eh_frame augmentation information, raw form, see
+ Linux Standard Base Core Specification version 3.0 . */
+int dwarf_get_fde_augmentation_data(Dwarf_Fde /* fde*/,
+ Dwarf_Small ** /* augdata */,
+ Dwarf_Unsigned * /* augdata_len */,
+ Dwarf_Error* /*error*/);
+
+int dwarf_expand_frame_instructions(Dwarf_Cie /*cie*/,
+ Dwarf_Ptr /*instruction*/,
+ Dwarf_Unsigned /*i_length*/,
+ Dwarf_Frame_Op** /*returned_op_list*/,
+ Dwarf_Signed* /*op_count*/,
+ Dwarf_Error* /*error*/);
+
+/* Operations on .debug_aranges. */
+int dwarf_get_aranges(Dwarf_Debug /*dbg*/,
+ Dwarf_Arange** /*aranges*/,
+ Dwarf_Signed * /*arange_count*/,
+ Dwarf_Error* /*error*/);
+
+
+
+int dwarf_get_arange(
+ Dwarf_Arange* /*aranges*/,
+ Dwarf_Unsigned /*arange_count*/,
+ Dwarf_Addr /*address*/,
+ Dwarf_Arange * /*returned_arange*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_cu_die_offset(
+ Dwarf_Arange /*arange*/,
+ Dwarf_Off* /*return_offset*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_arange_cu_header_offset(
+ Dwarf_Arange /*arange*/,
+ Dwarf_Off* /*return_cu_header_offset*/,
+ Dwarf_Error* /*error*/);
+#ifdef __sgi /* pragma is sgi MIPS only */
+#pragma optional dwarf_get_arange_cu_header_offset
+#endif
+
+/* DWARF2,3 interface. No longer really adequate (it was never
+ right for segmented address spaces, please switch
+ to using dwarf_get_arange_info_b instead.
+ There is no effective difference between these
+ functions if the address space
+ of the target is not segmented. */
+int dwarf_get_arange_info(
+ Dwarf_Arange /*arange*/,
+ Dwarf_Addr* /*start*/,
+ Dwarf_Unsigned* /*length*/,
+ Dwarf_Off* /*cu_die_offset*/,
+ Dwarf_Error* /*error*/ );
+
+/* New for DWARF4, entries may have segment information.
+ *segment is only meaningful if *segment_entry_size is non-zero. */
+int dwarf_get_arange_info_b(
+ Dwarf_Arange /*arange*/,
+ Dwarf_Unsigned* /*segment*/,
+ Dwarf_Unsigned* /*segment_entry_size*/,
+ Dwarf_Addr * /*start*/,
+ Dwarf_Unsigned* /*length*/,
+ Dwarf_Off * /*cu_die_offset*/,
+ Dwarf_Error * /*error*/ );
+
+
+/* consumer .debug_macinfo information interface.
+*/
+struct Dwarf_Macro_Details_s {
+ Dwarf_Off dmd_offset; /* offset, in the section,
+ of this macro info */
+ Dwarf_Small dmd_type; /* the type, DW_MACINFO_define etc*/
+ Dwarf_Signed dmd_lineno; /* the source line number where
+ applicable and vend_def # if
+ vendor_extension op
+ */
+
+ Dwarf_Signed dmd_fileindex;/* the source file index:
+ applies to define undef start_file
+ */
+ char * dmd_macro; /* macro name (with value for defineop)
+ string from vendor ext
+ */
+};
+
+/* dwarf_print_lines is for use by dwarfdump: it prints
+ line info to stdout.
+ The _dwarf name is obsolete. Use dwarf_ instead.
+ Added extra argnument 2/2009 for better checking.
+*/
+int _dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/);
+int dwarf_print_lines(Dwarf_Die /*cu_die*/,Dwarf_Error * /*error*/,
+ int * /*error_count_out */);
+
+/* dwarf_check_lineheader lets dwarfdump get detailed messages
+ about some compiler errors we detect.
+ We return the count of detected errors throught the
+ pointer.
+*/
+void dwarf_check_lineheader(Dwarf_Die /*cu_die*/,int *errcount_out);
+
+/* dwarf_ld_sort_lines helps SGI IRIX ld
+ rearrange lines in .debug_line in a .o created with a text
+ section per function.
+ -OPT:procedure_reorder=ON
+ where ld-cord (cord(1)ing by ld,
+ not by cord(1)) may have changed the function order.
+ The _dwarf name is obsolete. Use dwarf_ instead.
+*/
+int _dwarf_ld_sort_lines(
+ void * /*orig_buffer*/,
+ unsigned long /* buffer_len*/,
+ int /*is_64_bit*/,
+ int * /*any_change*/,
+ int * /*err_code*/);
+int dwarf_ld_sort_lines(
+ void * /*orig_buffer*/,
+ unsigned long /*buffer_len*/,
+ int /*is_64_bit*/,
+ int * /*any_change*/,
+ int * /*err_code*/);
+
+/* Used by dwarfdump -v to print fde offsets from debugging
+ info.
+ The _dwarf name is obsolete. Use dwarf_ instead.
+*/
+int _dwarf_fde_section_offset(Dwarf_Debug dbg,
+ Dwarf_Fde /*in_fde*/,
+ Dwarf_Off * /*fde_off*/,
+ Dwarf_Off * /*cie_off*/,
+ Dwarf_Error * /*err*/);
+int dwarf_fde_section_offset(Dwarf_Debug dbg,
+ Dwarf_Fde /*in_fde*/,
+ Dwarf_Off * /*fde_off*/,
+ Dwarf_Off * /*cie_off*/,
+ Dwarf_Error * /*err*/);
+
+/* Used by dwarfdump -v to print cie offsets from debugging
+ info.
+ The _dwarf name is obsolete. Use dwarf_ instead.
+*/
+int dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
+ Dwarf_Cie /*in_cie*/,
+ Dwarf_Off * /*cie_off */,
+ Dwarf_Error * /*err*/);
+int _dwarf_cie_section_offset(Dwarf_Debug /*dbg*/,
+ Dwarf_Cie /*in_cie*/,
+ Dwarf_Off * /*cie_off*/,
+ Dwarf_Error * /*err*/);
+
+typedef struct Dwarf_Macro_Details_s Dwarf_Macro_Details;
+
+int dwarf_get_macro(Dwarf_Debug /*dbg*/,
+ char * /*requested_macro_name*/,
+ Dwarf_Addr /*pc_of_request*/,
+ char ** /*returned_macro_value*/,
+ Dwarf_Error * /*error*/);
+
+int dwarf_get_all_defined_macros(Dwarf_Debug /*dbg*/,
+ Dwarf_Addr /*pc_of_request*/,
+ Dwarf_Signed * /*returned_count*/,
+ char *** /*returned_pointers_to_macros*/,
+ Dwarf_Error * /*error*/);
+
+char *dwarf_find_macro_value_start(char * /*macro_string*/);
+
+int dwarf_get_macro_details(Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*macro_offset*/,
+ Dwarf_Unsigned /*maximum_count*/,
+ Dwarf_Signed * /*entry_count*/,
+ Dwarf_Macro_Details ** /*details*/,
+ Dwarf_Error * /*err*/);
+
+
+int dwarf_get_address_size(Dwarf_Debug /*dbg*/,
+ Dwarf_Half * /*addr_size*/,
+ Dwarf_Error * /*error*/);
+
+/* The dwarf specification separates FORMs into
+different classes. To do the seperation properly
+requires 4 pieces of data as of DWARF4 (thus the
+function arguments listed here).
+The DWARF4 specification class definition suffices to
+describe all DWARF versions.
+See section 7.5.4, Attribute Encodings.
+A return of DW_FORM_CLASS_UNKNOWN means we could not properly figure
+out what form-class it is.
+
+ DW_FORM_CLASS_FRAMEPTR is MIPS/IRIX only, and refers
+ to the DW_AT_MIPS_fde attribute (a reference to the
+ .debug_frame section).
+*/
+enum Dwarf_Form_Class {
+ DW_FORM_CLASS_UNKNOWN, DW_FORM_CLASS_ADDRESS,
+ DW_FORM_CLASS_BLOCK, DW_FORM_CLASS_CONSTANT,
+ DW_FORM_CLASS_EXPRLOC, DW_FORM_CLASS_FLAG,
+ DW_FORM_CLASS_LINEPTR, DW_FORM_CLASS_LOCLISTPTR,
+ DW_FORM_CLASS_MACPTR, DW_FORM_CLASS_RANGELISTPTR,
+ DW_FORM_CLASS_REFERENCE, DW_FORM_CLASS_STRING,
+ DW_FORM_CLASS_FRAMEPTR
+};
+
+enum Dwarf_Form_Class dwarf_get_form_class(
+ Dwarf_Half /* dwversion */,
+ Dwarf_Half /* attrnum */,
+ Dwarf_Half /*offset_size */,
+ Dwarf_Half /*form*/);
+
+/* utility operations */
+Dwarf_Unsigned dwarf_errno(Dwarf_Error /*error*/);
+
+char* dwarf_errmsg(Dwarf_Error /*error*/);
+
+/* stringcheck zero is default and means do all
+** string length validity checks.
+** Call with parameter value 1 to turn off many such checks (and
+** increase performance).
+** Call with zero for safest running.
+** Actual value saved and returned is only 8 bits! Upper bits
+** ignored by libdwarf (and zero on return).
+** Returns previous value.
+*/
+int dwarf_set_stringcheck(int /*stringcheck*/);
+
+/* 'apply' defaults to 1 and means do all
+ * 'rela' relocations on reading in a dwarf object section with
+ * such relocations.
+ * Call with parameter value 0 to turn off application of
+ * such relocations.
+ * Since the static linker leaves 'bogus' data in object sections
+ * with a 'rela' relocation section such data cannot be read
+ * sensibly without processing the relocations. Such relocations
+ * do not exist in executables and shared objects (.so), the
+ * relocations only exist in plain .o relocatable object files.
+ * Actual value saved and returned is only 8 bits! Upper bits
+ * ignored by libdwarf (and zero on return).
+ * Returns previous value.
+ * */
+int dwarf_set_reloc_application(int /*apply*/);
+
+
+/* Unimplemented */
+Dwarf_Handler dwarf_seterrhand(Dwarf_Debug /*dbg*/, Dwarf_Handler /*errhand*/);
+
+/* Unimplemented */
+Dwarf_Ptr dwarf_seterrarg(Dwarf_Debug /*dbg*/, Dwarf_Ptr /*errarg*/);
+
+void dwarf_dealloc(Dwarf_Debug /*dbg*/, void* /*space*/,
+ Dwarf_Unsigned /*type*/);
+
+/* DWARF Producer Interface */
+
+typedef int (*Dwarf_Callback_Func)(
+ char* /*name*/,
+ int /*size*/,
+ Dwarf_Unsigned /*type*/,
+ Dwarf_Unsigned /*flags*/,
+ Dwarf_Unsigned /*link*/,
+ Dwarf_Unsigned /*info*/,
+ int* /*sect name index*/,
+ int* /*error*/);
+
+Dwarf_P_Debug dwarf_producer_init(
+ Dwarf_Unsigned /*creation_flags*/,
+ Dwarf_Callback_Func /*func*/,
+ Dwarf_Handler /*errhand*/,
+ Dwarf_Ptr /*errarg*/,
+ Dwarf_Error* /*error*/);
+
+typedef int (*Dwarf_Callback_Func_b)(
+ char* /*name*/,
+ int /*size*/,
+ Dwarf_Unsigned /*type*/,
+ Dwarf_Unsigned /*flags*/,
+ Dwarf_Unsigned /*link*/,
+ Dwarf_Unsigned /*info*/,
+ Dwarf_Unsigned* /*sect_name_index*/,
+ int* /*error*/);
+
+
+Dwarf_P_Debug dwarf_producer_init_b(
+ Dwarf_Unsigned /*flags*/,
+ Dwarf_Callback_Func_b /*func*/,
+ Dwarf_Handler /*errhand*/,
+ Dwarf_Ptr /*errarg*/,
+ Dwarf_Error * /*error*/);
+
+
+Dwarf_Signed dwarf_transform_to_disk_form(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Ptr dwarf_get_section_bytes(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Signed /*dwarf_section*/,
+ Dwarf_Signed* /*elf_section_index*/,
+ Dwarf_Unsigned* /*length*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_relocation_info_count(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned * /*count_of_relocation_sections*/,
+ int * /*drd_buffer_version*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_get_relocation_info(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_Signed * /*elf_section_index*/,
+ Dwarf_Signed * /*elf_section_index_link*/,
+ Dwarf_Unsigned * /*relocation_buffer_count*/,
+ Dwarf_Relocation_Data * /*reldata_buffer*/,
+ Dwarf_Error* /*error*/);
+
+/* v1: no drd_length field, enum explicit */
+/* v2: has the drd_length field, enum value in uchar member */
+#define DWARF_DRD_BUFFER_VERSION 2
+
+Dwarf_Signed dwarf_get_die_markers(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Marker * /*marker_list*/,
+ Dwarf_Unsigned * /*marker_count*/,
+ Dwarf_Error * /*error*/);
+
+int dwarf_get_string_attributes_count(Dwarf_P_Debug,
+ Dwarf_Unsigned *,
+ int *,
+ Dwarf_Error *);
+
+int dwarf_get_string_attributes_info(Dwarf_P_Debug,
+ Dwarf_Signed *,
+ Dwarf_Unsigned *,
+ Dwarf_P_String_Attr *,
+ Dwarf_Error *);
+
+void dwarf_reset_section_bytes(Dwarf_P_Debug /*dbg*/);
+
+Dwarf_Unsigned dwarf_producer_finish(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Error* /*error*/);
+
+/* Producer attribute addition functions. */
+Dwarf_P_Attribute dwarf_add_AT_targ_address(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Unsigned /*pc_value*/,
+ Dwarf_Signed /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_block(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Small* /*block_data*/,
+ Dwarf_Unsigned /*block_len*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_targ_address_b(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Unsigned /*pc_value*/,
+ Dwarf_Unsigned /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_ref_address(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Unsigned /*pc_value*/,
+ Dwarf_Unsigned /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_unsigned_const(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Unsigned /*value*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_signed_const(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Signed /*value*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_reference(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_P_Die /*otherdie*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_dataref(
+ Dwarf_P_Debug /* dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Unsigned /*pcvalue*/,
+ Dwarf_Unsigned /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_const_value_string(Dwarf_P_Die /*ownerdie*/,
+ char* /*string_value*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_location_expr(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_P_Expr /*loc_expr*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_string(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ char* /*string*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_flag(Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Half /*attr*/,
+ Dwarf_Small /*flag*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_producer(Dwarf_P_Die /*ownerdie*/,
+ char* /*producer_string*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_const_value_signedint(Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Signed /*signed_value*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_const_value_unsignedint(
+ Dwarf_P_Die /*ownerdie*/,
+ Dwarf_Unsigned /*unsigned_value*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_comp_dir(Dwarf_P_Die /*ownerdie*/,
+ char* /*current_working_directory*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Attribute dwarf_add_AT_name(Dwarf_P_Die /*die*/,
+ char* /*name*/,
+ Dwarf_Error* /*error*/);
+
+/* Producer line creation functions (.debug_line) */
+Dwarf_Unsigned dwarf_add_directory_decl(Dwarf_P_Debug /*dbg*/,
+ char* /*name*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_file_decl(Dwarf_P_Debug /*dbg*/,
+ char* /*name*/,
+ Dwarf_Unsigned /*dir_index*/,
+ Dwarf_Unsigned /*time_last_modified*/,
+ Dwarf_Unsigned /*length*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_line_entry(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*file_index*/,
+ Dwarf_Addr /*code_address*/,
+ Dwarf_Unsigned /*lineno*/,
+ Dwarf_Signed /*column_number*/,
+ Dwarf_Bool /*is_source_stmt_begin*/,
+ Dwarf_Bool /*is_basic_block_begin*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_lne_set_address(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*offset*/,
+ Dwarf_Unsigned /*symbol_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_lne_end_sequence(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Addr /*end_address*/,
+ Dwarf_Error* /*error*/);
+
+/* Producer .debug_frame functions */
+Dwarf_Unsigned dwarf_add_frame_cie(Dwarf_P_Debug /*dbg*/,
+ char* /*augmenter*/,
+ Dwarf_Small /*code_alignent_factor*/,
+ Dwarf_Small /*data_alignment_factor*/,
+ Dwarf_Small /*return_address_reg*/,
+ Dwarf_Ptr /*initialization_bytes*/,
+ Dwarf_Unsigned /*init_byte_len*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_frame_fde(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_P_Die /*corresponding subprogram die*/,
+ Dwarf_Unsigned /*cie_to_use*/,
+ Dwarf_Unsigned /*virt_addr_of_described_code*/,
+ Dwarf_Unsigned /*length_of_code*/,
+ Dwarf_Unsigned /*symbol_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_frame_fde_b(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Unsigned /*cie*/,
+ Dwarf_Addr /*virt_addr*/,
+ Dwarf_Unsigned /*code_len*/,
+ Dwarf_Unsigned /*sym_idx*/,
+ Dwarf_Unsigned /*sym_idx_of_end*/,
+ Dwarf_Addr /*offset_from_end_sym*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_frame_info_b(
+ Dwarf_P_Debug dbg /*dbg*/,
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Unsigned /*cie*/,
+ Dwarf_Addr /*virt_addr*/,
+ Dwarf_Unsigned /*code_len*/,
+ Dwarf_Unsigned /*symidx*/,
+ Dwarf_Unsigned /*end_symbol */,
+ Dwarf_Addr /*offset_from_end_symbol */,
+ Dwarf_Signed /*offset_into_exception_tables*/,
+ Dwarf_Unsigned /*exception_table_symbol*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_frame_info(
+ Dwarf_P_Debug dbg /*dbg*/,
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Unsigned /*cie*/,
+ Dwarf_Addr /*virt_addr*/,
+ Dwarf_Unsigned /*code_len*/,
+ Dwarf_Unsigned /*symidx*/,
+ Dwarf_Signed /*offset_into_exception_tables*/,
+ Dwarf_Unsigned /*exception_table_symbol*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_P_Fde dwarf_add_fde_inst(
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_Small /*op*/,
+ Dwarf_Unsigned /*val1*/,
+ Dwarf_Unsigned /*val2*/,
+ Dwarf_Error* /*error*/);
+
+/* New September 17, 2009 */
+int dwarf_insert_fde_inst_bytes(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_Unsigned /*len*/,
+ Dwarf_Ptr /*ibytes*/,
+ Dwarf_Error* /*error*/);
+
+
+Dwarf_P_Fde dwarf_new_fde(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
+
+Dwarf_P_Fde dwarf_fde_cfa_offset(
+ Dwarf_P_Fde /*fde*/,
+ Dwarf_Unsigned /*register_number*/,
+ Dwarf_Signed /*offset*/,
+ Dwarf_Error* /*error*/);
+
+/* die creation & addition routines */
+Dwarf_P_Die dwarf_new_die(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_Tag /*tag*/,
+ Dwarf_P_Die /*parent*/,
+ Dwarf_P_Die /*child*/,
+ Dwarf_P_Die /*left */,
+ Dwarf_P_Die /*right*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_die_to_debug(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_die_marker(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Unsigned /*marker*/,
+ Dwarf_Error * /*error*/);
+
+Dwarf_Unsigned dwarf_get_die_marker(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ Dwarf_Unsigned * /*marker*/,
+ Dwarf_Error * /*error*/);
+
+Dwarf_P_Die dwarf_die_link(
+ Dwarf_P_Die /*die*/,
+ Dwarf_P_Die /*parent*/,
+ Dwarf_P_Die /*child*/,
+ Dwarf_P_Die /*left*/,
+ Dwarf_P_Die /*right*/,
+ Dwarf_Error* /*error*/);
+
+void dwarf_dealloc_compressed_block(
+ Dwarf_P_Debug,
+ void *
+);
+
+/* Call this passing in return value from dwarf_uncompress_integer_block()
+ * to free the space the decompression allocated. */
+void dwarf_dealloc_uncompressed_block(
+ Dwarf_Debug,
+ void *
+);
+
+void * dwarf_compress_integer_block(
+ Dwarf_P_Debug, /* dbg */
+ Dwarf_Bool, /* signed==true (or unsigned) */
+ Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
+ void*, /* data */
+ Dwarf_Unsigned, /* number of elements */
+ Dwarf_Unsigned*, /* number of bytes in output block */
+ Dwarf_Error* /* error */
+);
+
+/* Decode an array of signed leb integers (so of course the
+ * array is not composed of fixed length values, but is instead
+ * a sequence of sleb values).
+ * Returns a DW_DLV_BADADDR on error.
+ * Otherwise returns a pointer to an array of 32bit integers.
+ * The signed argument must be non-zero (the decode
+ * assumes sleb integers in the input data) at this time.
+ * Size of integer units must be 32 (32 bits each) at this time.
+ * Number of bytes in block is a byte count (not array count).
+ * Returns number of units in output block (ie, number of elements
+ * of the array that the return value points to) thru the argument.
+ */
+void * dwarf_uncompress_integer_block(
+ Dwarf_Debug, /* dbg */
+ Dwarf_Bool, /* signed==true (or unsigned) */
+ Dwarf_Small, /* size of integer units: 8, 16, 32, 64 */
+ void*, /* input data */
+ Dwarf_Unsigned, /* number of bytes in input */
+ Dwarf_Unsigned*, /* number of units in output block */
+ Dwarf_Error* /* error */
+);
+
+/* Operations to create location expressions. */
+Dwarf_P_Expr dwarf_new_expr(Dwarf_P_Debug /*dbg*/, Dwarf_Error* /*error*/);
+
+void dwarf_expr_reset(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_expr_gen(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Small /*opcode*/,
+ Dwarf_Unsigned /*val1*/,
+ Dwarf_Unsigned /*val2*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_expr_addr(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Unsigned /*addr*/,
+ Dwarf_Signed /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_expr_addr_b(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Unsigned /*addr*/,
+ Dwarf_Unsigned /*sym_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_expr_current_offset(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Addr dwarf_expr_into_block(
+ Dwarf_P_Expr /*expr*/,
+ Dwarf_Unsigned* /*length*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_arange(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Addr /*begin_address*/,
+ Dwarf_Unsigned /*length*/,
+ Dwarf_Signed /*symbol_index*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_arange_b(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_Addr /*begin_address*/,
+ Dwarf_Unsigned /*length*/,
+ Dwarf_Unsigned /*symbol_index*/,
+ Dwarf_Unsigned /*end_symbol_index*/,
+ Dwarf_Addr /*offset_from_end_symbol*/,
+ Dwarf_Error * /*error*/);
+
+Dwarf_Unsigned dwarf_add_pubname(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ char* /*pubname_name*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_funcname(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ char* /*func_name*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_typename(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ char* /*type_name*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_varname(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ char* /*var_name*/,
+ Dwarf_Error* /*error*/);
+
+Dwarf_Unsigned dwarf_add_weakname(
+ Dwarf_P_Debug /*dbg*/,
+ Dwarf_P_Die /*die*/,
+ char* /*weak_name*/,
+ Dwarf_Error* /*error*/);
+
+/* .debug_macinfo producer functions
+ Functions must be called in right order: the section is output
+ In the order these are presented.
+*/
+int dwarf_def_macro(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*line*/,
+ char * /*macname, with (arglist), no space before (*/,
+ char * /*macvalue*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_undef_macro(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*line*/,
+ char * /*macname, no arglist, of course*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_start_macro_file(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*fileindex*/,
+ Dwarf_Unsigned /*linenumber*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_end_macro_file(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Error* /*error*/);
+
+int dwarf_vendor_ext(Dwarf_P_Debug /*dbg*/,
+ Dwarf_Unsigned /*constant*/,
+ char * /*string*/,
+ Dwarf_Error* /*error*/);
+
+/* end macinfo producer functions */
+
+int dwarf_attr_offset(Dwarf_Die /*die*/,
+ Dwarf_Attribute /*attr of above die*/,
+ Dwarf_Off * /*returns offset thru this ptr */,
+ Dwarf_Error * /*error*/);
+
+/* This is a hack so clients can verify offsets.
+ Added April 2005 so that debugger can detect broken offsets
+ (which happened in an IRIX executable larger than 2GB
+ with MIPSpro 7.3.1.3 toolchain.).
+*/
+int
+dwarf_get_section_max_offsets(Dwarf_Debug /*dbg*/,
+ Dwarf_Unsigned * /*debug_info_size*/,
+ Dwarf_Unsigned * /*debug_abbrev_size*/,
+ Dwarf_Unsigned * /*debug_line_size*/,
+ Dwarf_Unsigned * /*debug_loc_size*/,
+ Dwarf_Unsigned * /*debug_aranges_size*/,
+ Dwarf_Unsigned * /*debug_macinfo_size*/,
+ Dwarf_Unsigned * /*debug_pubnames_size*/,
+ Dwarf_Unsigned * /*debug_str_size*/,
+ Dwarf_Unsigned * /*debug_frame_size*/,
+ Dwarf_Unsigned * /*debug_ranges_size*/,
+ Dwarf_Unsigned * /*debug_pubtypes_size*/);
+
+/* Multiple releases spelled 'initial' as 'inital' .
+ The 'inital' spelling should not be used. */
+Dwarf_Half dwarf_set_frame_rule_inital_value(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+/* Additional interface with correct 'initial' spelling. */
+/* It is likely you will want to call the following 5 functions
+ before accessing any frame information. All are useful
+ to tailor handling of pseudo-registers needed to turn
+ frame operation references into simpler forms and to
+ reflect ABI specific data. Of course altering libdwarf.h
+ and dwarf.h allow the same capabilities, but such header changes
+ do not let one change these values at runtime. */
+Dwarf_Half dwarf_set_frame_rule_initial_value(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+Dwarf_Half dwarf_set_frame_rule_table_size(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+Dwarf_Half dwarf_set_frame_cfa_value(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+Dwarf_Half dwarf_set_frame_same_value(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+Dwarf_Half dwarf_set_frame_undefined_value(Dwarf_Debug /*dbg*/,
+ Dwarf_Half /*value*/);
+
+/* As of April 27, 2009, this version with no diepointer is
+ obsolete though supported. Use dwarf_get_ranges_a() instead. */
+int dwarf_get_ranges(Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*rangesoffset*/,
+ Dwarf_Ranges ** /*rangesbuf*/,
+ Dwarf_Signed * /*listlen*/,
+ Dwarf_Unsigned * /*bytecount*/,
+ Dwarf_Error * /*error*/);
+
+/* This adds the address_size argument. New April 27, 2009 */
+int dwarf_get_ranges_a(Dwarf_Debug /*dbg*/,
+ Dwarf_Off /*rangesoffset*/,
+ Dwarf_Die /* diepointer */,
+ Dwarf_Ranges ** /*rangesbuf*/,
+ Dwarf_Signed * /*listlen*/,
+ Dwarf_Unsigned * /*bytecount*/,
+ Dwarf_Error * /*error*/);
+
+void dwarf_ranges_dealloc(Dwarf_Debug /*dbg*/,
+ Dwarf_Ranges * /*rangesbuf*/,
+ Dwarf_Signed /*rangecount*/);
+
+/* The harmless error list is a circular buffer of
+ errors we note but which do not stop us from processing
+ the object. Created so dwarfdump or other tools
+ can report such inconsequential errors without causing
+ anything to stop early. */
+#define DW_HARMLESS_ERROR_CIRCULAR_LIST_DEFAULT_SIZE 4
+#define DW_HARMLESS_ERROR_MSG_STRING_SIZE 200
+/* User code supplies size of array of pointers errmsg_ptrs_array
+ in count and the array of pointers (the pointers themselves
+ need not be initialized).
+ The pointers returned in the array of pointers
+ are invalidated by ANY call to libdwarf.
+ Use them before making another libdwarf call!
+ The array of string pointers passed in always has
+ a final null pointer, so if there are N pointers the
+ and M actual strings, then MIN(M,N-1) pointers are
+ set to point to error strings. The array of pointers
+ to strings always terminates with a NULL pointer.
+ If 'count' is passed in zero then errmsg_ptrs_array
+ is not touched.
+
+ The function returns DW_DLV_NO_ENTRY if no harmless errors
+ were noted so far. Returns DW_DLV_OK if there are errors.
+ Never returns DW_DLV_ERROR.
+
+ Each call empties the error list (discarding all current entries).
+ If newerr_count is non-NULL the count of harmless errors
+ since the last call is returned through the pointer
+ (some may have been discarded or not returned, it is a circular
+ list...).
+ If DW_DLV_NO_ENTRY is returned none of the arguments
+ here are touched or used.
+ */
+int dwarf_get_harmless_error_list(Dwarf_Debug /*dbg*/,
+ unsigned /*count*/,
+ const char ** /*errmsg_ptrs_array*/,
+ unsigned * /*newerr_count*/);
+
+/* Insertion is only for testing the harmless error code, it is not
+ necessarily useful otherwise. */
+void dwarf_insert_harmless_error(Dwarf_Debug /*dbg*/,
+ char * /*newerror*/);
+
+/* The size of the circular list of strings may be set
+ and reset as needed. If it is shortened excess
+ messages are simply dropped. It returns the previous
+ size. If zero passed in the size is unchanged
+ and it simply returns the current size */
+unsigned dwarf_set_harmless_error_list_size(Dwarf_Debug /*dbg*/,
+ unsigned /*maxcount*/);
+/* The harmless error strings (if any) are freed when the dbg
+ is dwarf_finish()ed. */
+
+/* When the val_in is known these dwarf_get_TAG_name (etc)
+ functions return the string corresponding to the val_in passed in
+ through the pointer s_out and the value returned is DW_DLV_OK.
+ The strings are in static storage
+ and must not be freed.
+ If DW_DLV_NO_ENTRY is returned the val_in is not known and
+ *s_out is not set. DW_DLV_ERROR is never returned.*/
+
+extern int dwarf_get_TAG_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_children_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_FORM_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_AT_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_OP_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ATE_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_DS_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_END_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ATCF_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ACCESS_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_VIS_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_VIRTUALITY_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_LANG_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ID_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_CC_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_INL_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ORD_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_DSC_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_LNS_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_LNE_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_MACINFO_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_CFA_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_EH_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_FRAME_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_CHILDREN_name(unsigned int /*val_in*/, const char ** /*s_out */);
+extern int dwarf_get_ADDR_name(unsigned int /*val_in*/, const char ** /*s_out */);
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* _LIBDWARF_H */
+
+
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarfdefs.h b/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarfdefs.h
new file mode 100644
index 000000000..a564655b2
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/libdwarfdefs.h
@@ -0,0 +1,91 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+/* libdwarfdefs.h
+*/
+
+#ifndef LIBDWARFDEFS_H
+#define LIBDWARFDEFS_H
+
+/* We want __uint32_t and __uint64_t and __int32_t __int64_t
+ properly defined but not duplicated, since duplicate typedefs
+ are not legal C.
+*/
+/*
+ HAVE___UINT32_T
+ HAVE___UINT64_T will be set by configure if
+ our 4 types are predefined in compiler
+*/
+
+
+#if (!defined(HAVE___UINT32_T)) && defined(HAVE___UINT32_T_IN_SGIDEFS_H)
+#include /* sgidefs.h defines them */
+#define HAVE___UINT32_T 1
+#endif
+
+#if (!defined(HAVE___UINT64_T)) && defined(HAVE___UINT64_T_IN_SGIDEFS_H)
+#include /* sgidefs.h defines them */
+#define HAVE___UINT64_T 1
+#endif
+
+
+#if (!defined(HAVE___UINT32_T)) && \
+ defined(HAVE_SYS_TYPES_H) && \
+ defined(HAVE___UINT32_T_IN_SYS_TYPES_H)
+# include
+#define HAVE___UINT32_T 1
+#endif
+
+#if (!defined(HAVE___UINT64_T)) && \
+ defined(HAVE_SYS_TYPES_H) && \
+ defined(HAVE___UINT64_T_IN_SYS_TYPES_H)
+# include
+#define HAVE___UINT64_T 1
+#endif
+
+#ifndef HAVE___UINT32_T
+typedef int __int32_t;
+typedef unsigned __uint32_t;
+#define HAVE___UINT32_T 1
+#endif
+
+#ifndef HAVE___UINT64_T
+typedef long long __int64_t;
+typedef unsigned long long __uint64_t;
+#define HAVE___UINT64_T 1
+#endif
+
+#endif /* LIBDWARFDEFS_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/malloc_check.h b/desmume/src/windows/libelf_libdwarf/libdwarf/malloc_check.h
new file mode 100644
index 000000000..ba1ad3da7
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/malloc_check.h
@@ -0,0 +1,62 @@
+/*
+
+ Copyright (C) 2005 Silicon Graphics, 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
+
+*/
+
+
+/* malloc_check.h */
+
+/* A simple libdwarf-aware malloc checker.
+ define WANT_LIBBDWARF_MALLOC_CHECK and rebuild libdwarf
+ do make a checking-for-alloc-mistakes libdwarf.
+ NOT recommended for production use.
+
+ When defined, also add malloc_check.c to the list of
+ files in Makefile.
+*/
+
+#undef WANT_LIBBDWARF_MALLOC_CHECK
+/*#define WANT_LIBBDWARF_MALLOC_CHECK 1 */
+
+#ifdef WANT_LIBBDWARF_MALLOC_CHECK
+
+void dwarf_malloc_check_alloc_data(void * addr,unsigned char code);
+void dwarf_malloc_check_dealloc_data(void * addr,unsigned char code);
+void dwarf_malloc_check_complete(char *wheremsg); /* called at exit of app */
+
+#else /* !WANT_LIBBDWARF_MALLOC_CHECK */
+
+#define dwarf_malloc_check_alloc_data(a,b) /* nothing */
+#define dwarf_malloc_check_dealloc_data(a,b) /* nothing */
+#define dwarf_malloc_check_complete(a) /* nothing */
+
+#endif /* WANT_LIBBDWARF_MALLOC_CHECK */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_alloc.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_alloc.h
new file mode 100644
index 000000000..b4da65325
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_alloc.h
@@ -0,0 +1,42 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+Dwarf_Ptr _dwarf_p_get_alloc(Dwarf_P_Debug, Dwarf_Unsigned);
+
+void _dwarf_p_dealloc(Dwarf_P_Debug dbg, Dwarf_Small * ptr);
+
+void _dwarf_p_dealloc_all(Dwarf_P_Debug dbg);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_arange.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_arange.h
new file mode 100644
index 000000000..f0e7e84df
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_arange.h
@@ -0,0 +1,62 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+/*
+ If ag_end_symbol_index is zero,
+ ag_length must be known and non-zero.
+
+
+ Deals with length being known costant or fr
+ assembler output, not known.
+
+*/
+
+struct Dwarf_P_Arange_s {
+ Dwarf_Addr ag_begin_address; /* known address or for
+ symbolic assem output,
+ offset of symbol */
+ Dwarf_Addr ag_length; /* zero or address or offset */
+ Dwarf_Unsigned ag_symbol_index;
+
+ Dwarf_P_Arange ag_next;
+
+ Dwarf_Unsigned ag_end_symbol_index; /* zero or index/id of end
+ symbol */
+ Dwarf_Addr ag_end_symbol_offset; /* known address or for
+ symbolic assem output,
+ offset of end symbol */
+
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_die.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_die.h
new file mode 100644
index 000000000..01c00e79b
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_die.h
@@ -0,0 +1,68 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+/*
+ This struct holds the abbreviation table, before they are written
+ on disk. Holds a linked list of abbreviations, each consisting of
+ a bitmap for attributes and a bitmap for forms
+*/
+typedef struct Dwarf_P_Abbrev_s *Dwarf_P_Abbrev;
+
+struct Dwarf_P_Abbrev_s {
+ Dwarf_Unsigned abb_idx; /* index of abbreviation */
+ Dwarf_Tag abb_tag; /* tag of die */
+ Dwarf_Ubyte abb_children; /* if children are present */
+ Dwarf_ufixed *abb_attrs; /* holds names of attrs */
+ Dwarf_ufixed *abb_forms; /* forms of attributes */
+ int abb_n_attr; /* num of attrs = # of forms */
+ Dwarf_P_Abbrev abb_next;
+};
+
+/* used in pro_section.c */
+
+int _dwarf_pro_add_AT_fde(Dwarf_P_Debug dbg, Dwarf_P_Die die,
+ Dwarf_Unsigned offset, Dwarf_Error * error);
+
+int _dwarf_pro_add_AT_stmt_list(Dwarf_P_Debug dbg,
+ Dwarf_P_Die first_die,
+ Dwarf_Error * error);
+
+int _dwarf_pro_add_AT_macro_info(Dwarf_P_Debug dbg,
+ Dwarf_P_Die first_die,
+ Dwarf_Unsigned offset,
+ Dwarf_Error * error);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_encode_nm.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_encode_nm.h
new file mode 100644
index 000000000..d08e4d514
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_encode_nm.h
@@ -0,0 +1,48 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+/* Bytes needed to encode a number.
+ Not a tight bound, just a reasonable bound.
+*/
+#define ENCODE_SPACE_NEEDED (2*sizeof(Dwarf_Unsigned))
+
+
+int _dwarf_pro_encode_leb128_nm(Dwarf_Unsigned val, int *nbytes,
+ char *space, int splen);
+
+int _dwarf_pro_encode_signed_leb128_nm(Dwarf_Signed value, int *nbytes,
+ char *space, int splen);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_error.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_error.h
new file mode 100644
index 000000000..c37035301
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_error.h
@@ -0,0 +1,52 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+/* Handle error passing in the name of the Dwarf_P_Debug
+ User must supply {} around the macro.
+ Putting the {} here leads to macro uses that don't look like C.
+ The error argument to dwarf_error is hard coded here as 'error'
+*/
+#define DWARF_P_DBG_ERROR(dbg,errval,retval) \
+ _dwarf_p_error(dbg,error,errval); return(retval);
+
+struct Dwarf_Error_s {
+ Dwarf_Sword er_errval;
+};
+
+void _dwarf_p_error(Dwarf_P_Debug dbg, Dwarf_Error * error,
+ Dwarf_Word errval);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_expr.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_expr.h
new file mode 100644
index 000000000..202f2d30d
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_expr.h
@@ -0,0 +1,45 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+#define MAXIMUM_LOC_EXPR_LENGTH 20
+
+struct Dwarf_P_Expr_s {
+ Dwarf_Small ex_byte_stream[MAXIMUM_LOC_EXPR_LENGTH];
+ Dwarf_P_Debug ex_dbg;
+ Dwarf_Unsigned ex_next_byte_offset;
+ Dwarf_Unsigned ex_reloc_sym_index;
+ Dwarf_Unsigned ex_reloc_offset;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_frame.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_frame.h
new file mode 100644
index 000000000..df60d369e
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_frame.h
@@ -0,0 +1,132 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+/*
+ Largest register value that can be coded into
+ the opcode since there are only 6 bits in the
+ register field.
+*/
+#define MAX_6_BIT_VALUE 0x3f
+
+/*
+ This struct holds debug_frame instructions
+*/
+typedef struct Dwarf_P_Frame_Pgm_s *Dwarf_P_Frame_Pgm;
+
+struct Dwarf_P_Frame_Pgm_s {
+ Dwarf_Ubyte dfp_opcode; /* opcode - includes reg # */
+ char *dfp_args; /* operands */
+ int dfp_nbytes; /* number of bytes in args */
+#if 0
+ Dwarf_Unsigned dfp_sym_index; /* 0 unless reloc needed */
+#endif
+ Dwarf_P_Frame_Pgm dfp_next;
+};
+
+
+/*
+ This struct has cie related information. Used to gather data
+ from user program, and later to transform to disk form
+*/
+struct Dwarf_P_Cie_s {
+ Dwarf_Ubyte cie_version;
+ char *cie_aug; /* augmentation */
+ Dwarf_Ubyte cie_code_align; /* alignment of code */
+ Dwarf_Sbyte cie_data_align;
+ Dwarf_Ubyte cie_ret_reg; /* return register # */
+ char *cie_inst; /* initial instruction */
+ long cie_inst_bytes;
+ /* no of init_inst */
+ Dwarf_P_Cie cie_next;
+};
+
+
+/* producer fields */
+struct Dwarf_P_Fde_s {
+ Dwarf_Unsigned fde_unused1;
+
+ /* function/subr die for this fde */
+ Dwarf_P_Die fde_die;
+
+ /* index to asso. cie */
+ Dwarf_Word fde_cie;
+
+ /* Address of first location of the code this frame applies to If
+ fde_end_symbol non-zero, this represents the offset from the
+ symbol indicated by fde_r_symidx */
+ Dwarf_Addr fde_initloc;
+
+ /* Relocation symbol for address of the code this frame applies to.
+ */
+ Dwarf_Unsigned fde_r_symidx;
+
+ /* Bytes of instr for this fde, if known */
+ Dwarf_Unsigned fde_addr_range;
+
+ /* linked list of instructions we will put in fde. */
+ Dwarf_P_Frame_Pgm fde_inst;
+
+ /* number of instructions in fde */
+ long fde_n_inst;
+
+ /* number of bytes of inst in fde */
+ long fde_n_bytes;
+
+ /* offset into exception table for this function. */
+ Dwarf_Signed fde_offset_into_exception_tables;
+
+ /* The symbol for the exception table elf section. */
+ Dwarf_Unsigned fde_exception_table_symbol;
+
+ /* pointer to last inst */
+ Dwarf_P_Frame_Pgm fde_last_inst;
+
+ Dwarf_P_Fde fde_next;
+
+ /* The symbol and offset of the end symbol. When fde_end_symbol is
+ non-zero we must represent the */
+ Dwarf_Addr fde_end_symbol_offset;
+ Dwarf_Unsigned fde_end_symbol;
+
+ int fde_uwordb_size;
+ Dwarf_P_Debug fde_dbg;
+
+ /* If fde_block is non-null, then it is the set of instructions.
+ so we should use it rather than fde_inst. */
+ Dwarf_Unsigned fde_inst_block_size;
+ void *fde_block;
+};
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_incl.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_incl.h
new file mode 100644
index 000000000..e22e0251a
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_incl.h
@@ -0,0 +1,94 @@
+/*
+
+ Copyright (C) 2000,2002,2004 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2002-2010 Sun Microsystems, Inc. All rights reserved.
+ Portions Copyright 2008-2010 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
+
+*/
+
+
+#ifdef HAVE_ELF_H
+#include
+#elif defined(HAVE_LIBELF_H)
+/* On one platform without elf.h this gets Elf32_Rel
+ type defined (a required type). */
+#include
+#elif defined(HAVE_LIBELF_LIBELF_H)
+#include
+#endif
+
+#if defined(sun)
+#include
+#include
+#endif
+
+/* The target address is given: the place in the source integer
+ is to be determined.
+*/
+#ifdef WORDS_BIGENDIAN
+#define WRITE_UNALIGNED(dbg,dest,source, srclength,len_out) \
+ { \
+ dbg->de_copy_word(dest, \
+ ((char *)source) +srclength-len_out, \
+ len_out) ; \
+ }
+
+
+#else /* LITTLE ENDIAN */
+
+#define WRITE_UNALIGNED(dbg,dest,source, srclength,len_out) \
+ { \
+ dbg->de_copy_word( (dest) , \
+ ((char *)source) , \
+ len_out) ; \
+ }
+#endif
+
+
+#if defined(sparc) && defined(sun)
+#define REL32 Elf32_Rela
+#define REL64 Elf64_Rela
+#define REL_SEC_PREFIX ".rela"
+#else
+#define REL32 Elf32_Rel
+#define REL64 Elf64_Rel
+#define REL_SEC_PREFIX ".rel"
+#endif
+
+#include "dwarf.h"
+#include "libdwarf.h"
+
+#include "pro_opaque.h"
+#include "pro_error.h"
+#include "pro_util.h"
+#include "pro_encode_nm.h"
+#include "pro_alloc.h"
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_line.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_line.h
new file mode 100644
index 000000000..eed941239
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_line.h
@@ -0,0 +1,116 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, Inc. All Rights Reserved.
+ Portions Copyright 2007-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
+
+*/
+
+
+
+#define VERSION 2
+#ifdef __i386
+#define MIN_INST_LENGTH 1
+#else
+#define MIN_INST_LENGTH 4
+#endif
+#define DEFAULT_IS_STMT false
+ /* line base and range are temporarily defines.
+ They need to be calculated later */
+#define LINE_BASE -1
+#define LINE_RANGE 4
+
+#define OPCODE_BASE 10
+#define MAX_OPCODE 255
+
+
+/*
+ This struct is used to hold entries in the include directories
+ part of statement prologue.
+*/
+struct Dwarf_P_Inc_Dir_s {
+ char *did_name; /* name of directory */
+ Dwarf_P_Inc_Dir did_next;
+};
+
+
+/*
+ This struct holds file entries for the statement prologue.
+ Defined in pro_line.h
+*/
+struct Dwarf_P_F_Entry_s {
+ char *dfe_name;
+ char *dfe_args; /* has dir index, time of modification,
+ length in bytes. Encodes as leb128 */
+ int dfe_nbytes; /* number of bytes in args */
+ Dwarf_P_F_Entry dfe_next;
+};
+
+
+/*
+ Struct holding line number information for each of the producer
+ line entries
+*/
+struct Dwarf_P_Line_s {
+ /* code address */
+ Dwarf_Addr dpl_address;
+
+ /* file index, index into file entry */
+ Dwarf_Word dpl_file;
+
+ /* line number */
+ Dwarf_Word dpl_line;
+
+ /* column number */
+ Dwarf_Word dpl_column;
+
+ /* whether its a beginning of a stmt */
+ Dwarf_Ubyte dpl_is_stmt;
+
+ /* whether its a beginning of basic blk */
+ Dwarf_Ubyte dpl_basic_block;
+
+ /* used to store opcodes set_address, and end_seq */
+ Dwarf_Ubyte dpl_opc;
+
+ /*
+ Used only for relocations. Has index of symbol relative to
+ which relocation has to be done (the S part in S + A) */
+ Dwarf_Unsigned dpl_r_symidx;
+
+ Dwarf_P_Line dpl_next;
+};
+
+/*
+ to initialize state machine registers, definition in
+ pro_line.c
+*/
+void _dwarf_pro_reg_init(Dwarf_P_Line);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_macinfo.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_macinfo.h
new file mode 100644
index 000000000..852a0cec1
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_macinfo.h
@@ -0,0 +1,40 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+int _dwarf_pro_transform_macro_info_to_disk(Dwarf_P_Debug dbg,
+ Dwarf_Error * error);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_opaque.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_opaque.h
new file mode 100644
index 000000000..befc69faa
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_opaque.h
@@ -0,0 +1,484 @@
+/*
+
+ 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
+
+/*
+ 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 */
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc.h
new file mode 100644
index 000000000..d2e6c6735
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc.h
@@ -0,0 +1,47 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+int _dwarf_pro_pre_alloc_n_reloc_slots(Dwarf_P_Debug dbg,
+ int rel_sec_index,
+ Dwarf_Unsigned newslots);
+
+int _dwarf_pro_alloc_reloc_slots(Dwarf_P_Debug dbg, int rel_sec_index);
+
+int _dwarf_pro_reloc_get_a_slot(Dwarf_P_Debug dbg,
+ int base_sec_index,
+ void **relrec_to_fill);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_stream.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_stream.h
new file mode 100644
index 000000000..892ea5baf
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_stream.h
@@ -0,0 +1,63 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+int _dwarf_pro_reloc_name_stream64(Dwarf_P_Debug dbg, int base_sec_index, Dwarf_Unsigned offset, /* r_offset
+ of
+ reloc
+ */
+ Dwarf_Unsigned symidx,
+ enum Dwarf_Rel_Type,
+ int reltarget_length);
+int _dwarf_pro_reloc_name_stream32(Dwarf_P_Debug dbg, int base_sec_index, Dwarf_Unsigned offset, /* r_offset
+ of
+ reloc
+ */
+ Dwarf_Unsigned symidx,
+ enum Dwarf_Rel_Type,
+ int reltarget_length);
+int _dwarf_pro_reloc_length_stream(Dwarf_P_Debug dbg, int base_sec_index, Dwarf_Unsigned offset, /* r_offset
+ of
+ reloc
+ */
+ Dwarf_Unsigned start_symidx,
+ Dwarf_Unsigned end_symidx,
+ enum Dwarf_Rel_Type,
+ int reltarget_length);
+
+int _dwarf_stream_relocs_to_disk(Dwarf_P_Debug dbg,
+ Dwarf_Signed * new_sec_count);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_symbolic.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_symbolic.h
new file mode 100644
index 000000000..3d03a4786
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_reloc_symbolic.h
@@ -0,0 +1,55 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+int _dwarf_pro_reloc_name_symbolic(Dwarf_P_Debug dbg, int base_sec_index, Dwarf_Unsigned offset, /* r_offset
+ of
+ reloc
+ */
+ Dwarf_Unsigned symidx,
+ enum Dwarf_Rel_Type,
+ int reltarget_length);
+int
+ _dwarf_pro_reloc_length_symbolic(Dwarf_P_Debug dbg, int base_sec_index, Dwarf_Unsigned offset, /* r_offset
+ of
+ reloc
+ */
+ Dwarf_Unsigned start_symidx,
+ Dwarf_Unsigned end_symidx,
+ enum Dwarf_Rel_Type,
+ int reltarget_length);
+
+int _dwarf_symbolic_relocs_to_disk(Dwarf_P_Debug dbg,
+ Dwarf_Signed * new_sec_count);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_section.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_section.h
new file mode 100644
index 000000000..b37ade44d
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_section.h
@@ -0,0 +1,112 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+
+
+
+/* relocation section names */
+extern char *_dwarf_rel_section_names[];
+
+/* section names */
+extern char *_dwarf_sectnames[];
+
+/* struct to hold relocation entries. Its mantained as a linked
+ list of relocation structs, and will then be written at as a
+ whole into the relocation section. Whether its 32 bit or
+ 64 bit will be obtained from Dwarf_Debug pointer.
+*/
+
+
+
+
+
+/*
+ struct stores a chunk of data pertaining to a section
+*/
+struct Dwarf_P_Section_Data_s {
+ int ds_elf_sect_no; /* elf section number */
+ char *ds_data; /* data contained in section */
+ unsigned long ds_nbytes; /* bytes of data used so far */
+ unsigned long ds_orig_alloc; /* bytes allocated originally */
+ Dwarf_P_Section_Data ds_next; /* next on the list */
+};
+
+/* Used to allow a dummy initial struct (which we
+ drop before it gets used
+ This must not match any legitimate 'section' number.
+*/
+#define MAGIC_SECT_NO -3
+
+/* Size of chunk of data allocated in one alloc
+ Not clear if this is the best size.
+ Used to be just 4096 for user data, the section data struct
+ was a separate malloc.
+*/
+#define CHUNK_SIZE (4096 - sizeof (struct Dwarf_P_Section_Data_s))
+
+/*
+ chunk alloc routine -
+ if chunk->ds_data is nil, it will alloc CHUNK_SIZE bytes,
+ and return pointer to the beginning. If chunk is not nil,
+ it will see if there's enoungh space for nbytes in current
+ chunk, if not, add new chunk to linked list, and return
+ a char * pointer to it. Return null if unsuccessful.
+*/
+Dwarf_Small *_dwarf_pro_buffer(Dwarf_P_Debug dbg, int sectno,
+ unsigned long nbytes);
+
+#define GET_CHUNK(dbg,sectno,ptr,nbytes,error) \
+ { \
+ (ptr) = _dwarf_pro_buffer((dbg),(sectno),(nbytes)); \
+ if ((ptr) == NULL) { \
+ DWARF_P_DBG_ERROR(dbg,DW_DLE_CHUNK_ALLOC,-1); \
+ } \
+ }
+
+
+
+int
+ _dwarf_transform_arange_to_disk(Dwarf_P_Debug dbg,
+ Dwarf_Error * error);
+
+/* These are for creating ELF section type codes.
+*/
+#if defined(linux) || defined(__BEOS__) || !defined(SHT_MIPS_DWARF)
+/* Intel's SoftSdv accepts only this */
+#define SECTION_TYPE SHT_PROGBITS
+#else
+#define SECTION_TYPE SHT_MIPS_DWARF
+#endif
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_types.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_types.h
new file mode 100644
index 000000000..817609215
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_types.h
@@ -0,0 +1,44 @@
+/*
+
+ Copyright (C) 2000,2004 Silicon Graphics, 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
+
+*/
+
+
+/* pro_types.h */
+
+
+int _dwarf_transform_simplename_to_disk(Dwarf_P_Debug dbg, enum dwarf_sn_kind entrykind, int section_index, /* in
+ de_elf_sects
+ etc
+ */
+ Dwarf_Error * error);
diff --git a/desmume/src/windows/libelf_libdwarf/libdwarf/pro_util.h b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_util.h
new file mode 100644
index 000000000..56bde8bda
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libdwarf/pro_util.h
@@ -0,0 +1,148 @@
+/*
+
+ Copyright (C) 2000,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
+
+*/
+
+
+
+
+#define IS_64BIT(dbg) ((dbg)->de_flags & DW_DLC_SIZE_64 ? 1 : 0)
+#define ISA_IA64(dbg) ((dbg)->de_flags & DW_DLC_ISA_IA64 ? 1 : 0)
+
+/* definition of sizes of types, given target machine */
+#define sizeof_sbyte(dbg) sizeof(Dwarf_Sbyte)
+#define sizeof_ubyte(dbg) sizeof(Dwarf_Ubyte)
+#define sizeof_uhalf(dbg) sizeof(Dwarf_Half)
+/* certain sizes not defined here, but set in dbg record.
+ See pro_init.c
+*/
+
+/* Computes amount of padding necessary to align n to a k-boundary. */
+/* Important: Assumes n, k both GREATER than zero. */
+#define PADDING(n, k) ( (k)-1 - ((n)-1)%(k) )
+
+/* The following defines are only important for users of the
+** producer part of libdwarf, and such should have these
+** defined correctly (as necessary)
+** by the #include done in pro_incl.h
+** before the #include "pro_util.h".
+** For others producer macros do not matter so 0 is a usable value, and
+** zero values let compilation succeed on more non-MIPS architectures.
+** A better approach would be welcome.
+*/
+/* R_MIPS* are #define so #ifndef works */
+/* R_IA_64* are not necessarily #define (might be enum) so #ifndef
+ is useless, we use the configure script generating
+ HAVE_R_IA_64_DIR32LSB and HAVE_R_IA64_DIR32LSB.
+*/
+#ifndef R_MIPS_64
+#define R_MIPS_64 0
+#endif
+#ifndef R_MIPS_32
+#define R_MIPS_32 0
+#endif
+#ifndef R_MIPS_SCN_DISP
+#define R_MIPS_SCN_DISP 0
+#endif
+
+/* R_IA_64_DIR32LSB came before the now-standard R_IA64_DIR32LSB
+ (etc) was defined. This now deals with either form,
+ preferring the new form if available. */
+#ifdef HAVE_R_IA64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR32LSB R_IA64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR64LSB R_IA64_DIR64LSB
+#define DWARF_PRO_R_IA64_SEGREL64LSB R_IA64_SEGREL64LSB
+#define DWARF_PRO_R_IA64_SEGREL32LSB R_IA64_SEGREL32LSB
+#endif
+#if defined(HAVE_R_IA_64_DIR32LSB) && !defined(HAVE_R_IA64_DIR32LSB)
+#define DWARF_PRO_R_IA64_DIR32LSB R_IA_64_DIR32LSB
+#define DWARF_PRO_R_IA64_DIR64LSB R_IA_64_DIR64LSB
+#define DWARF_PRO_R_IA64_SEGREL64LSB R_IA_64_SEGREL64LSB
+#define DWARF_PRO_R_IA64_SEGREL32LSB R_IA_64_SEGREL32LSB
+#endif
+#if !defined(HAVE_R_IA_64_DIR32LSB) && !defined(HAVE_R_IA64_DIR32LSB)
+#define DWARF_PRO_R_IA64_DIR32LSB 0
+#define DWARF_PRO_R_IA64_DIR64LSB 0
+#define DWARF_PRO_R_IA64_SEGREL64LSB 0
+#define DWARF_PRO_R_IA64_SEGREL32LSB 0
+#endif
+
+/*
+ * The default "I don't know" value can't be zero.
+ * Because that's the sentinel value that means "no relocation".
+ * In order to use this library in 'symbolic relocation mode we
+ * don't care if this value is the right relocation value,
+ * only that it's non-NULL. So at the end, we define it
+ * to something sensible.
+ */
+
+
+
+#if defined(sun)
+#if defined(sparc)
+#define Get_REL64_isa(dbg) (R_SPARC_UA64)
+#define Get_REL32_isa(dbg) (R_SPARC_UA32)
+#define Get_REL_SEGREL_isa(dbg) (R_SPARC_NONE) /* I don't know! */
+#else /* i386 */
+#define Get_REL64_isa(dbg) (R_386_32) /* Any non-zero value is ok */
+#define Get_REL32_isa(dbg) (R_386_32)
+#define Get_REL_SEGREL_isa(dbg) (R_386_NONE) /* I don't know! */
+#endif /* sparc || i386 */
+#else /* !sun */
+#ifdef HAVE_SYS_IA64_ELF_H
+#define Get_REL64_isa(dbg) (ISA_IA64(dbg) ? \
+ DWARF_PRO_R_IA64_DIR64LSB : R_MIPS_64)
+#define Get_REL32_isa(dbg) (ISA_IA64(dbg) ? \
+ DWARF_PRO_R_IA64_DIR32LSB : R_MIPS_32)
+
+
+/* ia64 uses 32bit dwarf offsets for sections */
+#define Get_REL_SEGREL_isa(dbg) (ISA_IA64(dbg) ? \
+ DWARF_PRO_R_IA64_SEGREL32LSB : R_MIPS_SCN_DISP)
+#else /* HAVE_SYS_IA64_ELF_H */
+
+#if !defined(linux) && !defined(__BEOS__)
+#define Get_REL64_isa(dbg) (R_MIPS_64)
+#define Get_REL32_isa(dbg) (R_MIPS_32)
+#define Get_REL_SEGREL_isa(dbg) (R_MIPS_SCN_DISP)
+#else
+#define Get_REL64_isa(dbg) (1)
+#define Get_REL32_isa(dbg) (1) /* these are used on linux */
+#define Get_REL_SEGREL_isa(dbg) (1) /* non zero values, see comments above */
+#endif
+
+#endif /* HAVE_SYS_IA64_ELF_H */
+#endif /* !sun */
+
+
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/byteswap.h b/desmume/src/windows/libelf_libdwarf/libelf/byteswap.h
new file mode 100644
index 000000000..7526d1233
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/byteswap.h
@@ -0,0 +1,95 @@
+/*
+byteswap.h - functions and macros for byte swapping.
+Copyright (C) 1995 - 2001 Michael Riepe
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+/* @(#) $Id: byteswap.h,v 1.7 2008/05/23 08:15:34 michael Exp $ */
+
+#ifndef _BYTESWAP_H
+#define _BYTESWAP_H
+
+#define lu(from,i,s) (((__libelf_u32_t)((unsigned char*)(from))[i])<<(s))
+#define li(from,i,s) (((__libelf_i32_t)(( signed char*)(from))[i])<<(s))
+
+#define __load_u16L(from) ((__libelf_u32_t) \
+ (lu(from,1,8) | lu(from,0,0)))
+#define __load_u16M(from) ((__libelf_u32_t) \
+ (lu(from,0,8) | lu(from,1,0)))
+#define __load_i16L(from) ((__libelf_i32_t) \
+ (li(from,1,8) | lu(from,0,0)))
+#define __load_i16M(from) ((__libelf_i32_t) \
+ (li(from,0,8) | lu(from,1,0)))
+
+#define __load_u32L(from) ((__libelf_u32_t) \
+ (lu(from,3,24) | lu(from,2,16) | lu(from,1,8) | lu(from,0,0)))
+#define __load_u32M(from) ((__libelf_u32_t) \
+ (lu(from,0,24) | lu(from,1,16) | lu(from,2,8) | lu(from,3,0)))
+#define __load_i32L(from) ((__libelf_i32_t) \
+ (li(from,3,24) | lu(from,2,16) | lu(from,1,8) | lu(from,0,0)))
+#define __load_i32M(from) ((__libelf_i32_t) \
+ (li(from,0,24) | lu(from,1,16) | lu(from,2,8) | lu(from,3,0)))
+
+#define su(to,i,v,s) (((char*)(to))[i]=((__libelf_u32_t)(v)>>(s)))
+#define si(to,i,v,s) (((char*)(to))[i]=((__libelf_i32_t)(v)>>(s)))
+
+#define __store_u16L(to,v) \
+ (su(to,1,v,8), su(to,0,v,0))
+#define __store_u16M(to,v) \
+ (su(to,0,v,8), su(to,1,v,0))
+#define __store_i16L(to,v) \
+ (si(to,1,v,8), si(to,0,v,0))
+#define __store_i16M(to,v) \
+ (si(to,0,v,8), si(to,1,v,0))
+
+#define __store_u32L(to,v) \
+ (su(to,3,v,24), su(to,2,v,16), su(to,1,v,8), su(to,0,v,0))
+#define __store_u32M(to,v) \
+ (su(to,0,v,24), su(to,1,v,16), su(to,2,v,8), su(to,3,v,0))
+#define __store_i32L(to,v) \
+ (si(to,3,v,24), si(to,2,v,16), si(to,1,v,8), si(to,0,v,0))
+#define __store_i32M(to,v) \
+ (si(to,0,v,24), si(to,1,v,16), si(to,2,v,8), si(to,3,v,0))
+
+#if __LIBELF64
+
+/*
+ * conversion functions from swap64.c
+ */
+extern __libelf_u64_t _elf_load_u64L(const unsigned char *from);
+extern __libelf_u64_t _elf_load_u64M(const unsigned char *from);
+extern __libelf_i64_t _elf_load_i64L(const unsigned char *from);
+extern __libelf_i64_t _elf_load_i64M(const unsigned char *from);
+extern void _elf_store_u64L(unsigned char *to, __libelf_u64_t v);
+extern void _elf_store_u64M(unsigned char *to, __libelf_u64_t v);
+extern void _elf_store_i64L(unsigned char *to, __libelf_u64_t v);
+extern void _elf_store_i64M(unsigned char *to, __libelf_u64_t v);
+
+/*
+ * aliases for existing conversion code
+ */
+#define __load_u64L _elf_load_u64L
+#define __load_u64M _elf_load_u64M
+#define __load_i64L _elf_load_i64L
+#define __load_i64M _elf_load_i64M
+#define __store_u64L _elf_store_u64L
+#define __store_u64M _elf_store_u64M
+#define __store_i64L _elf_store_i64L
+#define __store_i64M _elf_store_i64M
+
+#endif /* __LIBELF64 */
+
+#endif /* _BYTESWAP_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/elf_repl.h b/desmume/src/windows/libelf_libdwarf/libelf/elf_repl.h
new file mode 100644
index 000000000..c5cf90f7a
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/elf_repl.h
@@ -0,0 +1,996 @@
+/*
+ * elf_repl.h - public header file for systems that lack it.
+ * Copyright (C) 1995 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @(#) $Id: elf_repl.h,v 1.22 2009/11/01 13:04:19 michael Exp $ */
+
+/*
+ * NEVER INCLUDE THIS FILE DIRECTLY - USE INSTEAD!
+ */
+
+#ifndef _ELF_REPL_H
+#define _ELF_REPL_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Scalar data types
+ */
+typedef __libelf_u32_t Elf32_Addr;
+typedef __libelf_u16_t Elf32_Half;
+typedef __libelf_u32_t Elf32_Off;
+typedef __libelf_i32_t Elf32_Sword;
+typedef __libelf_u32_t Elf32_Word;
+
+#define ELF32_FSZ_ADDR 4
+#define ELF32_FSZ_HALF 2
+#define ELF32_FSZ_OFF 4
+#define ELF32_FSZ_SWORD 4
+#define ELF32_FSZ_WORD 4
+
+#if __LIBELF64
+
+typedef __libelf_u64_t Elf64_Addr;
+typedef __libelf_u16_t Elf64_Half;
+typedef __libelf_u64_t Elf64_Off;
+typedef __libelf_i32_t Elf64_Sword;
+typedef __libelf_u32_t Elf64_Word;
+typedef __libelf_i64_t Elf64_Sxword;
+typedef __libelf_u64_t Elf64_Xword;
+
+#define ELF64_FSZ_ADDR 8
+#define ELF64_FSZ_HALF 2
+#define ELF64_FSZ_OFF 8
+#define ELF64_FSZ_SWORD 4
+#define ELF64_FSZ_WORD 4
+#define ELF64_FSZ_SXWORD 8
+#define ELF64_FSZ_XWORD 8
+
+/*
+ * Blame Sun for this...
+ */
+typedef __libelf_u64_t Elf64_Lword;
+typedef __libelf_u64_t Elf32_Lword;
+
+#endif /* __LIBELF64 */
+
+/*
+ * ELF header
+ */
+#define EI_NIDENT 16
+
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry;
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+} Elf32_Ehdr;
+
+#if __LIBELF64
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ Elf64_Half e_type;
+ Elf64_Half e_machine;
+ Elf64_Word e_version;
+ Elf64_Addr e_entry;
+ Elf64_Off e_phoff;
+ Elf64_Off e_shoff;
+ Elf64_Word e_flags;
+ Elf64_Half e_ehsize;
+ Elf64_Half e_phentsize;
+ Elf64_Half e_phnum;
+ Elf64_Half e_shentsize;
+ Elf64_Half e_shnum;
+ Elf64_Half e_shstrndx;
+} Elf64_Ehdr;
+#endif /* __LIBELF64 */
+
+/*
+ * e_ident
+ */
+#define EI_MAG0 0
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_OSABI 7
+#define EI_ABIVERSION 8
+#define EI_PAD 9
+
+#define ELFMAG0 0x7f
+#define ELFMAG1 'E'
+#define ELFMAG2 'L'
+#define ELFMAG3 'F'
+#define ELFMAG "\177ELF"
+#define SELFMAG 4
+
+/*
+ * e_ident[EI_CLASS]
+ */
+#define ELFCLASSNONE 0
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+#define ELFCLASSNUM 3
+
+/*
+ * e_ident[EI_DATA]
+ */
+#define ELFDATANONE 0
+#define ELFDATA2LSB 1
+#define ELFDATA2MSB 2
+#define ELFDATANUM 3
+
+/*
+ * e_ident[EI_OSABI]
+ */
+#define ELFOSABI_NONE 0 /* No extensions or unspecified */
+#define ELFOSABI_SYSV ELFOSABI_NONE
+#define ELFOSABI_HPUX 1 /* Hewlett-Packard HP-UX */
+#define ELFOSABI_NETBSD 2 /* NetBSD */
+#define ELFOSABI_LINUX 3 /* Linux */
+#define ELFOSABI_SOLARIS 6 /* Sun Solaris */
+#define ELFOSABI_AIX 7 /* AIX */
+#define ELFOSABI_IRIX 8 /* IRIX */
+#define ELFOSABI_FREEBSD 9 /* FreeBSD */
+#define ELFOSABI_TRU64 10 /* Compaq TRU64 UNIX */
+#define ELFOSABI_MODESTO 11 /* Novell Modesto */
+#define ELFOSABI_OPENBSD 12 /* Open BSD */
+#define ELFOSABI_OPENVMS 13 /* Open VMS */
+#define ELFOSABI_NSK 14 /* Hewlett-Packard Non-Stop Kernel */
+#define ELFOSABI_AROS 15 /* Amiga Research OS */
+/* these are probably obsolete: */
+#define ELFOSABI_ARM 97 /* ARM */
+#define ELFOSABI_STANDALONE 255 /* standalone (embedded) application */
+
+
+/*
+ * e_type
+ */
+#define ET_NONE 0
+#define ET_REL 1
+#define ET_EXEC 2
+#define ET_DYN 3
+#define ET_CORE 4
+#define ET_NUM 5
+#define ET_LOOS 0xfe00
+#define ET_HIOS 0xfeff
+#define ET_LOPROC 0xff00
+#define ET_HIPROC 0xffff
+
+/*
+ * e_machine
+ */
+#define EM_NONE 0 /* No machine */
+#define EM_M32 1 /* AT&T WE 32100 */
+#define EM_SPARC 2 /* SPARC */
+#define EM_386 3 /* Intel 80386 */
+#define EM_68K 4 /* Motorola 68000 */
+#define EM_88K 5 /* Motorola 88000 */
+#define EM_486 6 /* Intel i486 (DO NOT USE THIS ONE) */
+#define EM_860 7 /* Intel 80860 */
+#define EM_MIPS 8 /* MIPS I Architecture */
+#define EM_S370 9 /* IBM System/370 Processor */
+#define EM_MIPS_RS3_LE 10 /* MIPS RS3000 Little-endian */
+#define EM_SPARC64 11 /* SPARC 64-bit */
+#define EM_PARISC 15 /* Hewlett-Packard PA-RISC */
+#define EM_VPP500 17 /* Fujitsu VPP500 */
+#define EM_SPARC32PLUS 18 /* Enhanced instruction set SPARC */
+#define EM_960 19 /* Intel 80960 */
+#define EM_PPC 20 /* PowerPC */
+#define EM_PPC64 21 /* 64-bit PowerPC */
+#define EM_S390 22 /* IBM System/390 Processor */
+#define EM_V800 36 /* NEC V800 */
+#define EM_FR20 37 /* Fujitsu FR20 */
+#define EM_RH32 38 /* TRW RH-32 */
+#define EM_RCE 39 /* Motorola RCE */
+#define EM_ARM 40 /* Advanced RISC Machines ARM */
+#define EM_ALPHA 41 /* Digital Alpha */
+#define EM_SH 42 /* Hitachi SH */
+#define EM_SPARCV9 43 /* SPARC Version 9 */
+#define EM_TRICORE 44 /* Siemens TriCore embedded processor */
+#define EM_ARC 45 /* Argonaut RISC Core, Argonaut Technologies Inc. */
+#define EM_H8_300 46 /* Hitachi H8/300 */
+#define EM_H8_300H 47 /* Hitachi H8/300H */
+#define EM_H8S 48 /* Hitachi H8S */
+#define EM_H8_500 49 /* Hitachi H8/500 */
+#define EM_IA_64 50 /* Intel IA-64 processor architecture */
+#define EM_MIPS_X 51 /* Stanford MIPS-X */
+#define EM_COLDFIRE 52 /* Motorola ColdFire */
+#define EM_68HC12 53 /* Motorola M68HC12 */
+#define EM_MMA 54 /* Fujitsu MMA Multimedia Accelerator */
+#define EM_PCP 55 /* Siemens PCP */
+#define EM_NCPU 56 /* Sony nCPU embedded RISC processor */
+#define EM_NDR1 57 /* Denso NDR1 microprocessor */
+#define EM_STARCORE 58 /* Motorola Star*Core processor */
+#define EM_ME16 59 /* Toyota ME16 processor */
+#define EM_ST100 60 /* STMicroelectronics ST100 processor */
+#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded processor family */
+#define EM_X86_64 62 /* AMD x86-64 architecture */
+#define EM_AMD64 EM_X86_64
+#define EM_PDSP 63 /* Sony DSP Processor */
+#define EM_FX66 66 /* Siemens FX66 microcontroller */
+#define EM_ST9PLUS 67 /* STMicroelectronics ST9+ 8/16 bit microcontroller */
+#define EM_ST7 68 /* STMicroelectronics ST7 8-bit microcontroller */
+#define EM_68HC16 69 /* Motorola MC68HC16 Microcontroller */
+#define EM_68HC11 70 /* Motorola MC68HC11 Microcontroller */
+#define EM_68HC08 71 /* Motorola MC68HC08 Microcontroller */
+#define EM_68HC05 72 /* Motorola MC68HC05 Microcontroller */
+#define EM_SVX 73 /* Silicon Graphics SVx */
+#define EM_ST19 74 /* STMicroelectronics ST19 8-bit microcontroller */
+#define EM_VAX 75 /* Digital VAX */
+#define EM_CRIS 76 /* Axis Communications 32-bit embedded processor */
+#define EM_JAVELIN 77 /* Infineon Technologies 32-bit embedded processor */
+#define EM_FIREPATH 78 /* Element 14 64-bit DSP Processor */
+#define EM_ZSP 79 /* LSI Logic 16-bit DSP Processor */
+#define EM_MMIX 80 /* Donald Knuth's educational 64-bit processor */
+#define EM_HUANY 81 /* Harvard University machine-independent object files */
+#define EM_PRISM 82 /* SiTera Prism */
+#define EM_AVR 83 /* Atmel AVR 8-bit microcontroller */
+#define EM_FR30 84 /* Fujitsu FR30 */
+#define EM_D10V 85 /* Mitsubishi D10V */
+#define EM_D30V 86 /* Mitsubishi D30V */
+#define EM_V850 87 /* NEC v850 */
+#define EM_M32R 88 /* Mitsubishi M32R */
+#define EM_MN10300 89 /* Matsushita MN10300 */
+#define EM_MN10200 90 /* Matsushita MN10200 */
+#define EM_PJ 91 /* picoJava */
+#define EM_OPENRISC 92 /* OpenRISC 32-bit embedded processor */
+#define EM_ARC_A5 93 /* ARC Cores Tangent-A5 */
+#define EM_XTENSA 94 /* Tensilica Xtensa Architecture */
+#define EM_VIDEOCORE 95 /* Alphamosaic VideoCore processor */
+#define EM_TMM_GPP 96 /* Thompson Multimedia General Purpose Processor */
+#define EM_NS32K 97 /* National Semiconductor 32000 series */
+#define EM_TPC 98 /* Tenor Network TPC processor */
+#define EM_SNP1K 99 /* Trebia SNP 1000 processor */
+#define EM_ST200 100 /* STMicroelectronics (www.st.com) ST200 microcontroller */
+#define EM_IP2K 101 /* Ubicom IP2xxx microcontroller family */
+#define EM_MAX 102 /* MAX Processor */
+#define EM_CR 103 /* National Semiconductor CompactRISC microprocessor */
+#define EM_F2MC16 104 /* Fujitsu F2MC16 */
+#define EM_MSP430 105 /* Texas Instruments embedded microcontroller msp430 */
+#define EM_BLACKFIN 106 /* Analog Devices Blackfin (DSP) processor */
+#define EM_SE_C33 107 /* S1C33 Family of Seiko Epson processors */
+#define EM_SEP 108 /* Sharp embedded microprocessor */
+#define EM_ARCA 109 /* Arca RISC Microprocessor */
+#define EM_UNICORE 110 /* Microprocessor series from PKU-Unity Ltd. and MPRC of Peking University */
+#define EM_NUM 111
+
+/*
+ * e_ident[EI_VERSION], e_version
+ */
+#define EV_NONE 0
+#define EV_CURRENT 1
+#define EV_NUM 2
+
+/*
+ * Section header
+ */
+typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+} Elf32_Shdr;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Word sh_name;
+ Elf64_Word sh_type;
+ Elf64_Xword sh_flags;
+ Elf64_Addr sh_addr;
+ Elf64_Off sh_offset;
+ Elf64_Xword sh_size;
+ Elf64_Word sh_link;
+ Elf64_Word sh_info;
+ Elf64_Xword sh_addralign;
+ Elf64_Xword sh_entsize;
+} Elf64_Shdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Special section indices
+ */
+#define SHN_UNDEF 0
+#define SHN_LORESERVE 0xff00
+#define SHN_LOPROC 0xff00
+#define SHN_HIPROC 0xff1f
+#define SHN_LOOS 0xff20
+#define SHN_HIOS 0xff3f
+#define SHN_ABS 0xfff1
+#define SHN_COMMON 0xfff2
+#define SHN_XINDEX 0xffff
+#define SHN_HIRESERVE 0xffff
+
+/*
+ * sh_type
+ */
+#define SHT_NULL 0
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_RELA 4
+#define SHT_HASH 5
+#define SHT_DYNAMIC 6
+#define SHT_NOTE 7
+#define SHT_NOBITS 8
+#define SHT_REL 9
+#define SHT_SHLIB 10
+#define SHT_DYNSYM 11
+#define SHT_INIT_ARRAY 14
+#define SHT_FINI_ARRAY 15
+#define SHT_PREINIT_ARRAY 16
+#define SHT_GROUP 17
+#define SHT_SYMTAB_SHNDX 18
+#define SHT_NUM 19
+#define SHT_LOOS 0x60000000
+#define SHT_HIOS 0x6fffffff
+#define SHT_LOPROC 0x70000000
+#define SHT_HIPROC 0x7fffffff
+#define SHT_LOUSER 0x80000000
+#define SHT_HIUSER 0xffffffff
+
+/*
+ * Solaris extensions
+ */
+#define SHT_LOSUNW 0x6ffffff4
+#define SHT_SUNW_dof 0x6ffffff4
+#define SHT_SUNW_cap 0x6ffffff5
+#define SHT_SUNW_SIGNATURE 0x6ffffff6
+#define SHT_SUNW_ANNOTATE 0x6ffffff7
+#define SHT_SUNW_DEBUGSTR 0x6ffffff8
+#define SHT_SUNW_DEBUG 0x6ffffff9
+#define SHT_SUNW_move 0x6ffffffa
+#define SHT_SUNW_COMDAT 0x6ffffffb
+#define SHT_SUNW_syminfo 0x6ffffffc
+#define SHT_SUNW_verdef 0x6ffffffd
+#define SHT_SUNW_verneed 0x6ffffffe
+#define SHT_SUNW_versym 0x6fffffff
+#define SHT_HISUNW 0x6fffffff
+
+#define SHT_SPARC_GOTDATA 0x70000000
+#define SHT_AMD64_UNWIND 0x70000001
+
+/*
+ * GNU extensions
+ */
+#define SHT_GNU_verdef 0x6ffffffd
+#define SHT_GNU_verneed 0x6ffffffe
+#define SHT_GNU_versym 0x6fffffff
+
+/*
+ * sh_flags
+ */
+#define SHF_WRITE 0x1
+#define SHF_ALLOC 0x2
+#define SHF_EXECINSTR 0x4
+#define SHF_MERGE 0x10
+#define SHF_STRINGS 0x20
+#define SHF_INFO_LINK 0x40
+#define SHF_LINK_ORDER 0x80
+#define SHF_OS_NONCONFORMING 0x100
+#define SHF_GROUP 0x200
+#define SHF_TLS 0x400
+#define SHF_MASKOS 0x0ff00000
+#define SHF_MASKPROC 0xf0000000
+
+/*
+ * Solaris extensions
+ */
+#define SHF_AMD64_LARGE 0x10000000
+#define SHF_ORDERED 0x40000000
+#define SHF_EXCLUDE 0x80000000
+
+/*
+ * Section group flags
+ */
+#define GRP_COMDAT 0x1
+#define GRP_MASKOS 0x0ff00000
+#define GRP_MASKPROC 0xf0000000
+
+/*
+ * Symbol table
+ */
+typedef struct {
+ Elf32_Word st_name;
+ Elf32_Addr st_value;
+ Elf32_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf32_Half st_shndx;
+} Elf32_Sym;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Word st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ Elf64_Half st_shndx;
+ Elf64_Addr st_value;
+ Elf64_Xword st_size;
+} Elf64_Sym;
+#endif /* __LIBELF64 */
+
+/*
+ * Special symbol indices
+ */
+#define STN_UNDEF 0
+
+/*
+ * Macros for manipulating st_info
+ */
+#define ELF32_ST_BIND(i) ((i)>>4)
+#define ELF32_ST_TYPE(i) ((i)&0xf)
+#define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
+
+#if __LIBELF64
+#define ELF64_ST_BIND(i) ((i)>>4)
+#define ELF64_ST_TYPE(i) ((i)&0xf)
+#define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
+#endif /* __LIBELF64 */
+
+/*
+ * Symbol binding
+ */
+#define STB_LOCAL 0
+#define STB_GLOBAL 1
+#define STB_WEAK 2
+#define STB_NUM 3
+#define STB_LOOS 10
+#define STB_HIOS 12
+#define STB_LOPROC 13
+#define STB_HIPROC 15
+
+/*
+ * Symbol types
+ */
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+#define STT_COMMON 5
+#define STT_TLS 6
+#define STT_NUM 7
+#define STT_LOOS 10
+#define STT_HIOS 12
+#define STT_LOPROC 13
+#define STT_HIPROC 15
+
+/*
+ * Macros for manipulating st_other
+ */
+#define ELF32_ST_VISIBILITY(o) ((o)&0x3)
+#if __LIBELF64
+#define ELF64_ST_VISIBILITY(o) ((o)&0x3)
+#endif /* __LIBELF64 */
+
+/*
+ * Symbol visibility
+ */
+#define STV_DEFAULT 0
+#define STV_INTERNAL 1
+#define STV_HIDDEN 2
+#define STV_PROTECTED 3
+
+/*
+ * Relocation
+ */
+typedef struct {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+} Elf32_Rel;
+
+typedef struct {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+ Elf32_Sword r_addend;
+} Elf32_Rela;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info;
+} Elf64_Rel;
+
+typedef struct {
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info;
+ Elf64_Sxword r_addend;
+} Elf64_Rela;
+#endif /* __LIBELF64 */
+
+/*
+ * Macros for manipulating r_info
+ */
+#define ELF32_R_SYM(i) ((i)>>8)
+#define ELF32_R_TYPE(i) ((unsigned char)(i))
+#define ELF32_R_INFO(s,t) (((s)<<8)+(unsigned char)(t))
+
+#if __LIBELF64
+#define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32)
+#define ELF64_R_TYPE(i) ((i)&0xffffffffL)
+#define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+#endif /* __LIBELF64 */
+
+/*
+ * Note entry header
+ */
+typedef struct {
+ Elf32_Word n_namesz; /* name size */
+ Elf32_Word n_descsz; /* descriptor size */
+ Elf32_Word n_type; /* descriptor type */
+} Elf32_Nhdr;
+
+#if __LIBELF64
+/* Solaris and GNU use this layout. Be compatible. */
+/* XXX: Latest ELF specs say it's 64-bit!!! */
+typedef struct {
+ Elf64_Word n_namesz; /* name size */
+ Elf64_Word n_descsz; /* descriptor size */
+ Elf64_Word n_type; /* descriptor type */
+} Elf64_Nhdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Well-known descriptor types for ET_CORE files
+ */
+#define NT_PRSTATUS 1
+#define NT_PRFPREG 2
+#define NT_PRPSINFO 3
+
+/*
+ * Program header
+ */
+typedef struct {
+ Elf32_Word p_type;
+ Elf32_Off p_offset;
+ Elf32_Addr p_vaddr;
+ Elf32_Addr p_paddr;
+ Elf32_Word p_filesz;
+ Elf32_Word p_memsz;
+ Elf32_Word p_flags;
+ Elf32_Word p_align;
+} Elf32_Phdr;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Word p_type;
+ Elf64_Word p_flags;
+ Elf64_Off p_offset;
+ Elf64_Addr p_vaddr;
+ Elf64_Addr p_paddr;
+ Elf64_Xword p_filesz;
+ Elf64_Xword p_memsz;
+ Elf64_Xword p_align;
+} Elf64_Phdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Special numbers
+ */
+#define PN_XNUM 0xffff
+
+/*
+ * p_type
+ */
+#define PT_NULL 0
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_TLS 7
+#define PT_NUM 8
+#define PT_LOOS 0x60000000
+#define PT_HIOS 0x6fffffff
+#define PT_LOPROC 0x70000000
+#define PT_HIPROC 0x7fffffff
+
+/*
+ * Solaris extensions
+ */
+
+#define PT_SUNW_UNWIND 0x6464e550
+#define PT_LOSUNW 0x6ffffffa
+#define PT_SUNWBSS 0x6ffffffa
+#define PT_SUNWSTACK 0x6ffffffb
+#define PT_SUNWDTRACE 0x6ffffffc
+#define PT_SUNWCAP 0x6ffffffd
+#define PT_HISUNW 0x6fffffff
+
+/*
+ * p_flags
+ */
+#define PF_X 0x1
+#define PF_W 0x2
+#define PF_R 0x4
+#define PF_MASKOS 0x0ff00000
+#define PF_MASKPROC 0xf0000000
+
+/*
+ * Dynamic structure
+ */
+typedef struct {
+ Elf32_Sword d_tag;
+ union {
+ Elf32_Word d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+} Elf32_Dyn;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Sxword d_tag;
+ union {
+ Elf64_Xword d_val;
+ Elf64_Addr d_ptr;
+ } d_un;
+} Elf64_Dyn;
+#endif /* __LIBELF64 */
+
+/*
+ * Dynamic array tags
+ */
+ /* d_un exec shared */
+#define DT_NULL 0 /* ign. mand. mand. */
+#define DT_NEEDED 1 /* d_val opt. opt. */
+#define DT_PLTRELSZ 2 /* d_val opt. opt. */
+#define DT_PLTGOT 3 /* d_ptr opt. opt. */
+#define DT_HASH 4 /* d_ptr mand. mand. */
+#define DT_STRTAB 5 /* d_ptr mand. mand. */
+#define DT_SYMTAB 6 /* d_ptr mand. mand. */
+#define DT_RELA 7 /* d_ptr mand. opt. */
+#define DT_RELASZ 8 /* d_val mand. opt. */
+#define DT_RELAENT 9 /* d_val mand. opt. */
+#define DT_STRSZ 10 /* d_val mand. mand. */
+#define DT_SYMENT 11 /* d_val mand. mand. */
+#define DT_INIT 12 /* d_ptr opt. opt. */
+#define DT_FINI 13 /* d_ptr opt. opt. */
+#define DT_SONAME 14 /* d_val ign. opt. */
+#define DT_RPATH 15 /* d_val opt. ign. */
+#define DT_SYMBOLIC 16 /* ign. ign. opt. */
+#define DT_REL 17 /* d_ptr mand. opt. */
+#define DT_RELSZ 18 /* d_val mand. opt. */
+#define DT_RELENT 19 /* d_val mand. opt. */
+#define DT_PLTREL 20 /* d_val opt. opt. */
+#define DT_DEBUG 21 /* d_ptr opt. ign. */
+#define DT_TEXTREL 22 /* ign. opt. opt. */
+#define DT_JMPREL 23 /* d_ptr opt. opt. */
+#define DT_BIND_NOW 24 /* ign. opt. opt. */
+#define DT_INIT_ARRAY 25 /* d_ptr opt. opt. */
+#define DT_FINI_ARRAY 26 /* d_ptr opt. opt. */
+#define DT_INIT_ARRAYSZ 27 /* d_val opt. opt. */
+#define DT_FINI_ARRAYSZ 28 /* d_val opt. opt. */
+#define DT_RUNPATH 29 /* d_val opt. opt. */
+#define DT_FLAGS 30 /* d_val opt. opt. */
+#define DT_ENCODING 32 /* odd/even encoding rule starts here */
+#define DT_PREINIT_ARRAY 32 /* d_ptr opt. ign. */
+#define DT_PREINIT_ARRAYSZ 33 /* d_val opt. ign. */
+#define DT_NUM 34
+#define DT_LOOS 0x6000000D
+#define DT_HIOS 0x6ffff000
+#define DT_LOPROC 0x70000000
+#define DT_HIPROC 0x7fffffff
+
+/*
+ * DT_FLAGS values
+ */
+#define DF_ORIGIN 0x1
+#define DF_SYMBOLIC 0x2
+#define DF_TEXTREL 0x4
+#define DF_BIND_NOW 0x8
+#define DF_STATIC_TLS 0x10
+
+/*
+ * Solaris extensions
+ */
+#define DT_VALRNGLO 0x6ffffd00
+#define DT_CHECKSUM 0x6ffffdf8
+#define DT_PLTPADSZ 0x6ffffdf9
+#define DT_MOVEENT 0x6ffffdfa
+#define DT_MOVESZ 0x6ffffdfb
+#define DT_FEATURE_1 0x6ffffdfc
+#define DT_POSFLAG_1 0x6ffffdfd
+#define DT_SYMINSZ 0x6ffffdfe
+#define DT_SYMINENT 0x6ffffdff
+#define DT_VALRNGHI 0x6ffffdff
+
+#define DT_ADDRRNGLO 0x6ffffe00
+#define DT_CONFIG 0x6ffffefa
+#define DT_DEPAUDIT 0x6ffffefb
+#define DT_AUDIT 0x6ffffefc
+#define DT_PLTPAD 0x6ffffefd
+#define DT_MOVETAB 0x6ffffefe
+#define DT_SYMINFO 0x6ffffeff
+#define DT_ADDRRNGHI 0x6ffffeff
+
+#define DT_RELACOUNT 0x6ffffff9
+#define DT_RELCOUNT 0x6ffffffa
+#define DT_FLAGS_1 0x6ffffffb
+#define DT_VERDEF 0x6ffffffc
+#define DT_VERDEFNUM 0x6ffffffd
+#define DT_VERNEED 0x6ffffffe
+#define DT_VERNEEDNUM 0x6fffffff
+
+#define DT_AUXILIARY 0x7ffffffd
+#define DT_USED 0x7ffffffe
+#define DT_FILTER 0x7fffffff
+
+/*
+ * GNU extensions
+ */
+#define DT_VERSYM 0x6ffffff0
+
+/*
+ * DT_FEATURE_1 values
+ */
+#define DTF_1_PARINIT 0x1
+#define DTF_1_CONFEXP 0x2
+
+/*
+ * DT_POSFLAG_1 values
+ */
+#define DF_P1_LAZYLOAD 0x1
+#define DF_P1_GROUPPERM 0x2
+
+/*
+ * DT_FLAGS_1 values
+ */
+#define DF_1_NOW 0x00000001
+#define DF_1_GLOBAL 0x00000002
+#define DF_1_GROUP 0x00000004
+#define DF_1_NODELETE 0x00000008
+#define DF_1_LOADFLTR 0x00000010
+#define DF_1_INITFIRST 0x00000020
+#define DF_1_NOOPEN 0x00000040
+#define DF_1_ORIGIN 0x00000080
+#define DF_1_DIRECT 0x00000100
+#define DF_1_TRANS 0x00000200
+#define DF_1_INTERPOSE 0x00000400
+#define DF_1_NODEFLIB 0x00000800
+#define DF_1_NODUMP 0x00001000
+#define DF_1_CONFALT 0x00002000
+#define DF_1_ENDFILTEE 0x00004000
+#define DF_1_DISPRELDNE 0x00008000
+#define DF_1_DISPRELPND 0x00010000
+
+/*
+ * Syminfo structure
+ */
+typedef struct {
+ Elf32_Half si_boundto;
+ Elf32_Half si_flags;
+} Elf32_Syminfo;
+
+#if __LIBELF64
+typedef struct {
+ Elf64_Half si_boundto;
+ Elf64_Half si_flags;
+} Elf64_Syminfo;
+#endif /* __LIBELF64 */
+
+/*
+ * Syminfo version (stored in unused first entry)
+ */
+#define SYMINFO_NONE 0
+#define SYMINFO_CURRENT 1
+#define SYMINFO_NUM 2
+
+/*
+ * si_boundto special values
+ */
+#define SYMINFO_BT_LOWRESERVE 0xff00
+#define SYMINFO_BT_PARENT 0xfffe /* bound to parent */
+#define SYMINFO_BT_SELF 0xffff /* bound to self */
+
+/*
+ * si_flags
+ */
+#define SYMINFO_FLG_DIRECT 0x01 /* bound to an object */
+#define SYMINFO_FLG_PASSTHRU 0x02 /* pass-thru symbol */
+#define SYMINFO_FLG_COPY 0x04 /* result of a copy relocation */
+#define SYMINFO_FLG_LAZYLOAD 0x08 /* bound to lazy-loaded object */
+
+/*
+ * Version definitions
+ */
+typedef struct {
+ Elf32_Half vd_version;
+ Elf32_Half vd_flags;
+ Elf32_Half vd_ndx;
+ Elf32_Half vd_cnt;
+ Elf32_Word vd_hash;
+ Elf32_Word vd_aux;
+ Elf32_Word vd_next;
+} Elf32_Verdef;
+
+typedef struct {
+ Elf32_Word vda_name;
+ Elf32_Word vda_next;
+} Elf32_Verdaux;
+
+typedef struct {
+ Elf32_Half vn_version;
+ Elf32_Half vn_cnt;
+ Elf32_Word vn_file;
+ Elf32_Word vn_aux;
+ Elf32_Word vn_next;
+} Elf32_Verneed;
+
+typedef struct {
+ Elf32_Word vna_hash;
+ Elf32_Half vna_flags;
+ Elf32_Half vna_other;
+ Elf32_Word vna_name;
+ Elf32_Word vna_next;
+} Elf32_Vernaux;
+
+typedef Elf32_Half Elf32_Versym;
+
+#if __LIBELF64
+
+typedef struct {
+ Elf64_Half vd_version;
+ Elf64_Half vd_flags;
+ Elf64_Half vd_ndx;
+ Elf64_Half vd_cnt;
+ Elf64_Word vd_hash;
+ Elf64_Word vd_aux;
+ Elf64_Word vd_next;
+} Elf64_Verdef;
+
+typedef struct {
+ Elf64_Word vda_name;
+ Elf64_Word vda_next;
+} Elf64_Verdaux;
+
+typedef struct {
+ Elf64_Half vn_version;
+ Elf64_Half vn_cnt;
+ Elf64_Word vn_file;
+ Elf64_Word vn_aux;
+ Elf64_Word vn_next;
+} Elf64_Verneed;
+
+typedef struct {
+ Elf64_Word vna_hash;
+ Elf64_Half vna_flags;
+ Elf64_Half vna_other;
+ Elf64_Word vna_name;
+ Elf64_Word vna_next;
+} Elf64_Vernaux;
+
+typedef Elf64_Half Elf64_Versym;
+
+#endif /* __LIBELF64 */
+
+/*
+ * vd_version
+ */
+#define VER_DEF_NONE 0
+#define VER_DEF_CURRENT 1
+#define VER_DEF_NUM 2
+
+/*
+ * vn_version
+ */
+#define VER_NEED_NONE 0
+#define VER_NEED_CURRENT 1
+#define VER_NEED_NUM 2
+
+/*
+ * vd_flags / vna_flags
+ */
+#define VER_FLG_BASE 0x1 /* vd_flags only */
+#define VER_FLG_WEAK 0x2
+
+/*
+ * Elf*_Versym special values
+ */
+#define VER_NDX_LOCAL 0
+#define VER_NDX_GLOBAL 1
+
+/*
+ * Solaris extensions
+ */
+
+/*
+ * Move section
+ */
+#if __LIBELF64
+
+typedef struct {
+ Elf32_Lword m_value;
+ Elf32_Word m_info;
+ Elf32_Word m_poffset;
+ Elf32_Half m_repeat;
+ Elf32_Half m_stride;
+} Elf32_Move;
+
+typedef struct {
+ Elf64_Lword m_value;
+ Elf64_Xword m_info;
+ Elf64_Xword m_poffset;
+ Elf64_Half m_repeat;
+ Elf64_Half m_stride;
+} Elf64_Move;
+
+#define ELF32_M_SYM(info) ((info)>>8)
+#define ELF32_M_SIZE(info) ((unsigned char)(info))
+#define ELF32_M_INFO(sym, sz) (((sym)<<8)+(unsigned char)(sz))
+
+#define ELF64_M_SYM(info) ((Elf64_Xword)(info)>>8)
+#define ELF64_M_SIZE(info) ((unsigned char)(info))
+#define ELF64_M_INFO(sym, sz) (((Elf64_Xword)(sym)<<8)+(unsigned char)(sz))
+
+#endif /* __LIBELF64 */
+
+/*
+ * Capabilities
+ */
+
+typedef struct {
+ Elf32_Word c_tag;
+ union {
+ Elf32_Word c_val;
+ Elf32_Addr c_ptr;
+ } c_un;
+} Elf32_Cap;
+
+#if __LIBELF64
+
+typedef struct {
+ Elf64_Xword c_tag;
+ union {
+ Elf64_Xword c_val;
+ Elf64_Addr c_ptr;
+ } c_un;
+} Elf64_Cap;
+
+#endif /* __LIBELF64 */
+
+#define CA_SUNW_NULL 0 /* c_un ignored */
+#define CA_SUNW_HW_1 1 /* c_un.c_val */
+#define CA_SUNW_SF_1 2 /* c_un.c_val */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _ELF_REPL_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/errors.h b/desmume/src/windows/libelf_libdwarf/libelf/errors.h
new file mode 100644
index 000000000..80ee70b92
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/errors.h
@@ -0,0 +1,100 @@
+/*
+ * errors.h - exhaustive list of all error codes and messages for libelf.
+ * Copyright (C) 1995 - 2003, 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @(#) $Id: errors.h,v 1.18 2008/05/23 08:15:34 michael Exp $ */
+
+/* dummy for xgettext */
+#define _(str) str
+
+__err__(ERROR_OK, _("no error"))
+__err__(ERROR_UNKNOWN, _("unknown error"))
+__err__(ERROR_INTERNAL, _("Internal error: unknown reason"))
+__err__(ERROR_UNIMPLEMENTED, _("Internal error: not implemented"))
+__err__(ERROR_WRONLY, _("Request error: cntl(ELF_C_FDREAD) on write-only file"))
+__err__(ERROR_INVALID_CMD, _("Request error: invalid ELF_C_* argument"))
+__err__(ERROR_FDDISABLED, _("Request error: file descriptor disabled"))
+__err__(ERROR_NOTARCHIVE, _("Request error: not an archive"))
+__err__(ERROR_BADOFF, _("Request error: offset out of range"))
+__err__(ERROR_UNKNOWN_VERSION, _("Request error: unknown ELF version"))
+__err__(ERROR_CMDMISMATCH, _("Request error: ELF_C_* argument does not match"))
+__err__(ERROR_MEMBERWRITE, _("Request error: archive member begin() for writing"))
+__err__(ERROR_FDMISMATCH, _("Request error: archive/member file descriptor mismatch"))
+__err__(ERROR_NOTELF, _("Request error: not an ELF file"))
+__err__(ERROR_CLASSMISMATCH, _("Request error: class file/memory mismatch"))
+__err__(ERROR_UNKNOWN_TYPE, _("Request error: invalid ELF_T_* argument"))
+__err__(ERROR_UNKNOWN_ENCODING, _("Request error: unknown data encoding"))
+__err__(ERROR_DST2SMALL, _("Request error: destination buffer too small"))
+__err__(ERROR_NULLBUF, _("Request error: d_buf is NULL"))
+__err__(ERROR_UNKNOWN_CLASS, _("Request error: unknown ELF class"))
+__err__(ERROR_ELFSCNMISMATCH, _("Request error: section does not belong to file"))
+__err__(ERROR_NOSUCHSCN, _("Request error: no section at index"))
+__err__(ERROR_NULLSCN, _("Request error: can't manipulate null section"))
+__err__(ERROR_SCNDATAMISMATCH, _("Request error: data does not belong to section"))
+__err__(ERROR_NOSTRTAB, _("Request error: no string table"))
+__err__(ERROR_BADSTROFF, _("Request error: string table offset out of range"))
+__err__(ERROR_RDONLY, _("Request error: update(ELF_C_WRITE) on read-only file"))
+__err__(ERROR_IO_SEEK, _("I/O error: seek"))
+__err__(ERROR_IO_2BIG, _("I/O error: file too big for memory"))
+__err__(ERROR_IO_READ, _("I/O error: raw read"))
+__err__(ERROR_IO_GETSIZE, _("I/O error: get file size"))
+__err__(ERROR_IO_WRITE, _("I/O error: output write"))
+__err__(ERROR_IO_TRUNC, _("I/O error: can't truncate output file"))
+__err__(ERROR_VERSION_UNSET, _("Sequence error: must set ELF version first"))
+__err__(ERROR_NOEHDR, _("Sequence error: must create ELF header first"))
+__err__(ERROR_OUTSIDE, _("Format error: reference outside file"))
+__err__(ERROR_TRUNC_ARHDR, _("Format error: archive header truncated"))
+__err__(ERROR_ARFMAG, _("Format error: archive fmag"))
+__err__(ERROR_ARHDR, _("Format error: archive header"))
+__err__(ERROR_TRUNC_MEMBER, _("Format error: archive member truncated"))
+__err__(ERROR_SIZE_ARSYMTAB, _("Format error: archive symbol table size"))
+__err__(ERROR_ARSTRTAB, _("Format error: archive string table"))
+__err__(ERROR_ARSPECIAL, _("Format error: archive special name unknown"))
+__err__(ERROR_TRUNC_EHDR, _("Format error: ELF header truncated"))
+__err__(ERROR_TRUNC_PHDR, _("Format error: program header table truncated"))
+__err__(ERROR_TRUNC_SHDR, _("Format error: section header table truncated"))
+__err__(ERROR_TRUNC_SCN, _("Format error: data region truncated"))
+__err__(ERROR_ALIGN_PHDR, _("Format error: program header table alignment"))
+__err__(ERROR_ALIGN_SHDR, _("Format error: section header table alignment"))
+__err__(ERROR_VERDEF_FORMAT, _("Format error: bad parameter in Verdef record"))
+__err__(ERROR_VERDEF_VERSION, _("Format error: unknown Verdef version"))
+__err__(ERROR_VERNEED_FORMAT, _("Format error: bad parameter in Verneed record"))
+__err__(ERROR_VERNEED_VERSION, _("Format error: unknown Verneed version"))
+__err__(ERROR_EHDR_SHNUM, _("Format error: bad e_shnum value"))
+__err__(ERROR_EHDR_SHENTSIZE, _("Format error: bad e_shentsize value"))
+__err__(ERROR_EHDR_PHENTSIZE, _("Format error: bad e_phentsize value"))
+__err__(ERROR_UNTERM, _("Format error: unterminated string in string table"))
+__err__(ERROR_SCN2SMALL, _("Layout error: section size too small for data"))
+__err__(ERROR_SCN_OVERLAP, _("Layout error: overlapping sections"))
+__err__(ERROR_MEM_ELF, _("Memory error: elf descriptor"))
+__err__(ERROR_MEM_ARSYMTAB, _("Memory error: archive symbol table"))
+__err__(ERROR_MEM_ARHDR, _("Memory error: archive member header"))
+__err__(ERROR_MEM_EHDR, _("Memory error: ELF header"))
+__err__(ERROR_MEM_PHDR, _("Memory error: program header table"))
+__err__(ERROR_MEM_SHDR, _("Memory error: section header table"))
+__err__(ERROR_MEM_SCN, _("Memory error: section descriptor"))
+__err__(ERROR_MEM_SCNDATA, _("Memory error: section data"))
+__err__(ERROR_MEM_OUTBUF, _("Memory error: output file space"))
+__err__(ERROR_MEM_TEMPORARY, _("Memory error: temporary buffer"))
+__err__(ERROR_BADVALUE, _("GElf error: value out of range"))
+__err__(ERROR_BADINDEX, _("GElf error: index out of range"))
+__err__(ERROR_BADTYPE, _("GElf error: type mismatch"))
+__err__(ERROR_MEM_SYM, _("GElf error: not enough memory for GElf_Sym"))
+__err__(ERROR_MEM_DYN, _("GElf error: not enough memory for GElf_Dyn"))
+__err__(ERROR_MEM_RELA, _("GElf error: not enough memory for GElf_Rela"))
+__err__(ERROR_MEM_REL, _("GElf error: not enough memory for GElf_Rel"))
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/ext_types.h b/desmume/src/windows/libelf_libdwarf/libelf/ext_types.h
new file mode 100644
index 000000000..ead116db0
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/ext_types.h
@@ -0,0 +1,334 @@
+/*
+ext_types.h - external representation of ELF data types.
+Copyright (C) 1995 - 1998 Michael Riepe
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public
+License as published by the Free Software Foundation; either
+version 2 of the License, or (at your option) any later version.
+
+This library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with this library; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+*/
+
+/* @(#) $Id: ext_types.h,v 1.9 2008/05/23 08:15:34 michael Exp $ */
+
+#ifndef _EXT_TYPES_H
+#define _EXT_TYPES_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+/*
+ * Scalar data types
+ */
+typedef unsigned char __ext_Elf32_Addr [ELF32_FSZ_ADDR];
+typedef unsigned char __ext_Elf32_Half [ELF32_FSZ_HALF];
+typedef unsigned char __ext_Elf32_Off [ELF32_FSZ_OFF];
+typedef unsigned char __ext_Elf32_Sword [ELF32_FSZ_SWORD];
+typedef unsigned char __ext_Elf32_Word [ELF32_FSZ_WORD];
+
+#if __LIBELF64
+
+typedef unsigned char __ext_Elf32_Lword [8];
+
+typedef unsigned char __ext_Elf64_Addr [ELF64_FSZ_ADDR];
+typedef unsigned char __ext_Elf64_Half [ELF64_FSZ_HALF];
+typedef unsigned char __ext_Elf64_Off [ELF64_FSZ_OFF];
+typedef unsigned char __ext_Elf64_Sword [ELF64_FSZ_SWORD];
+typedef unsigned char __ext_Elf64_Word [ELF64_FSZ_WORD];
+typedef unsigned char __ext_Elf64_Sxword[ELF64_FSZ_SXWORD];
+typedef unsigned char __ext_Elf64_Xword [ELF64_FSZ_XWORD];
+
+typedef unsigned char __ext_Elf64_Lword [8];
+
+#endif /* __LIBELF64 */
+
+/*
+ * ELF header
+ */
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ __ext_Elf32_Half e_type;
+ __ext_Elf32_Half e_machine;
+ __ext_Elf32_Word e_version;
+ __ext_Elf32_Addr e_entry;
+ __ext_Elf32_Off e_phoff;
+ __ext_Elf32_Off e_shoff;
+ __ext_Elf32_Word e_flags;
+ __ext_Elf32_Half e_ehsize;
+ __ext_Elf32_Half e_phentsize;
+ __ext_Elf32_Half e_phnum;
+ __ext_Elf32_Half e_shentsize;
+ __ext_Elf32_Half e_shnum;
+ __ext_Elf32_Half e_shstrndx;
+} __ext_Elf32_Ehdr;
+
+#if __LIBELF64
+typedef struct {
+ unsigned char e_ident[EI_NIDENT];
+ __ext_Elf64_Half e_type;
+ __ext_Elf64_Half e_machine;
+ __ext_Elf64_Word e_version;
+ __ext_Elf64_Addr e_entry;
+ __ext_Elf64_Off e_phoff;
+ __ext_Elf64_Off e_shoff;
+ __ext_Elf64_Word e_flags;
+ __ext_Elf64_Half e_ehsize;
+ __ext_Elf64_Half e_phentsize;
+ __ext_Elf64_Half e_phnum;
+ __ext_Elf64_Half e_shentsize;
+ __ext_Elf64_Half e_shnum;
+ __ext_Elf64_Half e_shstrndx;
+} __ext_Elf64_Ehdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Section header
+ */
+typedef struct {
+ __ext_Elf32_Word sh_name;
+ __ext_Elf32_Word sh_type;
+ __ext_Elf32_Word sh_flags;
+ __ext_Elf32_Addr sh_addr;
+ __ext_Elf32_Off sh_offset;
+ __ext_Elf32_Word sh_size;
+ __ext_Elf32_Word sh_link;
+ __ext_Elf32_Word sh_info;
+ __ext_Elf32_Word sh_addralign;
+ __ext_Elf32_Word sh_entsize;
+} __ext_Elf32_Shdr;
+
+#if __LIBELF64
+typedef struct {
+ __ext_Elf64_Word sh_name;
+ __ext_Elf64_Word sh_type;
+ __ext_Elf64_Xword sh_flags;
+ __ext_Elf64_Addr sh_addr;
+ __ext_Elf64_Off sh_offset;
+ __ext_Elf64_Xword sh_size;
+ __ext_Elf64_Word sh_link;
+ __ext_Elf64_Word sh_info;
+ __ext_Elf64_Xword sh_addralign;
+ __ext_Elf64_Xword sh_entsize;
+} __ext_Elf64_Shdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Symbol table
+ */
+typedef struct {
+ __ext_Elf32_Word st_name;
+ __ext_Elf32_Addr st_value;
+ __ext_Elf32_Word st_size;
+ unsigned char st_info;
+ unsigned char st_other;
+ __ext_Elf32_Half st_shndx;
+} __ext_Elf32_Sym;
+
+#if __LIBELF64
+typedef struct {
+ __ext_Elf64_Word st_name;
+ unsigned char st_info;
+ unsigned char st_other;
+ __ext_Elf64_Half st_shndx;
+ __ext_Elf64_Addr st_value;
+ __ext_Elf64_Xword st_size;
+} __ext_Elf64_Sym;
+#endif /* __LIBELF64 */
+
+/*
+ * Relocation
+ */
+typedef struct {
+ __ext_Elf32_Addr r_offset;
+ __ext_Elf32_Word r_info;
+} __ext_Elf32_Rel;
+
+typedef struct {
+ __ext_Elf32_Addr r_offset;
+ __ext_Elf32_Word r_info;
+ __ext_Elf32_Sword r_addend;
+} __ext_Elf32_Rela;
+
+#if __LIBELF64
+typedef struct {
+ __ext_Elf64_Addr r_offset;
+#if __LIBELF64_IRIX
+ __ext_Elf64_Word r_sym;
+ unsigned char r_ssym;
+ unsigned char r_type3;
+ unsigned char r_type2;
+ unsigned char r_type;
+#else /* __LIBELF64_IRIX */
+ __ext_Elf64_Xword r_info;
+#endif /* __LIBELF64_IRIX */
+} __ext_Elf64_Rel;
+
+typedef struct {
+ __ext_Elf64_Addr r_offset;
+#if __LIBELF64_IRIX
+ __ext_Elf64_Word r_sym;
+ unsigned char r_ssym;
+ unsigned char r_type3;
+ unsigned char r_type2;
+ unsigned char r_type;
+#else /* __LIBELF64_IRIX */
+ __ext_Elf64_Xword r_info;
+#endif /* __LIBELF64_IRIX */
+ __ext_Elf64_Sxword r_addend;
+} __ext_Elf64_Rela;
+#endif /* __LIBELF64 */
+
+/*
+ * Program header
+ */
+typedef struct {
+ __ext_Elf32_Word p_type;
+ __ext_Elf32_Off p_offset;
+ __ext_Elf32_Addr p_vaddr;
+ __ext_Elf32_Addr p_paddr;
+ __ext_Elf32_Word p_filesz;
+ __ext_Elf32_Word p_memsz;
+ __ext_Elf32_Word p_flags;
+ __ext_Elf32_Word p_align;
+} __ext_Elf32_Phdr;
+
+#if __LIBELF64
+typedef struct {
+ __ext_Elf64_Word p_type;
+ __ext_Elf64_Word p_flags;
+ __ext_Elf64_Off p_offset;
+ __ext_Elf64_Addr p_vaddr;
+ __ext_Elf64_Addr p_paddr;
+ __ext_Elf64_Xword p_filesz;
+ __ext_Elf64_Xword p_memsz;
+ __ext_Elf64_Xword p_align;
+} __ext_Elf64_Phdr;
+#endif /* __LIBELF64 */
+
+/*
+ * Dynamic structure
+ */
+typedef struct {
+ __ext_Elf32_Sword d_tag;
+ union {
+ __ext_Elf32_Word d_val;
+ __ext_Elf32_Addr d_ptr;
+ } d_un;
+} __ext_Elf32_Dyn;
+
+#if __LIBELF64
+typedef struct {
+ __ext_Elf64_Sxword d_tag;
+ union {
+ __ext_Elf64_Xword d_val;
+ __ext_Elf64_Addr d_ptr;
+ } d_un;
+} __ext_Elf64_Dyn;
+#endif /* __LIBELF64 */
+
+/*
+ * Version definitions
+ */
+typedef struct {
+ __ext_Elf32_Half vd_version;
+ __ext_Elf32_Half vd_flags;
+ __ext_Elf32_Half vd_ndx;
+ __ext_Elf32_Half vd_cnt;
+ __ext_Elf32_Word vd_hash;
+ __ext_Elf32_Word vd_aux;
+ __ext_Elf32_Word vd_next;
+} __ext_Elf32_Verdef;
+
+typedef struct {
+ __ext_Elf32_Word vda_name;
+ __ext_Elf32_Word vda_next;
+} __ext_Elf32_Verdaux;
+
+typedef struct {
+ __ext_Elf32_Half vn_version;
+ __ext_Elf32_Half vn_cnt;
+ __ext_Elf32_Word vn_file;
+ __ext_Elf32_Word vn_aux;
+ __ext_Elf32_Word vn_next;
+} __ext_Elf32_Verneed;
+
+typedef struct {
+ __ext_Elf32_Word vna_hash;
+ __ext_Elf32_Half vna_flags;
+ __ext_Elf32_Half vna_other;
+ __ext_Elf32_Word vna_name;
+ __ext_Elf32_Word vna_next;
+} __ext_Elf32_Vernaux;
+
+#if __LIBELF64
+
+typedef struct {
+ __ext_Elf64_Half vd_version;
+ __ext_Elf64_Half vd_flags;
+ __ext_Elf64_Half vd_ndx;
+ __ext_Elf64_Half vd_cnt;
+ __ext_Elf64_Word vd_hash;
+ __ext_Elf64_Word vd_aux;
+ __ext_Elf64_Word vd_next;
+} __ext_Elf64_Verdef;
+
+typedef struct {
+ __ext_Elf64_Word vda_name;
+ __ext_Elf64_Word vda_next;
+} __ext_Elf64_Verdaux;
+
+typedef struct {
+ __ext_Elf64_Half vn_version;
+ __ext_Elf64_Half vn_cnt;
+ __ext_Elf64_Word vn_file;
+ __ext_Elf64_Word vn_aux;
+ __ext_Elf64_Word vn_next;
+} __ext_Elf64_Verneed;
+
+typedef struct {
+ __ext_Elf64_Word vna_hash;
+ __ext_Elf64_Half vna_flags;
+ __ext_Elf64_Half vna_other;
+ __ext_Elf64_Word vna_name;
+ __ext_Elf64_Word vna_next;
+} __ext_Elf64_Vernaux;
+
+#endif /* __LIBELF64 */
+
+/*
+ * Move section
+ */
+#if __LIBELF64
+
+typedef struct {
+ __ext_Elf32_Lword m_value;
+ __ext_Elf32_Word m_info;
+ __ext_Elf32_Word m_poffset;
+ __ext_Elf32_Half m_repeat;
+ __ext_Elf32_Half m_stride;
+} __ext_Elf32_Move;
+
+typedef struct {
+ __ext_Elf64_Lword m_value;
+ __ext_Elf64_Xword m_info;
+ __ext_Elf64_Xword m_poffset;
+ __ext_Elf64_Half m_repeat;
+ __ext_Elf64_Half m_stride;
+} __ext_Elf64_Move;
+
+#endif /* __LIBELF64 */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _EXT_TYPES_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/gelf.h b/desmume/src/windows/libelf_libdwarf/libelf/gelf.h
new file mode 100644
index 000000000..5af055899
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/gelf.h
@@ -0,0 +1,155 @@
+/*
+ * gelf.h - public header file for libelf.
+ * Copyright (C) 2000 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @(#) $Id: gelf.h,v 1.16 2008/05/23 08:15:34 michael Exp $ */
+
+#ifndef _GELF_H
+#define _GELF_H
+
+#if __LIBELF_INTERNAL__
+#include
+#else /* __LIBELF_INTERNAL__ */
+#include
+#endif /* __LIBELF_INTERNAL__ */
+
+#if __LIBELF_NEED_LINK_H
+#include
+#elif __LIBELF_NEED_SYS_LINK_H
+#include
+#endif /* __LIBELF_NEED_LINK_H */
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifndef __P
+# if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32)
+# define __P(args) args
+# else /* __STDC__ || defined(__cplusplus) */
+# define __P(args) ()
+# endif /* __STDC__ || defined(__cplusplus) */
+#endif /* __P */
+
+#if !__LIBELF64
+
+#error "GElf is not supported on this system."
+
+#else /* __LIBELF64 */
+
+typedef Elf64_Addr GElf_Addr;
+typedef Elf64_Half GElf_Half;
+typedef Elf64_Off GElf_Off;
+typedef Elf64_Sword GElf_Sword;
+typedef Elf64_Word GElf_Word;
+typedef Elf64_Sxword GElf_Sxword;
+typedef Elf64_Xword GElf_Xword;
+
+typedef Elf64_Ehdr GElf_Ehdr;
+typedef Elf64_Phdr GElf_Phdr;
+typedef Elf64_Shdr GElf_Shdr;
+typedef Elf64_Dyn GElf_Dyn;
+typedef Elf64_Rel GElf_Rel;
+typedef Elf64_Rela GElf_Rela;
+typedef Elf64_Sym GElf_Sym;
+
+/*
+ * Symbol versioning
+ */
+#if __LIBELF_SYMBOL_VERSIONS
+typedef Elf64_Verdef GElf_Verdef;
+typedef Elf64_Verneed GElf_Verneed;
+typedef Elf64_Verdaux GElf_Verdaux;
+typedef Elf64_Vernaux GElf_Vernaux;
+#endif /* __LIBELF_SYMBOL_VERSIONS */
+
+/*
+ * These types aren't implemented (yet)
+ *
+typedef Elf64_Move GElf_Move;
+typedef Elf64_Syminfo GElf_Syminfo;
+ */
+
+/*
+ * Generic macros
+ */
+#define GELF_ST_BIND ELF64_ST_BIND
+#define GELF_ST_TYPE ELF64_ST_TYPE
+#define GELF_ST_INFO ELF64_ST_INFO
+
+#define GELF_R_TYPE ELF64_R_TYPE
+#define GELF_R_SYM ELF64_R_SYM
+#define GELF_R_INFO ELF64_R_INFO
+
+/*
+ * Function declarations
+ */
+extern int gelf_getclass __P((Elf *__elf));
+
+extern size_t gelf_fsize __P((Elf *__elf, Elf_Type __type, size_t __count, unsigned __ver));
+
+extern Elf_Data *gelf_xlatetof __P((Elf *__elf, Elf_Data *__dst, const Elf_Data *__src, unsigned __encode));
+extern Elf_Data *gelf_xlatetom __P((Elf *__elf, Elf_Data *__dst, const Elf_Data *__src, unsigned __encode));
+
+extern GElf_Ehdr *gelf_getehdr __P((Elf *__elf, GElf_Ehdr *__dst));
+extern int gelf_update_ehdr __P((Elf *__elf, GElf_Ehdr *__src));
+extern unsigned long gelf_newehdr __P((Elf *__elf, int __elfclass));
+
+extern GElf_Phdr *gelf_getphdr __P((Elf *__elf, int ndx, GElf_Phdr *__dst));
+extern int gelf_update_phdr __P((Elf *__elf, int ndx, GElf_Phdr *__src));
+extern unsigned long gelf_newphdr __P((Elf *__elf, size_t __phnum));
+
+extern GElf_Shdr *gelf_getshdr __P((Elf_Scn *__scn, GElf_Shdr *__dst));
+extern int gelf_update_shdr __P((Elf_Scn *__scn, GElf_Shdr *__src));
+
+extern GElf_Dyn *gelf_getdyn __P((Elf_Data *__src, int __ndx, GElf_Dyn *__dst));
+extern int gelf_update_dyn __P((Elf_Data *__dst, int __ndx, GElf_Dyn *__src));
+
+extern GElf_Rel *gelf_getrel __P((Elf_Data *__src, int __ndx, GElf_Rel *__dst));
+extern int gelf_update_rel __P((Elf_Data *__dst, int __ndx, GElf_Rel *__src));
+
+extern GElf_Rela *gelf_getrela __P((Elf_Data *__src, int __ndx, GElf_Rela *__dst));
+extern int gelf_update_rela __P((Elf_Data *__dst, int __ndx, GElf_Rela *__src));
+
+extern GElf_Sym *gelf_getsym __P((Elf_Data *__src, int __ndx, GElf_Sym *__dst));
+extern int gelf_update_sym __P((Elf_Data *__dst, int __ndx, GElf_Sym *__src));
+
+extern long gelf_checksum __P((Elf *__elf));
+
+/*
+ * These functions aren't implemented (yet)
+ *
+extern GElf_Move *gelf_getmove __P((Elf_Data *__src, int __ndx, GElf_Move *__src));
+extern int gelf_update_move __P((Elf_Data *__dst, int __ndx, GElf_Move *__src));
+ *
+extern GElf_Syminfo* gelf_getsyminfo __P((Elf_Data *__src, int __ndx, GElf_Syminfo *__dst));
+extern int gelf_update_syminfo __P((Elf_Data *__dst, int __ndx, GElf_Syminfo *__src));
+ */
+
+/*
+ * Extensions (not available in other versions of libelf)
+ */
+extern size_t gelf_msize __P((Elf *__elf, Elf_Type __type, size_t __count, unsigned __ver));
+
+#endif /* __LIBELF64 */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _GELF_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/libelf.h b/desmume/src/windows/libelf_libdwarf/libelf/libelf.h
new file mode 100644
index 000000000..3ebd0f3f9
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/libelf.h
@@ -0,0 +1,305 @@
+/*
+ * libelf.h - public header file for libelf.
+ * Copyright (C) 1995 - 2008 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @(#) $Id: libelf.h,v 1.29 2009/07/07 17:57:43 michael Exp $ */
+
+#ifndef _LIBELF_H
+#define _LIBELF_H
+
+#include /* for size_t */
+#include
+
+#if __LIBELF_INTERNAL__
+#include
+#else /* __LIBELF_INTERNAL__ */
+#include
+#endif /* __LIBELF_INTERNAL__ */
+
+#if defined __GNUC__ && !defined __cplusplus
+#define DEPRECATED __attribute__((deprecated))
+#else
+#define DEPRECATED /* nothing */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+#ifndef __P
+# if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32)
+# define __P(args) args
+# else /* __STDC__ || defined(__cplusplus) */
+# define __P(args) ()
+# endif /* __STDC__ || defined(__cplusplus) */
+#endif /* __P */
+
+/*
+ * Commands
+ */
+typedef enum {
+ ELF_C_NULL = 0, /* must be first, 0 */
+ ELF_C_READ,
+ ELF_C_WRITE,
+ ELF_C_CLR,
+ ELF_C_SET,
+ ELF_C_FDDONE,
+ ELF_C_FDREAD,
+ ELF_C_RDWR,
+ ELF_C_NUM /* must be last */
+} Elf_Cmd;
+
+/*
+ * Flags
+ */
+#define ELF_F_DIRTY 0x1
+#define ELF_F_LAYOUT 0x4
+/*
+ * Allow sections to overlap when ELF_F_LAYOUT is in effect.
+ * Note that this flag ist NOT portable, and that it may render
+ * the output file unusable. Use with extreme caution!
+ */
+#define ELF_F_LAYOUT_OVERLAP 0x10000000
+
+/*
+ * File types
+ */
+typedef enum {
+ ELF_K_NONE = 0, /* must be first, 0 */
+ ELF_K_AR,
+ ELF_K_COFF,
+ ELF_K_ELF,
+ ELF_K_NUM /* must be last */
+} Elf_Kind;
+
+/*
+ * Data types
+ */
+typedef enum {
+ ELF_T_BYTE = 0, /* must be first, 0 */
+ ELF_T_ADDR,
+ ELF_T_DYN,
+ ELF_T_EHDR,
+ ELF_T_HALF,
+ ELF_T_OFF,
+ ELF_T_PHDR,
+ ELF_T_RELA,
+ ELF_T_REL,
+ ELF_T_SHDR,
+ ELF_T_SWORD,
+ ELF_T_SYM,
+ ELF_T_WORD,
+ /*
+ * New stuff for 64-bit.
+ *
+ * Most implementations add ELF_T_SXWORD after ELF_T_SWORD
+ * which breaks binary compatibility with earlier versions.
+ * If this causes problems for you, contact me.
+ */
+ ELF_T_SXWORD,
+ ELF_T_XWORD,
+ /*
+ * Symbol versioning. Sun broke binary compatibility (again!),
+ * but I won't.
+ */
+ ELF_T_VDEF,
+ ELF_T_VNEED,
+ ELF_T_NUM /* must be last */
+} Elf_Type;
+
+/*
+ * Elf descriptor
+ */
+typedef struct Elf Elf;
+
+/*
+ * Section descriptor
+ */
+typedef struct Elf_Scn Elf_Scn;
+
+/*
+ * Archive member header
+ */
+typedef struct {
+ char* ar_name;
+ time_t ar_date;
+ long ar_uid;
+ long ar_gid;
+ unsigned long ar_mode;
+ off_t ar_size;
+ char* ar_rawname;
+} Elf_Arhdr;
+
+/*
+ * Archive symbol table
+ */
+typedef struct {
+ char* as_name;
+ size_t as_off;
+ unsigned long as_hash;
+} Elf_Arsym;
+
+/*
+ * Data descriptor
+ */
+typedef struct {
+ void* d_buf;
+ Elf_Type d_type;
+ size_t d_size;
+ off_t d_off;
+ size_t d_align;
+ unsigned d_version;
+} Elf_Data;
+
+/*
+ * Function declarations
+ */
+extern Elf *elf_begin __P((int __fd, Elf_Cmd __cmd, Elf *__ref));
+extern Elf *elf_memory __P((char *__image, size_t __size));
+extern int elf_cntl __P((Elf *__elf, Elf_Cmd __cmd));
+extern int elf_end __P((Elf *__elf));
+extern const char *elf_errmsg __P((int __err));
+extern int elf_errno __P((void));
+extern void elf_fill __P((int __fill));
+extern unsigned elf_flagdata __P((Elf_Data *__data, Elf_Cmd __cmd,
+ unsigned __flags));
+extern unsigned elf_flagehdr __P((Elf *__elf, Elf_Cmd __cmd,
+ unsigned __flags));
+extern unsigned elf_flagelf __P((Elf *__elf, Elf_Cmd __cmd,
+ unsigned __flags));
+extern unsigned elf_flagphdr __P((Elf *__elf, Elf_Cmd __cmd,
+ unsigned __flags));
+extern unsigned elf_flagscn __P((Elf_Scn *__scn, Elf_Cmd __cmd,
+ unsigned __flags));
+extern unsigned elf_flagshdr __P((Elf_Scn *__scn, Elf_Cmd __cmd,
+ unsigned __flags));
+extern size_t elf32_fsize __P((Elf_Type __type, size_t __count,
+ unsigned __ver));
+extern Elf_Arhdr *elf_getarhdr __P((Elf *__elf));
+extern Elf_Arsym *elf_getarsym __P((Elf *__elf, size_t *__ptr));
+extern off_t elf_getbase __P((Elf *__elf));
+extern Elf_Data *elf_getdata __P((Elf_Scn *__scn, Elf_Data *__data));
+extern Elf32_Ehdr *elf32_getehdr __P((Elf *__elf));
+extern char *elf_getident __P((Elf *__elf, size_t *__ptr));
+extern Elf32_Phdr *elf32_getphdr __P((Elf *__elf));
+extern Elf_Scn *elf_getscn __P((Elf *__elf, size_t __index));
+extern Elf32_Shdr *elf32_getshdr __P((Elf_Scn *__scn));
+extern unsigned long elf_hash __P((const unsigned char *__name));
+extern Elf_Kind elf_kind __P((Elf *__elf));
+extern size_t elf_ndxscn __P((Elf_Scn *__scn));
+extern Elf_Data *elf_newdata __P((Elf_Scn *__scn));
+extern Elf32_Ehdr *elf32_newehdr __P((Elf *__elf));
+extern Elf32_Phdr *elf32_newphdr __P((Elf *__elf, size_t __count));
+extern Elf_Scn *elf_newscn __P((Elf *__elf));
+extern Elf_Cmd elf_next __P((Elf *__elf));
+extern Elf_Scn *elf_nextscn __P((Elf *__elf, Elf_Scn *__scn));
+extern size_t elf_rand __P((Elf *__elf, size_t __offset));
+extern Elf_Data *elf_rawdata __P((Elf_Scn *__scn, Elf_Data *__data));
+extern char *elf_rawfile __P((Elf *__elf, size_t *__ptr));
+extern char *elf_strptr __P((Elf *__elf, size_t __section, size_t __offset));
+extern off_t elf_update __P((Elf *__elf, Elf_Cmd __cmd));
+extern unsigned elf_version __P((unsigned __ver));
+extern Elf_Data *elf32_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src,
+ unsigned __encode));
+extern Elf_Data *elf32_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src,
+ unsigned __encode));
+
+/*
+ * Additional functions found on Solaris
+ */
+extern long elf32_checksum __P((Elf *__elf));
+
+#if __LIBELF64
+/*
+ * 64-bit ELF functions
+ * Not available on all platforms
+ */
+extern Elf64_Ehdr *elf64_getehdr __P((Elf *__elf));
+extern Elf64_Ehdr *elf64_newehdr __P((Elf *__elf));
+extern Elf64_Phdr *elf64_getphdr __P((Elf *__elf));
+extern Elf64_Phdr *elf64_newphdr __P((Elf *__elf, size_t __count));
+extern Elf64_Shdr *elf64_getshdr __P((Elf_Scn *__scn));
+extern size_t elf64_fsize __P((Elf_Type __type, size_t __count,
+ unsigned __ver));
+extern Elf_Data *elf64_xlatetof __P((Elf_Data *__dst, const Elf_Data *__src,
+ unsigned __encode));
+extern Elf_Data *elf64_xlatetom __P((Elf_Data *__dst, const Elf_Data *__src,
+ unsigned __encode));
+
+/*
+ * Additional functions found on Solaris
+ */
+extern long elf64_checksum __P((Elf *__elf));
+
+#endif /* __LIBELF64 */
+
+/*
+ * ELF format extensions
+ *
+ * These functions return 0 on failure, 1 on success. Since other
+ * implementations of libelf may behave differently (there was quite
+ * some confusion about the correct values), they are now officially
+ * deprecated and should be replaced with the three new functions below.
+ */
+DEPRECATED extern int elf_getphnum __P((Elf *__elf, size_t *__resultp));
+DEPRECATED extern int elf_getshnum __P((Elf *__elf, size_t *__resultp));
+DEPRECATED extern int elf_getshstrndx __P((Elf *__elf, size_t *__resultp));
+/*
+ * Replacement functions (return -1 on failure, 0 on success).
+ */
+extern int elf_getphdrnum __P((Elf *__elf, size_t *__resultp));
+extern int elf_getshdrnum __P((Elf *__elf, size_t *__resultp));
+extern int elf_getshdrstrndx __P((Elf *__elf, size_t *__resultp));
+
+/*
+ * Convenience functions
+ *
+ * elfx_update_shstrndx is elf_getshstrndx's counterpart.
+ * It should be used to set the e_shstrndx member.
+ * There is no update function for e_shnum or e_phnum
+ * because libelf handles them internally.
+ */
+extern int elfx_update_shstrndx __P((Elf *__elf, size_t __index));
+
+/*
+ * Experimental extensions:
+ *
+ * elfx_movscn() moves section `__scn' directly after section `__after'.
+ * elfx_remscn() removes section `__scn'. Both functions update
+ * the section indices; elfx_remscn() also adjusts the ELF header's
+ * e_shnum member. The application is responsible for updating other
+ * data (in particular, e_shstrndx and the section headers' sh_link and
+ * sh_info members).
+ *
+ * elfx_movscn() returns the new index of the moved section.
+ * elfx_remscn() returns the original index of the removed section.
+ * A return value of zero indicates an error.
+ */
+extern size_t elfx_movscn __P((Elf *__elf, Elf_Scn *__scn, Elf_Scn *__after));
+extern size_t elfx_remscn __P((Elf *__elf, Elf_Scn *__scn));
+
+/*
+ * elf_delscn() is obsolete. Please use elfx_remscn() instead.
+ */
+extern size_t elf_delscn __P((Elf *__elf, Elf_Scn *__scn));
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _LIBELF_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/nlist.h b/desmume/src/windows/libelf_libdwarf/libelf/nlist.h
new file mode 100644
index 000000000..27a452ec5
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/nlist.h
@@ -0,0 +1,48 @@
+/*
+ * nlist.h - public header file for nlist(3).
+ * Copyright (C) 1995 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+/* @(#) $Id: nlist.h,v 1.10 2008/05/23 08:15:35 michael Exp $ */
+
+#ifndef _NLIST_H
+#define _NLIST_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif /* __cplusplus */
+
+struct nlist {
+ char* n_name;
+ long n_value;
+ short n_scnum;
+ unsigned short n_type;
+ char n_sclass;
+ char n_numaux;
+};
+
+#if (__STDC__ + 0) || defined(__cplusplus) || defined(_WIN32)
+extern int nlist(const char *__filename, struct nlist *__nl);
+#else /* __STDC__ || defined(__cplusplus) */
+extern int nlist();
+#endif /* __STDC__ || defined(__cplusplus) */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* _NLIST_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/sys_elf.h b/desmume/src/windows/libelf_libdwarf/libelf/sys_elf.h
new file mode 100644
index 000000000..0f93c5598
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/sys_elf.h
@@ -0,0 +1,130 @@
+/*
+ * lib/sys_elf.h.w32 - internal configuration file for W32 port
+ * Copyright (C) 2004 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * @(#) $Id: sys_elf.h.w32,v 1.2 2006/09/07 15:55:42 michael Exp $
+ */
+
+/*
+ * DO NOT USE THIS IN APPLICATIONS - #include INSTEAD!
+ */
+
+/* Define to `' or `' if one of them is present */
+#undef __LIBELF_HEADER_ELF_H
+
+/* Define if Elf32_Dyn is declared in */
+#undef __LIBELF_NEED_LINK_H
+
+/* Define if Elf32_Dyn is declared in */
+#undef __LIBELF_NEED_SYS_LINK_H
+
+/* Define if you want 64-bit support (and your system supports it) */
+#define __LIBELF64 1
+
+/* Define if you want 64-bit support, and are running IRIX */
+#undef __LIBELF64_IRIX
+
+/* Define if you want 64-bit support, and are running Linux */
+#undef __LIBELF64_LINUX
+
+/* Define if you want symbol versioning (and your system supports it) */
+#define __LIBELF_SYMBOL_VERSIONS 1
+
+/* Define to a 64-bit signed integer type if one exists */
+#define __libelf_i64_t __int64
+
+/* Define to a 64-bit unsigned integer type if one exists */
+#define __libelf_u64_t unsigned __int64
+
+/* Define to a 32-bit signed integer type if one exists */
+#define __libelf_i32_t int
+
+/* Define to a 32-bit unsigned integer type if one exists */
+#define __libelf_u32_t unsigned int
+
+/* Define to a 16-bit signed integer type if one exists */
+#define __libelf_i16_t short int
+
+/* Define to a 16-bit unsigned integer type if one exists */
+#define __libelf_u16_t unsigned short int
+
+/*
+ * Ok, now get the correct instance of elf.h...
+ */
+#ifdef __LIBELF_HEADER_ELF_H
+# include __LIBELF_HEADER_ELF_H
+#else /* __LIBELF_HEADER_ELF_H */
+# if __LIBELF_INTERNAL__
+# include
+# else /* __LIBELF_INTERNAL__ */
+# include
+# endif /* __LIBELF_INTERNAL__ */
+#endif /* __LIBELF_HEADER_ELF_H */
+
+/*
+ * On some systems, is severely broken. Try to fix it.
+ */
+#ifdef __LIBELF_HEADER_ELF_H
+
+# ifndef ELF32_FSZ_ADDR
+# define ELF32_FSZ_ADDR 4
+# define ELF32_FSZ_HALF 2
+# define ELF32_FSZ_OFF 4
+# define ELF32_FSZ_SWORD 4
+# define ELF32_FSZ_WORD 4
+# endif /* ELF32_FSZ_ADDR */
+
+# ifndef STN_UNDEF
+# define STN_UNDEF 0
+# endif /* STN_UNDEF */
+
+# if __LIBELF64
+
+# ifndef ELF64_FSZ_ADDR
+# define ELF64_FSZ_ADDR 8
+# define ELF64_FSZ_HALF 2
+# define ELF64_FSZ_OFF 8
+# define ELF64_FSZ_SWORD 4
+# define ELF64_FSZ_WORD 4
+# define ELF64_FSZ_SXWORD 8
+# define ELF64_FSZ_XWORD 8
+# endif /* ELF64_FSZ_ADDR */
+
+# ifndef ELF64_ST_BIND
+# define ELF64_ST_BIND(i) ((i)>>4)
+# define ELF64_ST_TYPE(i) ((i)&0xf)
+# define ELF64_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
+# endif /* ELF64_ST_BIND */
+
+# ifndef ELF64_R_SYM
+# define ELF64_R_SYM(i) ((Elf64_Xword)(i)>>32)
+# define ELF64_R_TYPE(i) ((i)&0xffffffffL)
+# define ELF64_R_INFO(s,t) (((Elf64_Xword)(s)<<32)+((t)&0xffffffffL))
+# endif /* ELF64_R_SYM */
+
+# if __LIBELF64_LINUX
+typedef __libelf_u64_t Elf64_Addr;
+typedef __libelf_u16_t Elf64_Half;
+typedef __libelf_u64_t Elf64_Off;
+typedef __libelf_i32_t Elf64_Sword;
+typedef __libelf_u32_t Elf64_Word;
+typedef __libelf_i64_t Elf64_Sxword;
+typedef __libelf_u64_t Elf64_Xword;
+# endif /* __LIBELF64_LINUX */
+
+# endif /* __LIBELF64 */
+#endif /* __LIBELF_HEADER_ELF_H */
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/verdef.h b/desmume/src/windows/libelf_libdwarf/libelf/verdef.h
new file mode 100644
index 000000000..e17f6826b
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/verdef.h
@@ -0,0 +1,241 @@
+/*
+ * verdef.h - copy versioning information.
+ * Copyright (C) 2001 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef lint
+static const char verdef_h_rcsid[] = "@(#) $Id: verdef.h,v 1.13 2008/05/23 08:15:35 michael Exp $";
+#endif /* lint */
+
+#if VER_DEF_CURRENT != 1
+#error libelf currently does not support VER_DEF_CURRENT != 1
+#endif /* VER_DEF_CURRENT != 1 */
+
+#if TOFILE
+
+static void
+__store_verdaux(verdaux_ftype *dst, const verdaux_mtype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ __store_u32L(dst->vda_name, src->vda_name);
+ __store_u32L(dst->vda_next, src->vda_next);
+ }
+ else {
+ __store_u32M(dst->vda_name, src->vda_name);
+ __store_u32M(dst->vda_next, src->vda_next);
+ }
+}
+
+static void
+__store_verdef(verdef_ftype *dst, const verdef_mtype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ __store_u16L(dst->vd_version, src->vd_version);
+ __store_u16L(dst->vd_flags, src->vd_flags);
+ __store_u16L(dst->vd_ndx, src->vd_ndx);
+ __store_u16L(dst->vd_cnt, src->vd_cnt);
+ __store_u32L(dst->vd_hash, src->vd_hash);
+ __store_u32L(dst->vd_aux, src->vd_aux);
+ __store_u32L(dst->vd_next, src->vd_next);
+ }
+ else {
+ __store_u16M(dst->vd_version, src->vd_version);
+ __store_u16M(dst->vd_flags, src->vd_flags);
+ __store_u16M(dst->vd_ndx, src->vd_ndx);
+ __store_u16M(dst->vd_cnt, src->vd_cnt);
+ __store_u32M(dst->vd_hash, src->vd_hash);
+ __store_u32M(dst->vd_aux, src->vd_aux);
+ __store_u32M(dst->vd_next, src->vd_next);
+ }
+}
+
+typedef verdaux_mtype verdaux_stype;
+typedef verdaux_ftype verdaux_dtype;
+typedef verdef_mtype verdef_stype;
+typedef verdef_ftype verdef_dtype;
+typedef align_mtype verdef_atype;
+
+#define copy_verdaux_srctotmp(d, s, e) (*(d) = *(s))
+#define copy_verdaux_tmptodst(d, s, e) __store_verdaux((d), (s), (e))
+#define copy_verdef_srctotmp(d, s, e) (*(d) = *(s))
+#define copy_verdef_tmptodst(d, s, e) __store_verdef((d), (s), (e))
+
+#define translator_suffix _tof
+
+#else /* TOFILE */
+
+static void
+__load_verdaux(verdaux_mtype *dst, const verdaux_ftype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ dst->vda_name = __load_u32L(src->vda_name);
+ dst->vda_next = __load_u32L(src->vda_next);
+ }
+ else {
+ dst->vda_name = __load_u32M(src->vda_name);
+ dst->vda_next = __load_u32M(src->vda_next);
+ }
+}
+
+static void
+__load_verdef(verdef_mtype *dst, const verdef_ftype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ dst->vd_version = __load_u16L(src->vd_version);
+ dst->vd_flags = __load_u16L(src->vd_flags);
+ dst->vd_ndx = __load_u16L(src->vd_ndx);
+ dst->vd_cnt = __load_u16L(src->vd_cnt);
+ dst->vd_hash = __load_u32L(src->vd_hash);
+ dst->vd_aux = __load_u32L(src->vd_aux);
+ dst->vd_next = __load_u32L(src->vd_next);
+ }
+ else {
+ dst->vd_version = __load_u16M(src->vd_version);
+ dst->vd_flags = __load_u16M(src->vd_flags);
+ dst->vd_ndx = __load_u16M(src->vd_ndx);
+ dst->vd_cnt = __load_u16M(src->vd_cnt);
+ dst->vd_hash = __load_u32M(src->vd_hash);
+ dst->vd_aux = __load_u32M(src->vd_aux);
+ dst->vd_next = __load_u32M(src->vd_next);
+ }
+}
+
+typedef verdaux_ftype verdaux_stype;
+typedef verdaux_mtype verdaux_dtype;
+typedef verdef_ftype verdef_stype;
+typedef verdef_mtype verdef_dtype;
+typedef align_ftype verdef_atype;
+
+#define copy_verdaux_srctotmp(d, s, e) __load_verdaux((d), (s), (e))
+#define copy_verdaux_tmptodst(d, s, e) (*(d) = *(s))
+#define copy_verdef_srctotmp(d, s, e) __load_verdef((d), (s), (e))
+#define copy_verdef_tmptodst(d, s, e) (*(d) = *(s))
+
+#define translator_suffix _tom
+
+#endif /* TOFILE */
+
+#define cat3(a,b,c) a##b##c
+#define xlt3(p,e,s) cat3(p,e,s)
+#define xltprefix(x) xlt3(x,_,class_suffix)
+#define translator(x,e) xlt3(xltprefix(_elf_##x),e,translator_suffix)
+
+static size_t
+xlt_verdef(unsigned char *dst, const unsigned char *src, size_t n, unsigned enc) {
+ size_t off;
+
+ if (sizeof(verdef_stype) != sizeof(verdef_dtype)
+ || sizeof(verdaux_stype) != sizeof(verdaux_dtype)) {
+ /* never happens for ELF v1 and Verneed v1 */
+ seterr(ERROR_UNIMPLEMENTED);
+ return (size_t)-1;
+ }
+ /* size translation shortcut */
+ if (dst == NULL) {
+ return n;
+ }
+ if (src == NULL) {
+ seterr(ERROR_NULLBUF);
+ return (size_t)-1;
+ }
+ off = 0;
+ while (off + sizeof(verdef_stype) <= n) {
+ const verdef_stype *svd;
+ verdef_dtype *dvd;
+ verdef_mtype vd;
+ size_t acount;
+ size_t aoff;
+
+ /*
+ * check for proper alignment
+ */
+ if (off % sizeof(verdef_atype)) {
+ seterr(ERROR_VERDEF_FORMAT);
+ return (size_t)-1;
+ }
+ /*
+ * copy and check src
+ */
+ svd = (verdef_stype*)(src + off);
+ dvd = (verdef_dtype*)(dst + off);
+ copy_verdef_srctotmp(&vd, svd, enc);
+ if (vd.vd_version < 1
+ || vd.vd_version > VER_DEF_CURRENT) {
+ seterr(ERROR_VERDEF_VERSION);
+ return (size_t)-1;
+ }
+ if (vd.vd_cnt < 1
+ || vd.vd_aux == 0) {
+ seterr(ERROR_VERDEF_FORMAT);
+ return (size_t)-1;
+ }
+ copy_verdef_tmptodst(dvd, &vd, enc);
+ /*
+ * copy aux array
+ */
+ aoff = off + vd.vd_aux;
+ for (acount = 0; acount < vd.vd_cnt; acount++) {
+ const verdaux_stype *svda;
+ verdaux_dtype *dvda;
+ verdaux_mtype vda;
+
+ /*
+ * are we still inside the buffer limits?
+ */
+ if (aoff + sizeof(verdaux_stype) > n) {
+ break;
+ }
+ /*
+ * check for proper alignment
+ */
+ if (aoff % sizeof(verdef_atype)) {
+ seterr(ERROR_VERDEF_FORMAT);
+ return (size_t)-1;
+ }
+ /*
+ * copy and check src
+ */
+ svda = (verdaux_stype*)(src + aoff);
+ dvda = (verdaux_dtype*)(dst + aoff);
+ copy_verdaux_srctotmp(&vda, svda, enc);
+ copy_verdaux_tmptodst(dvda, &vda, enc);
+ /*
+ * advance to next verdaux
+ */
+ if (vda.vda_next == 0) {
+ /* end of list */
+ break;
+ }
+ aoff += vda.vda_next;
+ }
+ /*
+ * advance to next verdef
+ */
+ if (vd.vd_next == 0) {
+ /* end of list */
+ break;
+ }
+ off += vd.vd_next;
+ }
+ return n;
+}
+
+size_t
+translator(verdef,L11)(unsigned char *dst, const unsigned char *src, size_t n) {
+ return xlt_verdef(dst, src, n, ELFDATA2LSB);
+}
+
+size_t
+translator(verdef,M11)(unsigned char *dst, const unsigned char *src, size_t n) {
+ return xlt_verdef(dst, src, n, ELFDATA2MSB);
+}
diff --git a/desmume/src/windows/libelf_libdwarf/libelf/verneed.h b/desmume/src/windows/libelf_libdwarf/libelf/verneed.h
new file mode 100644
index 000000000..54f0f0606
--- /dev/null
+++ b/desmume/src/windows/libelf_libdwarf/libelf/verneed.h
@@ -0,0 +1,245 @@
+/*
+ * verneed.h - copy versioning information.
+ * Copyright (C) 2001 - 2006 Michael Riepe
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
+ */
+
+#ifndef lint
+static const char verneed_h_rcsid[] = "@(#) $Id: verneed.h,v 1.13 2008/05/23 08:15:35 michael Exp $";
+#endif /* lint */
+
+#if VER_NEED_CURRENT != 1
+#error libelf currently does not support VER_NEED_CURRENT != 1
+#endif /* VER_NEED_CURRENT != 1 */
+
+#if TOFILE
+
+static void
+__store_vernaux(vernaux_ftype *dst, const vernaux_mtype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ __store_u32L(dst->vna_hash, src->vna_hash);
+ __store_u16L(dst->vna_flags, src->vna_flags);
+ __store_u16L(dst->vna_other, src->vna_other);
+ __store_u32L(dst->vna_name, src->vna_name);
+ __store_u32L(dst->vna_next, src->vna_next);
+ }
+ else {
+ __store_u32M(dst->vna_hash, src->vna_hash);
+ __store_u16M(dst->vna_flags, src->vna_flags);
+ __store_u16M(dst->vna_other, src->vna_other);
+ __store_u32M(dst->vna_name, src->vna_name);
+ __store_u32M(dst->vna_next, src->vna_next);
+ }
+}
+
+static void
+__store_verneed(verneed_ftype *dst, const verneed_mtype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ __store_u16L(dst->vn_version, src->vn_version);
+ __store_u16L(dst->vn_cnt, src->vn_cnt);
+ __store_u32L(dst->vn_file, src->vn_file);
+ __store_u32L(dst->vn_aux, src->vn_aux);
+ __store_u32L(dst->vn_next, src->vn_next);
+ }
+ else {
+ __store_u16M(dst->vn_version, src->vn_version);
+ __store_u16M(dst->vn_cnt, src->vn_cnt);
+ __store_u32M(dst->vn_file, src->vn_file);
+ __store_u32M(dst->vn_aux, src->vn_aux);
+ __store_u32M(dst->vn_next, src->vn_next);
+ }
+}
+
+typedef vernaux_mtype vernaux_stype;
+typedef vernaux_ftype vernaux_dtype;
+typedef verneed_mtype verneed_stype;
+typedef verneed_ftype verneed_dtype;
+typedef align_mtype verneed_atype;
+
+#define copy_vernaux_srctotmp(d, s, e) (*(d) = *(s))
+#define copy_vernaux_tmptodst(d, s, e) __store_vernaux((d), (s), (e))
+#define copy_verneed_srctotmp(d, s, e) (*(d) = *(s))
+#define copy_verneed_tmptodst(d, s, e) __store_verneed((d), (s), (e))
+
+#define translator_suffix _tof
+
+#else /* TOFILE */
+
+static void
+__load_vernaux(vernaux_mtype *dst, const vernaux_ftype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ dst->vna_hash = __load_u32L(src->vna_hash);
+ dst->vna_flags = __load_u16L(src->vna_flags);
+ dst->vna_other = __load_u16L(src->vna_other);
+ dst->vna_name = __load_u32L(src->vna_name);
+ dst->vna_next = __load_u32L(src->vna_next);
+ }
+ else {
+ dst->vna_hash = __load_u32M(src->vna_hash);
+ dst->vna_flags = __load_u16M(src->vna_flags);
+ dst->vna_other = __load_u16M(src->vna_other);
+ dst->vna_name = __load_u32M(src->vna_name);
+ dst->vna_next = __load_u32M(src->vna_next);
+ }
+}
+
+static void
+__load_verneed(verneed_mtype *dst, const verneed_ftype *src, unsigned enc) {
+ if (enc == ELFDATA2LSB) {
+ dst->vn_version = __load_u16L(src->vn_version);
+ dst->vn_cnt = __load_u16L(src->vn_cnt);
+ dst->vn_file = __load_u32L(src->vn_file);
+ dst->vn_aux = __load_u32L(src->vn_aux);
+ dst->vn_next = __load_u32L(src->vn_next);
+ }
+ else {
+ dst->vn_version = __load_u16M(src->vn_version);
+ dst->vn_cnt = __load_u16M(src->vn_cnt);
+ dst->vn_file = __load_u32M(src->vn_file);
+ dst->vn_aux = __load_u32M(src->vn_aux);
+ dst->vn_next = __load_u32M(src->vn_next);
+ }
+}
+
+typedef vernaux_ftype vernaux_stype;
+typedef vernaux_mtype vernaux_dtype;
+typedef verneed_ftype verneed_stype;
+typedef verneed_mtype verneed_dtype;
+typedef align_ftype verneed_atype;
+
+#define copy_vernaux_srctotmp(d, s, e) __load_vernaux((d), (s), (e))
+#define copy_vernaux_tmptodst(d, s, e) (*(d) = *(s))
+#define copy_verneed_srctotmp(d, s, e) __load_verneed((d), (s), (e))
+#define copy_verneed_tmptodst(d, s, e) (*(d) = *(s))
+
+#define translator_suffix _tom
+
+#endif /* TOFILE */
+
+#define cat3(a,b,c) a##b##c
+#define xlt3(p,e,s) cat3(p,e,s)
+#define xltprefix(x) xlt3(x,_,class_suffix)
+#define translator(x,e) xlt3(xltprefix(_elf_##x),e,translator_suffix)
+
+static size_t
+xlt_verneed(unsigned char *dst, const unsigned char *src, size_t n, unsigned enc) {
+ size_t off;
+
+ if (sizeof(verneed_stype) != sizeof(verneed_dtype)
+ || sizeof(vernaux_stype) != sizeof(vernaux_dtype)) {
+ /* never happens for ELF v1 and Verneed v1 */
+ seterr(ERROR_UNIMPLEMENTED);
+ return (size_t)-1;
+ }
+ /* size translation shortcut */
+ if (dst == NULL) {
+ return n;
+ }
+ if (src == NULL) {
+ seterr(ERROR_NULLBUF);
+ return (size_t)-1;
+ }
+ off = 0;
+ while (off + sizeof(verneed_stype) <= n) {
+ const verneed_stype *svn;
+ verneed_dtype *dvn;
+ verneed_mtype vn;
+ size_t acount;
+ size_t aoff;
+
+ /*
+ * check for proper alignment
+ */
+ if (off % sizeof(verneed_atype)) {
+ seterr(ERROR_VERNEED_FORMAT);
+ return (size_t)-1;
+ }
+ /*
+ * copy and check src
+ */
+ svn = (verneed_stype*)(src + off);
+ dvn = (verneed_dtype*)(dst + off);
+ copy_verneed_srctotmp(&vn, svn, enc);
+ if (vn.vn_version < 1
+ || vn.vn_version > VER_NEED_CURRENT) {
+ seterr(ERROR_VERNEED_VERSION);
+ return (size_t)-1;
+ }
+ if (vn.vn_cnt < 1
+ || vn.vn_aux == 0) {
+ seterr(ERROR_VERNEED_FORMAT);
+ return (size_t)-1;
+ }
+ copy_verneed_tmptodst(dvn, &vn, enc);
+ /*
+ * copy aux array
+ */
+ aoff = off + vn.vn_aux;
+ for (acount = 0; acount < vn.vn_cnt; acount++) {
+ const vernaux_stype *svna;
+ vernaux_dtype *dvna;
+ vernaux_mtype vna;
+
+ /*
+ * are we still inside the buffer limits?
+ */
+ if (aoff + sizeof(vernaux_stype) > n) {
+ break;
+ }
+ /*
+ * check for proper alignment
+ */
+ if (aoff % sizeof(verneed_atype)) {
+ seterr(ERROR_VERNEED_FORMAT);
+ return (size_t)-1;
+ }
+ /*
+ * copy and check src
+ */
+ svna = (vernaux_stype*)(src + aoff);
+ dvna = (vernaux_dtype*)(dst + aoff);
+ copy_vernaux_srctotmp(&vna, svna, enc);
+ copy_vernaux_tmptodst(dvna, &vna, enc);
+ /*
+ * advance to next vernaux
+ */
+ if (vna.vna_next == 0) {
+ /* end of list */
+ break;
+ }
+ aoff += vna.vna_next;
+ }
+ /*
+ * advance to next verneed
+ */
+ if (vn.vn_next == 0) {
+ /* end of list */
+ break;
+ }
+ off += vn.vn_next;
+ }
+ return n;
+}
+
+size_t
+translator(verneed,L11)(unsigned char *dst, const unsigned char *src, size_t n) {
+ return xlt_verneed(dst, src, n, ELFDATA2LSB);
+}
+
+size_t
+translator(verneed,M11)(unsigned char *dst, const unsigned char *src, size_t n) {
+ return xlt_verneed(dst, src, n, ELFDATA2MSB);
+}
diff --git a/desmume/src/windows/libelf_libdwarf/libelf_libdwarf.7z b/desmume/src/windows/libelf_libdwarf/libelf_libdwarf.7z
new file mode 100644
index 000000000..471b8cf5a
Binary files /dev/null and b/desmume/src/windows/libelf_libdwarf/libelf_libdwarf.7z differ
diff --git a/desmume/src/windows/libelf_libdwarf/libelf_libdwarf_0.8.13_20100404_from_tastools b/desmume/src/windows/libelf_libdwarf/libelf_libdwarf_0.8.13_20100404_from_tastools
new file mode 100644
index 000000000..e69de29bb
diff --git a/desmume/src/windows/main.cpp b/desmume/src/windows/main.cpp
index d02b19ba0..a6aede918 100644
--- a/desmume/src/windows/main.cpp
+++ b/desmume/src/windows/main.cpp
@@ -106,6 +106,102 @@
#include "aviout.h"
#include "soundView.h"
+//#include
+//#include
+//#include
+//#include
+//#include
+//#include
+//void testelf()
+//{
+// //http://webcache.googleusercontent.com/search?q=cache:XeQF6AILcrkJ:chris.rohlf.googlepages.com/libelf-howto.c+libelf+example&cd=2&hl=en&ct=clnk&gl=us
+//Elf32_Ehdr *elf_header; /* ELF header */
+//Elf *elf; /* Our Elf pointer for libelf */
+//Elf_Scn *scn; /* Section Descriptor */
+//Elf_Data *edata; /* Data Descriptor */
+//GElf_Sym sym; /* Symbol */
+//GElf_Shdr shdr; /* Section Header */
+//int fd; // File Descriptor
+//const char* file = "d:\\devkitPro\\examples\\nds\\hello_world\\hello_world.elf";
+//struct stat elf_stats; // fstat struct
+//char *base_ptr; // ptr to our object in memory
+//#define ERR -1
+// if((fd = open(file, O_RDWR)) == ERR)
+// {
+// printf("couldnt open %s\n", file);
+// return;
+// }
+// if((fstat(fd, &elf_stats)))
+// {
+// printf("could not fstat %s\n", file);
+// close(fd);
+// return ;
+// }
+// if((base_ptr = (char *) malloc(elf_stats.st_size)) == NULL)
+// {
+// printf("could not malloc\n");
+// close(fd);
+// return ;
+// }
+// if((read(fd, base_ptr, elf_stats.st_size)) < elf_stats.st_size)
+// {
+// printf("could not read %s\n", file);
+// free(base_ptr);
+// close(fd);
+// return ;
+// }
+// /* Check libelf version first */
+// if(elf_version(EV_CURRENT) == EV_NONE)
+// {
+// printf("WARNING Elf Library is out of date!\n");
+// }
+//elf_header = (Elf32_Ehdr *) base_ptr; // point elf_header at our object in memory
+//elf = elf_begin(fd, ELF_C_READ, NULL); // Initialize 'elf' pointer to our file descriptor
+///* Iterate through section headers */
+//while((scn = elf_nextscn(elf, scn)) != 0)
+//{
+// gelf_getshdr(scn, &shdr);
+// // print the section header type
+// printf("Type: ");
+// switch(shdr.sh_type)
+// {
+// case SHT_NULL: printf( "SHT_NULL\t"); break;
+// case SHT_PROGBITS: printf( "SHT_PROGBITS"); break;
+// case SHT_SYMTAB: printf( "SHT_SYMTAB"); break;
+// case SHT_STRTAB: printf( "SHT_STRTAB"); break;
+// case SHT_RELA: printf( "SHT_RELA\t"); break;
+// case SHT_HASH: printf( "SHT_HASH\t"); break;
+// case SHT_DYNAMIC: printf( "SHT_DYNAMIC"); break;
+// case SHT_NOTE: printf( "SHT_NOTE\t"); break;
+// case SHT_NOBITS: printf( "SHT_NOBITS"); break;
+// case SHT_REL: printf( "SHT_REL\t"); break;
+// case SHT_SHLIB: printf( "SHT_SHLIB"); break;
+// case SHT_DYNSYM: printf( "SHT_DYNSYM"); break;
+// case SHT_INIT_ARRAY: printf( "SHT_INIT_ARRAY"); break;
+// case SHT_FINI_ARRAY: printf( "SHT_FINI_ARRAY"); break;
+// case SHT_PREINIT_ARRAY: printf( "SHT_PREINIT_ARRAY"); break;
+// case SHT_GROUP: printf( "SHT_GROUP"); break;
+// case SHT_SYMTAB_SHNDX: printf( "SHT_SYMTAB_SHNDX"); break;
+// case SHT_NUM: printf( "SHT_NUM\t"); break;
+// case SHT_LOOS: printf( "SHT_LOOS\t"); break;
+// case SHT_GNU_verdef: printf( "SHT_GNU_verdef"); break;
+// case SHT_GNU_verneed: printf( "SHT_VERNEED"); break;
+// case SHT_GNU_versym: printf( "SHT_GNU_versym"); break;
+// default: printf( "(none) "); break;
+// }
+// // print the section header flags
+// printf("\t(");
+// if(shdr.sh_flags & SHF_WRITE) { printf("W"); }
+// if(shdr.sh_flags & SHF_ALLOC) { printf("A"); }
+// if(shdr.sh_flags & SHF_EXECINSTR) { printf("X"); }
+// if(shdr.sh_flags & SHF_STRINGS) { printf("S"); }
+// printf(")\t");
+// // the shdr name is in a string table, libelf uses elf_strptr() to find it
+// // using the e_shstrndx value from the elf_header
+// printf("%s\n", elf_strptr(elf, elf_header->e_shstrndx, shdr.sh_name));
+//}
+//}
+
using namespace std;
#ifdef EXPERIMENTAL_WIFI_COMM
@@ -2817,6 +2913,8 @@ int WINAPI WinMain (HINSTANCE hThisInstance,
int nFunsterStil)
{
+// testelf();
+
TIMECAPS tc;
if (timeGetDevCaps(&tc, sizeof(TIMECAPS))== TIMERR_NOERROR)
{