4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
34 * Local include file for elfdump.
41 * flags: This is a bitmask that controls elfdump's operations. There
42 * are three categories of flag:
44 * SHOW - Specify categories of things in the ELF object to display.
45 * CALC - Compute something based on the contents of the ELF object.
46 * CTL - Control options specify general options that are not
47 * specific to any specific part of the ELF object, but
48 * which apply at a higher level.
50 * To simplify masking these categories, they are assigned bit ranges
52 * SHOW: Bottom 24-bits
53 * CALC: Upper 2 bits of most significant byte
54 * CTL: Lower 6 bits of most significant byte
56 #define FLG_SHOW_DYNAMIC 0x00000001
57 #define FLG_SHOW_EHDR 0x00000002
58 #define FLG_SHOW_INTERP 0x00000004
59 #define FLG_SHOW_SHDR 0x00000008
60 #define FLG_SHOW_NOTE 0x00000010
61 #define FLG_SHOW_PHDR 0x00000020
62 #define FLG_SHOW_RELOC 0x00000040
63 #define FLG_SHOW_SYMBOLS 0x00000080
64 #define FLG_SHOW_VERSIONS 0x00000100
65 #define FLG_SHOW_HASH 0x00000200
66 #define FLG_SHOW_GOT 0x00000400
67 #define FLG_SHOW_SYMINFO 0x00000800
68 #define FLG_SHOW_MOVE 0x00001000
69 #define FLG_SHOW_GROUP 0x00002000
70 #define FLG_SHOW_CAP 0x00004000
71 #define FLG_SHOW_UNWIND 0x00008000
72 #define FLG_SHOW_SORT 0x00010000
74 #define FLG_CTL_LONGNAME 0x01000000
75 #define FLG_CTL_DEMANGLE 0x02000000
76 #define FLG_CTL_FAKESHDR 0x04000000
77 #define FLG_CTL_MATCH 0x08000000
78 #define FLG_CTL_OSABI 0x10000000
80 #define FLG_CALC_CHECKSUM 0x40000000
82 /* Bitmasks that isolate the parts of a flag value */
83 #define FLG_MASK_SHOW 0x00ffffff
84 #define FLG_MASK_CTL 0x3f000000
85 #define FLG_MASK_CALC 0xc0000000
88 * Mask that selects the show flags that do not require the ELF
89 * object to have a section header array.
91 #define FLG_MASK_SHOW_NOSHDR (FLG_SHOW_EHDR | FLG_SHOW_PHDR)
94 * Masks to select the flags that require the ELF object to
95 * have a section header array, within each flag type.
97 #define FLG_MASK_SHOW_SHDR (FLG_MASK_SHOW & ~FLG_MASK_SHOW_NOSHDR)
98 #define FLG_MASK_CALC_SHDR FLG_CALC_CHECKSUM
101 /* Size of buffer used for formatting an index into textual representation */
102 #define MAXNDXSIZE 10
104 typedef struct cache
{
109 int c_ndx
; /* Section index */
112 typedef struct got_info
{
113 Word g_reltype
; /* it will never happen, but */
114 /* support mixed relocations */
116 const char *g_symname
;
119 extern const Cache cache_init
;
121 extern void failure(const char *, const char *);
122 extern const char *demangle(const char *, uint_t
);
126 * Flags for the match() function:
128 * A strict match requires an explicit match to
129 * a user specified match (-I, -N, -T) option. A
130 * non-strict match also succeeds if the match
134 * The match item is a program header. If this
135 * flag is not set, the match item is a section
139 * The name parameter contains valid information.
142 * The ndx argument contains valid information
145 * The type argument contains valid information
155 /* It is common for calls to match() to specify all three arguments */
156 #define MATCH_F_ALL (MATCH_F_NAME | MATCH_F_NDX | MATCH_F_TYPE)
158 extern int match(match_flags_t
, const char *, uint_t
, uint_t
);
161 * Possible return values from corenote()
164 CORENOTE_R_OK
= 0, /* Note data successfully displayed */
165 CORENOTE_R_OK_DUMP
= 1, /* Note OK, but not handled. Display Hex dump */
166 CORENOTE_R_BADDATA
= 2, /* Note data truncated or otherwise malformed */
167 CORENOTE_R_BADARCH
= 3, /* core file note code does not contain */
168 /* support for given architecture */
169 CORENOTE_R_BADTYPE
= 4 /* Unknown note type */
173 * Define various elfdump() functions into their 32-bit and 64-bit variants.
177 #define checksum checksum64
178 #define dynamic dynamic64
179 #define fake_shdr_cache fake_shdr_cache64
180 #define fake_shdr_cache_free fake_shdr_cache_free64
182 #define group group64
184 #define interp interp64
187 #define note_entry note_entry64
188 #define regular regular64
189 #define reloc reloc64
190 #define sections sections64
191 #define string string64
192 #define symbols symbols64
193 #define syminfo syminfo64
194 #define symlookup symlookup64
195 #define unwind unwind64
196 #define versions versions64
197 #define version_def version_def64
198 #define version_need version_need64
201 #define checksum checksum32
202 #define dynamic dynamic32
203 #define fake_shdr_cache fake_shdr_cache32
204 #define fake_shdr_cache_free fake_shdr_cache_free32
206 #define group group32
208 #define interp interp32
211 #define note_entry note_entry32
212 #define regular regular32
213 #define reloc reloc32
214 #define sections sections32
215 #define string string32
216 #define symbols symbols32
217 #define syminfo syminfo32
218 #define symlookup symlookup32
219 #define unwind unwind32
220 #define versions versions32
221 #define version_def version_def32
222 #define version_need version_need32
225 extern corenote_ret_t
corenote(Half
, int, Word
, const char *, Word
);
226 extern void dump_eh_frame(const char *, char *, uchar_t
*, size_t, uint64_t,
227 Half e_machine
, uchar_t
*e_ident
, uint64_t gotaddr
);
228 extern void dump_hex_bytes(const void *, size_t, int, int, int);
230 extern int fake_shdr_cache32(const char *, int, Elf
*, Elf32_Ehdr
*,
232 extern int fake_shdr_cache64(const char *, int, Elf
*, Elf64_Ehdr
*,
235 extern void fake_shdr_cache_free32(Cache
*, size_t);
236 extern void fake_shdr_cache_free64(Cache
*, size_t);
238 extern int regular32(const char *, int, Elf
*, uint_t
, const char *, int,
240 extern int regular64(const char *, int, Elf
*, uint_t
, const char *, int,
247 #endif /* __ELFDUMP_H */