#ifndef __ELFDUMP_H
#define __ELFDUMP_H
#include <_machelf.h>
#include <debug.h>
#ifdef __cplusplus
extern "C" {
#endif
#define FLG_SHOW_DYNAMIC 0x00000001
#define FLG_SHOW_EHDR 0x00000002
#define FLG_SHOW_INTERP 0x00000004
#define FLG_SHOW_SHDR 0x00000008
#define FLG_SHOW_NOTE 0x00000010
#define FLG_SHOW_PHDR 0x00000020
#define FLG_SHOW_RELOC 0x00000040
#define FLG_SHOW_SYMBOLS 0x00000080
#define FLG_SHOW_VERSIONS 0x00000100
#define FLG_SHOW_HASH 0x00000200
#define FLG_SHOW_GOT 0x00000400
#define FLG_SHOW_SYMINFO 0x00000800
#define FLG_SHOW_MOVE 0x00001000
#define FLG_SHOW_GROUP 0x00002000
#define FLG_SHOW_CAP 0x00004000
#define FLG_SHOW_UNWIND 0x00008000
#define FLG_SHOW_SORT 0x00010000
#define FLG_CTL_LONGNAME 0x01000000
#define FLG_CTL_DEMANGLE 0x02000000
#define FLG_CTL_FAKESHDR 0x04000000
#define FLG_CTL_MATCH 0x08000000
#define FLG_CTL_OSABI 0x10000000
#define FLG_CALC_CHECKSUM 0x40000000
#define FLG_MASK_SHOW 0x00ffffff
#define FLG_MASK_CTL 0x3f000000
#define FLG_MASK_CALC 0xc0000000
#define FLG_MASK_SHOW_NOSHDR (FLG_SHOW_EHDR | FLG_SHOW_PHDR)
#define FLG_MASK_SHOW_SHDR (FLG_MASK_SHOW & ~FLG_MASK_SHOW_NOSHDR)
#define FLG_MASK_CALC_SHDR FLG_CALC_CHECKSUM
#define MAXNDXSIZE 10
typedef struct cache {
Elf_Scn *c_scn;
Shdr *c_shdr;
Elf_Data *c_data;
char *c_name;
int c_ndx;
} Cache;
typedef struct got_info {
Word g_reltype;
void *g_rel;
const char *g_symname;
} Got_info;
extern const Cache cache_init;
extern void failure(const char *, const char *);
extern const char *demangle(const char *, uint_t);
typedef enum {
MATCH_F_STRICT = 1,
MATCH_F_PHDR = 2,
MATCH_F_NAME = 4,
MATCH_F_NDX = 8,
MATCH_F_TYPE = 16
} match_flags_t;
#define MATCH_F_ALL (MATCH_F_NAME | MATCH_F_NDX | MATCH_F_TYPE)
extern int match(match_flags_t, const char *, uint_t, uint_t);
typedef enum {
CORENOTE_R_OK = 0,
CORENOTE_R_OK_DUMP = 1,
CORENOTE_R_BADDATA = 2,
CORENOTE_R_BADARCH = 3,
CORENOTE_R_BADTYPE = 4
} corenote_ret_t;
#if defined(_ELF64)
#define cap cap64
#define checksum checksum64
#define dynamic dynamic64
#define fake_shdr_cache fake_shdr_cache64
#define fake_shdr_cache_free fake_shdr_cache_free64
#define got got64
#define group group64
#define hash hash64
#define interp interp64
#define move move64
#define note note64
#define note_entry note_entry64
#define regular regular64
#define reloc reloc64
#define sections sections64
#define string string64
#define symbols symbols64
#define syminfo syminfo64
#define symlookup symlookup64
#define unwind unwind64
#define versions versions64
#define version_def version_def64
#define version_need version_need64
#else
#define cap cap32
#define checksum checksum32
#define dynamic dynamic32
#define fake_shdr_cache fake_shdr_cache32
#define fake_shdr_cache_free fake_shdr_cache_free32
#define got got32
#define group group32
#define hash hash32
#define interp interp32
#define move move32
#define note note32
#define note_entry note_entry32
#define regular regular32
#define reloc reloc32
#define sections sections32
#define string string32
#define symbols symbols32
#define syminfo syminfo32
#define symlookup symlookup32
#define unwind unwind32
#define versions versions32
#define version_def version_def32
#define version_need version_need32
#endif
extern corenote_ret_t corenote(Half, int, Word, const char *, Word);
extern void dump_eh_frame(const char *, char *, uchar_t *, size_t, uint64_t,
Half e_machine, uchar_t *e_ident, uint64_t gotaddr);
extern void dump_hex_bytes(const void *, size_t, int, int, int);
extern int fake_shdr_cache32(const char *, int, Elf *, Elf32_Ehdr *,
Cache **, size_t *);
extern int fake_shdr_cache64(const char *, int, Elf *, Elf64_Ehdr *,
Cache **, size_t *);
extern void fake_shdr_cache_free32(Cache *, size_t);
extern void fake_shdr_cache_free64(Cache *, size_t);
extern int regular32(const char *, int, Elf *, uint_t, const char *, int,
uchar_t);
extern int regular64(const char *, int, Elf *, uint_t, const char *, int,
uchar_t);
#ifdef __cplusplus
}
#endif
#endif