X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=include%2Felf%2Fia64.h;h=44dbcc9004ac34aec4f545a946f557a7aa6ac4a2;hb=d27c357a5b83773054e85ff3ea5dbfe18b9dd3c0;hp=310a7f74af0479afda0b8cc556205e1344dd3438;hpb=2ee563b53258d390d7446e90a67f465d504ae44c;p=deliverable%2Fbinutils-gdb.git diff --git a/include/elf/ia64.h b/include/elf/ia64.h index 310a7f74af..44dbcc9004 100644 --- a/include/elf/ia64.h +++ b/include/elf/ia64.h @@ -1,48 +1,57 @@ /* IA-64 ELF support for BFD. - Copyright 1998, 1999, 2000 Free Software Foundation, Inc. + Copyright (C) 1998-2020 Free Software Foundation, Inc. Contributed by David Mosberger-Tang -This file is part of BFD, the Binary File Descriptor library. + This file is part of BFD, the Binary File Descriptor library. -This program is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, + MA 02110-1301, USA. */ #ifndef _ELF_IA64_H #define _ELF_IA64_H /* Bits in the e_flags field of the Elf64_Ehdr: */ -#define EF_IA_64_MASKOS 0x0000000f /* os-specific flags */ -#define EF_IA_64_ARCH 0xff000000 /* arch. version mask */ +#define EF_IA_64_MASKOS 0x0000000f /* OS-specific flags. */ +#define EF_IA_64_ARCH 0xff000000 /* Arch. version mask. */ +#define EF_IA_64_ARCHVER_1 (1 << 24) /* Arch. version level 1 compat. */ /* ??? These four definitions are not part of the SVR4 ABI. They were present in David's initial code drop, so it is probable that they are used by HP/UX. */ -#define EF_IA_64_TRAPNIL (1 << 0) /* trap NIL pointer dereferences */ -#define EF_IA_64_EXT (1 << 2) /* program uses arch. extensions */ -#define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian) */ -#define EFA_IA_64_EAS2_3 0x23000000 /* ia64 EAS 2.3 */ +#define EF_IA_64_TRAPNIL (1 << 0) /* Trap NIL pointer dereferences. */ +#define EF_IA_64_EXT (1 << 2) /* Program uses arch. extensions. */ +#define EF_IA_64_BE (1 << 3) /* PSR BE bit set (big-endian). */ +#define EFA_IA_64_EAS2_3 0x23000000 /* IA64 EAS 2.3. */ -#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI */ +#define EF_IA_64_ABI64 (1 << 4) /* 64-bit ABI. */ /* Not used yet. */ #define EF_IA_64_REDUCEDFP (1 << 5) /* Only FP6-FP11 used. */ -#define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */ -#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */ +#define EF_IA_64_CONS_GP (1 << 6) /* gp as program wide constant. */ +#define EF_IA_64_NOFUNCDESC_CONS_GP (1 << 7) /* And no function descriptors. */ /* Not used yet. */ #define EF_IA_64_ABSOLUTE (1 << 8) /* Load at absolute addresses. */ +/* OpenVMS speficic. */ +#define EF_IA_64_VMS_COMCOD 0x03 /* Completion code. */ +#define EF_IA_64_VMS_COMCOD_SUCCESS 0 +#define EF_IA_64_VMS_COMCOD_WARNING 1 +#define EF_IA_64_VMS_COMCOD_ERROR 2 +#define EF_IA_64_VMS_COMCOD_ABORT 3 +#define EF_IA_64_VMS_LINKAGES 0x04 /* Contains VMS linkages info. */ + #define ELF_STRING_ia64_archext ".IA_64.archext" #define ELF_STRING_ia64_pltoff ".IA_64.pltoff" #define ELF_STRING_ia64_unwind ".IA_64.unwind" @@ -54,13 +63,26 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* Bits in the sh_flags field of Elf64_Shdr: */ -#define SHF_IA_64_SHORT 0x10000000 /* section near gp */ -#define SHF_IA_64_NORECOV 0x20000000 /* spec insns w/o recovery */ +#define SHF_IA_64_SHORT 0x10000000 /* Section near gp. */ +#define SHF_IA_64_NORECOV 0x20000000 /* Spec insns w/o recovery. */ + +#define SHF_IA_64_HP_TLS 0x01000000 /* HP specific TLS flag. */ + +#define SHF_IA_64_VMS_GLOBAL 0x0100000000ULL /* Global for clustering. */ +#define SHF_IA_64_VMS_OVERLAID 0x0200000000ULL /* To be overlaid. */ +#define SHF_IA_64_VMS_SHARED 0x0400000000ULL /* Shared btw processes. */ +#define SHF_IA_64_VMS_VECTOR 0x0800000000ULL /* Priv change mode vect. */ +#define SHF_IA_64_VMS_ALLOC_64BIT 0x1000000000ULL /* Allocate beyond 2GB. */ +#define SHF_IA_64_VMS_PROTECTED 0x2000000000ULL /* Export from sharable. */ /* Possible values for sh_type in Elf64_Shdr: */ -#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* extension bits */ -#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* unwind bits */ +#define SHT_IA_64_EXT (SHT_LOPROC + 0) /* Extension bits. */ +#define SHT_IA_64_UNWIND (SHT_LOPROC + 1) /* Unwind bits. */ +#define SHT_IA_64_LOPSREG (SHT_LOPROC + 0x8000000) +/* ABI says (SHT_LOPROC + 0xfffffff) but I think it's a typo -- this makes sense. */ +#define SHT_IA_64_HIPSREG (SHT_LOPROC + 0x8ffffff) +#define SHT_IA_64_PRIORITY_INIT (SHT_LOPROC + 0x9000000) /* SHT_IA_64_HP_OPT_ANOT is only generated by HPUX compilers for its optimization annotation section. GCC does not generate it but we @@ -68,14 +90,36 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ annotate or sed will turn it into 32 or 64 during the build. */ #define SHT_IA_64_HP_OPT_ANOT 0x60000004 +/* OpenVMS section types. */ +/* The section contains PC-to-source correlation information for use by the + VMS RTL's traceback facility. */ +#define SHT_IA_64_VMS_TRACE 0x60000000 +/* The section contains routine signature information for use by the + translated image executive. */ +#define SHT_IA_64_VMS_TIE_SIGNATURES 0x60000001 +/* The section contains dwarf-3 information. */ +#define SHT_IA_64_VMS_DEBUG 0x60000002 +/* The section contains the dwarf-3 string table. */ +#define SHT_IA_64_VMS_DEBUG_STR 0x60000003 +/* The section contains linkage information to perform consistency checking + accross object modules. */ +#define SHT_IA_64_VMS_LINKAGES 0x60000004 +/* The section allows the symbol vector in an image to be location through + the section table. */ +#define SHT_IA_64_VMS_SYMBOL_VECTOR 0x60000005 +/* The section contains inter-image fixups. */ +#define SHT_IA_64_VMS_FIXUP 0x60000006 +/* The section contains unmangled name info. */ +#define SHT_IA_64_VMS_DISPLAY_NAME_INFO 0x60000007 + /* Bits in the p_flags field of Elf64_Phdr: */ #define PF_IA_64_NORECOV 0x80000000 /* Possible values for p_type in Elf64_Phdr: */ -#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* arch extension bits */ -#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* ia64 unwind bits */ +#define PT_IA_64_ARCHEXT (PT_LOPROC + 0) /* Arch extension bits, */ +#define PT_IA_64_UNWIND (PT_LOPROC + 1) /* IA64 unwind bits. */ /* HP-UX specific values for p_type in Elf64_Phdr. These values are currently just used to make @@ -89,13 +133,145 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #define DT_IA_64_PLT_RESERVE (DT_LOPROC + 0) +/* VMS specific values for d_tag in Elf64_Dyn: */ + +#define DT_IA_64_VMS_SUBTYPE (DT_LOOS + 0) +#define DT_IA_64_VMS_IMGIOCNT (DT_LOOS + 2) +#define DT_IA_64_VMS_LNKFLAGS (DT_LOOS + 8) +#define DT_IA_64_VMS_VIR_MEM_BLK_SIZ (DT_LOOS + 10) +#define DT_IA_64_VMS_IDENT (DT_LOOS + 12) +#define DT_IA_64_VMS_NEEDED_IDENT (DT_LOOS + 16) +#define DT_IA_64_VMS_IMG_RELA_CNT (DT_LOOS + 18) +#define DT_IA_64_VMS_SEG_RELA_CNT (DT_LOOS + 20) +#define DT_IA_64_VMS_FIXUP_RELA_CNT (DT_LOOS + 22) +#define DT_IA_64_VMS_FIXUP_NEEDED (DT_LOOS + 24) +#define DT_IA_64_VMS_SYMVEC_CNT (DT_LOOS + 26) +#define DT_IA_64_VMS_XLATED (DT_LOOS + 30) +#define DT_IA_64_VMS_STACKSIZE (DT_LOOS + 32) +#define DT_IA_64_VMS_UNWINDSZ (DT_LOOS + 34) +#define DT_IA_64_VMS_UNWIND_CODSEG (DT_LOOS + 36) +#define DT_IA_64_VMS_UNWIND_INFOSEG (DT_LOOS + 38) +#define DT_IA_64_VMS_LINKTIME (DT_LOOS + 40) +#define DT_IA_64_VMS_SEG_NO (DT_LOOS + 42) +#define DT_IA_64_VMS_SYMVEC_OFFSET (DT_LOOS + 44) +#define DT_IA_64_VMS_SYMVEC_SEG (DT_LOOS + 46) +#define DT_IA_64_VMS_UNWIND_OFFSET (DT_LOOS + 48) +#define DT_IA_64_VMS_UNWIND_SEG (DT_LOOS + 50) +#define DT_IA_64_VMS_STRTAB_OFFSET (DT_LOOS + 52) +#define DT_IA_64_VMS_SYSVER_OFFSET (DT_LOOS + 54) +#define DT_IA_64_VMS_IMG_RELA_OFF (DT_LOOS + 56) +#define DT_IA_64_VMS_SEG_RELA_OFF (DT_LOOS + 58) +#define DT_IA_64_VMS_FIXUP_RELA_OFF (DT_LOOS + 60) +#define DT_IA_64_VMS_PLTGOT_OFFSET (DT_LOOS + 62) +#define DT_IA_64_VMS_PLTGOT_SEG (DT_LOOS + 64) +#define DT_IA_64_VMS_FPMODE (DT_LOOS + 66) + +/* Values for DT_IA_64_LNKFLAGS. */ +#define VMS_LF_CALL_DEBUG 0x0001 /* Activate and call the debugger. */ +#define VMS_LF_NOP0BUFS 0x0002 /* RMS use of P0 for i/o disabled. */ +#define VMS_LF_P0IMAGE 0x0004 /* Image in P0 space only. */ +#define VMS_LF_MKTHREADS 0x0008 /* Multiple kernel threads enabled. */ +#define VMS_LF_UPCALLS 0x0010 /* Upcalls enabled. */ +#define VMS_LF_IMGSTA 0x0020 /* Use SYS$IMGSTA. */ +#define VMS_LF_INITIALIZE 0x0040 /* Image uses tfradr2. */ +#define VMS_LF_MAIN 0x0080 /* Image uses tfradr3. */ +#define VMS_LF_EXE_INIT 0x0200 /* Image uses tfradr4. */ +#define VMS_LF_TBK_IN_IMG 0x0400 /* Traceback records in image. */ +#define VMS_LF_DBG_IN_IMG 0x0800 /* Debug records in image. */ +#define VMS_LF_TBK_IN_DSF 0x1000 /* Traceback records in DSF. */ +#define VMS_LF_DBG_IN_DSF 0x2000 /* Debug records in DSF. */ +#define VMS_LF_SIGNATURES 0x4000 /* Signatures present. */ +#define VMS_LF_REL_SEG_OFF 0x8000 /* Maintain relative pos of seg. */ + /* This section only used by HP-UX, The HP linker gives weak symbols precedence over regular common symbols. We want common to override weak. Using this common instead of SHN_COMMON does that. */ - -#define SHN_IA_64_ANSI_COMMON 0xFF00 - -/* ia64-specific relocation types: */ +#define SHN_IA_64_ANSI_COMMON SHN_LORESERVE + +/* This section is only used by OpenVMS. Symbol is defined in the symbol + vector (only possible for image files). */ +#define SHN_IA_64_VMS_SYMVEC SHN_LOOS + +/* OpenVMS IA64-specific symbol attributes. */ +#define VMS_STO_VISIBILITY 3 /* Alias of the standard field. */ +#define VMS_ST_VISIBILITY(o) ((o) & VMS_STO_VISIBILITY) +#define VMS_STO_FUNC_TYPE 0x30 /* Function type. */ +#define VMS_ST_FUNC_TYPE(o) (((o) & VMS_STO_FUNC_TYPE) >> 4) +# define VMS_SFT_CODE_ADDR 0 /* Symbol value is a code address. */ +# define VMS_SFT_SYMV_IDX 1 /* Symbol value is a symbol vector index. */ +# define VMS_SFT_FD 2 /* Symbol value is a function descriptor. */ +# define VMS_SFT_RESERVE 3 /* Reserved. */ +#define VMS_STO_LINKAGE 0xc0 +#define VMS_ST_LINKAGE(o) (((o) & VMS_STO_LINKAGE) >> 6) +# define VMS_STL_IGNORE 0 /* No associated linkage. */ +# define VMS_STL_RESERVE 1 +# define VMS_STL_STD 2 /* Standard linkage with return value. */ +# define VMS_STL_LNK 3 /* Explicit represented in .vms_linkages. */ + +/* OpenVMS specific symbol binding values. */ +#define STB_VMS_WEAK 11 /* VMS weak symbol. */ +#define STB_VMS_SYSTEM 12 /* System symbol. */ + +/* OpenVMS specific fixup and relocation structures. */ + +typedef struct +{ + unsigned char fixup_offset[8]; + unsigned char type[4]; + unsigned char fixup_seg[4]; + unsigned char addend[8]; + unsigned char symvec_index[4]; + unsigned char data_type[4]; +} Elf64_External_VMS_IMAGE_FIXUP; + +typedef struct +{ + unsigned char rela_offset[8]; + unsigned char type[4]; + unsigned char rela_seg[4]; + unsigned char addend[8]; + unsigned char sym_offset[8]; + unsigned char sym_seg[4]; + unsigned char fill_1[4]; +} Elf64_External_VMS_IMAGE_RELA; + +/* Note segments. VMS is special as it uses 64-bit entries. */ + +typedef struct { + unsigned char namesz[8]; /* Size of entry's owner string */ + unsigned char descsz[8]; /* Size of the note descriptor */ + unsigned char type[8]; /* Interpretation of the descriptor */ + char name[1]; /* Start of the name+desc data */ +} Elf64_External_VMS_Note; + +#define NT_VMS_MHD 1 /* Object module name, version, and date/time. */ +#define NT_VMS_LNM 2 /* Language processor name. */ +#define NT_VMS_SRC 3 /* Source files. */ +#define NT_VMS_TITLE 4 /* Title text. */ +#define NT_VMS_EIDC 5 /* Entity ident consistency check. */ +#define NT_VMS_FPMODE 6 /* Whole program floating-point mode. */ +#define NT_VMS_LINKTIME 101 /* Date/time image was linked. */ +#define NT_VMS_IMGNAM 102 /* Image name string. */ +#define NT_VMS_IMGID 103 /* Image ident string. */ +#define NT_VMS_LINKID 104 /* Linker ident string. */ +#define NT_VMS_IMGBID 105 /* Image build ident string. */ +#define NT_VMS_GSTNAM 106 /* Global Symbol Table Name. */ +#define NT_VMS_ORIG_DYN 107 /* Original setting of dynamic data. */ +#define NT_VMS_PATCHTIME 108 /* Date/time of last patch. */ + +/* Corresponding data for NT_VMS_ORIG_DYM. */ + +typedef struct { + unsigned char major_id[4]; /* Should be 1. */ + unsigned char minor_id[4]; /* Should be 3. */ + unsigned char manipulation_date[8]; /* Original NT_VMS_LNKTIME. */ + unsigned char link_flags[8]; /* Original NT_VMS_LNKFLAGS. */ + unsigned char elf_flags[4]; /* Original ehdr flags. */ + unsigned char _pad[4]; + unsigned char imgid[1]; /* Original NT_VMS_IMGID. */ +} Elf64_External_VMS_ORIG_DYN_Note; + +/* IA64-specific relocation types: */ /* Relocs apply to specific instructions within a bundle. The least significant 2 bits of the address indicate which instruction in the @@ -209,6 +385,31 @@ START_RELOC_NUMBERS (elf_ia64_reloc_type) RELOC_NUMBER (R_IA64_LTOFF_DTPREL22, 0xba) /* @ltoff(@dtprel(s+a)), imm22 */ FAKE_RELOC (R_IA64_MAX_RELOC_CODE, 0xba) + + /* OpenVMS specific relocs. */ + RELOC_NUMBER (R_IA64_VMS_DIR8, 0x70000000) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_DIR16LSB, 0x70000001) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_CALL_SIGNATURE, 0x70000002) + RELOC_NUMBER (R_IA64_VMS_EXECLET_FUNC, 0x70000003) + RELOC_NUMBER (R_IA64_VMS_EXECLET_DATA, 0x70000004) + RELOC_NUMBER (R_IA64_VMS_FIX8, 0x70000005) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_FIX16, 0x70000006) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_FIX32, 0x70000007) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_FIX64, 0x70000008) /* S + A */ + RELOC_NUMBER (R_IA64_VMS_FIXFD, 0x70000009) + RELOC_NUMBER (R_IA64_VMS_ACC_LOAD, 0x7000000a) /* ACC = S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_ADD, 0x7000000b) /* ACC += S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_SUB, 0x7000000c) /* ACC -= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_MUL, 0x7000000d) /* ACC *= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_DIV, 0x7000000e) /* ACC /= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_AND, 0x7000000f) /* ACC &= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_IOR, 0x70000010) /* ACC |= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_EOR, 0x70000011) /* ACC ^= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_ASH, 0x70000012) /* ACC >>= S + A */ + RELOC_NUMBER (R_IA64_VMS_ACC_STO8, 0x70000014) /* ACC */ + RELOC_NUMBER (R_IA64_VMS_ACC_STO16LSH, 0x70000015) /* ACC */ + RELOC_NUMBER (R_IA64_VMS_ACC_STO32LSH, 0x70000016) /* ACC */ + RELOC_NUMBER (R_IA64_VMS_ACC_STO64LSH, 0x70000017) /* ACC */ END_RELOC_NUMBERS (R_IA64_max) #endif /* _ELF_IA64_H */