xref: /netbsd/sys/arch/ia64/include/elf_machdep.h (revision c0bc043d)
1 /*        $NetBSD: elf_machdep.h,v 1.5 2023/06/03 20:41:44 andvar Exp $	*/
2 
3 /*-
4  * Copyright (c) 1996-1997 John D. Polstra.
5  * All rights reserved.
6  *
7  * Redistribution and use in source and binary forms, with or without
8  * modification, are permitted provided that the following conditions
9  * are met:
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  * 2. Redistributions in binary form must reproduce the above copyright
13  *    notice, this list of conditions and the following disclaimer in the
14  *    documentation and/or other materials provided with the distribution.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26  * SUCH DAMAGE.
27  *
28  * $FreeBSD: src/sys/ia64/include/elf.h,v 1.11 2003/09/25 01:10:24 peter Exp $
29  */
30 #ifndef _IA64_ELF_MACHDEP_H
31 #define _IA64_ELF_MACHDEP_H
32 
33 #define	ELF32_MACHDEP_ENDIANNESS	XXX	/* break compilation */
34 #define	ELF32_MACHDEP_ID_CASES						\
35 		/* no 32-bit ELF machine types supported until 32bit emu */
36 
37 #define	ELF64_MACHDEP_ENDIANNESS	ELFDATA2LSB
38 #define	ELF64_MACHDEP_ID_CASES						\
39 		case EM_IA_64:						\
40 			break;
41 
42 #define	ELF64_MACHDEP_ID	EM_IA_64	/* XXX */
43 
44 #define	KERN_ELFSIZE		64
45 #define ARCH_ELFSIZE		64	/* MD native binary size */
46 
47 /*
48  * Relocation types.
49  */
50 
51 /*	Name			Value	   Field	Calculation */
52 #define	R_IA64_NONE		0	/* None */
53 #define	R_IA64_IMM14		0x21	/* immediate14	S + A */
54 #define	R_IA64_IMM22		0x22	/* immediate22	S + A */
55 #define	R_IA64_IMM64		0x23	/* immediate64	S + A */
56 #define	R_IA64_DIR32MSB		0x24	/* word32 MSB	S + A */
57 #define	R_IA64_DIR32LSB		0x25	/* word32 LSB	S + A */
58 #define	R_IA64_DIR64MSB		0x26	/* word64 MSB	S + A */
59 #define	R_IA64_DIR64LSB		0x27	/* word64 LSB	S + A */
60 #define	R_IA64_GPREL22		0x2a	/* immediate22	@gprel(S + A) */
61 #define	R_IA64_GPREL64I		0x2b	/* immediate64	@gprel(S + A) */
62 #define	R_IA64_GPREL64MSB	0x2e	/* word64 MSB	@gprel(S + A) */
63 #define	R_IA64_GPREL64LSB	0x2f	/* word64 LSB	@gprel(S + A) */
64 #define	R_IA64_LTOFF22		0x32	/* immediate22	@ltoff(S + A) */
65 #define	R_IA64_LTOFF64I		0x33	/* immediate64	@ltoff(S + A) */
66 #define	R_IA64_PLTOFF22		0x3a	/* immediate22	@pltoff(S + A) */
67 #define	R_IA64_PLTOFF64I	0x3b	/* immediate64	@pltoff(S + A) */
68 #define	R_IA64_PLTOFF64MSB	0x3e	/* word64 MSB	@pltoff(S + A) */
69 #define	R_IA64_PLTOFF64LSB	0x3f	/* word64 LSB	@pltoff(S + A) */
70 #define	R_IA64_FPTR64I		0x43	/* immediate64	@fptr(S + A) */
71 #define	R_IA64_FPTR32MSB	0x44	/* word32 MSB	@fptr(S + A) */
72 #define	R_IA64_FPTR32LSB	0x45	/* word32 LSB	@fptr(S + A) */
73 #define	R_IA64_FPTR64MSB	0x46	/* word64 MSB	@fptr(S + A) */
74 #define	R_IA64_FPTR64LSB	0x47	/* word64 LSB	@fptr(S + A) */
75 #define	R_IA64_PCREL21B		0x49	/* immediate21 form1 S + A - P */
76 #define	R_IA64_PCREL21M		0x4a	/* immediate21 form2 S + A - P */
77 #define	R_IA64_PCREL21F		0x4b	/* immediate21 form3 S + A - P */
78 #define	R_IA64_PCREL32MSB	0x4c	/* word32 MSB	S + A - P */
79 #define	R_IA64_PCREL32LSB	0x4d	/* word32 LSB	S + A - P */
80 #define	R_IA64_PCREL64MSB	0x4e	/* word64 MSB	S + A - P */
81 #define	R_IA64_PCREL64LSB	0x4f	/* word64 LSB	S + A - P */
82 #define	R_IA64_LTOFF_FPTR22	0x52	/* immediate22	@ltoff(@fptr(S + A)) */
83 #define	R_IA64_LTOFF_FPTR64I	0x53	/* immediate64	@ltoff(@fptr(S + A)) */
84 #define	R_IA64_LTOFF_FPTR32MSB	0x54	/* word32 MSB	@ltoff(@fptr(S + A)) */
85 #define	R_IA64_LTOFF_FPTR32LSB	0x55	/* word32 LSB	@ltoff(@fptr(S + A)) */
86 #define	R_IA64_LTOFF_FPTR64MSB	0x56	/* word64 MSB	@ltoff(@fptr(S + A)) */
87 #define	R_IA64_LTOFF_FPTR64LSB	0x57	/* word64 LSB	@ltoff(@fptr(S + A)) */
88 #define	R_IA64_SEGREL32MSB	0x5c	/* word32 MSB	@segrel(S + A) */
89 #define	R_IA64_SEGREL32LSB	0x5d	/* word32 LSB	@segrel(S + A) */
90 #define	R_IA64_SEGREL64MSB	0x5e	/* word64 MSB	@segrel(S + A) */
91 #define	R_IA64_SEGREL64LSB	0x5f	/* word64 LSB	@segrel(S + A) */
92 #define	R_IA64_SECREL32MSB	0x64	/* word32 MSB	@secrel(S + A) */
93 #define	R_IA64_SECREL32LSB	0x65	/* word32 LSB	@secrel(S + A) */
94 #define	R_IA64_SECREL64MSB	0x66	/* word64 MSB	@secrel(S + A) */
95 #define	R_IA64_SECREL64LSB	0x67	/* word64 LSB	@secrel(S + A) */
96 #define	R_IA64_REL32MSB		0x6c	/* word32 MSB	BD + A */
97 #define	R_IA64_REL32LSB		0x6d	/* word32 LSB	BD + A */
98 #define	R_IA64_REL64MSB		0x6e	/* word64 MSB	BD + A */
99 #define	R_IA64_REL64LSB		0x6f	/* word64 LSB	BD + A */
100 #define	R_IA64_LTV32MSB		0x74	/* word32 MSB	S + A */
101 #define	R_IA64_LTV32LSB		0x75	/* word32 LSB	S + A */
102 #define	R_IA64_LTV64MSB		0x76	/* word64 MSB	S + A */
103 #define	R_IA64_LTV64LSB		0x77	/* word64 LSB	S + A */
104 #define	R_IA64_IPLTMSB		0x80	/* function descriptor MSB special */
105 #define	R_IA64_IPLTLSB		0x81	/* function descriptor LSB special */
106 #define	R_IA64_SUB		0x85	/* immediate64	A - S */
107 #define	R_IA64_LTOFF22X		0x86	/* immediate22	special */
108 #define	R_IA64_LDXMOV		0x87	/* immediate22	special */
109 #define	R_IA64_TPREL14		0x91	/* imm14	@tprel(S + A) */
110 #define	R_IA64_TPREL22		0x92	/* imm22	@tprel(S + A) */
111 #define	R_IA64_TPREL64I		0x93	/* imm64	@tprel(S + A) */
112 #define	R_IA64_TPREL64MSB	0x96	/* word64 MSB	@tprel(S + A) */
113 #define	R_IA64_TPREL64LSB	0x97	/* word64 LSB	@tprel(S + A) */
114 #define	R_IA64_LTOFF_TPREL22	0x9a	/* imm22	@ltoff(@tprel(S+A)) */
115 #define	R_IA64_DTPMOD64MSB	0xa6	/* word64 MSB	@dtpmod(S + A) */
116 #define	R_IA64_DTPMOD64LSB	0xa7	/* word64 LSB	@dtpmod(S + A) */
117 #define	R_IA64_LTOFF_DTPMOD22	0xaa	/* imm22	@ltoff(@dtpmod(S+A)) */
118 #define	R_IA64_DTPREL14		0xb1	/* imm14	@dtprel(S + A) */
119 #define	R_IA64_DTPREL22		0xb2	/* imm22	@dtprel(S + A) */
120 #define	R_IA64_DTPREL64I	0xb3	/* imm64	@dtprel(S + A) */
121 #define	R_IA64_DTPREL32MSB	0xb4	/* word32 MSB	@dtprel(S + A) */
122 #define	R_IA64_DTPREL32LSB	0xb5	/* word32 LSB	@dtprel(S + A) */
123 #define	R_IA64_DTPREL64MSB	0xb6	/* word64 MSB	@dtprel(S + A) */
124 #define	R_IA64_DTPREL64LSB	0xb7	/* word64 LSB	@dtprel(S + A) */
125 #define	R_IA64_LTOFF_DTPREL22	0xba	/* imm22	@ltoff(@dtprel(S+A)) */
126 
127 /* p_type */
128 
129 #define PT_IA_64_ARCHEXT 0x70000000	/* segment contains a section of type SHT_IA_64_EXT */
130 #define PT_IA_64_UNWIND  0x70000001	/* segment contains the stack unwind tables */
131 
132 /* p_flags */
133 
134 #define PF_IA_64_NORECOV 0x80000000	/* segment contains the stack unwind tables */
135 
136 /* sh_type */
137 
138 #define SHT_IA_64_EXT           0x70000000	/* section contains product specific extension bits */
139 #define SHT_IA_64_UNWIND        0x70000001	/* section contains unwind function table entries for stack unwinding */
140 #define SHT_IA_64_LOPSREG       0x78000000	/* reserved for implementation-specific section types */
141 #define SHT_IA_64_HIPSREG       0x7fffffff	/* Ditto */
142 #define SHT_IA_64_PRIORITY_INIT 0x79000000	/* section contains priority initialization record */
143 
144 /* sh_flags */
145 
146 #define SHF_IA_64_SHORT   0x10000000	/* section must be placed near gp. */
147 #define SHF_IA_64_NORECOV 0x20000000	/* section contains code that uses speculative instructions without
148 					 * recovery code
149 					 */
150 /* XXX fix these for ld.elf_so */
151 #define R_IA64_COPY (0)
152 #define R_TYPE(name)    __CONCAT(R_IA64_,name)
153 
154 #endif /* _IA64_ELF_MACHDEP_H */
155