Home | History | Annotate | Download | only in machine
      1 /*        $NetBSD */
      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 
     31 
     32 #define	ELF32_MACHDEP_ENDIANNESS	XXX	/* break compilation */
     33 #define	ELF32_MACHDEP_ID_CASES						\
     34 		/* no 32-bit ELF machine types supported until 32bit emu */
     35 
     36 #define	ELF64_MACHDEP_ENDIANNESS	ELFDATA2LSB
     37 #define	ELF64_MACHDEP_ID_CASES						\
     38 		case EM_IA_64:						\
     39 			break;
     40 
     41 #define	ELF64_MACHDEP_ID	EM_IA_64	/* XXX */
     42 
     43 #define ARCH_ELFSIZE		64	/* MD native binary size */
     44 
     45 /*
     46  * Relocation types.
     47  */
     48 
     49 /*	Name			Value	   Field	Calculation */
     50 #define	R_IA64_NONE		0	/* None */
     51 #define	R_IA64_IMM14		0x21	/* immediate14	S + A */
     52 #define	R_IA64_IMM22		0x22	/* immediate22	S + A */
     53 #define	R_IA64_IMM64		0x23	/* immediate64	S + A */
     54 #define	R_IA64_DIR32MSB		0x24	/* word32 MSB	S + A */
     55 #define	R_IA64_DIR32LSB		0x25	/* word32 LSB	S + A */
     56 #define	R_IA64_DIR64MSB		0x26	/* word64 MSB	S + A */
     57 #define	R_IA64_DIR64LSB		0x27	/* word64 LSB	S + A */
     58 #define	R_IA64_GPREL22		0x2a	/* immediate22	@gprel(S + A) */
     59 #define	R_IA64_GPREL64I		0x2b	/* immediate64	@gprel(S + A) */
     60 #define	R_IA64_GPREL64MSB	0x2e	/* word64 MSB	@gprel(S + A) */
     61 #define	R_IA64_GPREL64LSB	0x2f	/* word64 LSB	@gprel(S + A) */
     62 #define	R_IA64_LTOFF22		0x32	/* immediate22	@ltoff(S + A) */
     63 #define	R_IA64_LTOFF64I		0x33	/* immediate64	@ltoff(S + A) */
     64 #define	R_IA64_PLTOFF22		0x3a	/* immediate22	@pltoff(S + A) */
     65 #define	R_IA64_PLTOFF64I	0x3b	/* immediate64	@pltoff(S + A) */
     66 #define	R_IA64_PLTOFF64MSB	0x3e	/* word64 MSB	@pltoff(S + A) */
     67 #define	R_IA64_PLTOFF64LSB	0x3f	/* word64 LSB	@pltoff(S + A) */
     68 #define	R_IA64_FPTR64I		0x43	/* immediate64	@fptr(S + A) */
     69 #define	R_IA64_FPTR32MSB	0x44	/* word32 MSB	@fptr(S + A) */
     70 #define	R_IA64_FPTR32LSB	0x45	/* word32 LSB	@fptr(S + A) */
     71 #define	R_IA64_FPTR64MSB	0x46	/* word64 MSB	@fptr(S + A) */
     72 #define	R_IA64_FPTR64LSB	0x47	/* word64 LSB	@fptr(S + A) */
     73 #define	R_IA64_PCREL21B		0x49	/* immediate21 form1 S + A - P */
     74 #define	R_IA64_PCREL21M		0x4a	/* immediate21 form2 S + A - P */
     75 #define	R_IA64_PCREL21F		0x4b	/* immediate21 form3 S + A - P */
     76 #define	R_IA64_PCREL32MSB	0x4c	/* word32 MSB	S + A - P */
     77 #define	R_IA64_PCREL32LSB	0x4d	/* word32 LSB	S + A - P */
     78 #define	R_IA64_PCREL64MSB	0x4e	/* word64 MSB	S + A - P */
     79 #define	R_IA64_PCREL64LSB	0x4f	/* word64 LSB	S + A - P */
     80 #define	R_IA64_LTOFF_FPTR22	0x52	/* immediate22	@ltoff(@fptr(S + A)) */
     81 #define	R_IA64_LTOFF_FPTR64I	0x53	/* immediate64	@ltoff(@fptr(S + A)) */
     82 #define	R_IA64_LTOFF_FPTR32MSB	0x54	/* word32 MSB	@ltoff(@fptr(S + A)) */
     83 #define	R_IA64_LTOFF_FPTR32LSB	0x55	/* word32 LSB	@ltoff(@fptr(S + A)) */
     84 #define	R_IA64_LTOFF_FPTR64MSB	0x56	/* word64 MSB	@ltoff(@fptr(S + A)) */
     85 #define	R_IA64_LTOFF_FPTR64LSB	0x57	/* word64 LSB	@ltoff(@fptr(S + A)) */
     86 #define	R_IA64_SEGREL32MSB	0x5c	/* word32 MSB	@segrel(S + A) */
     87 #define	R_IA64_SEGREL32LSB	0x5d	/* word32 LSB	@segrel(S + A) */
     88 #define	R_IA64_SEGREL64MSB	0x5e	/* word64 MSB	@segrel(S + A) */
     89 #define	R_IA64_SEGREL64LSB	0x5f	/* word64 LSB	@segrel(S + A) */
     90 #define	R_IA64_SECREL32MSB	0x64	/* word32 MSB	@secrel(S + A) */
     91 #define	R_IA64_SECREL32LSB	0x65	/* word32 LSB	@secrel(S + A) */
     92 #define	R_IA64_SECREL64MSB	0x66	/* word64 MSB	@secrel(S + A) */
     93 #define	R_IA64_SECREL64LSB	0x67	/* word64 LSB	@secrel(S + A) */
     94 #define	R_IA64_REL32MSB		0x6c	/* word32 MSB	BD + A */
     95 #define	R_IA64_REL32LSB		0x6d	/* word32 LSB	BD + A */
     96 #define	R_IA64_REL64MSB		0x6e	/* word64 MSB	BD + A */
     97 #define	R_IA64_REL64LSB		0x6f	/* word64 LSB	BD + A */
     98 #define	R_IA64_LTV32MSB		0x74	/* word32 MSB	S + A */
     99 #define	R_IA64_LTV32LSB		0x75	/* word32 LSB	S + A */
    100 #define	R_IA64_LTV64MSB		0x76	/* word64 MSB	S + A */
    101 #define	R_IA64_LTV64LSB		0x77	/* word64 LSB	S + A */
    102 #define	R_IA64_IPLTMSB		0x80	/* function descriptor MSB special */
    103 #define	R_IA64_IPLTLSB		0x81	/* function descriptor LSB speciaal */
    104 #define	R_IA64_SUB		0x85	/* immediate64	A - S */
    105 #define	R_IA64_LTOFF22X		0x86	/* immediate22	special */
    106 #define	R_IA64_LDXMOV		0x87	/* immediate22	special */
    107 #define	R_IA64_TPREL14		0x91	/* imm14	@tprel(S + A) */
    108 #define	R_IA64_TPREL22		0x92	/* imm22	@tprel(S + A) */
    109 #define	R_IA64_TPREL64I		0x93	/* imm64	@tprel(S + A) */
    110 #define	R_IA64_TPREL64MSB	0x96	/* word64 MSB	@tprel(S + A) */
    111 #define	R_IA64_TPREL64LSB	0x97	/* word64 LSB	@tprel(S + A) */
    112 #define	R_IA64_LTOFF_TPREL22	0x9a	/* imm22	@ltoff(@tprel(S+A)) */
    113 #define	R_IA64_DTPMOD64MSB	0xa6	/* word64 MSB	@dtpmod(S + A) */
    114 #define	R_IA64_DTPMOD64LSB	0xa7	/* word64 LSB	@dtpmod(S + A) */
    115 #define	R_IA64_LTOFF_DTPMOD22	0xaa	/* imm22	@ltoff(@dtpmod(S+A)) */
    116 #define	R_IA64_DTPREL14		0xb1	/* imm14	@dtprel(S + A) */
    117 #define	R_IA64_DTPREL22		0xb2	/* imm22	@dtprel(S + A) */
    118 #define	R_IA64_DTPREL64I	0xb3	/* imm64	@dtprel(S + A) */
    119 #define	R_IA64_DTPREL32MSB	0xb4	/* word32 MSB	@dtprel(S + A) */
    120 #define	R_IA64_DTPREL32LSB	0xb5	/* word32 LSB	@dtprel(S + A) */
    121 #define	R_IA64_DTPREL64MSB	0xb6	/* word64 MSB	@dtprel(S + A) */
    122 #define	R_IA64_DTPREL64LSB	0xb7	/* word64 LSB	@dtprel(S + A) */
    123 #define	R_IA64_LTOFF_DTPREL22	0xba	/* imm22	@ltoff(@dtprel(S+A)) */
    124 
    125 /* p_type */
    126 
    127 #define PT_IA_64_ARCHEXT 0x70000000	/* segment contains a section of type SHT_IA_64_EXT */
    128 #define PT_IA_64_UNWIND  0x70000001	/* segment contains the stack unwind tables */
    129 
    130 /* p_flags */
    131 
    132 #define PF_IA_64_NORECOV 0x80000000	/* segment contains the stack unwind tables */
    133 
    134 /* sh_type */
    135 
    136 #define SHT_IA_64_EXT           0x70000000	/* section contains product specific extension bits */
    137 #define SHT_IA_64_UNWIND        0x70000001	/* section contains unwind function table entries for stack unwinding */
    138 #define SHT_IA_64_LOPSREG       0x78000000	/* reserved for implementation-specific section types */
    139 #define SHT_IA_64_HIPSREG       0x7fffffff	/* Ditto */
    140 #define SHT_IA_64_PRIORITY_INIT 0x79000000	/* section contains priority initialization record */
    141 
    142 /* sh_flags */
    143 
    144 #define SHF_IA_64_SHORT   0x10000000	/* section must be placed near gp. */
    145 #define SHF_IA_64_NORECOV 0x20000000	/* section contains code that uses speculative instructions without
    146 					 * recovery code
    147 					 */
    148 
    149 
    150 
    151