xref: /freebsd/sys/powerpc/include/elf.h (revision 95ee2897e98f5d444f26ed2334cc7c439f9c16c6)
1a0ff0188SDavid E. O'Brien /*-
2*4d846d26SWarner Losh  * SPDX-License-Identifier: BSD-2-Clause
371e3c308SPedro F. Giffuni  *
4a0ff0188SDavid E. O'Brien  * Copyright (c) 2001 David E. O'Brien
5a0ff0188SDavid E. O'Brien  * Copyright (c) 1996-1997 John D. Polstra.
6a0ff0188SDavid E. O'Brien  * All rights reserved.
7a0ff0188SDavid E. O'Brien  *
8a0ff0188SDavid E. O'Brien  * Redistribution and use in source and binary forms, with or without
9a0ff0188SDavid E. O'Brien  * modification, are permitted provided that the following conditions
10a0ff0188SDavid E. O'Brien  * are met:
11a0ff0188SDavid E. O'Brien  * 1. Redistributions of source code must retain the above copyright
12a0ff0188SDavid E. O'Brien  *    notice, this list of conditions and the following disclaimer.
13a0ff0188SDavid E. O'Brien  * 2. Redistributions in binary form must reproduce the above copyright
14a0ff0188SDavid E. O'Brien  *    notice, this list of conditions and the following disclaimer in the
15a0ff0188SDavid E. O'Brien  *    documentation and/or other materials provided with the distribution.
16a0ff0188SDavid E. O'Brien  *
17a0ff0188SDavid E. O'Brien  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
18a0ff0188SDavid E. O'Brien  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19a0ff0188SDavid E. O'Brien  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20a0ff0188SDavid E. O'Brien  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
21a0ff0188SDavid E. O'Brien  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22a0ff0188SDavid E. O'Brien  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23a0ff0188SDavid E. O'Brien  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24a0ff0188SDavid E. O'Brien  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25a0ff0188SDavid E. O'Brien  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26a0ff0188SDavid E. O'Brien  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27a0ff0188SDavid E. O'Brien  * SUCH DAMAGE.
28a0ff0188SDavid E. O'Brien  */
29a0ff0188SDavid E. O'Brien 
30a0ff0188SDavid E. O'Brien #ifndef _MACHINE_ELF_H_
31a0ff0188SDavid E. O'Brien #define	_MACHINE_ELF_H_ 1
32a0ff0188SDavid E. O'Brien 
33a0ff0188SDavid E. O'Brien /*
34a0ff0188SDavid E. O'Brien  * EABI ELF definitions for the PowerPC architecture.
35a0ff0188SDavid E. O'Brien  * See "PowerPC Embedded Application Binary Interface, 32-Bit Impliementation"
36a0ff0188SDavid E. O'Brien  * [ppc-eabi-1995-01.pdf] for details.
37a0ff0188SDavid E. O'Brien  */
38a0ff0188SDavid E. O'Brien 
39d83af91bSNathan Whitehorn #ifndef __ELF_WORD_SIZE
40d83af91bSNathan Whitehorn #ifdef __powerpc64__
41d83af91bSNathan Whitehorn #define	__ELF_WORD_SIZE	64	/* Used by <sys/elf_generic.h> */
42d83af91bSNathan Whitehorn #else
43a0ff0188SDavid E. O'Brien #define	__ELF_WORD_SIZE	32	/* Used by <sys/elf_generic.h> */
44d83af91bSNathan Whitehorn #endif
45d83af91bSNathan Whitehorn #endif
46d83af91bSNathan Whitehorn 
47d83af91bSNathan Whitehorn #include <sys/elf32.h>	/* Definitions common to all 32 bit architectures. */
48d83af91bSNathan Whitehorn #include <sys/elf64.h>	/* Definitions common to all 64 bit architectures. */
49a0ff0188SDavid E. O'Brien #include <sys/elf_generic.h>
50a0ff0188SDavid E. O'Brien 
51d83af91bSNathan Whitehorn #if __ELF_WORD_SIZE == 64
52d83af91bSNathan Whitehorn #define	ELF_ARCH	EM_PPC64
53d83af91bSNathan Whitehorn #define	ELF_MACHINE_OK(x) ((x) == EM_PPC64)
54d83af91bSNathan Whitehorn #else
55a0ff0188SDavid E. O'Brien #define	ELF_ARCH	EM_PPC
56d83af91bSNathan Whitehorn #define	ELF_ARCH32	EM_PPC
57a0ff0188SDavid E. O'Brien #define	ELF_MACHINE_OK(x) ((x) == EM_PPC)
58d83af91bSNathan Whitehorn #endif
59a0ff0188SDavid E. O'Brien 
60a0ff0188SDavid E. O'Brien /*
61a0ff0188SDavid E. O'Brien  * Auxiliary vector entries for passing information to the interpreter.
62a0ff0188SDavid E. O'Brien  *
63a0ff0188SDavid E. O'Brien  * The PowerPC supplement to the SVR4 ABI specification names this "auxv_t",
64a0ff0188SDavid E. O'Brien  * but POSIX lays claim to all symbols ending with "_t".
65a0ff0188SDavid E. O'Brien  */
66a0ff0188SDavid E. O'Brien 
67a0ff0188SDavid E. O'Brien typedef struct {	/* Auxiliary vector entry on initial stack */
68a0ff0188SDavid E. O'Brien 	int	a_type;			/* Entry type. */
69a0ff0188SDavid E. O'Brien 	union {
70a608b7d3SJustin Hibbits #ifdef __powerpc64__
71a608b7d3SJustin Hibbits 		int	a_val;		/* Integer value */
72a608b7d3SJustin Hibbits #else
73a0ff0188SDavid E. O'Brien 		long	a_val;		/* Integer value. */
74a0ff0188SDavid E. O'Brien 		void	*a_ptr;		/* Address. */
75a0ff0188SDavid E. O'Brien 		void	(*a_fcn)(void);	/* Function pointer (not used). */
76a608b7d3SJustin Hibbits #endif
77a0ff0188SDavid E. O'Brien 	} a_un;
78a0ff0188SDavid E. O'Brien } Elf32_Auxinfo;
79a0ff0188SDavid E. O'Brien 
80d83af91bSNathan Whitehorn typedef struct {	/* Auxiliary vector entry on initial stack */
81d83af91bSNathan Whitehorn 	long	a_type;			/* Entry type. */
82d83af91bSNathan Whitehorn 	union {
83d83af91bSNathan Whitehorn 		long	a_val;		/* Integer value. */
84d83af91bSNathan Whitehorn 		void	*a_ptr;		/* Address. */
85d83af91bSNathan Whitehorn 		void	(*a_fcn)(void);	/* Function pointer (not used). */
86d83af91bSNathan Whitehorn 	} a_un;
87d83af91bSNathan Whitehorn } Elf64_Auxinfo;
88d83af91bSNathan Whitehorn 
89a0ff0188SDavid E. O'Brien __ElfType(Auxinfo);
90a0ff0188SDavid E. O'Brien 
91a0ff0188SDavid E. O'Brien /*
92a0ff0188SDavid E. O'Brien  * Relocation types.
93a0ff0188SDavid E. O'Brien  */
94a0ff0188SDavid E. O'Brien 
95a0ff0188SDavid E. O'Brien #define	R_PPC_COUNT		37	/* Count of defined relocation types. */
96a0ff0188SDavid E. O'Brien 
97a0ff0188SDavid E. O'Brien 					/* Count of defined relocation types. */
98a0ff0188SDavid E. O'Brien #define	R_PPC_EMB_COUNT		(R_PPC_EMB_RELSDA - R_PPC_EMB_NADDR32 + 1)
99a0ff0188SDavid E. O'Brien 
100a0ff0188SDavid E. O'Brien /* Define "machine" characteristics */
10181472778SBrandon Bergren #if BYTE_ORDER == LITTLE_ENDIAN
10281472778SBrandon Bergren #define	ELF_TARG_DATA	ELFDATA2LSB
10381472778SBrandon Bergren #else
10481472778SBrandon Bergren #define	ELF_TARG_DATA	ELFDATA2MSB
10581472778SBrandon Bergren #endif
106d83af91bSNathan Whitehorn #if __ELF_WORD_SIZE == 64
107d83af91bSNathan Whitehorn #define	ELF_TARG_CLASS	ELFCLASS64
108d83af91bSNathan Whitehorn #define	ELF_TARG_MACH	EM_PPC64
109d83af91bSNathan Whitehorn #define	ELF_TARG_VER	1
110d83af91bSNathan Whitehorn #else
111a0ff0188SDavid E. O'Brien #define	ELF_TARG_CLASS	ELFCLASS32
112a0ff0188SDavid E. O'Brien #define	ELF_TARG_MACH	EM_PPC
113a0ff0188SDavid E. O'Brien #define	ELF_TARG_VER	1
114d83af91bSNathan Whitehorn #endif
115a0ff0188SDavid E. O'Brien 
11602306393SKonstantin Belousov #define	ET_DYN_LOAD_ADDR 0x01010000
11702306393SKonstantin Belousov 
118741dfd86SJustin Hibbits #define	AT_OLD_NULL		AT_NULL
119741dfd86SJustin Hibbits #define	AT_OLD_IGNORE		AT_IGNORE
120741dfd86SJustin Hibbits #define	AT_OLD_EXECFD		AT_EXECFD
121741dfd86SJustin Hibbits #define	AT_OLD_PHDR		AT_PHDR
122741dfd86SJustin Hibbits #define	AT_OLD_PHENT		AT_PHENT
123741dfd86SJustin Hibbits #define	AT_OLD_PHNUM		AT_PHNUM
124741dfd86SJustin Hibbits #define	AT_OLD_PAGESZ		AT_PAGESZ
125741dfd86SJustin Hibbits #define	AT_OLD_BASE		AT_BASE
126741dfd86SJustin Hibbits #define	AT_OLD_FLAGS		AT_FLAGS
127741dfd86SJustin Hibbits #define	AT_OLD_ENTRY		AT_ENTRY
128741dfd86SJustin Hibbits #define	AT_OLD_NOTELF		AT_NOTELF
129741dfd86SJustin Hibbits #define	AT_OLD_UID		AT_UID
130741dfd86SJustin Hibbits #define	AT_OLD_EUID		AT_EUID
131741dfd86SJustin Hibbits #define	AT_OLD_EXECPATH		13
132741dfd86SJustin Hibbits #define	AT_OLD_CANARY		14
133741dfd86SJustin Hibbits #define	AT_OLD_CANARYLEN	15
134741dfd86SJustin Hibbits #define	AT_OLD_OSRELDATE	16
135741dfd86SJustin Hibbits #define	AT_OLD_NCPUS		17
136741dfd86SJustin Hibbits #define	AT_OLD_PAGESIZES	18
137741dfd86SJustin Hibbits #define	AT_OLD_PAGESIZESLEN	19
138741dfd86SJustin Hibbits #define	AT_OLD_STACKPROT	21
139741dfd86SJustin Hibbits #define	AT_OLD_TIMEKEEP		AT_TIMEKEEP
140741dfd86SJustin Hibbits #define	AT_OLD_EHDRFLAGS	AT_EHDRFLAGS
141741dfd86SJustin Hibbits #define	AT_OLD_HWCAP		AT_HWCAP
142741dfd86SJustin Hibbits #define	AT_OLD_HWCAP2		AT_HWCAP2
143741dfd86SJustin Hibbits 
144741dfd86SJustin Hibbits #define	AT_OLD_COUNT	27	/* Count of defined aux entry types. */
145741dfd86SJustin Hibbits 
146a0ff0188SDavid E. O'Brien #endif /* !_MACHINE_ELF_H_ */
147