< prev index next >

src/hotspot/share/utilities/elfFile.hpp

Print this page

        

*** 43,52 **** --- 43,53 ---- typedef Elf64_Ehdr Elf_Ehdr; typedef Elf64_Shdr Elf_Shdr; typedef Elf64_Phdr Elf_Phdr; typedef Elf64_Sym Elf_Sym; + typedef Elf64_Nhdr Elf_Nhdr; #if !defined(_ALLBSD_SOURCE) || defined(__APPLE__) #define ELF_ST_TYPE ELF64_ST_TYPE #endif
*** 59,68 **** --- 60,70 ---- typedef Elf32_Ehdr Elf_Ehdr; typedef Elf32_Shdr Elf_Shdr; typedef Elf32_Phdr Elf_Phdr; typedef Elf32_Sym Elf_Sym; + typedef Elf32_Nhdr Elf_Nhdr; #if !defined(_ALLBSD_SOURCE) || defined(__APPLE__) #define ELF_ST_TYPE ELF32_ST_TYPE #endif #endif
*** 115,124 **** --- 117,133 ---- ~MarkedFileReader(); bool has_mark() const { return _marked_pos >= 0; } }; + // Interface to external debug info file + class ElfDebugInfo : public CHeapObj<mtInternal> { + public: + virtual bool decode(address addr, char* const buf, size_t buflen, int* offset) = 0; + virtual bool has_error() const = 0; + }; + // ElfFile is basically an elf file parser, which can lookup the symbol // that is the nearest to the given address. // Beware, this code is called from vm error reporting code, when vm is already // in "error" state, so there are scenarios, lookup will fail. We want this // part of code to be very defensive, and bait out if anything went wrong.
*** 146,159 **** ElfStringTable* _shdr_string_table; // function descriptors table ElfFuncDescTable* _funcDesc_table; NullDecoder::decoder_status _status; public: ! ElfFile(const char* filepath); ~ElfFile(); bool decode(address addr, char* buf, int buflen, int* offset); const char* filepath() const { --- 155,171 ---- ElfStringTable* _shdr_string_table; // function descriptors table ElfFuncDescTable* _funcDesc_table; + // external debug info + ElfDebugInfo* _debuginfo; + NullDecoder::decoder_status _status; public: ! ElfFile(const char* filepath, bool load_debug_info = true); ~ElfFile(); bool decode(address addr, char* buf, int buflen, int* offset); const char* filepath() const {
*** 180,189 **** --- 192,207 ---- static bool is_elf_file(Elf_Ehdr&); // parse this elf file NullDecoder::decoder_status parse_elf(const char* filename); + // load external debuginfo file for this file. + ElfDebugInfo* load_debuginfo() NOT_LINUX({ return NULL; }); + + // internal implementation + bool decode_impl(address addr, char* buf, int buflen, int* offset); + // load string, symbol and function descriptor tables from the elf file NullDecoder::decoder_status load_tables(); ElfFile* next() const { return _next; } void set_next(ElfFile* file) { _next = file; }
< prev index next >