175fd0b74Schristos /* IA-64 ELF support for BFD. 2*e992f068Schristos Copyright (C) 1998-2022 Free Software Foundation, Inc. 375fd0b74Schristos Contributed by David Mosberger-Tang <davidm@hpl.hp.com> 475fd0b74Schristos 575fd0b74Schristos This file is part of BFD, the Binary File Descriptor library. 675fd0b74Schristos 775fd0b74Schristos This program is free software; you can redistribute it and/or modify 875fd0b74Schristos it under the terms of the GNU General Public License as published by 975fd0b74Schristos the Free Software Foundation; either version 3 of the License, or 1075fd0b74Schristos (at your option) any later version. 1175fd0b74Schristos 1275fd0b74Schristos This program is distributed in the hope that it will be useful, 1375fd0b74Schristos but WITHOUT ANY WARRANTY; without even the implied warranty of 1475fd0b74Schristos MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1575fd0b74Schristos GNU General Public License for more details. 1675fd0b74Schristos 1775fd0b74Schristos You should have received a copy of the GNU General Public License 1875fd0b74Schristos along with this program; if not, write to the Free Software 1975fd0b74Schristos Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, 2075fd0b74Schristos MA 02110-1301, USA. */ 2175fd0b74Schristos 2275fd0b74Schristos #ifndef _ELF_IA64_H 2375fd0b74Schristos #define _ELF_IA64_H 2475fd0b74Schristos 2575fd0b74Schristos /* Bits in the e_flags field of the Elf64_Ehdr: */ 2675fd0b74Schristos 2775fd0b74Schristos #define EF_IA_64_MASKOS 0x0000000f /* OS-specific flags. */ 2875fd0b74Schristos #define EF_IA_64_ARCH 0xff000000 /* Arch. version mask. */ 2975fd0b74Schristos #define EF_IA_64_ARCHVER_1 (1 << 24) /* Arch. version level 1 compat. */ 3075fd0b74Schristos 3175fd0b74Schristos /* ??? These four definitions are not part of the SVR4 ABI. 3275fd0b74Schristos They were present in David's initial code drop, so it is probable 3375fd0b74Schristos that they are used by HP/UX. */ 3475fd0b74Schristos #define EF_IA_64_TRAPNIL (1 << 0) /* Trap NIL pointer dereferences. */ 3575fd0b74Schristos #define EF_IA_64_EXT (1 << 2) /* Program uses arch. extensions. */ 3675fd0b74Schristos #define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian). */ 3775fd0b74Schristos #define EFA_IA_64_EAS2_3 0x23000000 /* IA64 EAS 2.3. */ 3875fd0b74Schristos 3975fd0b74Schristos #define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI. */ 4075fd0b74Schristos /* Not used yet. */ 4175fd0b74Schristos #define EF_IA_64_REDUCEDFP (1 << 5) /* Only FP6-FP11 used. */ 4275fd0b74Schristos #define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */ 4375fd0b74Schristos #define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */ 4475fd0b74Schristos /* Not used yet. */ 4575fd0b74Schristos #define EF_IA_64_ABSOLUTE (1 << 8) /* Load at absolute addresses. */ 4675fd0b74Schristos 4775fd0b74Schristos /* OpenVMS speficic. */ 4875fd0b74Schristos #define EF_IA_64_VMS_COMCOD 0x03 /* Completion code. */ 4975fd0b74Schristos #define EF_IA_64_VMS_COMCOD_SUCCESS 0 5075fd0b74Schristos #define EF_IA_64_VMS_COMCOD_WARNING 1 5175fd0b74Schristos #define EF_IA_64_VMS_COMCOD_ERROR 2 5275fd0b74Schristos #define EF_IA_64_VMS_COMCOD_ABORT 3 5375fd0b74Schristos #define EF_IA_64_VMS_LINKAGES 0x04 /* Contains VMS linkages info. */ 5475fd0b74Schristos 5575fd0b74Schristos #define ELF_STRING_ia64_archext ".IA_64.archext" 5675fd0b74Schristos #define ELF_STRING_ia64_pltoff ".IA_64.pltoff" 5775fd0b74Schristos #define ELF_STRING_ia64_unwind ".IA_64.unwind" 5875fd0b74Schristos #define ELF_STRING_ia64_unwind_info ".IA_64.unwind_info" 5975fd0b74Schristos #define ELF_STRING_ia64_unwind_once ".gnu.linkonce.ia64unw." 6075fd0b74Schristos #define ELF_STRING_ia64_unwind_info_once ".gnu.linkonce.ia64unwi." 6175fd0b74Schristos /* .IA_64.unwind_hdr is only used by HP-UX. */ 6275fd0b74Schristos #define ELF_STRING_ia64_unwind_hdr ".IA_64.unwind_hdr" 6375fd0b74Schristos 6475fd0b74Schristos /* Bits in the sh_flags field of Elf64_Shdr: */ 6575fd0b74Schristos 6675fd0b74Schristos #define SHF_IA_64_SHORT 0x10000000 /* Section near gp. */ 6775fd0b74Schristos #define SHF_IA_64_NORECOV 0x20000000 /* Spec insns w/o recovery. */ 6875fd0b74Schristos 6975fd0b74Schristos #define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */ 7075fd0b74Schristos 7175fd0b74Schristos #define SHF_IA_64_VMS_GLOBAL 0x0100000000ULL /* Global for clustering. */ 7275fd0b74Schristos #define SHF_IA_64_VMS_OVERLAID 0x0200000000ULL /* To be overlaid. */ 7375fd0b74Schristos #define SHF_IA_64_VMS_SHARED 0x0400000000ULL /* Shared btw processes. */ 7475fd0b74Schristos #define SHF_IA_64_VMS_VECTOR 0x0800000000ULL /* Priv change mode vect. */ 7575fd0b74Schristos #define SHF_IA_64_VMS_ALLOC_64BIT 0x1000000000ULL /* Allocate beyond 2GB. */ 7675fd0b74Schristos #define SHF_IA_64_VMS_PROTECTED 0x2000000000ULL /* Export from sharable. */ 7775fd0b74Schristos 7875fd0b74Schristos /* Possible values for sh_type in Elf64_Shdr: */ 7975fd0b74Schristos 8075fd0b74Schristos #define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */ 8175fd0b74Schristos #define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* Unwind bits. */ 8275fd0b74Schristos #define SHT_IA_64_LOPSREG (SHT_LOPROC + 0x8000000) 8375fd0b74Schristos /* ABI says (SHT_LOPROC + 0xfffffff) but I think it's a typo -- this makes sense. */ 8475fd0b74Schristos #define SHT_IA_64_HIPSREG (SHT_LOPROC + 0x8ffffff) 8575fd0b74Schristos #define SHT_IA_64_PRIORITY_INIT (SHT_LOPROC + 0x9000000) 8675fd0b74Schristos 8775fd0b74Schristos /* SHT_IA_64_HP_OPT_ANOT is only generated by HPUX compilers for its 8875fd0b74Schristos optimization annotation section. GCC does not generate it but we 8975fd0b74Schristos want readelf to know what they are. Do not use two capital Ns in 9075fd0b74Schristos annotate or sed will turn it into 32 or 64 during the build. */ 9175fd0b74Schristos #define SHT_IA_64_HP_OPT_ANOT 0x60000004 9275fd0b74Schristos 9375fd0b74Schristos /* OpenVMS section types. */ 9475fd0b74Schristos /* The section contains PC-to-source correlation information for use by the 9575fd0b74Schristos VMS RTL's traceback facility. */ 9675fd0b74Schristos #define SHT_IA_64_VMS_TRACE 0x60000000 9775fd0b74Schristos /* The section contains routine signature information for use by the 9875fd0b74Schristos translated image executive. */ 9975fd0b74Schristos #define SHT_IA_64_VMS_TIE_SIGNATURES 0x60000001 10075fd0b74Schristos /* The section contains dwarf-3 information. */ 10175fd0b74Schristos #define SHT_IA_64_VMS_DEBUG 0x60000002 10275fd0b74Schristos /* The section contains the dwarf-3 string table. */ 10375fd0b74Schristos #define SHT_IA_64_VMS_DEBUG_STR 0x60000003 10475fd0b74Schristos /* The section contains linkage information to perform consistency checking 10575fd0b74Schristos accross object modules. */ 10675fd0b74Schristos #define SHT_IA_64_VMS_LINKAGES 0x60000004 10775fd0b74Schristos /* The section allows the symbol vector in an image to be location through 10875fd0b74Schristos the section table. */ 10975fd0b74Schristos #define SHT_IA_64_VMS_SYMBOL_VECTOR 0x60000005 11075fd0b74Schristos /* The section contains inter-image fixups. */ 11175fd0b74Schristos #define SHT_IA_64_VMS_FIXUP 0x60000006 11275fd0b74Schristos /* The section contains unmangled name info. */ 11375fd0b74Schristos #define SHT_IA_64_VMS_DISPLAY_NAME_INFO 0x60000007 11475fd0b74Schristos 11575fd0b74Schristos /* Bits in the p_flags field of Elf64_Phdr: */ 11675fd0b74Schristos 11775fd0b74Schristos #define PF_IA_64_NORECOV 0x80000000 11875fd0b74Schristos 11975fd0b74Schristos /* Possible values for p_type in Elf64_Phdr: */ 12075fd0b74Schristos 12175fd0b74Schristos #define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* Arch extension bits, */ 12275fd0b74Schristos #define PT_IA_64_UNWIND (PT_LOPROC + 1) /* IA64 unwind bits. */ 12375fd0b74Schristos 12475fd0b74Schristos /* HP-UX specific values for p_type in Elf64_Phdr. 12575fd0b74Schristos These values are currently just used to make 12675fd0b74Schristos readelf more usable on HP-UX. */ 12775fd0b74Schristos 12875fd0b74Schristos #define PT_IA_64_HP_OPT_ANOT (PT_LOOS + 0x12) 12975fd0b74Schristos #define PT_IA_64_HP_HSL_ANOT (PT_LOOS + 0x13) 13075fd0b74Schristos #define PT_IA_64_HP_STACK (PT_LOOS + 0x14) 13175fd0b74Schristos 13275fd0b74Schristos /* Possible values for d_tag in Elf64_Dyn: */ 13375fd0b74Schristos 13475fd0b74Schristos #define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) 13575fd0b74Schristos 13675fd0b74Schristos /* VMS specific values for d_tag in Elf64_Dyn: */ 13775fd0b74Schristos 13875fd0b74Schristos #define DT_IA_64_VMS_SUBTYPE (DT_LOOS + 0) 13975fd0b74Schristos #define DT_IA_64_VMS_IMGIOCNT (DT_LOOS + 2) 14075fd0b74Schristos #define DT_IA_64_VMS_LNKFLAGS (DT_LOOS + 8) 14175fd0b74Schristos #define DT_IA_64_VMS_VIR_MEM_BLK_SIZ (DT_LOOS + 10) 14275fd0b74Schristos #define DT_IA_64_VMS_IDENT (DT_LOOS + 12) 14375fd0b74Schristos #define DT_IA_64_VMS_NEEDED_IDENT (DT_LOOS + 16) 14475fd0b74Schristos #define DT_IA_64_VMS_IMG_RELA_CNT (DT_LOOS + 18) 14575fd0b74Schristos #define DT_IA_64_VMS_SEG_RELA_CNT (DT_LOOS + 20) 14675fd0b74Schristos #define DT_IA_64_VMS_FIXUP_RELA_CNT (DT_LOOS + 22) 14775fd0b74Schristos #define DT_IA_64_VMS_FIXUP_NEEDED (DT_LOOS + 24) 14875fd0b74Schristos #define DT_IA_64_VMS_SYMVEC_CNT (DT_LOOS + 26) 14975fd0b74Schristos #define DT_IA_64_VMS_XLATED (DT_LOOS + 30) 15075fd0b74Schristos #define DT_IA_64_VMS_STACKSIZE (DT_LOOS + 32) 15175fd0b74Schristos #define DT_IA_64_VMS_UNWINDSZ (DT_LOOS + 34) 15275fd0b74Schristos #define DT_IA_64_VMS_UNWIND_CODSEG (DT_LOOS + 36) 15375fd0b74Schristos #define DT_IA_64_VMS_UNWIND_INFOSEG (DT_LOOS + 38) 15475fd0b74Schristos #define DT_IA_64_VMS_LINKTIME (DT_LOOS + 40) 15575fd0b74Schristos #define DT_IA_64_VMS_SEG_NO (DT_LOOS + 42) 15675fd0b74Schristos #define DT_IA_64_VMS_SYMVEC_OFFSET (DT_LOOS + 44) 15775fd0b74Schristos #define DT_IA_64_VMS_SYMVEC_SEG (DT_LOOS + 46) 15875fd0b74Schristos #define DT_IA_64_VMS_UNWIND_OFFSET (DT_LOOS + 48) 15975fd0b74Schristos #define DT_IA_64_VMS_UNWIND_SEG (DT_LOOS + 50) 16075fd0b74Schristos #define DT_IA_64_VMS_STRTAB_OFFSET (DT_LOOS + 52) 16175fd0b74Schristos #define DT_IA_64_VMS_SYSVER_OFFSET (DT_LOOS + 54) 16275fd0b74Schristos #define DT_IA_64_VMS_IMG_RELA_OFF (DT_LOOS + 56) 16375fd0b74Schristos #define DT_IA_64_VMS_SEG_RELA_OFF (DT_LOOS + 58) 16475fd0b74Schristos #define DT_IA_64_VMS_FIXUP_RELA_OFF (DT_LOOS + 60) 16575fd0b74Schristos #define DT_IA_64_VMS_PLTGOT_OFFSET (DT_LOOS + 62) 16675fd0b74Schristos #define DT_IA_64_VMS_PLTGOT_SEG (DT_LOOS + 64) 16775fd0b74Schristos #define DT_IA_64_VMS_FPMODE (DT_LOOS + 66) 16875fd0b74Schristos 16975fd0b74Schristos /* Values for DT_IA_64_LNKFLAGS. */ 17075fd0b74Schristos #define VMS_LF_CALL_DEBUG 0x0001 /* Activate and call the debugger. */ 17175fd0b74Schristos #define VMS_LF_NOP0BUFS 0x0002 /* RMS use of P0 for i/o disabled. */ 17275fd0b74Schristos #define VMS_LF_P0IMAGE 0x0004 /* Image in P0 space only. */ 17375fd0b74Schristos #define VMS_LF_MKTHREADS 0x0008 /* Multiple kernel threads enabled. */ 17475fd0b74Schristos #define VMS_LF_UPCALLS 0x0010 /* Upcalls enabled. */ 17575fd0b74Schristos #define VMS_LF_IMGSTA 0x0020 /* Use SYS$IMGSTA. */ 17675fd0b74Schristos #define VMS_LF_INITIALIZE 0x0040 /* Image uses tfradr2. */ 17775fd0b74Schristos #define VMS_LF_MAIN 0x0080 /* Image uses tfradr3. */ 17875fd0b74Schristos #define VMS_LF_EXE_INIT 0x0200 /* Image uses tfradr4. */ 17975fd0b74Schristos #define VMS_LF_TBK_IN_IMG 0x0400 /* Traceback records in image. */ 18075fd0b74Schristos #define VMS_LF_DBG_IN_IMG 0x0800 /* Debug records in image. */ 18175fd0b74Schristos #define VMS_LF_TBK_IN_DSF 0x1000 /* Traceback records in DSF. */ 18275fd0b74Schristos #define VMS_LF_DBG_IN_DSF 0x2000 /* Debug records in DSF. */ 18375fd0b74Schristos #define VMS_LF_SIGNATURES 0x4000 /* Signatures present. */ 18475fd0b74Schristos #define VMS_LF_REL_SEG_OFF 0x8000 /* Maintain relative pos of seg. */ 18575fd0b74Schristos 18675fd0b74Schristos /* This section only used by HP-UX, The HP linker gives weak symbols 18775fd0b74Schristos precedence over regular common symbols. We want common to override 18875fd0b74Schristos weak. Using this common instead of SHN_COMMON does that. */ 18975fd0b74Schristos #define SHN_IA_64_ANSI_COMMON SHN_LORESERVE 19075fd0b74Schristos 19175fd0b74Schristos /* This section is only used by OpenVMS. Symbol is defined in the symbol 19275fd0b74Schristos vector (only possible for image files). */ 19375fd0b74Schristos #define SHN_IA_64_VMS_SYMVEC SHN_LOOS 19475fd0b74Schristos 19575fd0b74Schristos /* OpenVMS IA64-specific symbol attributes. */ 19675fd0b74Schristos #define VMS_STO_VISIBILITY 3 /* Alias of the standard field. */ 19775fd0b74Schristos #define VMS_ST_VISIBILITY(o) ((o) & VMS_STO_VISIBILITY) 19875fd0b74Schristos #define VMS_STO_FUNC_TYPE 0x30 /* Function type. */ 19975fd0b74Schristos #define VMS_ST_FUNC_TYPE(o) (((o) & VMS_STO_FUNC_TYPE) >> 4) 20075fd0b74Schristos # define VMS_SFT_CODE_ADDR 0 /* Symbol value is a code address. */ 20175fd0b74Schristos # define VMS_SFT_SYMV_IDX 1 /* Symbol value is a symbol vector index. */ 20275fd0b74Schristos # define VMS_SFT_FD 2 /* Symbol value is a function descriptor. */ 20375fd0b74Schristos # define VMS_SFT_RESERVE 3 /* Reserved. */ 20475fd0b74Schristos #define VMS_STO_LINKAGE 0xc0 20575fd0b74Schristos #define VMS_ST_LINKAGE(o) (((o) & VMS_STO_LINKAGE) >> 6) 20675fd0b74Schristos # define VMS_STL_IGNORE 0 /* No associated linkage. */ 20775fd0b74Schristos # define VMS_STL_RESERVE 1 20875fd0b74Schristos # define VMS_STL_STD 2 /* Standard linkage with return value. */ 20975fd0b74Schristos # define VMS_STL_LNK 3 /* Explicit represented in .vms_linkages. */ 21075fd0b74Schristos 21175fd0b74Schristos /* OpenVMS specific symbol binding values. */ 21275fd0b74Schristos #define STB_VMS_WEAK 11 /* VMS weak symbol. */ 21375fd0b74Schristos #define STB_VMS_SYSTEM 12 /* System symbol. */ 21475fd0b74Schristos 21575fd0b74Schristos /* OpenVMS specific fixup and relocation structures. */ 21675fd0b74Schristos 21775fd0b74Schristos typedef struct 21875fd0b74Schristos { 21975fd0b74Schristos unsigned char fixup_offset[8]; 22075fd0b74Schristos unsigned char type[4]; 22175fd0b74Schristos unsigned char fixup_seg[4]; 22275fd0b74Schristos unsigned char addend[8]; 22375fd0b74Schristos unsigned char symvec_index[4]; 22475fd0b74Schristos unsigned char data_type[4]; 22575fd0b74Schristos } Elf64_External_VMS_IMAGE_FIXUP; 22675fd0b74Schristos 22775fd0b74Schristos typedef struct 22875fd0b74Schristos { 22975fd0b74Schristos unsigned char rela_offset[8]; 23075fd0b74Schristos unsigned char type[4]; 23175fd0b74Schristos unsigned char rela_seg[4]; 23275fd0b74Schristos unsigned char addend[8]; 23375fd0b74Schristos unsigned char sym_offset[8]; 23475fd0b74Schristos unsigned char sym_seg[4]; 23575fd0b74Schristos unsigned char fill_1[4]; 23675fd0b74Schristos } Elf64_External_VMS_IMAGE_RELA; 23775fd0b74Schristos 23875fd0b74Schristos /* Note segments. VMS is special as it uses 64-bit entries. */ 23975fd0b74Schristos 24075fd0b74Schristos typedef struct { 24175fd0b74Schristos unsigned char namesz[8]; /* Size of entry's owner string */ 24275fd0b74Schristos unsigned char descsz[8]; /* Size of the note descriptor */ 24375fd0b74Schristos unsigned char type[8]; /* Interpretation of the descriptor */ 24475fd0b74Schristos char name[1]; /* Start of the name+desc data */ 24575fd0b74Schristos } Elf64_External_VMS_Note; 24675fd0b74Schristos 24775fd0b74Schristos #define NT_VMS_MHD 1 /* Object module name, version, and date/time. */ 24875fd0b74Schristos #define NT_VMS_LNM 2 /* Language processor name. */ 24975fd0b74Schristos #define NT_VMS_SRC 3 /* Source files. */ 25075fd0b74Schristos #define NT_VMS_TITLE 4 /* Title text. */ 25175fd0b74Schristos #define NT_VMS_EIDC 5 /* Entity ident consistency check. */ 25275fd0b74Schristos #define NT_VMS_FPMODE 6 /* Whole program floating-point mode. */ 25375fd0b74Schristos #define NT_VMS_LINKTIME 101 /* Date/time image was linked. */ 25475fd0b74Schristos #define NT_VMS_IMGNAM 102 /* Image name string. */ 25575fd0b74Schristos #define NT_VMS_IMGID 103 /* Image ident string. */ 25675fd0b74Schristos #define NT_VMS_LINKID 104 /* Linker ident string. */ 25775fd0b74Schristos #define NT_VMS_IMGBID 105 /* Image build ident string. */ 25875fd0b74Schristos #define NT_VMS_GSTNAM 106 /* Global Symbol Table Name. */ 25975fd0b74Schristos #define NT_VMS_ORIG_DYN 107 /* Original setting of dynamic data. */ 26075fd0b74Schristos #define NT_VMS_PATCHTIME 108 /* Date/time of last patch. */ 26175fd0b74Schristos 26275fd0b74Schristos /* Corresponding data for NT_VMS_ORIG_DYM. */ 26375fd0b74Schristos 26475fd0b74Schristos typedef struct { 26575fd0b74Schristos unsigned char major_id[4]; /* Should be 1. */ 26675fd0b74Schristos unsigned char minor_id[4]; /* Should be 3. */ 26775fd0b74Schristos unsigned char manipulation_date[8]; /* Original NT_VMS_LNKTIME. */ 26875fd0b74Schristos unsigned char link_flags[8]; /* Original NT_VMS_LNKFLAGS. */ 26975fd0b74Schristos unsigned char elf_flags[4]; /* Original ehdr flags. */ 27075fd0b74Schristos unsigned char _pad[4]; 27175fd0b74Schristos unsigned char imgid[1]; /* Original NT_VMS_IMGID. */ 27275fd0b74Schristos } Elf64_External_VMS_ORIG_DYN_Note; 27375fd0b74Schristos 27475fd0b74Schristos /* IA64-specific relocation types: */ 27575fd0b74Schristos 27675fd0b74Schristos /* Relocs apply to specific instructions within a bundle. The least 27775fd0b74Schristos significant 2 bits of the address indicate which instruction in the 27875fd0b74Schristos bundle the reloc refers to (0=first slot, 1=second slow, 2=third 27975fd0b74Schristos slot, 3=undefined) and the remaining bits give the address of the 28075fd0b74Schristos bundle (16 byte aligned). 28175fd0b74Schristos 28275fd0b74Schristos The top 5 bits of the reloc code specifies the expression type, the 28375fd0b74Schristos low 3 bits the format of the data word being relocated. */ 28475fd0b74Schristos 28575fd0b74Schristos #include "elf/reloc-macros.h" 28675fd0b74Schristos 28775fd0b74Schristos START_RELOC_NUMBERS (elf_ia64_reloc_type) 28875fd0b74Schristos RELOC_NUMBER (R_IA64_NONE, 0x00) /* none */ 28975fd0b74Schristos 29075fd0b74Schristos RELOC_NUMBER (R_IA64_IMM14, 0x21) /* symbol + addend, add imm14 */ 29175fd0b74Schristos RELOC_NUMBER (R_IA64_IMM22, 0x22) /* symbol + addend, add imm22 */ 29275fd0b74Schristos RELOC_NUMBER (R_IA64_IMM64, 0x23) /* symbol + addend, mov imm64 */ 29375fd0b74Schristos RELOC_NUMBER (R_IA64_DIR32MSB, 0x24) /* symbol + addend, data4 MSB */ 29475fd0b74Schristos RELOC_NUMBER (R_IA64_DIR32LSB, 0x25) /* symbol + addend, data4 LSB */ 29575fd0b74Schristos RELOC_NUMBER (R_IA64_DIR64MSB, 0x26) /* symbol + addend, data8 MSB */ 29675fd0b74Schristos RELOC_NUMBER (R_IA64_DIR64LSB, 0x27) /* symbol + addend, data8 LSB */ 29775fd0b74Schristos 29875fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL22, 0x2a) /* @gprel(sym+add), add imm22 */ 29975fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL64I, 0x2b) /* @gprel(sym+add), mov imm64 */ 30075fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL32MSB, 0x2c) /* @gprel(sym+add), data4 MSB */ 30175fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL32LSB, 0x2d) /* @gprel(sym+add), data4 LSB */ 30275fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL64MSB, 0x2e) /* @gprel(sym+add), data8 MSB */ 30375fd0b74Schristos RELOC_NUMBER (R_IA64_GPREL64LSB, 0x2f) /* @gprel(sym+add), data8 LSB */ 30475fd0b74Schristos 30575fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF22, 0x32) /* @ltoff(sym+add), add imm22 */ 30675fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF64I, 0x33) /* @ltoff(sym+add), mov imm64 */ 30775fd0b74Schristos 30875fd0b74Schristos RELOC_NUMBER (R_IA64_PLTOFF22, 0x3a) /* @pltoff(sym+add), add imm22 */ 30975fd0b74Schristos RELOC_NUMBER (R_IA64_PLTOFF64I, 0x3b) /* @pltoff(sym+add), mov imm64 */ 31075fd0b74Schristos RELOC_NUMBER (R_IA64_PLTOFF64MSB, 0x3e) /* @pltoff(sym+add), data8 MSB */ 31175fd0b74Schristos RELOC_NUMBER (R_IA64_PLTOFF64LSB, 0x3f) /* @pltoff(sym+add), data8 LSB */ 31275fd0b74Schristos 31375fd0b74Schristos RELOC_NUMBER (R_IA64_FPTR64I, 0x43) /* @fptr(sym+add), mov imm64 */ 31475fd0b74Schristos RELOC_NUMBER (R_IA64_FPTR32MSB, 0x44) /* @fptr(sym+add), data4 MSB */ 31575fd0b74Schristos RELOC_NUMBER (R_IA64_FPTR32LSB, 0x45) /* @fptr(sym+add), data4 LSB */ 31675fd0b74Schristos RELOC_NUMBER (R_IA64_FPTR64MSB, 0x46) /* @fptr(sym+add), data8 MSB */ 31775fd0b74Schristos RELOC_NUMBER (R_IA64_FPTR64LSB, 0x47) /* @fptr(sym+add), data8 LSB */ 31875fd0b74Schristos 31975fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL60B, 0x48) /* @pcrel(sym+add), brl */ 32075fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL21B, 0x49) /* @pcrel(sym+add), ptb, call */ 32175fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL21M, 0x4a) /* @pcrel(sym+add), chk.s */ 32275fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL21F, 0x4b) /* @pcrel(sym+add), fchkf */ 32375fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL32MSB, 0x4c) /* @pcrel(sym+add), data4 MSB */ 32475fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL32LSB, 0x4d) /* @pcrel(sym+add), data4 LSB */ 32575fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL64MSB, 0x4e) /* @pcrel(sym+add), data8 MSB */ 32675fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL64LSB, 0x4f) /* @pcrel(sym+add), data8 LSB */ 32775fd0b74Schristos 32875fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR22, 0x52) /* @ltoff(@fptr(s+a)), imm22 */ 32975fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR64I, 0x53) /* @ltoff(@fptr(s+a)), imm64 */ 33075fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR32MSB, 0x54) /* @ltoff(@fptr(s+a)), 4 MSB */ 33175fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR32LSB, 0x55) /* @ltoff(@fptr(s+a)), 4 LSB */ 33275fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR64MSB, 0x56) /* @ltoff(@fptr(s+a)), 8 MSB */ 33375fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_FPTR64LSB, 0x57) /* @ltoff(@fptr(s+a)), 8 LSB */ 33475fd0b74Schristos 33575fd0b74Schristos RELOC_NUMBER (R_IA64_SEGREL32MSB, 0x5c) /* @segrel(sym+add), data4 MSB */ 33675fd0b74Schristos RELOC_NUMBER (R_IA64_SEGREL32LSB, 0x5d) /* @segrel(sym+add), data4 LSB */ 33775fd0b74Schristos RELOC_NUMBER (R_IA64_SEGREL64MSB, 0x5e) /* @segrel(sym+add), data8 MSB */ 33875fd0b74Schristos RELOC_NUMBER (R_IA64_SEGREL64LSB, 0x5f) /* @segrel(sym+add), data8 LSB */ 33975fd0b74Schristos 34075fd0b74Schristos RELOC_NUMBER (R_IA64_SECREL32MSB, 0x64) /* @secrel(sym+add), data4 MSB */ 34175fd0b74Schristos RELOC_NUMBER (R_IA64_SECREL32LSB, 0x65) /* @secrel(sym+add), data4 LSB */ 34275fd0b74Schristos RELOC_NUMBER (R_IA64_SECREL64MSB, 0x66) /* @secrel(sym+add), data8 MSB */ 34375fd0b74Schristos RELOC_NUMBER (R_IA64_SECREL64LSB, 0x67) /* @secrel(sym+add), data8 LSB */ 34475fd0b74Schristos 34575fd0b74Schristos RELOC_NUMBER (R_IA64_REL32MSB, 0x6c) /* data 4 + REL */ 34675fd0b74Schristos RELOC_NUMBER (R_IA64_REL32LSB, 0x6d) /* data 4 + REL */ 34775fd0b74Schristos RELOC_NUMBER (R_IA64_REL64MSB, 0x6e) /* data 8 + REL */ 34875fd0b74Schristos RELOC_NUMBER (R_IA64_REL64LSB, 0x6f) /* data 8 + REL */ 34975fd0b74Schristos 35075fd0b74Schristos RELOC_NUMBER (R_IA64_LTV32MSB, 0x74) /* symbol + addend, data4 MSB */ 35175fd0b74Schristos RELOC_NUMBER (R_IA64_LTV32LSB, 0x75) /* symbol + addend, data4 LSB */ 35275fd0b74Schristos RELOC_NUMBER (R_IA64_LTV64MSB, 0x76) /* symbol + addend, data8 MSB */ 35375fd0b74Schristos RELOC_NUMBER (R_IA64_LTV64LSB, 0x77) /* symbol + addend, data8 LSB */ 35475fd0b74Schristos 35575fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL21BI, 0x79) /* @pcrel(sym+add), ptb, call */ 35675fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL22, 0x7a) /* @pcrel(sym+add), imm22 */ 35775fd0b74Schristos RELOC_NUMBER (R_IA64_PCREL64I, 0x7b) /* @pcrel(sym+add), imm64 */ 35875fd0b74Schristos 35975fd0b74Schristos RELOC_NUMBER (R_IA64_IPLTMSB, 0x80) /* dynamic reloc, imported PLT, MSB */ 36075fd0b74Schristos RELOC_NUMBER (R_IA64_IPLTLSB, 0x81) /* dynamic reloc, imported PLT, LSB */ 36175fd0b74Schristos RELOC_NUMBER (R_IA64_COPY, 0x84) /* dynamic reloc, data copy */ 36275fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF22X, 0x86) /* LTOFF22, relaxable. */ 36375fd0b74Schristos RELOC_NUMBER (R_IA64_LDXMOV, 0x87) /* Use of LTOFF22X. */ 36475fd0b74Schristos 36575fd0b74Schristos RELOC_NUMBER (R_IA64_TPREL14, 0x91) /* @tprel(sym+add), add imm14 */ 36675fd0b74Schristos RELOC_NUMBER (R_IA64_TPREL22, 0x92) /* @tprel(sym+add), add imm22 */ 36775fd0b74Schristos RELOC_NUMBER (R_IA64_TPREL64I, 0x93) /* @tprel(sym+add), add imm64 */ 36875fd0b74Schristos RELOC_NUMBER (R_IA64_TPREL64MSB, 0x96) /* @tprel(sym+add), data8 MSB */ 36975fd0b74Schristos RELOC_NUMBER (R_IA64_TPREL64LSB, 0x97) /* @tprel(sym+add), data8 LSB */ 37075fd0b74Schristos 37175fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_TPREL22, 0x9a) /* @ltoff(@tprel(s+a)), add imm22 */ 37275fd0b74Schristos 37375fd0b74Schristos RELOC_NUMBER (R_IA64_DTPMOD64MSB, 0xa6) /* @dtpmod(sym+add), data8 MSB */ 37475fd0b74Schristos RELOC_NUMBER (R_IA64_DTPMOD64LSB, 0xa7) /* @dtpmod(sym+add), data8 LSB */ 37575fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_DTPMOD22, 0xaa) /* @ltoff(@dtpmod(s+a)), imm22 */ 37675fd0b74Schristos 37775fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL14, 0xb1) /* @dtprel(sym+add), imm14 */ 37875fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL22, 0xb2) /* @dtprel(sym+add), imm22 */ 37975fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL64I, 0xb3) /* @dtprel(sym+add), imm64 */ 38075fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL32MSB, 0xb4) /* @dtprel(sym+add), data4 MSB */ 38175fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL32LSB, 0xb5) /* @dtprel(sym+add), data4 LSB */ 38275fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL64MSB, 0xb6) /* @dtprel(sym+add), data8 MSB */ 38375fd0b74Schristos RELOC_NUMBER (R_IA64_DTPREL64LSB, 0xb7) /* @dtprel(sym+add), data8 LSB */ 38475fd0b74Schristos 38575fd0b74Schristos RELOC_NUMBER (R_IA64_LTOFF_DTPREL22, 0xba) /* @ltoff(@dtprel(s+a)), imm22 */ 38675fd0b74Schristos 38775fd0b74Schristos FAKE_RELOC (R_IA64_MAX_RELOC_CODE, 0xba) 38875fd0b74Schristos 38975fd0b74Schristos /* OpenVMS specific relocs. */ 39075fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_DIR8, 0x70000000) /* S + A */ 39175fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_DIR16LSB, 0x70000001) /* S + A */ 39275fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_CALL_SIGNATURE, 0x70000002) 39375fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_EXECLET_FUNC, 0x70000003) 39475fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_EXECLET_DATA, 0x70000004) 39575fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_FIX8, 0x70000005) /* S + A */ 39675fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_FIX16, 0x70000006) /* S + A */ 39775fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_FIX32, 0x70000007) /* S + A */ 39875fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_FIX64, 0x70000008) /* S + A */ 39975fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_FIXFD, 0x70000009) 40075fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_LOAD, 0x7000000a) /* ACC = S + A */ 40175fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_ADD, 0x7000000b) /* ACC += S + A */ 40275fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_SUB, 0x7000000c) /* ACC -= S + A */ 40375fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_MUL, 0x7000000d) /* ACC *= S + A */ 40475fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_DIV, 0x7000000e) /* ACC /= S + A */ 40575fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_AND, 0x7000000f) /* ACC &= S + A */ 40675fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_IOR, 0x70000010) /* ACC |= S + A */ 40775fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_EOR, 0x70000011) /* ACC ^= S + A */ 40875fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_ASH, 0x70000012) /* ACC >>= S + A */ 40975fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_STO8, 0x70000014) /* ACC */ 41075fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_STO16LSH, 0x70000015) /* ACC */ 41175fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_STO32LSH, 0x70000016) /* ACC */ 41275fd0b74Schristos RELOC_NUMBER (R_IA64_VMS_ACC_STO64LSH, 0x70000017) /* ACC */ 41375fd0b74Schristos END_RELOC_NUMBERS (R_IA64_max) 41475fd0b74Schristos 41575fd0b74Schristos #endif /* _ELF_IA64_H */ 416