diff options
Diffstat (limited to 'elfutils/libdwfl/libdwflP.h')
-rw-r--r-- | elfutils/libdwfl/libdwflP.h | 44 |
1 files changed, 33 insertions, 11 deletions
diff --git a/elfutils/libdwfl/libdwflP.h b/elfutils/libdwfl/libdwflP.h index be2ad828..d08d8a79 100644 --- a/elfutils/libdwfl/libdwflP.h +++ b/elfutils/libdwfl/libdwflP.h @@ -76,6 +76,7 @@ DWFL_ERROR (LIBEBL, N_("See ebl_errno (XXX missing)")) \ DWFL_ERROR (ZLIB, N_("gzip decompression failed")) \ DWFL_ERROR (BZLIB, N_("bzip2 decompression failed")) \ + DWFL_ERROR (LZMA, N_("LZMA decompression failed")) \ DWFL_ERROR (UNKNOWN_MACHINE, N_("no support library found for machine")) \ DWFL_ERROR (NOREL, N_("Callbacks missing for ET_REL file")) \ DWFL_ERROR (BADRELTYPE, N_("Unsupported relocation type")) \ @@ -151,10 +152,6 @@ struct Dwfl_Module char *name; /* Iterator name for this module. */ GElf_Addr low_addr, high_addr; - void *build_id_bits; /* malloc'd copy of build ID bits. */ - GElf_Addr build_id_vaddr; /* Address where they reside, 0 if unknown. */ - int build_id_len; /* -1 for prior failure, 0 if unset. */ - struct dwfl_file main, debug; Ebl *ebl; GElf_Half e_type; /* GElf_Ehdr.e_type cache. */ @@ -167,21 +164,30 @@ struct Dwfl_Module size_t syments; /* sh_size / sh_entsize of that section. */ Elf_Data *symstrdata; /* Data for its string table. */ Elf_Data *symxndxdata; /* Data in the extended section index table. */ - Dwfl_Error symerr; /* Previous failure to load symbols. */ Dwarf *dw; /* libdw handle for its debugging info. */ - Dwfl_Error dwerr; /* Previous failure to load info. */ + + Dwfl_Error symerr; /* Previous failure to load symbols. */ + Dwfl_Error dwerr; /* Previous failure to load DWARF. */ /* Known CU's in this module. */ struct dwfl_cu *first_cu, **cu; - unsigned int ncu; void *lazy_cu_root; /* Table indexed by Dwarf_Off of CU. */ - unsigned int lazycu; /* Possible users, deleted when none left. */ struct dwfl_arange *aranges; /* Mapping of addresses in module to CUs. */ + + void *build_id_bits; /* malloc'd copy of build ID bits. */ + GElf_Addr build_id_vaddr; /* Address where they reside, 0 if unknown. */ + int build_id_len; /* -1 for prior failure, 0 if unset. */ + + unsigned int ncu; + unsigned int lazycu; /* Possible users, deleted when none left. */ unsigned int naranges; + Dwarf_CFI *dwarf_cfi; /* Cached DWARF CFI for this module. */ + Dwarf_CFI *eh_cfi; /* Cached EH CFI for this module. */ + int segment; /* Index of first segment table entry. */ bool gc; /* Mark/sweep flag. */ }; @@ -274,6 +280,11 @@ extern Dwfl_Error __libdwfl_relocate_value (Dwfl_Module *mod, Elf *elf, /* Ensure that MOD->ebl is set up. */ extern Dwfl_Error __libdwfl_module_getebl (Dwfl_Module *mod) internal_function; +/* Install a new Dwarf_CFI in *SLOT (MOD->eh_cfi or MOD->dwarf_cfi). */ +extern Dwarf_CFI *__libdwfl_set_cfi (Dwfl_Module *mod, Dwarf_CFI **slot, + Dwarf_CFI *cfi) + internal_function; + /* Iterate through all the CU's in the module. Start by passing a null LASTCU, and then pass the last *CU returned. Success return with null *CU no more CUs. */ @@ -324,9 +335,18 @@ extern Dwfl_Error __libdw_gunzip (int fd, off64_t start_offset, void *mapped, size_t mapped_size, void **whole, size_t *whole_size) internal_function; -extern Dwfl_Error __libdw_bunzip2 (int fd, off64_t start_offset, - void *mapped, size_t mapped_size, - void **whole, size_t *whole_size) +extern Dwfl_Error __libdw_bunzip2 (int fd, off64_t start_offset, + void *mapped, size_t mapped_size, + void **whole, size_t *whole_size) + internal_function; +extern Dwfl_Error __libdw_unlzma (int fd, off64_t start_offset, + void *mapped, size_t mapped_size, + void **whole, size_t *whole_size) + internal_function; + +/* Skip the image header before a file image: updates *START_OFFSET. */ +extern Dwfl_Error __libdw_image_header (int fd, off64_t *start_offset, + void *mapped, size_t mapped_size) internal_function; /* Open Elf handle on *FDP. This handles decompression and checks @@ -425,6 +445,8 @@ INTDECL (dwfl_linux_kernel_report_modules) INTDECL (dwfl_linux_kernel_report_offline) INTDECL (dwfl_offline_section_address) INTDECL (dwfl_module_relocate_address) +INTDECL (dwfl_module_dwarf_cfi) +INTDECL (dwfl_module_eh_cfi) /* Leading arguments standard to callbacks passed a Dwfl_Module. */ #define MODCB_ARGS(mod) (mod), &(mod)->userdata, (mod)->name, (mod)->low_addr |