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 * $FreeBSD$
22 *
23 * ELF compatibility definitions for OpenSolaris source.
24 *
25 */
26
27#ifndef	_SYS__ELF_SOLARIS_H_
28#define	_SYS__ELF_SOLARIS_H_
29
30#include_next <sys/elf.h>
31
32#define __sElfN(x)       typedef __CONCAT(__CONCAT(__CONCAT(Elf,__ELF_WORD_SIZE),_),x) x
33
34__sElfN(Addr);
35__sElfN(Cap);
36__sElfN(Dyn);
37__sElfN(Ehdr);
38__sElfN(Move);
39__sElfN(Off);
40__sElfN(Phdr);
41__sElfN(Rel);
42__sElfN(Rela);
43__sElfN(Shdr);
44__sElfN(Sym);
45__sElfN(Syminfo);
46__sElfN(Verdaux);
47__sElfN(Verdef);
48__sElfN(Vernaux);
49__sElfN(Verneed);
50__sElfN(Versym);
51
52__sElfN(Half);
53__sElfN(Sword);
54__sElfN(Word);
55
56#if __ELF_WORD_SIZE == 32
57typedef	Elf32_Word	Xword;	/* Xword/Sxword are 32-bits in Elf32 */
58typedef	Elf32_Sword	Sxword;
59#else
60typedef	Elf64_Xword	Xword;
61typedef	Elf64_Sxword	Sxword;
62#endif
63
64#define ELF_M_INFO	__ELFN(M_INFO)
65#define ELF_M_SIZE	__ELFN(M_SIZE)
66#define ELF_M_SYM	__ELFN(M_SYM)
67
68/*
69 * Elf `printf' type-cast macros.  These force arguments to be a fixed size
70 * so that Elf32 and Elf64 can share common format strings.
71 */
72#define	EC_ADDR(a)	((Elf64_Addr)(a))		/* "ull" */
73#define	EC_OFF(a)	((Elf64_Off)(a))		/* "ull"  */
74#define	EC_HALF(a)	((Elf64_Half)(a))		/* "d"   */
75#define	EC_WORD(a)	((Elf64_Word)(a))		/* "u"   */
76#define	EC_SWORD(a)	((Elf64_Sword)(a))		/* "d"   */
77#define	EC_XWORD(a)	((Elf64_Xword)(a))		/* "ull" */
78#define	EC_SXWORD(a)	((Elf64_Sxword)(a))		/* "ll"  */
79#define	EC_LWORD(a)	((Elf64_Lword)(a))		/* "ull" */
80
81#define	elf_checksum		__elfN(checksum)
82#define	elf_fsize		__elfN(fsize)
83#define	elf_getehdr		__elfN(getehdr)
84#define	elf_getphdr		__elfN(getphdr)
85#define	elf_newehdr		__elfN(newehdr)
86#define	elf_newphdr		__elfN(newphdr)
87#define	elf_getshdr		__elfN(getshdr)
88#define	elf_xlatetof		__elfN(xlatetof)
89#define	elf_xlatetom		__elfN(xlatetom)
90
91#define	Elf_cap_entry		__ElfN(cap_entry)
92#define	Elf_cap_title		__ElfN(cap_title)
93#define	Elf_demangle_name	__ElfN(demangle_name)
94#define	Elf_dyn_entry		__ElfN(dyn_entry)
95#define	Elf_dyn_title		__ElfN(dyn_title)
96#define	Elf_ehdr		__ElfN(ehdr)
97#define	Elf_got_entry		__ElfN(got_entry)
98#define	Elf_got_title		__ElfN(got_title)
99#define	Elf_reloc_apply_reg	__ElfN(reloc_apply_reg)
100#define	Elf_reloc_apply_val	__ElfN(reloc_apply_val)
101#define	Elf_reloc_entry_1	__ElfN(reloc_entry_1)
102#define	Elf_reloc_entry_2	__ElfN(reloc_entry_2)
103#define	Elf_reloc_title		__ElfN(reloc_title)
104#define	Elf_phdr		__ElfN(phdr)
105#define	Elf_shdr		__ElfN(shdr)
106#define	Elf_syms_table_entry	__ElfN(syms_table_entry)
107#define	Elf_syms_table_title	__ElfN(syms_table_title)
108#define	Elf_ver_def_title	__ElfN(ver_def_title)
109#define	Elf_ver_line_1		__ElfN(ver_line_1)
110#define	Elf_ver_line_2		__ElfN(ver_line_2)
111#define	Elf_ver_line_3		__ElfN(ver_line_3)
112#define	Elf_ver_line_4		__ElfN(ver_line_4)
113#define	Elf_ver_line_5		__ElfN(ver_line_5)
114#define	Elf_ver_need_title	__ElfN(ver_need_title)
115
116#endif /* !_SYS__ELF_SOLARIS_H_ */
117