xref: /illumos-gate/usr/src/cmd/file/elf_read.h (revision c2c65e21c1fd025c3fc6103cc713dd5343fc9ad6)
1*c2c65e21Sny155746 /*
2*c2c65e21Sny155746  * CDDL HEADER START
3*c2c65e21Sny155746  *
4*c2c65e21Sny155746  * The contents of this file are subject to the terms of the
5*c2c65e21Sny155746  * Common Development and Distribution License (the "License").
6*c2c65e21Sny155746  * You may not use this file except in compliance with the License.
7*c2c65e21Sny155746  *
8*c2c65e21Sny155746  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9*c2c65e21Sny155746  * or http://www.opensolaris.org/os/licensing.
10*c2c65e21Sny155746  * See the License for the specific language governing permissions
11*c2c65e21Sny155746  * and limitations under the License.
12*c2c65e21Sny155746  *
13*c2c65e21Sny155746  * When distributing Covered Code, include this CDDL HEADER in each
14*c2c65e21Sny155746  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15*c2c65e21Sny155746  * If applicable, add the following below this CDDL HEADER, with the
16*c2c65e21Sny155746  * fields enclosed by brackets "[]" replaced with your own identifying
17*c2c65e21Sny155746  * information: Portions Copyright [yyyy] [name of copyright owner]
18*c2c65e21Sny155746  *
19*c2c65e21Sny155746  * CDDL HEADER END
20*c2c65e21Sny155746  */
21*c2c65e21Sny155746 /*
22*c2c65e21Sny155746  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23*c2c65e21Sny155746  * Use is subject to license terms.
24*c2c65e21Sny155746  */
25*c2c65e21Sny155746 
26*c2c65e21Sny155746 #ifndef _ELF_READ_H
27*c2c65e21Sny155746 #define	_ELF_READ_H
28*c2c65e21Sny155746 
29*c2c65e21Sny155746 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30*c2c65e21Sny155746 
31*c2c65e21Sny155746 #define	BUFSZ 128
32*c2c65e21Sny155746 typedef struct Elf_Info {
33*c2c65e21Sny155746 	boolean_t	dynamic;	/* dymanically linked? */
34*c2c65e21Sny155746 	unsigned	core_type;	/* core? what type of core? */
35*c2c65e21Sny155746 	unsigned	stripped;	/* symtab, debug info */
36*c2c65e21Sny155746 	unsigned	flags;		/* e_flags */
37*c2c65e21Sny155746 	unsigned	machine;	/* e_machine */
38*c2c65e21Sny155746 	unsigned	type;		/* e_type */
39*c2c65e21Sny155746 	int		elffd;		/* fd of file being processed */
40*c2c65e21Sny155746 	char		fname[PRFNSZ];	/* name of process that dumped core */
41*c2c65e21Sny155746 	char		cap_str[BUFSZ];	/* hw/sw capabilities */
42*c2c65e21Sny155746 	char		*file;		/* file being processed */
43*c2c65e21Sny155746 } Elf_Info;
44*c2c65e21Sny155746 
45*c2c65e21Sny155746 /* values for Elf_Info.stripped */
46*c2c65e21Sny155746 #define	E_DBGINF	0x01
47*c2c65e21Sny155746 #define	E_SYMTAB	0x02
48*c2c65e21Sny155746 #define	E_NOSTRIP	0x03
49*c2c65e21Sny155746 
50*c2c65e21Sny155746 /* values for Elf_Info.core_type; */
51*c2c65e21Sny155746 #define	EC_NOTCORE	0x0
52*c2c65e21Sny155746 #define	EC_OLDCORE	0x1
53*c2c65e21Sny155746 #define	EC_NEWCORE	0x2
54*c2c65e21Sny155746 
55*c2c65e21Sny155746 /* elf file processing errors */
56*c2c65e21Sny155746 #define	ELF_ERR_ELFCAP1	gettext("%s: %s zero size or zero entry ELF " \
57*c2c65e21Sny155746 			    "section - ELF capabilities ignored\n")
58*c2c65e21Sny155746 #define	ELF_ERR_ELFCAP2	gettext("%s: %s: can't read ELF capabilities " \
59*c2c65e21Sny155746 			    "data - ELF capabilities ignored\n")
60*c2c65e21Sny155746 
61*c2c65e21Sny155746 extern int is_in_list(char *str);
62*c2c65e21Sny155746 
63*c2c65e21Sny155746 /* return status for elf_read and its helper functions */
64*c2c65e21Sny155746 #define	ELF_READ_OKAY 1
65*c2c65e21Sny155746 #define	ELF_READ_FAIL 0
66*c2c65e21Sny155746 
67*c2c65e21Sny155746 #if defined(_ELF64)
68*c2c65e21Sny155746 
69*c2c65e21Sny155746 #define	Elf_Ehdr	Elf64_Ehdr
70*c2c65e21Sny155746 #define	Elf_Shdr	Elf64_Shdr
71*c2c65e21Sny155746 #define	Elf_Phdr	Elf64_Phdr
72*c2c65e21Sny155746 #define	Elf_Cap		Elf64_Cap
73*c2c65e21Sny155746 #define	Elf_Nhdr	Elf64_Nhdr
74*c2c65e21Sny155746 
75*c2c65e21Sny155746 #define	elf_read	elf_read64
76*c2c65e21Sny155746 #define	elf_xlatetom	elf64_xlatetom
77*c2c65e21Sny155746 #define	elf_fsize	elf64_fsize
78*c2c65e21Sny155746 #define	get_class	get_class64
79*c2c65e21Sny155746 #define	get_version	get_version64
80*c2c65e21Sny155746 #define	get_format	get_format64
81*c2c65e21Sny155746 
82*c2c65e21Sny155746 #else
83*c2c65e21Sny155746 
84*c2c65e21Sny155746 #define	Elf_Ehdr	Elf32_Ehdr
85*c2c65e21Sny155746 #define	Elf_Shdr	Elf32_Shdr
86*c2c65e21Sny155746 #define	Elf_Phdr	Elf32_Phdr
87*c2c65e21Sny155746 #define	Elf_Cap		Elf32_Cap
88*c2c65e21Sny155746 #define	Elf_Nhdr	Elf32_Nhdr
89*c2c65e21Sny155746 
90*c2c65e21Sny155746 #define	elf_read	elf_read32
91*c2c65e21Sny155746 #define	elf_xlatetom	elf32_xlatetom
92*c2c65e21Sny155746 #define	elf_fsize	elf32_fsize
93*c2c65e21Sny155746 #define	get_class	get_class32
94*c2c65e21Sny155746 #define	get_version	get_version32
95*c2c65e21Sny155746 #define	get_format	get_format32
96*c2c65e21Sny155746 
97*c2c65e21Sny155746 #endif
98*c2c65e21Sny155746 
99*c2c65e21Sny155746 /* so lint can understand elf_read64 is defined */
100*c2c65e21Sny155746 #ifdef lint
101*c2c65e21Sny155746 #define	elf_read64	elf_read
102*c2c65e21Sny155746 #endif /* lint */
103*c2c65e21Sny155746 
104*c2c65e21Sny155746 #endif /* _ELF_READ_H */
105