3 This file contains ELF32/HPPA relocation support as specified
4 in the Stratus FTX/Golf Object File Format (SED-1762) dated
7 Copyright (C) 1990, 91, 92, 93, 94 Free Software Foundation, Inc.
11 Center for Software Science
12 Department of Computer Science
15 This file is part of BFD, the Binary File Descriptor library.
17 This program is free software; you can redistribute it and/or modify
18 it under the terms of the GNU General Public License as published by
19 the Free Software Foundation; either version 2 of the License, or
20 (at your option) any later version.
22 This program is distributed in the hope that it will be useful,
23 but WITHOUT ANY WARRANTY; without even the implied warranty of
24 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 GNU General Public License for more details.
27 You should have received a copy of the GNU General Public License
28 along with this program; if not, write to the Free Software
29 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
38 /* ELF/HPPA relocation types */
42 /* Address relocation types
43 These relocation types do simple base + offset relocations. */
46 R_PARISC_DIR32 = 0x01,
47 R_PARISC_DIR21L = 0x02,
48 R_PARISC_DIR17R = 0x03,
49 R_PARISC_DIR17F = 0x04,
50 R_PARISC_DIR14R = 0x06,
52 /* PC-relative relocation types
53 Typically used for calls.
54 Note PCREL17C and PCREL17F differ only in overflow handling.
55 PCREL17C never reports a relocation error.
57 When supporting argument relocations, function calls must be
58 accompanied by parameter relocation information. This information is
59 carried in the ten high-order bits of the addend field. The remaining
60 22 bits of of the addend field are sign-extended to form the Addend.
62 Note the code to build argument relocations depends on the
63 addend being zero. A consequence of this limitation is GAS
64 can not perform relocation reductions for function symbols. */
65 R_PARISC_PCREL21L = 0x0a,
66 R_PARISC_PCREL17R = 0x0b,
67 R_PARISC_PCREL17F = 0x0c,
68 R_PARISC_PCREL17C = 0x0d,
69 R_PARISC_PCREL14R = 0x0e,
70 R_PARISC_PCREL14F = 0x0f,
72 /* DP-relative relocation types. */
73 R_PARISC_DPREL21L = 0x12,
74 R_PARISC_DPREL14R = 0x16,
75 R_PARISC_DPREL14F = 0x17,
77 /* Data linkage table (DLT) relocation types
79 SOM DLT_REL fixup requests are used to for static data references
80 from position-independent code within shared libraries. They are
81 similar to the GOT relocation types in some SVR4 implementations. */
83 R_PARISC_DLTREL21L = 0x1a,
84 R_PARISC_DLTREL14R = 0x1e,
85 R_PARISC_DLTREL14F = 0x1f,
87 /* DLT indirect relocation types */
88 R_PARISC_DLTIND21L = 0x22,
89 R_PARISC_DLTIND14R = 0x26,
90 R_PARISC_DLTIND14F = 0x27,
92 /* Base relative relocation types. Ugh. These imply lots of state */
93 R_PARISC_SETBASE = 0x28,
94 R_PARISC_BASEREL32 = 0x29,
95 R_PARISC_BASEREL21L = 0x2a,
96 R_PARISC_BASEREL17R = 0x2b,
97 R_PARISC_BASEREL17F = 0x2c,
98 R_PARISC_BASEREL14R = 0x2e,
99 R_PARISC_BASEREL14F = 0x2f,
101 /* Segment relative relocation types. */
102 R_PARISC_TEXTREL32 = 0x31,
103 R_PARISC_DATAREL32 = 0x39,
105 /* Plabel relocation types. */
106 R_PARISC_PLABEL32 = 0x41,
107 R_PARISC_PLABEL21L = 0x42,
108 R_PARISC_PLABEL14R = 0x46,
110 /* PLT relocations. */
111 R_PARISC_PLTIND21L = 0x82,
112 R_PARISC_PLTIND14R = 0x86,
113 R_PARISC_PLTIND14F = 0x87,
115 /* Misc relocation types. */
116 R_PARISC_COPY = 0x88,
117 R_PARISC_GLOB_DAT = 0x89,
118 R_PARISC_JMP_SLOT = 0x8a,
119 R_PARISC_RELATIVE = 0x8b,
120 R_PARISC_STUB_CALL_17 = 0x8c,
121 R_PARISC_UNIMPLEMENTED,
123 elf32_hppa_reloc_type;
125 #define ELF_HOWTO_TABLE_SIZE R_PARISC_UNIMPLEMENTED + 1
126 #define N_PARISC_RELOCS R_PARISC_UNIMPLEMENTED + 1
128 /* Define groups of basic relocations. FIXME: These should
129 be the only basic relocations created by GAS. The rest
130 should be internal to the BFD backend.
132 The idea is both SOM and ELF define these basic relocation
133 types so they map into a SOM or ELF specific relocation
134 as appropriate. This allows GAS to share much more code
135 between the two target object formats. */
137 #define R_HPPA_NONE R_PARISC_NONE
138 #define R_HPPA R_PARISC_DIR32
139 #define R_HPPA_GOTOFF R_PARISC_DPREL21L
140 #define R_HPPA_PCREL_CALL R_PARISC_PCREL21L
142 /* HPPA symbol table extension entry types */
143 enum elf32_hppa_symextn_types
147 PARISC_SXT_ARG_RELOC,
150 /* These macros compose and decompose the value of a symextn entry:
152 entry_type = ELF32_PARISC_SX_TYPE(word);
153 entry_value = ELF32_PARISC_SX_VAL(word);
154 word = ELF32_PARISC_SX_WORD(type,val); */
156 #define ELF32_PARISC_SX_TYPE(p) ((p) >> 24)
157 #define ELF32_PARISC_SX_VAL(p) ((p) & 0xFFFFFF)
158 #define ELF32_PARISC_SX_WORD(type,val) (((type) << 24) + (val & 0xFFFFFF))
160 /* The following was added facilitate implementation of the .hppa_symextn
161 section. This section is built after the symbol table is built in the
162 elf_write_object_contents routine (called from bfd_close). It is built
163 so late because it requires information that is not known until
164 the symbol and string table sections have been allocated, and
165 the symbol table has been built. */
167 /* Number of "hand-made" target specific sections. */
168 #define ELF_TC_FAKE_SECTIONS 1
169 #define SYMEXTN_SECTION_NAME ".PARISC.symext"
171 /* FIXME. Are these external? (For example used by GAS?). If so the
172 names need to change to avoid namespace pollution, if not they should
173 be moved into elf32-hppa.c. */
174 typedef unsigned long symext_entryS;
178 struct symext_chain *next;
181 typedef struct symext_chain symext_chainS;
183 elf32_hppa_reloc_type **hppa_elf_gen_reloc_type
184 PARAMS ((bfd *, elf32_hppa_reloc_type, int, int));
186 asymbol * hppa_look_for_stubs_in_section
187 PARAMS ((bfd *, bfd *, bfd *, asection *,
188 int *, struct bfd_link_info *));
190 void elf_hppa_final_processing PARAMS ((void));
191 #endif /* _ELF32_HPPA_H */