X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;ds=sidebyside;f=binutils%2Fdwarf.h;h=69566926769b35a1565d5ccf95b3ab90831d99ac;hb=cd9629e1df1a280c19e1daaf6c1195afbab0aca9;hp=7f7c79d42447cd9e43db2ca0ce27a99eb124ccff;hpb=219d1afa89d0d53ca93a684cac341f16470f3ca0;p=deliverable%2Fbinutils-gdb.git diff --git a/binutils/dwarf.h b/binutils/dwarf.h index 7f7c79d424..6956692676 100644 --- a/binutils/dwarf.h +++ b/binutils/dwarf.h @@ -1,5 +1,5 @@ /* dwarf.h - DWARF support header file - Copyright (C) 2005-2018 Free Software Foundation, Inc. + Copyright (C) 2005-2020 Free Software Foundation, Inc. This file is part of GNU Binutils. @@ -187,6 +187,15 @@ typedef struct } debug_info; +typedef struct separate_info +{ + void * handle; /* The pointer returned by open_debug_file(). */ + const char * filename; + struct separate_info * next; +} separate_info; + +extern separate_info * first_separate_info; + extern unsigned int eh_addr_size; extern int do_debug_info; @@ -209,22 +218,20 @@ extern int do_debug_addr; extern int do_debug_cu_index; extern int do_wide; extern int do_debug_links; +extern int do_follow_links; extern int dwarf_cutoff_level; extern unsigned long dwarf_start_die; extern int dwarf_check; -extern void init_dwarf_regnames (unsigned int); -extern void init_dwarf_regnames_i386 (void); -extern void init_dwarf_regnames_iamcu (void); -extern void init_dwarf_regnames_x86_64 (void); -extern void init_dwarf_regnames_aarch64 (void); -extern void init_dwarf_regnames_s390 (void); +extern void init_dwarf_regnames_by_elf_machine_code (unsigned int); +extern void init_dwarf_regnames_by_bfd_arch_and_mach (enum bfd_architecture arch, + unsigned long mach); extern bfd_boolean load_debug_section (enum dwarf_section_display_enum, void *); extern void free_debug_section (enum dwarf_section_display_enum); -extern void * load_separate_debug_file (void *, const char *); +extern bfd_boolean load_separate_debug_files (void *, const char *); extern void close_debug_file (void *); extern void * open_debug_file (const char *); @@ -241,9 +248,69 @@ extern void * xcalloc2 (size_t, size_t); extern void * xcmalloc (size_t, size_t); extern void * xcrealloc (void *, size_t, size_t); -extern dwarf_vma read_leb128 (unsigned char *, unsigned int *, bfd_boolean, const unsigned char * const); - /* A callback into the client. Returns TRUE if there is a relocation against the given debug section at the given offset. */ extern bfd_boolean reloc_at (struct dwarf_section *, dwarf_vma); + +extern dwarf_vma read_leb128 (unsigned char *, const unsigned char *const, + bfd_boolean, unsigned int *, int *); + +#if HAVE_LIBDEBUGINFOD +extern unsigned char * get_build_id (void *); +#endif + +static inline void +report_leb_status (int status) +{ + if ((status & 1) != 0) + error (_("LEB end of data\n")); + else if ((status & 2) != 0) + error (_("LEB value too large\n")); +} + +#define SKIP_ULEB(start, end) \ + do \ + { \ + unsigned int _len; \ + read_leb128 (start, end, FALSE, &_len, NULL); \ + start += _len; \ + } while (0) + +#define SKIP_SLEB(start, end) \ + do \ + { \ + unsigned int _len; \ + read_leb128 (start, end, TRUE, &_len, NULL); \ + start += _len; \ + } while (0) + +#define READ_ULEB(var, start, end) \ + do \ + { \ + dwarf_vma _val; \ + unsigned int _len; \ + int _status; \ + \ + _val = read_leb128 (start, end, FALSE, &_len, &_status); \ + start += _len; \ + (var) = _val; \ + if ((var) != _val) \ + _status |= 2; \ + report_leb_status (_status); \ + } while (0) + +#define READ_SLEB(var, start, end) \ + do \ + { \ + dwarf_signed_vma _val; \ + unsigned int _len; \ + int _status; \ + \ + _val = read_leb128 (start, end, TRUE, &_len, &_status); \ + start += _len; \ + (var) = _val; \ + if ((var) != _val) \ + _status |= 2; \ + report_leb_status (_status); \ + } while (0)