_elfdump.h revision 3492:cd4326c9ab0e
1/*
2 * CDDL HEADER START
3 *
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.
7 *
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.
12 *
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]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27#ifndef	__ELFDUMP_H
28#define	__ELFDUMP_H
29
30#pragma ident	"%Z%%M%	%I%	%E% SMI"
31
32#include	<machelf.h>
33#include	<debug.h>
34
35/*
36 * Local include file for elfdump.
37 */
38#ifdef	__cplusplus
39extern "C" {
40#endif
41
42#define	FLG_DYNAMIC	0x00000001
43#define	FLG_EHDR	0x00000002
44#define	FLG_INTERP	0x00000004
45#define	FLG_SHDR	0x00000008
46#define	FLG_NOTE	0x00000010
47#define	FLG_PHDR	0x00000020
48#define	FLG_RELOC	0x00000040
49#define	FLG_SYMBOLS	0x00000080
50#define	FLG_VERSIONS	0x00000100
51#define	FLG_HASH	0x00000200
52#define	FLG_GOT		0x00000400
53#define	FLG_SYMINFO	0x00000800
54#define	FLG_MOVE	0x00001000
55#define	FLG_GROUP	0x00002000
56#define	FLG_CAP		0x00004000
57#define	FLG_UNWIND	0x00008000
58#define	FLG_SORT	0x00010000
59#define	FLG_LONGNAME	0x00100000	/* not done by default */
60#define	FLG_CHECKSUM	0x00200000	/* not done by default */
61#define	FLG_DEMANGLE	0x00400000	/* not done by default */
62#define	FLG_EVERYTHING	0x000fffff
63
64#define	MAXNDXSIZE	10
65
66typedef struct cache {
67	Shdr		*c_shdr;
68	Elf_Data	*c_data;
69	char		*c_name;
70} Cache;
71
72typedef struct got_info {
73	Word		g_reltype;	/* it will never happen, but */
74					/* support mixed relocations */
75	void		*g_rel;
76	const char	*g_symname;
77} Got_info;
78
79extern	const Cache	 cache_init;
80
81extern	void		failure(const char *, const char *);
82extern	const char	*demangle(const char *, uint_t);
83
84/*
85 * Define various elfdump() functions into their 32-bit and 64-bit variants.
86 */
87#if	defined(_ELF64)
88#define	cap			cap64
89#define	checksum		checksum64
90#define	dynamic			dynamic64
91#define	got			got64
92#define	group			group64
93#define	hash			hash64
94#define	interp			interp64
95#define	move			move64
96#define	note			note64
97#define	note_entry		note_entry64
98#define	regular			regular64
99#define	reloc			reloc64
100#define	sections		sections64
101#define	string			string64
102#define	symbols			symbols64
103#define	syminfo			syminfo64
104#define	symlookup		symlookup64
105#define	unwind			unwind64
106#define	versions		versions64
107#define	version_def		version_def64
108#define	version_need		version_need64
109#else
110#define	cap			cap32
111#define	checksum		checksum32
112#define	dynamic			dynamic32
113#define	got			got32
114#define	group			group32
115#define	hash			hash32
116#define	interp			interp32
117#define	move			move32
118#define	note			note32
119#define	note_entry		note_entry32
120#define	regular			regular32
121#define	reloc			reloc32
122#define	sections		sections32
123#define	string			string32
124#define	symbols			symbols32
125#define	syminfo			syminfo32
126#define	symlookup		symlookup32
127#define	unwind			unwind32
128#define	versions		versions32
129#define	version_def		version_def32
130#define	version_need		version_need32
131#endif
132
133extern	void	regular32(const char *, Elf *, uint_t, char *, int);
134extern	void	regular64(const char *, Elf *, uint_t, char *, int);
135
136#ifdef	__cplusplus
137}
138#endif
139
140#endif	/* __ELFDUMP_H */
141