/* HPPA ELF support for BFD.
- Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005
+ Copyright 1993, 1994, 1995, 1998, 1999, 2000, 2005, 2006, 2008, 2010
Free Software Foundation, Inc.
-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.
+ 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. */
+ 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. */
/* This file holds definitions specific to the HPPA ELF ABI. Note
that most of this is not actually implemented by BFD. */
/* Special section indices. */
/* A symbol that has been declared as a tentative definition in an ANSI C
compilation. */
-#define SHN_PARISC_ANSI_COMMON 0xff00
+#define SHN_PARISC_ANSI_COMMON SHN_LORESERVE
/* A symbol that has been declared as a common block using the
huge memory model. */
-#define SHN_PARISC_HUGE_COMMON 0xff01
+#define SHN_PARISC_HUGE_COMMON (SHN_LORESERVE + 1)
/* Processor specific section types. */
/* These are strictly for compatibility with the older elf32-hppa
implementation. Hopefully we can eliminate them in the future. */
/* Optional section holding argument location/relocation info. */
-#define SHT_PARISC_SYMEXTN SHT_LOPROC+8
+#define SHT_PARISC_SYMEXTN SHT_LOPROC + 8
/* Option section for linker stubs. */
-#define SHT_PARISC_STUBS SHT_LOPROC+9
+#define SHT_PARISC_STUBS SHT_LOPROC + 9
/* Processor specific section flags. */
RELOC_NUMBER (R_PARISC_GNU_VTENTRY, 232)
RELOC_NUMBER (R_PARISC_GNU_VTINHERIT, 233)
+RELOC_NUMBER (R_PARISC_TLS_GD21L, 234)
+RELOC_NUMBER (R_PARISC_TLS_GD14R, 235)
+RELOC_NUMBER (R_PARISC_TLS_GDCALL, 236)
+RELOC_NUMBER (R_PARISC_TLS_LDM21L, 237)
+RELOC_NUMBER (R_PARISC_TLS_LDM14R, 238)
+RELOC_NUMBER (R_PARISC_TLS_LDMCALL, 239)
+RELOC_NUMBER (R_PARISC_TLS_LDO21L, 240)
+RELOC_NUMBER (R_PARISC_TLS_LDO14R, 241)
+RELOC_NUMBER (R_PARISC_TLS_DTPMOD32, 242)
+RELOC_NUMBER (R_PARISC_TLS_DTPMOD64, 243)
+RELOC_NUMBER (R_PARISC_TLS_DTPOFF32, 244)
+RELOC_NUMBER (R_PARISC_TLS_DTPOFF64, 245)
+
END_RELOC_NUMBERS (R_PARISC_UNIMPLEMENTED)
+#define R_PARISC_TLS_LE21L R_PARISC_TPREL21L
+#define R_PARISC_TLS_LE14R R_PARISC_TPREL14R
+#define R_PARISC_TLS_IE21L R_PARISC_LTOFF_TP21L
+#define R_PARISC_TLS_IE14R R_PARISC_LTOFF_TP14R
+#define R_PARISC_TLS_TPREL32 R_PARISC_TPREL32
+#define R_PARISC_TLS_TPREL64 R_PARISC_TPREL64
+
#ifndef RELOC_MACROS_GEN_FUNC
typedef enum elf_hppa_reloc_type elf_hppa_reloc_type;
#endif
#define PT_PARISC_UNWIND 0x70000001
#define PT_PARISC_WEAKORDER 0x70000002
+/* Flag bits in sh_flags of ElfXX_Shdr. */
+#define SHF_HP_TLS 0x01000000
+#define SHF_HP_NEAR_SHARED 0x02000000
+#define SHF_HP_FAR_SHARED 0x04000000
+#define SHF_HP_COMDAT 0x08000000
+#define SHF_HP_CONST 0x00800000
+
+/* Reserved section header indices. */
+#define SHN_TLS_COMMON (SHN_LOOS + 0x0)
+#define SHN_NS_COMMON (SHN_LOOS + 0x1)
+#define SHN_FS_COMMON (SHN_LOOS + 0x2)
+#define SHN_NS_UNDEF (SHN_LOOS + 0x3)
+#define SHN_FS_UNDEF (SHN_LOOS + 0x4)
+#define SHN_HP_EXTERN (SHN_LOOS + 0x5)
+#define SHN_HP_EXTHINT (SHN_LOOS + 0x6)
+#define SHN_HP_UNDEF_BIND_IMM (SHN_LOOS + 0x7)
+
+/* Values of sh_type in ElfXX_Shdr. */
+#define SHT_HP_OVLBITS (SHT_LOOS + 0x0)
+#define SHT_HP_DLKM (SHT_LOOS + 0x1)
+#define SHT_HP_COMDAT (SHT_LOOS + 0x2)
+#define SHT_HP_OBJDICT (SHT_LOOS + 0x3)
+#define SHT_HP_ANNOT (SHT_LOOS + 0x4)
+
/* Flag bits in p_flags of ElfXX_Phdr. */
#define PF_HP_CODE 0x00040000
#define PF_HP_MODIFY 0x00080000
#define PT_HP_STACK (PT_LOOS + 0x14)
#define PT_HP_CORE_UTSNAME (PT_LOOS + 0x15)
+/* Binding information. */
+#define STB_HP_ALIAS (STB_LOOS + 0x0)
+
/* Additional symbol types. */
#define STT_HP_OPAQUE (STT_LOOS + 0x1)
#define STT_HP_STUB (STT_LOOS + 0x2)