summaryrefslogtreecommitdiff
path: root/dwarfdump/globals.h
diff options
context:
space:
mode:
Diffstat (limited to 'dwarfdump/globals.h')
-rw-r--r--dwarfdump/globals.h459
1 files changed, 459 insertions, 0 deletions
diff --git a/dwarfdump/globals.h b/dwarfdump/globals.h
new file mode 100644
index 0000000..46cbc11
--- /dev/null
+++ b/dwarfdump/globals.h
@@ -0,0 +1,459 @@
+/*
+ Copyright (C) 2000,2004,2005 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 of the GNU 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 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
+
+
+
+$Header: /plroot/cmplrs.src/v7.4.5m/.RCS/PL/dwarfdump/RCS/globals.h,v 1.25 2006/04/17 00:09:56 davea Exp $ */
+
+#ifndef globals_INCLUDED
+#define globals_INCLUDED
+
+#include "config.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
+
+/* 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_SGIDEFS_H)
+#include <sgidefs.h> /* sgidefs.h defines them */
+#define HAVE___UINT32_T 1
+#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 <sys/types.h>
+/* we assume __[u]int32_t and __[u]int64_t defined
+ since __uint32_t defined in the sys/types.h in use */
+#define HAVE___UINT32_T 1
+#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
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Windows specific */
+#ifdef HAVE_STDAFX_H
+#include "stdafx.h"
+#endif /* HAVE_STDAFX_H */
+
+#ifdef HAVE_ELF_H
+#include <elf.h>
+#endif
+#ifdef HAVE_LIBELF_H
+#include <libelf.h>
+#else
+#ifdef HAVE_LIBELF_LIBELF_H
+#include <libelf/libelf.h>
+#endif
+#endif
+#include <dwarf.h>
+#include <libdwarf.h>
+#ifdef HAVE_REGEX
+#include <regex.h>
+#endif
+typedef char * string;
+
+#include "checkutil.h"
+#ifndef BOOLEAN_TYPEDEFED
+#define BOOLEAN_TYPEDEFED
+typedef int boolean;
+#endif /* BOOLEAN_TYPEDEFED */
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+#ifndef FAILED
+#define FAILED 1
+#endif
+
+/* size of attrib_buffer, defined in print_die.c */
+#define ATTRIB_BUFSIZ 999
+
+typedef struct {
+ int checks;
+ int errors;
+} Dwarf_Check_Result;
+
+extern boolean do_check_dwarf;
+extern boolean do_print_dwarf;
+
+extern boolean record_dwarf_error; /* A test has failed, this
+ is normally set FALSE shortly after being set TRUE, it is
+ a short-range hint we should print something we might not
+ otherwise print (under the circumstances). */
+
+/* Compilation Unit information for improved error messages.
+ If the strings are too short we just truncate so fixed length
+ here is fine. */
+#define COMPILE_UNIT_NAME_LEN 512
+extern char PU_name[COMPILE_UNIT_NAME_LEN]; /* PU Name */
+extern char CU_name[COMPILE_UNIT_NAME_LEN]; /* CU Name */
+extern char CU_producer[COMPILE_UNIT_NAME_LEN]; /* CU Producer Name */
+
+extern boolean seen_PU; /* Detected a PU. */
+extern boolean seen_CU; /* Detected a CU. */
+extern boolean need_CU_name; /* Need CU name. */
+extern boolean need_CU_base_address; /* Need CU Base address. */
+extern boolean need_CU_high_address; /* Need CU High address. */
+extern boolean need_PU_valid_code; /* Need PU valid code. */
+
+extern boolean seen_PU_base_address; /* Detected a Base address for PU */
+extern boolean seen_PU_high_address; /* Detected a High address for PU */
+extern Dwarf_Addr PU_base_address; /* PU Base address */
+extern Dwarf_Addr PU_high_address; /* PU High address */
+
+extern Dwarf_Off DIE_offset; /* DIE offset in compile unit. */
+extern Dwarf_Off DIE_overall_offset; /* DIE offset in .debug_info. */
+
+/* Current CU information for better error reporting. */
+extern Dwarf_Off DIE_CU_offset; /* CU DIE offset in compile unit */
+extern Dwarf_Off DIE_CU_overall_offset; /* CU DIE offset in .debug_info */
+extern int current_section_id; /* Section being process. */
+
+extern Dwarf_Addr CU_base_address; /* CU Base address. */
+extern Dwarf_Addr CU_high_address; /* CU High address. */
+
+extern Dwarf_Addr elf_max_address; /* Largest representable
+ address offset. */
+extern Dwarf_Half elf_address_size; /* Target pointer size. */
+
+/* Ranges and Location tables for better error checking: see
+ dwarfdump.c comments for more information. */
+extern Bucket_Group *pRangesInfo;
+extern Bucket_Group *pLinkonceInfo;
+extern Bucket_Group *pVisitedInfo;
+
+/* Display parent/children when in wide format. */
+extern boolean display_parent_tree;
+extern boolean display_children_tree;
+extern int stop_indent_level;
+
+/* Print search results when in wide format. */
+extern boolean search_wide_format;
+extern boolean search_is_on;
+
+const extern char *search_any_text;
+const extern char *search_match_text;
+const extern char *search_regex_text;
+#ifdef HAVE_REGEX
+extern regex_t search_re;
+#endif
+extern boolean is_strstrnocase(const char *data, const char *pattern);
+
+/* Options to enable debug tracing. */
+#define MAX_TRACE_LEVEL 10
+extern int nTrace[MAX_TRACE_LEVEL + 1];
+
+#define DUMP_RANGES_INFO 1 /* Dump RangesInfo Table. */
+#define DUMP_LOCATION_SECTION_INFO 2 /* Dump Location (.debug_loc) Info. */
+#define DUMP_RANGES_SECTION_INFO 3 /* Dump Ranges (.debug_ranges) Info. */
+#define DUMP_LINKONCE_INFO 4 /* Dump Linkonce Table. */
+#define DUMP_VISITED_INFO 5 /* Dump Visited Info. */
+
+#define dump_ranges_info nTrace[DUMP_RANGES_INFO]
+#define dump_location_section_info nTrace[DUMP_LOCATION_SECTION_INFO]
+#define dump_ranges_section_info nTrace[DUMP_RANGES_SECTION_INFO]
+#define dump_linkonce_info nTrace[DUMP_LINKONCE_INFO]
+#define dump_visited_info nTrace[DUMP_VISITED_INFO]
+
+/* Section IDs */
+#define DEBUG_ABBREV 1
+#define DEBUG_ARANGES 2
+#define DEBUG_FRAME 3
+#define DEBUG_INFO 4
+#define DEBUG_LINE 5
+#define DEBUG_LOC 6
+#define DEBUG_MACINFO 7
+#define DEBUG_PUBNAMES 8
+#define DEBUG_RANGES 9
+#define DEBUG_STATIC_VARS 10
+#define DEBUG_STATIC_FUNC 11
+#define DEBUG_STR 12
+#define DEBUG_WEAKNAMES 13
+#define DEBUG_TYPES 14
+
+extern int verbose;
+extern boolean dense;
+extern boolean ellipsis;
+extern boolean use_mips_regnames;
+extern boolean show_global_offsets;
+extern boolean show_form_used;
+extern boolean display_offsets;
+
+extern boolean check_pubname_attr;
+extern boolean check_attr_tag;
+extern boolean check_tag_tree;
+extern boolean check_type_offset;
+extern boolean check_decl_file;
+extern boolean check_lines;
+extern boolean check_ranges; /* Ranges (aranges & ranges) check */
+extern boolean check_fdes;
+extern boolean check_aranges;
+extern boolean check_harmless;
+extern boolean check_abbreviations;
+extern boolean check_dwarf_constants;
+extern boolean check_di_gaps;
+extern boolean check_forward_decl;
+extern boolean check_self_references;
+extern boolean suppress_nested_name_search;
+extern boolean suppress_check_extensions_tables;
+
+extern int break_after_n_units;
+
+extern boolean check_names; /* Check for invalid names */
+extern boolean check_verbose_mode; /* During '-k' mode, display errors */
+extern boolean check_frames; /* Frames check */
+extern boolean check_frames_extended;/* Extensive frames check */
+extern boolean check_locations; /* Location list check */
+
+/* Check categories corresponding to the -k option */
+typedef enum /* Dwarf_Check_Categories */ {
+ abbrev_code_result,
+ pubname_attr_result,
+ reloc_offset_result,
+ attr_tag_result,
+ tag_tree_result,
+ type_offset_result,
+ decl_file_result,
+ ranges_result,
+ lines_result,
+ aranges_result,
+ /* Harmless errors are errors detected inside libdwarf but
+ not reported via DW_DLE_ERROR returns because the errors
+ won't really affect client code. The 'harmless' errors
+ are reported and otherwise ignored. It is difficult to report
+ the error when the error is noticed by libdwarf, the error
+ is reported at a later time.
+ The other errors dwarfdump reports are also generally harmless
+ but are detected by dwarfdump so it's possble to report the
+ error as soon as the error is discovered. */
+ harmless_result,
+ fde_duplication,
+ frames_result,
+ locations_result,
+ names_result,
+ abbreviations_result,
+ dwarf_constants_result,
+ di_gaps_result,
+ forward_decl_result,
+ self_references_result,
+ total_check_result,
+ LAST_CATEGORY /* Must be last */
+} Dwarf_Check_Categories;
+
+extern boolean info_flag;
+extern boolean line_flag;
+extern boolean use_old_dwarf_loclist;
+extern boolean producer_children_flag; /* List of CUs per compiler */
+
+extern char cu_name[ ];
+extern boolean cu_name_flag;
+extern Dwarf_Unsigned cu_offset;
+extern Dwarf_Off fde_offset_for_cu_low;
+extern Dwarf_Off fde_offset_for_cu_high;
+
+/* Process TAGs for checking mode and reset pRangesInfo table
+ if appropriate. */
+extern void tag_specific_checks_setup(Dwarf_Half val,int die_indent_level);
+
+extern char *program_name;
+extern Dwarf_Error err;
+extern void print_error_and_continue (Dwarf_Debug dbg, string msg,int res, Dwarf_Error err);
+extern void print_error (Dwarf_Debug dbg, string msg,int res, Dwarf_Error err);
+
+extern void print_line_numbers_this_cu (Dwarf_Debug dbg, Dwarf_Die in_die);
+
+struct dwconf_s;
+extern void print_frames (Dwarf_Debug dbg, int print_debug_frame,
+ int print_eh_frame,struct dwconf_s *);
+extern void print_ranges (Dwarf_Debug dbg);
+extern void print_pubnames (Dwarf_Debug dbg);
+extern void print_macinfo (Dwarf_Debug dbg);
+extern void print_infos (Dwarf_Debug dbg,Dwarf_Bool is_info);
+extern void print_locs (Dwarf_Debug dbg);
+extern void print_abbrevs (Dwarf_Debug dbg);
+extern void print_strings (Dwarf_Debug dbg);
+extern void print_aranges (Dwarf_Debug dbg);
+extern void print_relocinfo (Dwarf_Debug dbg,unsigned reloc_map);
+extern void print_static_funcs(Dwarf_Debug dbg);
+extern void print_static_vars(Dwarf_Debug dbg);
+enum type_type_e {SGI_TYPENAME, DWARF_PUBTYPES} ;
+extern void print_types(Dwarf_Debug dbg,enum type_type_e type_type);
+extern void print_weaknames(Dwarf_Debug dbg);
+extern void print_exception_tables(Dwarf_Debug dbg);
+
+struct esb_s;
+extern void print_ranges_list_to_extra(Dwarf_Debug dbg,
+ Dwarf_Unsigned off,
+ Dwarf_Ranges *rangeset,
+ Dwarf_Signed rangecount,
+ Dwarf_Unsigned bytecount,
+ struct esb_s *stringbuf);
+boolean should_skip_this_cu(Dwarf_Debug dbg, Dwarf_Die cu_die, Dwarf_Error err);
+
+/* Returns the DW_AT_name of the CU */
+string old_get_cu_name(Dwarf_Debug dbg,Dwarf_Die cu_die,Dwarf_Error err);
+
+/* Returns the producer of the CU */
+int get_cu_name(Dwarf_Debug dbg,Dwarf_Die cu_die,
+ Dwarf_Error err,char **short_name,char **long_name);
+int get_producer_name(Dwarf_Debug dbg,Dwarf_Die cu_die,
+ Dwarf_Error err,char **producer_name);
+
+/* Get number of abbreviations for a CU */
+extern void get_abbrev_array_info(Dwarf_Debug dbg,Dwarf_Unsigned offset);
+/* Validate an abbreviation */
+extern void validate_abbrev_code(Dwarf_Debug dbg,Dwarf_Unsigned abbrev_code);
+
+extern void print_die_and_children(
+ Dwarf_Debug dbg,
+ Dwarf_Die in_die,
+ Dwarf_Bool is_info,
+ char **srcfiles,
+ Dwarf_Signed cnt);
+extern boolean print_one_die(
+ Dwarf_Debug dbg,
+ Dwarf_Die die,
+ boolean print_information,
+ int die_indent_level,
+ char **srcfiles,
+ Dwarf_Signed cnt,
+ boolean ignore_die_stack);
+
+/* Check for specific compiler */
+extern boolean checking_this_compiler();
+extern void update_compiler_target(const char *producer_name);
+extern void add_cu_name_compiler_target(char *name);
+
+/* General error reporting routines. These were
+ macros for a short time and when changed into functions
+ they kept (for now) their capitalization.
+ The capitalization will likely change. */
+extern void PRINT_CU_INFO();
+extern void DWARF_CHECK_COUNT(Dwarf_Check_Categories category, int inc);
+extern void DWARF_ERROR_COUNT(Dwarf_Check_Categories category, int inc);
+extern void DWARF_CHECK_ERROR_PRINT_CU();
+extern void DWARF_CHECK_ERROR(Dwarf_Check_Categories category,
+ const char *str);
+extern void DWARF_CHECK_ERROR2(Dwarf_Check_Categories category,
+ const char *str1, const char *str2);
+extern void DWARF_CHECK_ERROR3(Dwarf_Check_Categories category,
+ const char *str1, const char *str2, const char *strexpl);
+
+struct esb_s;
+
+extern Dwarf_Die current_cu_die_for_print_frames; /* This is
+ an awful hack, making current_cu_die_for_print_frames public.
+ But it enables cleaning up (doing all dealloc needed). */
+
+extern void printreg(Dwarf_Signed reg,struct dwconf_s *config_data);
+extern void print_frame_inst_bytes(Dwarf_Debug dbg,
+ Dwarf_Ptr cie_init_inst, Dwarf_Signed len,
+ Dwarf_Signed data_alignment_factor,
+ int code_alignment_factor, Dwarf_Half addr_size,
+ struct dwconf_s *config_data);
+
+int
+get_proc_name(Dwarf_Debug dbg, Dwarf_Die die, Dwarf_Addr low_pc,
+ char *proc_name_buf, int proc_name_buf_len, void **pcMap);
+
+void get_attr_value(Dwarf_Debug dbg, Dwarf_Half tag,
+ Dwarf_Die die,
+ Dwarf_Attribute attrib,
+ char **srcfiles,
+ Dwarf_Signed cnt, struct esb_s *esbp,
+ int show_form,int local_verbose);
+
+
+extern Dwarf_Unsigned local_dwarf_decode_u_leb128(unsigned char *leb128,
+ unsigned int *leb128_length);
+
+extern Dwarf_Signed local_dwarf_decode_s_leb128(unsigned char *leb128,
+ unsigned int *leb128_length);
+
+extern void dump_block(char *prefix, char *data, Dwarf_Signed len);
+
+extern void format_sig8_string(Dwarf_Sig8 *data,struct esb_s *out);
+
+int
+dwarfdump_print_one_locdesc(Dwarf_Debug dbg,
+ Dwarf_Locdesc * llbuf,
+ int skip_locdesc_header,
+ struct esb_s *string_out);
+void clean_up_die_esb();
+void clean_up_syms_malloc_data();
+void safe_strcpy(char *out, long outlen, const char *in, long inlen);
+
+
+void print_any_harmless_errors(Dwarf_Debug dbg);
+
+/* Definitions for printing relocations. */
+#define DW_SECTION_REL_DEBUG_INFO 0
+#define DW_SECTION_REL_DEBUG_LINE 1
+#define DW_SECTION_REL_DEBUG_PUBNAMES 2
+#define DW_SECTION_REL_DEBUG_ABBREV 3
+#define DW_SECTION_REL_DEBUG_ARANGES 4
+#define DW_SECTION_REL_DEBUG_FRAME 5
+#define DW_SECTION_REL_DEBUG_LOC 6
+#define DW_SECTION_REL_DEBUG_RANGES 7
+#define DW_SECTION_REL_DEBUG_TYPES 8
+
+#endif /* globals_INCLUDED */