]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/elfxx-mips.c
* corelow.c (init_core_ops): Delete references to to_require_attach
[thirdparty/binutils-gdb.git] / bfd / elfxx-mips.c
CommitLineData
b49e97c9
TS
1/* MIPS-specific support for ELF
2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
3 Free Software Foundation, Inc.
4
5 Most of the information added by Ian Lance Taylor, Cygnus Support,
6 <ian@cygnus.com>.
7 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
8 <mark@codesourcery.com>
9 Traditional MIPS targets support added by Koundinya.K, Dansk Data
10 Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
11
12This file is part of BFD, the Binary File Descriptor library.
13
14This program is free software; you can redistribute it and/or modify
15it under the terms of the GNU General Public License as published by
16the Free Software Foundation; either version 2 of the License, or
17(at your option) any later version.
18
19This program is distributed in the hope that it will be useful,
20but WITHOUT ANY WARRANTY; without even the implied warranty of
21MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22GNU General Public License for more details.
23
24You should have received a copy of the GNU General Public License
25along with this program; if not, write to the Free Software
26Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
27
28/* This file handles functionality common to the different MIPS ABI's. */
29
30#include "bfd.h"
31#include "sysdep.h"
32#include "libbfd.h"
33#include "elf-bfd.h"
34#include "elfxx-mips.h"
35#include "elf/mips.h"
36
37/* Get the ECOFF swapping routines. */
38#include "coff/sym.h"
39#include "coff/symconst.h"
40#include "coff/ecoff.h"
41#include "coff/mips.h"
42
43/* This structure is used to hold .got information when linking. It
44 is stored in the tdata field of the bfd_elf_section_data structure. */
45
46struct mips_got_info
47{
48 /* The global symbol in the GOT with the lowest index in the dynamic
49 symbol table. */
50 struct elf_link_hash_entry *global_gotsym;
51 /* The number of global .got entries. */
52 unsigned int global_gotno;
53 /* The number of local .got entries. */
54 unsigned int local_gotno;
55 /* The number of local .got entries we have used. */
56 unsigned int assigned_gotno;
57};
58
59/* This structure is passed to mips_elf_sort_hash_table_f when sorting
60 the dynamic symbols. */
61
62struct mips_elf_hash_sort_data
63{
64 /* The symbol in the global GOT with the lowest dynamic symbol table
65 index. */
66 struct elf_link_hash_entry *low;
67 /* The least dynamic symbol table index corresponding to a symbol
68 with a GOT entry. */
69 long min_got_dynindx;
70 /* The greatest dynamic symbol table index not corresponding to a
71 symbol without a GOT entry. */
72 long max_non_got_dynindx;
73};
74
75/* The MIPS ELF linker needs additional information for each symbol in
76 the global hash table. */
77
78struct mips_elf_link_hash_entry
79{
80 struct elf_link_hash_entry root;
81
82 /* External symbol information. */
83 EXTR esym;
84
85 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
86 this symbol. */
87 unsigned int possibly_dynamic_relocs;
88
89 /* If the R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 reloc is against
90 a readonly section. */
b34976b6 91 bfd_boolean readonly_reloc;
b49e97c9
TS
92
93 /* The index of the first dynamic relocation (in the .rel.dyn
94 section) against this symbol. */
95 unsigned int min_dyn_reloc_index;
96
97 /* We must not create a stub for a symbol that has relocations
98 related to taking the function's address, i.e. any but
99 R_MIPS_CALL*16 ones -- see "MIPS ABI Supplement, 3rd Edition",
100 p. 4-20. */
b34976b6 101 bfd_boolean no_fn_stub;
b49e97c9
TS
102
103 /* If there is a stub that 32 bit functions should use to call this
104 16 bit function, this points to the section containing the stub. */
105 asection *fn_stub;
106
107 /* Whether we need the fn_stub; this is set if this symbol appears
108 in any relocs other than a 16 bit call. */
b34976b6 109 bfd_boolean need_fn_stub;
b49e97c9
TS
110
111 /* If there is a stub that 16 bit functions should use to call this
112 32 bit function, this points to the section containing the stub. */
113 asection *call_stub;
114
115 /* This is like the call_stub field, but it is used if the function
116 being called returns a floating point value. */
117 asection *call_fp_stub;
7c5fcef7
L
118
119 /* Are we forced local? .*/
b34976b6 120 bfd_boolean forced_local;
b49e97c9
TS
121};
122
123/* MIPS ELF linker hash table. */
124
125struct mips_elf_link_hash_table
126{
127 struct elf_link_hash_table root;
128#if 0
129 /* We no longer use this. */
130 /* String section indices for the dynamic section symbols. */
131 bfd_size_type dynsym_sec_strindex[SIZEOF_MIPS_DYNSYM_SECNAMES];
132#endif
133 /* The number of .rtproc entries. */
134 bfd_size_type procedure_count;
135 /* The size of the .compact_rel section (if SGI_COMPAT). */
136 bfd_size_type compact_rel_size;
137 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic
8dc1a139 138 entry is set to the address of __rld_obj_head as in IRIX5. */
b34976b6 139 bfd_boolean use_rld_obj_head;
b49e97c9
TS
140 /* This is the value of the __rld_map or __rld_obj_head symbol. */
141 bfd_vma rld_value;
142 /* This is set if we see any mips16 stub sections. */
b34976b6 143 bfd_boolean mips16_stubs_seen;
b49e97c9
TS
144};
145
146/* Structure used to pass information to mips_elf_output_extsym. */
147
148struct extsym_info
149{
150 bfd *abfd;
151 struct bfd_link_info *info;
152 struct ecoff_debug_info *debug;
153 const struct ecoff_debug_swap *swap;
b34976b6 154 bfd_boolean failed;
b49e97c9
TS
155};
156
8dc1a139 157/* The names of the runtime procedure table symbols used on IRIX5. */
b49e97c9
TS
158
159static const char * const mips_elf_dynsym_rtproc_names[] =
160{
161 "_procedure_table",
162 "_procedure_string_table",
163 "_procedure_table_size",
164 NULL
165};
166
167/* These structures are used to generate the .compact_rel section on
8dc1a139 168 IRIX5. */
b49e97c9
TS
169
170typedef struct
171{
172 unsigned long id1; /* Always one? */
173 unsigned long num; /* Number of compact relocation entries. */
174 unsigned long id2; /* Always two? */
175 unsigned long offset; /* The file offset of the first relocation. */
176 unsigned long reserved0; /* Zero? */
177 unsigned long reserved1; /* Zero? */
178} Elf32_compact_rel;
179
180typedef struct
181{
182 bfd_byte id1[4];
183 bfd_byte num[4];
184 bfd_byte id2[4];
185 bfd_byte offset[4];
186 bfd_byte reserved0[4];
187 bfd_byte reserved1[4];
188} Elf32_External_compact_rel;
189
190typedef struct
191{
192 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
193 unsigned int rtype : 4; /* Relocation types. See below. */
194 unsigned int dist2to : 8;
195 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
196 unsigned long konst; /* KONST field. See below. */
197 unsigned long vaddr; /* VADDR to be relocated. */
198} Elf32_crinfo;
199
200typedef struct
201{
202 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
203 unsigned int rtype : 4; /* Relocation types. See below. */
204 unsigned int dist2to : 8;
205 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
206 unsigned long konst; /* KONST field. See below. */
207} Elf32_crinfo2;
208
209typedef struct
210{
211 bfd_byte info[4];
212 bfd_byte konst[4];
213 bfd_byte vaddr[4];
214} Elf32_External_crinfo;
215
216typedef struct
217{
218 bfd_byte info[4];
219 bfd_byte konst[4];
220} Elf32_External_crinfo2;
221
222/* These are the constants used to swap the bitfields in a crinfo. */
223
224#define CRINFO_CTYPE (0x1)
225#define CRINFO_CTYPE_SH (31)
226#define CRINFO_RTYPE (0xf)
227#define CRINFO_RTYPE_SH (27)
228#define CRINFO_DIST2TO (0xff)
229#define CRINFO_DIST2TO_SH (19)
230#define CRINFO_RELVADDR (0x7ffff)
231#define CRINFO_RELVADDR_SH (0)
232
233/* A compact relocation info has long (3 words) or short (2 words)
234 formats. A short format doesn't have VADDR field and relvaddr
235 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
236#define CRF_MIPS_LONG 1
237#define CRF_MIPS_SHORT 0
238
239/* There are 4 types of compact relocation at least. The value KONST
240 has different meaning for each type:
241
242 (type) (konst)
243 CT_MIPS_REL32 Address in data
244 CT_MIPS_WORD Address in word (XXX)
245 CT_MIPS_GPHI_LO GP - vaddr
246 CT_MIPS_JMPAD Address to jump
247 */
248
249#define CRT_MIPS_REL32 0xa
250#define CRT_MIPS_WORD 0xb
251#define CRT_MIPS_GPHI_LO 0xc
252#define CRT_MIPS_JMPAD 0xd
253
254#define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
255#define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
256#define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
257#define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
258\f
259/* The structure of the runtime procedure descriptor created by the
260 loader for use by the static exception system. */
261
262typedef struct runtime_pdr {
263 bfd_vma adr; /* memory address of start of procedure */
264 long regmask; /* save register mask */
265 long regoffset; /* save register offset */
266 long fregmask; /* save floating point register mask */
267 long fregoffset; /* save floating point register offset */
268 long frameoffset; /* frame size */
269 short framereg; /* frame pointer register */
270 short pcreg; /* offset or reg of return pc */
271 long irpss; /* index into the runtime string table */
272 long reserved;
273 struct exception_info *exception_info;/* pointer to exception array */
274} RPDR, *pRPDR;
275#define cbRPDR sizeof (RPDR)
276#define rpdNil ((pRPDR) 0)
277\f
278static struct bfd_hash_entry *mips_elf_link_hash_newfunc
279 PARAMS ((struct bfd_hash_entry *, struct bfd_hash_table *, const char *));
280static void ecoff_swap_rpdr_out
281 PARAMS ((bfd *, const RPDR *, struct rpdr_ext *));
b34976b6 282static bfd_boolean mips_elf_create_procedure_table
b49e97c9
TS
283 PARAMS ((PTR, bfd *, struct bfd_link_info *, asection *,
284 struct ecoff_debug_info *));
b34976b6 285static bfd_boolean mips_elf_check_mips16_stubs
b49e97c9
TS
286 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
287static void bfd_mips_elf32_swap_gptab_in
288 PARAMS ((bfd *, const Elf32_External_gptab *, Elf32_gptab *));
289static void bfd_mips_elf32_swap_gptab_out
290 PARAMS ((bfd *, const Elf32_gptab *, Elf32_External_gptab *));
291static void bfd_elf32_swap_compact_rel_out
292 PARAMS ((bfd *, const Elf32_compact_rel *, Elf32_External_compact_rel *));
293static void bfd_elf32_swap_crinfo_out
294 PARAMS ((bfd *, const Elf32_crinfo *, Elf32_External_crinfo *));
295#if 0
296static void bfd_mips_elf_swap_msym_in
297 PARAMS ((bfd *, const Elf32_External_Msym *, Elf32_Internal_Msym *));
298#endif
299static void bfd_mips_elf_swap_msym_out
300 PARAMS ((bfd *, const Elf32_Internal_Msym *, Elf32_External_Msym *));
301static int sort_dynamic_relocs
302 PARAMS ((const void *, const void *));
b34976b6 303static bfd_boolean mips_elf_output_extsym
b49e97c9
TS
304 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
305static int gptab_compare PARAMS ((const void *, const void *));
306static asection * mips_elf_got_section PARAMS ((bfd *));
307static struct mips_got_info *mips_elf_got_info
308 PARAMS ((bfd *, asection **));
309static bfd_vma mips_elf_local_got_index
310 PARAMS ((bfd *, struct bfd_link_info *, bfd_vma));
311static bfd_vma mips_elf_global_got_index
312 PARAMS ((bfd *, struct elf_link_hash_entry *));
313static bfd_vma mips_elf_got_page
314 PARAMS ((bfd *, struct bfd_link_info *, bfd_vma, bfd_vma *));
315static bfd_vma mips_elf_got16_entry
b34976b6 316 PARAMS ((bfd *, struct bfd_link_info *, bfd_vma, bfd_boolean));
b49e97c9
TS
317static bfd_vma mips_elf_got_offset_from_index
318 PARAMS ((bfd *, bfd *, bfd_vma));
319static bfd_vma mips_elf_create_local_got_entry
320 PARAMS ((bfd *, struct mips_got_info *, asection *, bfd_vma));
b34976b6 321static bfd_boolean mips_elf_sort_hash_table
b49e97c9 322 PARAMS ((struct bfd_link_info *, unsigned long));
b34976b6 323static bfd_boolean mips_elf_sort_hash_table_f
b49e97c9 324 PARAMS ((struct mips_elf_link_hash_entry *, PTR));
b34976b6 325static bfd_boolean mips_elf_record_global_got_symbol
b49e97c9
TS
326 PARAMS ((struct elf_link_hash_entry *, struct bfd_link_info *,
327 struct mips_got_info *));
328static const Elf_Internal_Rela *mips_elf_next_relocation
329 PARAMS ((bfd *, unsigned int, const Elf_Internal_Rela *,
330 const Elf_Internal_Rela *));
b34976b6
AM
331static bfd_boolean mips_elf_local_relocation_p
332 PARAMS ((bfd *, const Elf_Internal_Rela *, asection **, bfd_boolean));
b49e97c9 333static bfd_vma mips_elf_sign_extend PARAMS ((bfd_vma, int));
b34976b6 334static bfd_boolean mips_elf_overflow_p PARAMS ((bfd_vma, int));
b49e97c9
TS
335static bfd_vma mips_elf_high PARAMS ((bfd_vma));
336static bfd_vma mips_elf_higher PARAMS ((bfd_vma));
337static bfd_vma mips_elf_highest PARAMS ((bfd_vma));
b34976b6 338static bfd_boolean mips_elf_create_compact_rel_section
b49e97c9 339 PARAMS ((bfd *, struct bfd_link_info *));
b34976b6 340static bfd_boolean mips_elf_create_got_section
b49e97c9
TS
341 PARAMS ((bfd *, struct bfd_link_info *));
342static asection *mips_elf_create_msym_section
343 PARAMS ((bfd *));
344static bfd_reloc_status_type mips_elf_calculate_relocation
345 PARAMS ((bfd *, bfd *, asection *, struct bfd_link_info *,
346 const Elf_Internal_Rela *, bfd_vma, reloc_howto_type *,
347 Elf_Internal_Sym *, asection **, bfd_vma *, const char **,
b34976b6 348 bfd_boolean *, bfd_boolean));
b49e97c9
TS
349static bfd_vma mips_elf_obtain_contents
350 PARAMS ((reloc_howto_type *, const Elf_Internal_Rela *, bfd *, bfd_byte *));
b34976b6 351static bfd_boolean mips_elf_perform_relocation
b49e97c9
TS
352 PARAMS ((struct bfd_link_info *, reloc_howto_type *,
353 const Elf_Internal_Rela *, bfd_vma, bfd *, asection *, bfd_byte *,
b34976b6
AM
354 bfd_boolean));
355static bfd_boolean mips_elf_stub_section_p
b49e97c9
TS
356 PARAMS ((bfd *, asection *));
357static void mips_elf_allocate_dynamic_relocations
358 PARAMS ((bfd *, unsigned int));
b34976b6 359static bfd_boolean mips_elf_create_dynamic_relocation
b49e97c9
TS
360 PARAMS ((bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
361 struct mips_elf_link_hash_entry *, asection *,
362 bfd_vma, bfd_vma *, asection *));
363static INLINE int elf_mips_isa PARAMS ((flagword));
364static INLINE char* elf_mips_abi_name PARAMS ((bfd *));
365static void mips_elf_irix6_finish_dynamic_symbol
366 PARAMS ((bfd *, const char *, Elf_Internal_Sym *));
b34976b6 367static bfd_boolean _bfd_mips_elf_mach_extends_p PARAMS ((flagword, flagword));
b49e97c9
TS
368
369/* This will be used when we sort the dynamic relocation records. */
370static bfd *reldyn_sorting_bfd;
371
372/* Nonzero if ABFD is using the N32 ABI. */
373
374#define ABI_N32_P(abfd) \
375 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
376
4a14403c 377/* Nonzero if ABFD is using the N64 ABI. */
b49e97c9 378#define ABI_64_P(abfd) \
141ff970 379 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
b49e97c9 380
4a14403c
TS
381/* Nonzero if ABFD is using NewABI conventions. */
382#define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
383
384/* The IRIX compatibility level we are striving for. */
b49e97c9
TS
385#define IRIX_COMPAT(abfd) \
386 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
387
b49e97c9
TS
388/* Whether we are trying to be compatible with IRIX at all. */
389#define SGI_COMPAT(abfd) \
390 (IRIX_COMPAT (abfd) != ict_none)
391
392/* The name of the options section. */
393#define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
4a14403c 394 (ABI_64_P (abfd) ? ".MIPS.options" : ".options")
b49e97c9
TS
395
396/* The name of the stub section. */
397#define MIPS_ELF_STUB_SECTION_NAME(abfd) \
4a14403c 398 (ABI_64_P (abfd) ? ".MIPS.stubs" : ".stub")
b49e97c9
TS
399
400/* The size of an external REL relocation. */
401#define MIPS_ELF_REL_SIZE(abfd) \
402 (get_elf_backend_data (abfd)->s->sizeof_rel)
403
404/* The size of an external dynamic table entry. */
405#define MIPS_ELF_DYN_SIZE(abfd) \
406 (get_elf_backend_data (abfd)->s->sizeof_dyn)
407
408/* The size of a GOT entry. */
409#define MIPS_ELF_GOT_SIZE(abfd) \
410 (get_elf_backend_data (abfd)->s->arch_size / 8)
411
412/* The size of a symbol-table entry. */
413#define MIPS_ELF_SYM_SIZE(abfd) \
414 (get_elf_backend_data (abfd)->s->sizeof_sym)
415
416/* The default alignment for sections, as a power of two. */
417#define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
418 (get_elf_backend_data (abfd)->s->file_align == 8 ? 3 : 2)
419
420/* Get word-sized data. */
421#define MIPS_ELF_GET_WORD(abfd, ptr) \
422 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
423
424/* Put out word-sized data. */
425#define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
426 (ABI_64_P (abfd) \
427 ? bfd_put_64 (abfd, val, ptr) \
428 : bfd_put_32 (abfd, val, ptr))
429
430/* Add a dynamic symbol table-entry. */
431#ifdef BFD64
432#define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
433 (ABI_64_P (elf_hash_table (info)->dynobj) \
434 ? bfd_elf64_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val) \
435 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
436#else
437#define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
438 (ABI_64_P (elf_hash_table (info)->dynobj) \
b34976b6 439 ? (abort (), FALSE) \
b49e97c9
TS
440 : bfd_elf32_add_dynamic_entry (info, (bfd_vma) tag, (bfd_vma) val))
441#endif
442
443#define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
444 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
445
4ffba85c
AO
446/* Determine whether the internal relocation of index REL_IDX is REL
447 (zero) or RELA (non-zero). The assumption is that, if there are
448 two relocation sections for this section, one of them is REL and
449 the other is RELA. If the index of the relocation we're testing is
450 in range for the first relocation section, check that the external
451 relocation size is that for RELA. It is also assumed that, if
452 rel_idx is not in range for the first section, and this first
453 section contains REL relocs, then the relocation is in the second
454 section, that is RELA. */
455#define MIPS_RELOC_RELA_P(abfd, sec, rel_idx) \
456 ((NUM_SHDR_ENTRIES (&elf_section_data (sec)->rel_hdr) \
457 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel \
458 > (bfd_vma)(rel_idx)) \
459 == (elf_section_data (sec)->rel_hdr.sh_entsize \
460 == (ABI_64_P (abfd) ? sizeof (Elf64_External_Rela) \
461 : sizeof (Elf32_External_Rela))))
462
b49e97c9
TS
463/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
464 from smaller values. Start with zero, widen, *then* decrement. */
465#define MINUS_ONE (((bfd_vma)0) - 1)
466
467/* The number of local .got entries we reserve. */
468#define MIPS_RESERVED_GOTNO (2)
469
470/* Instructions which appear in a stub. For some reason the stub is
471 slightly different on an SGI system. */
472#define ELF_MIPS_GP_OFFSET(abfd) (SGI_COMPAT (abfd) ? 0x7ff0 : 0x8000)
473#define STUB_LW(abfd) \
474 (SGI_COMPAT (abfd) \
475 ? (ABI_64_P (abfd) \
476 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
477 : 0x8f998010) /* lw t9,0x8010(gp) */ \
478 : 0x8f998010) /* lw t9,0x8000(gp) */
479#define STUB_MOVE(abfd) \
480 (SGI_COMPAT (abfd) ? 0x03e07825 : 0x03e07821) /* move t7,ra */
481#define STUB_JALR 0x0320f809 /* jal t9 */
482#define STUB_LI16(abfd) \
483 (SGI_COMPAT (abfd) ? 0x34180000 : 0x24180000) /* ori t8,zero,0 */
484#define MIPS_FUNCTION_STUB_SIZE (16)
485
486/* The name of the dynamic interpreter. This is put in the .interp
487 section. */
488
489#define ELF_DYNAMIC_INTERPRETER(abfd) \
490 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
491 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
492 : "/usr/lib/libc.so.1")
493
494#ifdef BFD64
ee6423ed
AO
495#define MNAME(bfd,pre,pos) \
496 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
b49e97c9
TS
497#define ELF_R_SYM(bfd, i) \
498 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
499#define ELF_R_TYPE(bfd, i) \
500 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
501#define ELF_R_INFO(bfd, s, t) \
502 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
503#else
ee6423ed 504#define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
b49e97c9
TS
505#define ELF_R_SYM(bfd, i) \
506 (ELF32_R_SYM (i))
507#define ELF_R_TYPE(bfd, i) \
508 (ELF32_R_TYPE (i))
509#define ELF_R_INFO(bfd, s, t) \
510 (ELF32_R_INFO (s, t))
511#endif
512\f
513 /* The mips16 compiler uses a couple of special sections to handle
514 floating point arguments.
515
516 Section names that look like .mips16.fn.FNNAME contain stubs that
517 copy floating point arguments from the fp regs to the gp regs and
518 then jump to FNNAME. If any 32 bit function calls FNNAME, the
519 call should be redirected to the stub instead. If no 32 bit
520 function calls FNNAME, the stub should be discarded. We need to
521 consider any reference to the function, not just a call, because
522 if the address of the function is taken we will need the stub,
523 since the address might be passed to a 32 bit function.
524
525 Section names that look like .mips16.call.FNNAME contain stubs
526 that copy floating point arguments from the gp regs to the fp
527 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
528 then any 16 bit function that calls FNNAME should be redirected
529 to the stub instead. If FNNAME is not a 32 bit function, the
530 stub should be discarded.
531
532 .mips16.call.fp.FNNAME sections are similar, but contain stubs
533 which call FNNAME and then copy the return value from the fp regs
534 to the gp regs. These stubs store the return value in $18 while
535 calling FNNAME; any function which might call one of these stubs
536 must arrange to save $18 around the call. (This case is not
537 needed for 32 bit functions that call 16 bit functions, because
538 16 bit functions always return floating point values in both
539 $f0/$f1 and $2/$3.)
540
541 Note that in all cases FNNAME might be defined statically.
542 Therefore, FNNAME is not used literally. Instead, the relocation
543 information will indicate which symbol the section is for.
544
545 We record any stubs that we find in the symbol table. */
546
547#define FN_STUB ".mips16.fn."
548#define CALL_STUB ".mips16.call."
549#define CALL_FP_STUB ".mips16.call.fp."
550\f
551/* Look up an entry in a MIPS ELF linker hash table. */
552
553#define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
554 ((struct mips_elf_link_hash_entry *) \
555 elf_link_hash_lookup (&(table)->root, (string), (create), \
556 (copy), (follow)))
557
558/* Traverse a MIPS ELF linker hash table. */
559
560#define mips_elf_link_hash_traverse(table, func, info) \
561 (elf_link_hash_traverse \
562 (&(table)->root, \
b34976b6 563 (bfd_boolean (*) PARAMS ((struct elf_link_hash_entry *, PTR))) (func), \
b49e97c9
TS
564 (info)))
565
566/* Get the MIPS ELF linker hash table from a link_info structure. */
567
568#define mips_elf_hash_table(p) \
569 ((struct mips_elf_link_hash_table *) ((p)->hash))
570
571/* Create an entry in a MIPS ELF linker hash table. */
572
573static struct bfd_hash_entry *
574mips_elf_link_hash_newfunc (entry, table, string)
575 struct bfd_hash_entry *entry;
576 struct bfd_hash_table *table;
577 const char *string;
578{
579 struct mips_elf_link_hash_entry *ret =
580 (struct mips_elf_link_hash_entry *) entry;
581
582 /* Allocate the structure if it has not already been allocated by a
583 subclass. */
584 if (ret == (struct mips_elf_link_hash_entry *) NULL)
585 ret = ((struct mips_elf_link_hash_entry *)
586 bfd_hash_allocate (table,
587 sizeof (struct mips_elf_link_hash_entry)));
588 if (ret == (struct mips_elf_link_hash_entry *) NULL)
589 return (struct bfd_hash_entry *) ret;
590
591 /* Call the allocation method of the superclass. */
592 ret = ((struct mips_elf_link_hash_entry *)
593 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
594 table, string));
595 if (ret != (struct mips_elf_link_hash_entry *) NULL)
596 {
597 /* Set local fields. */
598 memset (&ret->esym, 0, sizeof (EXTR));
599 /* We use -2 as a marker to indicate that the information has
600 not been set. -1 means there is no associated ifd. */
601 ret->esym.ifd = -2;
602 ret->possibly_dynamic_relocs = 0;
b34976b6 603 ret->readonly_reloc = FALSE;
b49e97c9 604 ret->min_dyn_reloc_index = 0;
b34976b6 605 ret->no_fn_stub = FALSE;
b49e97c9 606 ret->fn_stub = NULL;
b34976b6 607 ret->need_fn_stub = FALSE;
b49e97c9
TS
608 ret->call_stub = NULL;
609 ret->call_fp_stub = NULL;
b34976b6 610 ret->forced_local = FALSE;
b49e97c9
TS
611 }
612
613 return (struct bfd_hash_entry *) ret;
614}
615\f
616/* Read ECOFF debugging information from a .mdebug section into a
617 ecoff_debug_info structure. */
618
b34976b6 619bfd_boolean
b49e97c9
TS
620_bfd_mips_elf_read_ecoff_info (abfd, section, debug)
621 bfd *abfd;
622 asection *section;
623 struct ecoff_debug_info *debug;
624{
625 HDRR *symhdr;
626 const struct ecoff_debug_swap *swap;
627 char *ext_hdr = NULL;
628
629 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
630 memset (debug, 0, sizeof (*debug));
631
632 ext_hdr = (char *) bfd_malloc (swap->external_hdr_size);
633 if (ext_hdr == NULL && swap->external_hdr_size != 0)
634 goto error_return;
635
82e51918
AM
636 if (! bfd_get_section_contents (abfd, section, ext_hdr, (file_ptr) 0,
637 swap->external_hdr_size))
b49e97c9
TS
638 goto error_return;
639
640 symhdr = &debug->symbolic_header;
641 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
642
643 /* The symbolic header contains absolute file offsets and sizes to
644 read. */
645#define READ(ptr, offset, count, size, type) \
646 if (symhdr->count == 0) \
647 debug->ptr = NULL; \
648 else \
649 { \
650 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
651 debug->ptr = (type) bfd_malloc (amt); \
652 if (debug->ptr == NULL) \
653 goto error_return; \
654 if (bfd_seek (abfd, (file_ptr) symhdr->offset, SEEK_SET) != 0 \
655 || bfd_bread (debug->ptr, amt, abfd) != amt) \
656 goto error_return; \
657 }
658
659 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
660 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, PTR);
661 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, PTR);
662 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, PTR);
663 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, PTR);
664 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
665 union aux_ext *);
666 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
667 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
668 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, PTR);
669 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, PTR);
670 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, PTR);
671#undef READ
672
673 debug->fdr = NULL;
674 debug->adjust = NULL;
675
b34976b6 676 return TRUE;
b49e97c9
TS
677
678 error_return:
679 if (ext_hdr != NULL)
680 free (ext_hdr);
681 if (debug->line != NULL)
682 free (debug->line);
683 if (debug->external_dnr != NULL)
684 free (debug->external_dnr);
685 if (debug->external_pdr != NULL)
686 free (debug->external_pdr);
687 if (debug->external_sym != NULL)
688 free (debug->external_sym);
689 if (debug->external_opt != NULL)
690 free (debug->external_opt);
691 if (debug->external_aux != NULL)
692 free (debug->external_aux);
693 if (debug->ss != NULL)
694 free (debug->ss);
695 if (debug->ssext != NULL)
696 free (debug->ssext);
697 if (debug->external_fdr != NULL)
698 free (debug->external_fdr);
699 if (debug->external_rfd != NULL)
700 free (debug->external_rfd);
701 if (debug->external_ext != NULL)
702 free (debug->external_ext);
b34976b6 703 return FALSE;
b49e97c9
TS
704}
705\f
706/* Swap RPDR (runtime procedure table entry) for output. */
707
708static void
709ecoff_swap_rpdr_out (abfd, in, ex)
710 bfd *abfd;
711 const RPDR *in;
712 struct rpdr_ext *ex;
713{
714 H_PUT_S32 (abfd, in->adr, ex->p_adr);
715 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
716 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
717 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
718 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
719 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
720
721 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
722 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
723
724 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
725#if 0 /* FIXME */
726 H_PUT_S32 (abfd, in->exception_info, ex->p_exception_info);
727#endif
728}
729
730/* Create a runtime procedure table from the .mdebug section. */
731
b34976b6 732static bfd_boolean
b49e97c9
TS
733mips_elf_create_procedure_table (handle, abfd, info, s, debug)
734 PTR handle;
735 bfd *abfd;
736 struct bfd_link_info *info;
737 asection *s;
738 struct ecoff_debug_info *debug;
739{
740 const struct ecoff_debug_swap *swap;
741 HDRR *hdr = &debug->symbolic_header;
742 RPDR *rpdr, *rp;
743 struct rpdr_ext *erp;
744 PTR rtproc;
745 struct pdr_ext *epdr;
746 struct sym_ext *esym;
747 char *ss, **sv;
748 char *str;
749 bfd_size_type size;
750 bfd_size_type count;
751 unsigned long sindex;
752 unsigned long i;
753 PDR pdr;
754 SYMR sym;
755 const char *no_name_func = _("static procedure (no name)");
756
757 epdr = NULL;
758 rpdr = NULL;
759 esym = NULL;
760 ss = NULL;
761 sv = NULL;
762
763 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
764
765 sindex = strlen (no_name_func) + 1;
766 count = hdr->ipdMax;
767 if (count > 0)
768 {
769 size = swap->external_pdr_size;
770
771 epdr = (struct pdr_ext *) bfd_malloc (size * count);
772 if (epdr == NULL)
773 goto error_return;
774
775 if (! _bfd_ecoff_get_accumulated_pdr (handle, (PTR) epdr))
776 goto error_return;
777
778 size = sizeof (RPDR);
779 rp = rpdr = (RPDR *) bfd_malloc (size * count);
780 if (rpdr == NULL)
781 goto error_return;
782
783 size = sizeof (char *);
784 sv = (char **) bfd_malloc (size * count);
785 if (sv == NULL)
786 goto error_return;
787
788 count = hdr->isymMax;
789 size = swap->external_sym_size;
790 esym = (struct sym_ext *) bfd_malloc (size * count);
791 if (esym == NULL)
792 goto error_return;
793
794 if (! _bfd_ecoff_get_accumulated_sym (handle, (PTR) esym))
795 goto error_return;
796
797 count = hdr->issMax;
798 ss = (char *) bfd_malloc (count);
799 if (ss == NULL)
800 goto error_return;
801 if (! _bfd_ecoff_get_accumulated_ss (handle, (PTR) ss))
802 goto error_return;
803
804 count = hdr->ipdMax;
805 for (i = 0; i < (unsigned long) count; i++, rp++)
806 {
807 (*swap->swap_pdr_in) (abfd, (PTR) (epdr + i), &pdr);
808 (*swap->swap_sym_in) (abfd, (PTR) &esym[pdr.isym], &sym);
809 rp->adr = sym.value;
810 rp->regmask = pdr.regmask;
811 rp->regoffset = pdr.regoffset;
812 rp->fregmask = pdr.fregmask;
813 rp->fregoffset = pdr.fregoffset;
814 rp->frameoffset = pdr.frameoffset;
815 rp->framereg = pdr.framereg;
816 rp->pcreg = pdr.pcreg;
817 rp->irpss = sindex;
818 sv[i] = ss + sym.iss;
819 sindex += strlen (sv[i]) + 1;
820 }
821 }
822
823 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
824 size = BFD_ALIGN (size, 16);
825 rtproc = (PTR) bfd_alloc (abfd, size);
826 if (rtproc == NULL)
827 {
828 mips_elf_hash_table (info)->procedure_count = 0;
829 goto error_return;
830 }
831
832 mips_elf_hash_table (info)->procedure_count = count + 2;
833
834 erp = (struct rpdr_ext *) rtproc;
835 memset (erp, 0, sizeof (struct rpdr_ext));
836 erp++;
837 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
838 strcpy (str, no_name_func);
839 str += strlen (no_name_func) + 1;
840 for (i = 0; i < count; i++)
841 {
842 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
843 strcpy (str, sv[i]);
844 str += strlen (sv[i]) + 1;
845 }
846 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
847
848 /* Set the size and contents of .rtproc section. */
849 s->_raw_size = size;
850 s->contents = (bfd_byte *) rtproc;
851
852 /* Skip this section later on (I don't think this currently
853 matters, but someday it might). */
854 s->link_order_head = (struct bfd_link_order *) NULL;
855
856 if (epdr != NULL)
857 free (epdr);
858 if (rpdr != NULL)
859 free (rpdr);
860 if (esym != NULL)
861 free (esym);
862 if (ss != NULL)
863 free (ss);
864 if (sv != NULL)
865 free (sv);
866
b34976b6 867 return TRUE;
b49e97c9
TS
868
869 error_return:
870 if (epdr != NULL)
871 free (epdr);
872 if (rpdr != NULL)
873 free (rpdr);
874 if (esym != NULL)
875 free (esym);
876 if (ss != NULL)
877 free (ss);
878 if (sv != NULL)
879 free (sv);
b34976b6 880 return FALSE;
b49e97c9
TS
881}
882
883/* Check the mips16 stubs for a particular symbol, and see if we can
884 discard them. */
885
b34976b6 886static bfd_boolean
b49e97c9
TS
887mips_elf_check_mips16_stubs (h, data)
888 struct mips_elf_link_hash_entry *h;
889 PTR data ATTRIBUTE_UNUSED;
890{
891 if (h->root.root.type == bfd_link_hash_warning)
892 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
893
894 if (h->fn_stub != NULL
895 && ! h->need_fn_stub)
896 {
897 /* We don't need the fn_stub; the only references to this symbol
898 are 16 bit calls. Clobber the size to 0 to prevent it from
899 being included in the link. */
900 h->fn_stub->_raw_size = 0;
901 h->fn_stub->_cooked_size = 0;
902 h->fn_stub->flags &= ~SEC_RELOC;
903 h->fn_stub->reloc_count = 0;
904 h->fn_stub->flags |= SEC_EXCLUDE;
905 }
906
907 if (h->call_stub != NULL
908 && h->root.other == STO_MIPS16)
909 {
910 /* We don't need the call_stub; this is a 16 bit function, so
911 calls from other 16 bit functions are OK. Clobber the size
912 to 0 to prevent it from being included in the link. */
913 h->call_stub->_raw_size = 0;
914 h->call_stub->_cooked_size = 0;
915 h->call_stub->flags &= ~SEC_RELOC;
916 h->call_stub->reloc_count = 0;
917 h->call_stub->flags |= SEC_EXCLUDE;
918 }
919
920 if (h->call_fp_stub != NULL
921 && h->root.other == STO_MIPS16)
922 {
923 /* We don't need the call_stub; this is a 16 bit function, so
924 calls from other 16 bit functions are OK. Clobber the size
925 to 0 to prevent it from being included in the link. */
926 h->call_fp_stub->_raw_size = 0;
927 h->call_fp_stub->_cooked_size = 0;
928 h->call_fp_stub->flags &= ~SEC_RELOC;
929 h->call_fp_stub->reloc_count = 0;
930 h->call_fp_stub->flags |= SEC_EXCLUDE;
931 }
932
b34976b6 933 return TRUE;
b49e97c9
TS
934}
935\f
936bfd_reloc_status_type
937_bfd_mips_elf_gprel16_with_gp (abfd, symbol, reloc_entry, input_section,
938 relocateable, data, gp)
939 bfd *abfd;
940 asymbol *symbol;
941 arelent *reloc_entry;
942 asection *input_section;
b34976b6 943 bfd_boolean relocateable;
b49e97c9
TS
944 PTR data;
945 bfd_vma gp;
946{
947 bfd_vma relocation;
948 unsigned long insn;
949 unsigned long val;
950
951 if (bfd_is_com_section (symbol->section))
952 relocation = 0;
953 else
954 relocation = symbol->value;
955
956 relocation += symbol->section->output_section->vma;
957 relocation += symbol->section->output_offset;
958
959 if (reloc_entry->address > input_section->_cooked_size)
960 return bfd_reloc_outofrange;
961
962 insn = bfd_get_32 (abfd, (bfd_byte *) data + reloc_entry->address);
963
964 /* Set val to the offset into the section or symbol. */
965 if (reloc_entry->howto->src_mask == 0)
966 {
967 /* This case occurs with the 64-bit MIPS ELF ABI. */
968 val = reloc_entry->addend;
969 }
970 else
971 {
972 val = ((insn & 0xffff) + reloc_entry->addend) & 0xffff;
973 if (val & 0x8000)
974 val -= 0x10000;
975 }
976
977 /* Adjust val for the final section location and GP value. If we
978 are producing relocateable output, we don't want to do this for
979 an external symbol. */
980 if (! relocateable
981 || (symbol->flags & BSF_SECTION_SYM) != 0)
982 val += relocation - gp;
983
984 insn = (insn & ~0xffff) | (val & 0xffff);
985 bfd_put_32 (abfd, insn, (bfd_byte *) data + reloc_entry->address);
986
987 if (relocateable)
988 reloc_entry->address += input_section->output_offset;
989
990 else if ((long) val >= 0x8000 || (long) val < -0x8000)
991 return bfd_reloc_overflow;
992
993 return bfd_reloc_ok;
994}
995\f
996/* Swap an entry in a .gptab section. Note that these routines rely
997 on the equivalence of the two elements of the union. */
998
999static void
1000bfd_mips_elf32_swap_gptab_in (abfd, ex, in)
1001 bfd *abfd;
1002 const Elf32_External_gptab *ex;
1003 Elf32_gptab *in;
1004{
1005 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
1006 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
1007}
1008
1009static void
1010bfd_mips_elf32_swap_gptab_out (abfd, in, ex)
1011 bfd *abfd;
1012 const Elf32_gptab *in;
1013 Elf32_External_gptab *ex;
1014{
1015 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
1016 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
1017}
1018
1019static void
1020bfd_elf32_swap_compact_rel_out (abfd, in, ex)
1021 bfd *abfd;
1022 const Elf32_compact_rel *in;
1023 Elf32_External_compact_rel *ex;
1024{
1025 H_PUT_32 (abfd, in->id1, ex->id1);
1026 H_PUT_32 (abfd, in->num, ex->num);
1027 H_PUT_32 (abfd, in->id2, ex->id2);
1028 H_PUT_32 (abfd, in->offset, ex->offset);
1029 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
1030 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
1031}
1032
1033static void
1034bfd_elf32_swap_crinfo_out (abfd, in, ex)
1035 bfd *abfd;
1036 const Elf32_crinfo *in;
1037 Elf32_External_crinfo *ex;
1038{
1039 unsigned long l;
1040
1041 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
1042 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
1043 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
1044 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
1045 H_PUT_32 (abfd, l, ex->info);
1046 H_PUT_32 (abfd, in->konst, ex->konst);
1047 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
1048}
1049
1050#if 0
1051/* Swap in an MSYM entry. */
1052
1053static void
1054bfd_mips_elf_swap_msym_in (abfd, ex, in)
1055 bfd *abfd;
1056 const Elf32_External_Msym *ex;
1057 Elf32_Internal_Msym *in;
1058{
1059 in->ms_hash_value = H_GET_32 (abfd, ex->ms_hash_value);
1060 in->ms_info = H_GET_32 (abfd, ex->ms_info);
1061}
1062#endif
1063/* Swap out an MSYM entry. */
1064
1065static void
1066bfd_mips_elf_swap_msym_out (abfd, in, ex)
1067 bfd *abfd;
1068 const Elf32_Internal_Msym *in;
1069 Elf32_External_Msym *ex;
1070{
1071 H_PUT_32 (abfd, in->ms_hash_value, ex->ms_hash_value);
1072 H_PUT_32 (abfd, in->ms_info, ex->ms_info);
1073}
1074\f
1075/* A .reginfo section holds a single Elf32_RegInfo structure. These
1076 routines swap this structure in and out. They are used outside of
1077 BFD, so they are globally visible. */
1078
1079void
1080bfd_mips_elf32_swap_reginfo_in (abfd, ex, in)
1081 bfd *abfd;
1082 const Elf32_External_RegInfo *ex;
1083 Elf32_RegInfo *in;
1084{
1085 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1086 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1087 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1088 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1089 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1090 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
1091}
1092
1093void
1094bfd_mips_elf32_swap_reginfo_out (abfd, in, ex)
1095 bfd *abfd;
1096 const Elf32_RegInfo *in;
1097 Elf32_External_RegInfo *ex;
1098{
1099 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1100 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1101 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1102 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1103 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1104 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
1105}
1106
1107/* In the 64 bit ABI, the .MIPS.options section holds register
1108 information in an Elf64_Reginfo structure. These routines swap
1109 them in and out. They are globally visible because they are used
1110 outside of BFD. These routines are here so that gas can call them
1111 without worrying about whether the 64 bit ABI has been included. */
1112
1113void
1114bfd_mips_elf64_swap_reginfo_in (abfd, ex, in)
1115 bfd *abfd;
1116 const Elf64_External_RegInfo *ex;
1117 Elf64_Internal_RegInfo *in;
1118{
1119 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
1120 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
1121 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
1122 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
1123 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
1124 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
1125 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
1126}
1127
1128void
1129bfd_mips_elf64_swap_reginfo_out (abfd, in, ex)
1130 bfd *abfd;
1131 const Elf64_Internal_RegInfo *in;
1132 Elf64_External_RegInfo *ex;
1133{
1134 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
1135 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
1136 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
1137 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
1138 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
1139 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
1140 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
1141}
1142
1143/* Swap in an options header. */
1144
1145void
1146bfd_mips_elf_swap_options_in (abfd, ex, in)
1147 bfd *abfd;
1148 const Elf_External_Options *ex;
1149 Elf_Internal_Options *in;
1150{
1151 in->kind = H_GET_8 (abfd, ex->kind);
1152 in->size = H_GET_8 (abfd, ex->size);
1153 in->section = H_GET_16 (abfd, ex->section);
1154 in->info = H_GET_32 (abfd, ex->info);
1155}
1156
1157/* Swap out an options header. */
1158
1159void
1160bfd_mips_elf_swap_options_out (abfd, in, ex)
1161 bfd *abfd;
1162 const Elf_Internal_Options *in;
1163 Elf_External_Options *ex;
1164{
1165 H_PUT_8 (abfd, in->kind, ex->kind);
1166 H_PUT_8 (abfd, in->size, ex->size);
1167 H_PUT_16 (abfd, in->section, ex->section);
1168 H_PUT_32 (abfd, in->info, ex->info);
1169}
1170\f
1171/* This function is called via qsort() to sort the dynamic relocation
1172 entries by increasing r_symndx value. */
1173
1174static int
1175sort_dynamic_relocs (arg1, arg2)
1176 const PTR arg1;
1177 const PTR arg2;
1178{
947216bf
AM
1179 Elf_Internal_Rela int_reloc1;
1180 Elf_Internal_Rela int_reloc2;
b49e97c9 1181
947216bf
AM
1182 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
1183 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
b49e97c9 1184
947216bf 1185 return ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
b49e97c9
TS
1186}
1187
1188/* This routine is used to write out ECOFF debugging external symbol
1189 information. It is called via mips_elf_link_hash_traverse. The
1190 ECOFF external symbol information must match the ELF external
1191 symbol information. Unfortunately, at this point we don't know
1192 whether a symbol is required by reloc information, so the two
1193 tables may wind up being different. We must sort out the external
1194 symbol information before we can set the final size of the .mdebug
1195 section, and we must set the size of the .mdebug section before we
1196 can relocate any sections, and we can't know which symbols are
1197 required by relocation until we relocate the sections.
1198 Fortunately, it is relatively unlikely that any symbol will be
1199 stripped but required by a reloc. In particular, it can not happen
1200 when generating a final executable. */
1201
b34976b6 1202static bfd_boolean
b49e97c9
TS
1203mips_elf_output_extsym (h, data)
1204 struct mips_elf_link_hash_entry *h;
1205 PTR data;
1206{
1207 struct extsym_info *einfo = (struct extsym_info *) data;
b34976b6 1208 bfd_boolean strip;
b49e97c9
TS
1209 asection *sec, *output_section;
1210
1211 if (h->root.root.type == bfd_link_hash_warning)
1212 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1213
1214 if (h->root.indx == -2)
b34976b6 1215 strip = FALSE;
b49e97c9
TS
1216 else if (((h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_DYNAMIC) != 0
1217 || (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_DYNAMIC) != 0)
1218 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0
1219 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_REF_REGULAR) == 0)
b34976b6 1220 strip = TRUE;
b49e97c9
TS
1221 else if (einfo->info->strip == strip_all
1222 || (einfo->info->strip == strip_some
1223 && bfd_hash_lookup (einfo->info->keep_hash,
1224 h->root.root.root.string,
b34976b6
AM
1225 FALSE, FALSE) == NULL))
1226 strip = TRUE;
b49e97c9 1227 else
b34976b6 1228 strip = FALSE;
b49e97c9
TS
1229
1230 if (strip)
b34976b6 1231 return TRUE;
b49e97c9
TS
1232
1233 if (h->esym.ifd == -2)
1234 {
1235 h->esym.jmptbl = 0;
1236 h->esym.cobol_main = 0;
1237 h->esym.weakext = 0;
1238 h->esym.reserved = 0;
1239 h->esym.ifd = ifdNil;
1240 h->esym.asym.value = 0;
1241 h->esym.asym.st = stGlobal;
1242
1243 if (h->root.root.type == bfd_link_hash_undefined
1244 || h->root.root.type == bfd_link_hash_undefweak)
1245 {
1246 const char *name;
1247
1248 /* Use undefined class. Also, set class and type for some
1249 special symbols. */
1250 name = h->root.root.root.string;
1251 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
1252 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
1253 {
1254 h->esym.asym.sc = scData;
1255 h->esym.asym.st = stLabel;
1256 h->esym.asym.value = 0;
1257 }
1258 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
1259 {
1260 h->esym.asym.sc = scAbs;
1261 h->esym.asym.st = stLabel;
1262 h->esym.asym.value =
1263 mips_elf_hash_table (einfo->info)->procedure_count;
1264 }
4a14403c 1265 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
b49e97c9
TS
1266 {
1267 h->esym.asym.sc = scAbs;
1268 h->esym.asym.st = stLabel;
1269 h->esym.asym.value = elf_gp (einfo->abfd);
1270 }
1271 else
1272 h->esym.asym.sc = scUndefined;
1273 }
1274 else if (h->root.root.type != bfd_link_hash_defined
1275 && h->root.root.type != bfd_link_hash_defweak)
1276 h->esym.asym.sc = scAbs;
1277 else
1278 {
1279 const char *name;
1280
1281 sec = h->root.root.u.def.section;
1282 output_section = sec->output_section;
1283
1284 /* When making a shared library and symbol h is the one from
1285 the another shared library, OUTPUT_SECTION may be null. */
1286 if (output_section == NULL)
1287 h->esym.asym.sc = scUndefined;
1288 else
1289 {
1290 name = bfd_section_name (output_section->owner, output_section);
1291
1292 if (strcmp (name, ".text") == 0)
1293 h->esym.asym.sc = scText;
1294 else if (strcmp (name, ".data") == 0)
1295 h->esym.asym.sc = scData;
1296 else if (strcmp (name, ".sdata") == 0)
1297 h->esym.asym.sc = scSData;
1298 else if (strcmp (name, ".rodata") == 0
1299 || strcmp (name, ".rdata") == 0)
1300 h->esym.asym.sc = scRData;
1301 else if (strcmp (name, ".bss") == 0)
1302 h->esym.asym.sc = scBss;
1303 else if (strcmp (name, ".sbss") == 0)
1304 h->esym.asym.sc = scSBss;
1305 else if (strcmp (name, ".init") == 0)
1306 h->esym.asym.sc = scInit;
1307 else if (strcmp (name, ".fini") == 0)
1308 h->esym.asym.sc = scFini;
1309 else
1310 h->esym.asym.sc = scAbs;
1311 }
1312 }
1313
1314 h->esym.asym.reserved = 0;
1315 h->esym.asym.index = indexNil;
1316 }
1317
1318 if (h->root.root.type == bfd_link_hash_common)
1319 h->esym.asym.value = h->root.root.u.c.size;
1320 else if (h->root.root.type == bfd_link_hash_defined
1321 || h->root.root.type == bfd_link_hash_defweak)
1322 {
1323 if (h->esym.asym.sc == scCommon)
1324 h->esym.asym.sc = scBss;
1325 else if (h->esym.asym.sc == scSCommon)
1326 h->esym.asym.sc = scSBss;
1327
1328 sec = h->root.root.u.def.section;
1329 output_section = sec->output_section;
1330 if (output_section != NULL)
1331 h->esym.asym.value = (h->root.root.u.def.value
1332 + sec->output_offset
1333 + output_section->vma);
1334 else
1335 h->esym.asym.value = 0;
1336 }
1337 else if ((h->root.elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
1338 {
1339 struct mips_elf_link_hash_entry *hd = h;
b34976b6 1340 bfd_boolean no_fn_stub = h->no_fn_stub;
b49e97c9
TS
1341
1342 while (hd->root.root.type == bfd_link_hash_indirect)
1343 {
1344 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
1345 no_fn_stub = no_fn_stub || hd->no_fn_stub;
1346 }
1347
1348 if (!no_fn_stub)
1349 {
1350 /* Set type and value for a symbol with a function stub. */
1351 h->esym.asym.st = stProc;
1352 sec = hd->root.root.u.def.section;
1353 if (sec == NULL)
1354 h->esym.asym.value = 0;
1355 else
1356 {
1357 output_section = sec->output_section;
1358 if (output_section != NULL)
1359 h->esym.asym.value = (hd->root.plt.offset
1360 + sec->output_offset
1361 + output_section->vma);
1362 else
1363 h->esym.asym.value = 0;
1364 }
1365#if 0 /* FIXME? */
1366 h->esym.ifd = 0;
1367#endif
1368 }
1369 }
1370
1371 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
1372 h->root.root.root.string,
1373 &h->esym))
1374 {
b34976b6
AM
1375 einfo->failed = TRUE;
1376 return FALSE;
b49e97c9
TS
1377 }
1378
b34976b6 1379 return TRUE;
b49e97c9
TS
1380}
1381
1382/* A comparison routine used to sort .gptab entries. */
1383
1384static int
1385gptab_compare (p1, p2)
1386 const PTR p1;
1387 const PTR p2;
1388{
1389 const Elf32_gptab *a1 = (const Elf32_gptab *) p1;
1390 const Elf32_gptab *a2 = (const Elf32_gptab *) p2;
1391
1392 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
1393}
1394\f
1395/* Returns the GOT section for ABFD. */
1396
1397static asection *
1398mips_elf_got_section (abfd)
1399 bfd *abfd;
1400{
1401 return bfd_get_section_by_name (abfd, ".got");
1402}
1403
1404/* Returns the GOT information associated with the link indicated by
1405 INFO. If SGOTP is non-NULL, it is filled in with the GOT
1406 section. */
1407
1408static struct mips_got_info *
1409mips_elf_got_info (abfd, sgotp)
1410 bfd *abfd;
1411 asection **sgotp;
1412{
1413 asection *sgot;
1414 struct mips_got_info *g;
1415
1416 sgot = mips_elf_got_section (abfd);
1417 BFD_ASSERT (sgot != NULL);
1418 BFD_ASSERT (elf_section_data (sgot) != NULL);
1419 g = (struct mips_got_info *) elf_section_data (sgot)->tdata;
1420 BFD_ASSERT (g != NULL);
1421
1422 if (sgotp)
1423 *sgotp = sgot;
1424 return g;
1425}
1426
1427/* Returns the GOT offset at which the indicated address can be found.
1428 If there is not yet a GOT entry for this value, create one. Returns
1429 -1 if no satisfactory GOT offset can be found. */
1430
1431static bfd_vma
1432mips_elf_local_got_index (abfd, info, value)
1433 bfd *abfd;
1434 struct bfd_link_info *info;
1435 bfd_vma value;
1436{
1437 asection *sgot;
1438 struct mips_got_info *g;
1439 bfd_byte *entry;
1440
1441 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1442
1443 /* Look to see if we already have an appropriate entry. */
1444 for (entry = (sgot->contents
1445 + MIPS_ELF_GOT_SIZE (abfd) * MIPS_RESERVED_GOTNO);
1446 entry != sgot->contents + MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno;
1447 entry += MIPS_ELF_GOT_SIZE (abfd))
1448 {
1449 bfd_vma address = MIPS_ELF_GET_WORD (abfd, entry);
1450 if (address == value)
1451 return entry - sgot->contents;
1452 }
1453
1454 return mips_elf_create_local_got_entry (abfd, g, sgot, value);
1455}
1456
1457/* Returns the GOT index for the global symbol indicated by H. */
1458
1459static bfd_vma
1460mips_elf_global_got_index (abfd, h)
1461 bfd *abfd;
1462 struct elf_link_hash_entry *h;
1463{
1464 bfd_vma index;
1465 asection *sgot;
1466 struct mips_got_info *g;
d0c7ff07 1467 long global_got_dynindx = 0;
b49e97c9
TS
1468
1469 g = mips_elf_got_info (abfd, &sgot);
d0c7ff07
TS
1470 if (g->global_gotsym != NULL)
1471 global_got_dynindx = g->global_gotsym->dynindx;
b49e97c9
TS
1472
1473 /* Once we determine the global GOT entry with the lowest dynamic
1474 symbol table index, we must put all dynamic symbols with greater
1475 indices into the GOT. That makes it easy to calculate the GOT
1476 offset. */
d0c7ff07
TS
1477 BFD_ASSERT (h->dynindx >= global_got_dynindx);
1478 index = ((h->dynindx - global_got_dynindx + g->local_gotno)
b49e97c9
TS
1479 * MIPS_ELF_GOT_SIZE (abfd));
1480 BFD_ASSERT (index < sgot->_raw_size);
1481
1482 return index;
1483}
1484
1485/* Find a GOT entry that is within 32KB of the VALUE. These entries
1486 are supposed to be placed at small offsets in the GOT, i.e.,
1487 within 32KB of GP. Return the index into the GOT for this page,
1488 and store the offset from this entry to the desired address in
1489 OFFSETP, if it is non-NULL. */
1490
1491static bfd_vma
1492mips_elf_got_page (abfd, info, value, offsetp)
1493 bfd *abfd;
1494 struct bfd_link_info *info;
1495 bfd_vma value;
1496 bfd_vma *offsetp;
1497{
1498 asection *sgot;
1499 struct mips_got_info *g;
1500 bfd_byte *entry;
1501 bfd_byte *last_entry;
1502 bfd_vma index = 0;
1503 bfd_vma address;
1504
1505 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1506
44c410de 1507 /* Look to see if we already have an appropriate entry. */
b49e97c9
TS
1508 last_entry = sgot->contents + MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno;
1509 for (entry = (sgot->contents
1510 + MIPS_ELF_GOT_SIZE (abfd) * MIPS_RESERVED_GOTNO);
1511 entry != last_entry;
1512 entry += MIPS_ELF_GOT_SIZE (abfd))
1513 {
1514 address = MIPS_ELF_GET_WORD (abfd, entry);
1515
1516 if (!mips_elf_overflow_p (value - address, 16))
1517 {
1518 /* This entry will serve as the page pointer. We can add a
1519 16-bit number to it to get the actual address. */
1520 index = entry - sgot->contents;
1521 break;
1522 }
1523 }
1524
1525 /* If we didn't have an appropriate entry, we create one now. */
1526 if (entry == last_entry)
1527 index = mips_elf_create_local_got_entry (abfd, g, sgot, value);
1528
1529 if (offsetp)
1530 {
1531 address = MIPS_ELF_GET_WORD (abfd, entry);
1532 *offsetp = value - address;
1533 }
1534
1535 return index;
1536}
1537
1538/* Find a GOT entry whose higher-order 16 bits are the same as those
1539 for value. Return the index into the GOT for this entry. */
1540
1541static bfd_vma
1542mips_elf_got16_entry (abfd, info, value, external)
1543 bfd *abfd;
1544 struct bfd_link_info *info;
1545 bfd_vma value;
b34976b6 1546 bfd_boolean external;
b49e97c9
TS
1547{
1548 asection *sgot;
1549 struct mips_got_info *g;
1550 bfd_byte *entry;
1551 bfd_byte *last_entry;
1552 bfd_vma index = 0;
1553 bfd_vma address;
1554
1555 if (! external)
1556 {
1557 /* Although the ABI says that it is "the high-order 16 bits" that we
1558 want, it is really the %high value. The complete value is
1559 calculated with a `addiu' of a LO16 relocation, just as with a
1560 HI16/LO16 pair. */
1561 value = mips_elf_high (value) << 16;
1562 }
1563
1564 g = mips_elf_got_info (elf_hash_table (info)->dynobj, &sgot);
1565
1566 /* Look to see if we already have an appropriate entry. */
1567 last_entry = sgot->contents + MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno;
1568 for (entry = (sgot->contents
1569 + MIPS_ELF_GOT_SIZE (abfd) * MIPS_RESERVED_GOTNO);
1570 entry != last_entry;
1571 entry += MIPS_ELF_GOT_SIZE (abfd))
1572 {
1573 address = MIPS_ELF_GET_WORD (abfd, entry);
1574 if (address == value)
1575 {
1576 /* This entry has the right high-order 16 bits, and the low-order
1577 16 bits are set to zero. */
1578 index = entry - sgot->contents;
1579 break;
1580 }
1581 }
1582
1583 /* If we didn't have an appropriate entry, we create one now. */
1584 if (entry == last_entry)
1585 index = mips_elf_create_local_got_entry (abfd, g, sgot, value);
1586
1587 return index;
1588}
1589
1590/* Returns the offset for the entry at the INDEXth position
1591 in the GOT. */
1592
1593static bfd_vma
1594mips_elf_got_offset_from_index (dynobj, output_bfd, index)
1595 bfd *dynobj;
1596 bfd *output_bfd;
1597 bfd_vma index;
1598{
1599 asection *sgot;
1600 bfd_vma gp;
1601
1602 sgot = mips_elf_got_section (dynobj);
1603 gp = _bfd_get_gp_value (output_bfd);
1604 return (sgot->output_section->vma + sgot->output_offset + index -
1605 gp);
1606}
1607
1608/* Create a local GOT entry for VALUE. Return the index of the entry,
1609 or -1 if it could not be created. */
1610
1611static bfd_vma
1612mips_elf_create_local_got_entry (abfd, g, sgot, value)
1613 bfd *abfd;
1614 struct mips_got_info *g;
1615 asection *sgot;
1616 bfd_vma value;
1617{
1618 if (g->assigned_gotno >= g->local_gotno)
1619 {
1620 /* We didn't allocate enough space in the GOT. */
1621 (*_bfd_error_handler)
1622 (_("not enough GOT space for local GOT entries"));
1623 bfd_set_error (bfd_error_bad_value);
1624 return (bfd_vma) -1;
1625 }
1626
1627 MIPS_ELF_PUT_WORD (abfd, value,
1628 (sgot->contents
1629 + MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno));
1630 return MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
1631}
1632
1633/* Sort the dynamic symbol table so that symbols that need GOT entries
1634 appear towards the end. This reduces the amount of GOT space
1635 required. MAX_LOCAL is used to set the number of local symbols
1636 known to be in the dynamic symbol table. During
1637 _bfd_mips_elf_size_dynamic_sections, this value is 1. Afterward, the
1638 section symbols are added and the count is higher. */
1639
b34976b6 1640static bfd_boolean
b49e97c9
TS
1641mips_elf_sort_hash_table (info, max_local)
1642 struct bfd_link_info *info;
1643 unsigned long max_local;
1644{
1645 struct mips_elf_hash_sort_data hsd;
1646 struct mips_got_info *g;
1647 bfd *dynobj;
1648
1649 dynobj = elf_hash_table (info)->dynobj;
1650
1651 hsd.low = NULL;
1652 hsd.min_got_dynindx = elf_hash_table (info)->dynsymcount;
1653 hsd.max_non_got_dynindx = max_local;
1654 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
1655 elf_hash_table (info)),
1656 mips_elf_sort_hash_table_f,
1657 &hsd);
1658
1659 /* There should have been enough room in the symbol table to
44c410de 1660 accommodate both the GOT and non-GOT symbols. */
b49e97c9
TS
1661 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
1662
1663 /* Now we know which dynamic symbol has the lowest dynamic symbol
1664 table index in the GOT. */
1665 g = mips_elf_got_info (dynobj, NULL);
1666 g->global_gotsym = hsd.low;
1667
b34976b6 1668 return TRUE;
b49e97c9
TS
1669}
1670
1671/* If H needs a GOT entry, assign it the highest available dynamic
1672 index. Otherwise, assign it the lowest available dynamic
1673 index. */
1674
b34976b6 1675static bfd_boolean
b49e97c9
TS
1676mips_elf_sort_hash_table_f (h, data)
1677 struct mips_elf_link_hash_entry *h;
1678 PTR data;
1679{
1680 struct mips_elf_hash_sort_data *hsd
1681 = (struct mips_elf_hash_sort_data *) data;
1682
1683 if (h->root.root.type == bfd_link_hash_warning)
1684 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1685
1686 /* Symbols without dynamic symbol table entries aren't interesting
1687 at all. */
1688 if (h->root.dynindx == -1)
b34976b6 1689 return TRUE;
b49e97c9
TS
1690
1691 if (h->root.got.offset != 1)
1692 h->root.dynindx = hsd->max_non_got_dynindx++;
1693 else
1694 {
1695 h->root.dynindx = --hsd->min_got_dynindx;
1696 hsd->low = (struct elf_link_hash_entry *) h;
1697 }
1698
b34976b6 1699 return TRUE;
b49e97c9
TS
1700}
1701
1702/* If H is a symbol that needs a global GOT entry, but has a dynamic
1703 symbol table index lower than any we've seen to date, record it for
1704 posterity. */
1705
b34976b6 1706static bfd_boolean
b49e97c9
TS
1707mips_elf_record_global_got_symbol (h, info, g)
1708 struct elf_link_hash_entry *h;
1709 struct bfd_link_info *info;
1710 struct mips_got_info *g ATTRIBUTE_UNUSED;
1711{
1712 /* A global symbol in the GOT must also be in the dynamic symbol
1713 table. */
7c5fcef7
L
1714 if (h->dynindx == -1)
1715 {
1716 switch (ELF_ST_VISIBILITY (h->other))
1717 {
1718 case STV_INTERNAL:
1719 case STV_HIDDEN:
b34976b6 1720 _bfd_mips_elf_hide_symbol (info, h, TRUE);
7c5fcef7
L
1721 break;
1722 }
1723 if (!bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 1724 return FALSE;
7c5fcef7 1725 }
b49e97c9
TS
1726
1727 /* If we've already marked this entry as needing GOT space, we don't
1728 need to do it again. */
1729 if (h->got.offset != MINUS_ONE)
b34976b6 1730 return TRUE;
b49e97c9
TS
1731
1732 /* By setting this to a value other than -1, we are indicating that
1733 there needs to be a GOT entry for H. Avoid using zero, as the
1734 generic ELF copy_indirect_symbol tests for <= 0. */
1735 h->got.offset = 1;
1736
b34976b6 1737 return TRUE;
b49e97c9
TS
1738}
1739\f
1740/* Returns the first relocation of type r_type found, beginning with
1741 RELOCATION. RELEND is one-past-the-end of the relocation table. */
1742
1743static const Elf_Internal_Rela *
1744mips_elf_next_relocation (abfd, r_type, relocation, relend)
1745 bfd *abfd ATTRIBUTE_UNUSED;
1746 unsigned int r_type;
1747 const Elf_Internal_Rela *relocation;
1748 const Elf_Internal_Rela *relend;
1749{
1750 /* According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must be
1751 immediately following. However, for the IRIX6 ABI, the next
1752 relocation may be a composed relocation consisting of several
1753 relocations for the same address. In that case, the R_MIPS_LO16
1754 relocation may occur as one of these. We permit a similar
1755 extension in general, as that is useful for GCC. */
1756 while (relocation < relend)
1757 {
1758 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type)
1759 return relocation;
1760
1761 ++relocation;
1762 }
1763
1764 /* We didn't find it. */
1765 bfd_set_error (bfd_error_bad_value);
1766 return NULL;
1767}
1768
1769/* Return whether a relocation is against a local symbol. */
1770
b34976b6 1771static bfd_boolean
b49e97c9
TS
1772mips_elf_local_relocation_p (input_bfd, relocation, local_sections,
1773 check_forced)
1774 bfd *input_bfd;
1775 const Elf_Internal_Rela *relocation;
1776 asection **local_sections;
b34976b6 1777 bfd_boolean check_forced;
b49e97c9
TS
1778{
1779 unsigned long r_symndx;
1780 Elf_Internal_Shdr *symtab_hdr;
1781 struct mips_elf_link_hash_entry *h;
1782 size_t extsymoff;
1783
1784 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
1785 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
1786 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
1787
1788 if (r_symndx < extsymoff)
b34976b6 1789 return TRUE;
b49e97c9 1790 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
b34976b6 1791 return TRUE;
b49e97c9
TS
1792
1793 if (check_forced)
1794 {
1795 /* Look up the hash table to check whether the symbol
1796 was forced local. */
1797 h = (struct mips_elf_link_hash_entry *)
1798 elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
1799 /* Find the real hash-table entry for this symbol. */
1800 while (h->root.root.type == bfd_link_hash_indirect
1801 || h->root.root.type == bfd_link_hash_warning)
1802 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
1803 if ((h->root.elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0)
b34976b6 1804 return TRUE;
b49e97c9
TS
1805 }
1806
b34976b6 1807 return FALSE;
b49e97c9
TS
1808}
1809\f
1810/* Sign-extend VALUE, which has the indicated number of BITS. */
1811
1812static bfd_vma
1813mips_elf_sign_extend (value, bits)
1814 bfd_vma value;
1815 int bits;
1816{
1817 if (value & ((bfd_vma) 1 << (bits - 1)))
1818 /* VALUE is negative. */
1819 value |= ((bfd_vma) - 1) << bits;
1820
1821 return value;
1822}
1823
1824/* Return non-zero if the indicated VALUE has overflowed the maximum
1825 range expressable by a signed number with the indicated number of
1826 BITS. */
1827
b34976b6 1828static bfd_boolean
b49e97c9
TS
1829mips_elf_overflow_p (value, bits)
1830 bfd_vma value;
1831 int bits;
1832{
1833 bfd_signed_vma svalue = (bfd_signed_vma) value;
1834
1835 if (svalue > (1 << (bits - 1)) - 1)
1836 /* The value is too big. */
b34976b6 1837 return TRUE;
b49e97c9
TS
1838 else if (svalue < -(1 << (bits - 1)))
1839 /* The value is too small. */
b34976b6 1840 return TRUE;
b49e97c9
TS
1841
1842 /* All is well. */
b34976b6 1843 return FALSE;
b49e97c9
TS
1844}
1845
1846/* Calculate the %high function. */
1847
1848static bfd_vma
1849mips_elf_high (value)
1850 bfd_vma value;
1851{
1852 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
1853}
1854
1855/* Calculate the %higher function. */
1856
1857static bfd_vma
1858mips_elf_higher (value)
1859 bfd_vma value ATTRIBUTE_UNUSED;
1860{
1861#ifdef BFD64
1862 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
1863#else
1864 abort ();
1865 return (bfd_vma) -1;
1866#endif
1867}
1868
1869/* Calculate the %highest function. */
1870
1871static bfd_vma
1872mips_elf_highest (value)
1873 bfd_vma value ATTRIBUTE_UNUSED;
1874{
1875#ifdef BFD64
1876 return ((value + (bfd_vma) 0x800080008000) >> 48) & 0xffff;
1877#else
1878 abort ();
1879 return (bfd_vma) -1;
1880#endif
1881}
1882\f
1883/* Create the .compact_rel section. */
1884
b34976b6 1885static bfd_boolean
b49e97c9
TS
1886mips_elf_create_compact_rel_section (abfd, info)
1887 bfd *abfd;
1888 struct bfd_link_info *info ATTRIBUTE_UNUSED;
1889{
1890 flagword flags;
1891 register asection *s;
1892
1893 if (bfd_get_section_by_name (abfd, ".compact_rel") == NULL)
1894 {
1895 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
1896 | SEC_READONLY);
1897
1898 s = bfd_make_section (abfd, ".compact_rel");
1899 if (s == NULL
1900 || ! bfd_set_section_flags (abfd, s, flags)
1901 || ! bfd_set_section_alignment (abfd, s,
1902 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 1903 return FALSE;
b49e97c9
TS
1904
1905 s->_raw_size = sizeof (Elf32_External_compact_rel);
1906 }
1907
b34976b6 1908 return TRUE;
b49e97c9
TS
1909}
1910
1911/* Create the .got section to hold the global offset table. */
1912
b34976b6 1913static bfd_boolean
b49e97c9
TS
1914mips_elf_create_got_section (abfd, info)
1915 bfd *abfd;
1916 struct bfd_link_info *info;
1917{
1918 flagword flags;
1919 register asection *s;
1920 struct elf_link_hash_entry *h;
14a793b2 1921 struct bfd_link_hash_entry *bh;
b49e97c9
TS
1922 struct mips_got_info *g;
1923 bfd_size_type amt;
1924
1925 /* This function may be called more than once. */
1926 if (mips_elf_got_section (abfd))
b34976b6 1927 return TRUE;
b49e97c9
TS
1928
1929 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
1930 | SEC_LINKER_CREATED);
1931
1932 s = bfd_make_section (abfd, ".got");
1933 if (s == NULL
1934 || ! bfd_set_section_flags (abfd, s, flags)
1935 || ! bfd_set_section_alignment (abfd, s, 4))
b34976b6 1936 return FALSE;
b49e97c9
TS
1937
1938 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
1939 linker script because we don't want to define the symbol if we
1940 are not creating a global offset table. */
14a793b2 1941 bh = NULL;
b49e97c9
TS
1942 if (! (_bfd_generic_link_add_one_symbol
1943 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
b34976b6 1944 (bfd_vma) 0, (const char *) NULL, FALSE,
14a793b2 1945 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 1946 return FALSE;
14a793b2
AM
1947
1948 h = (struct elf_link_hash_entry *) bh;
b49e97c9
TS
1949 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
1950 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
1951 h->type = STT_OBJECT;
1952
1953 if (info->shared
1954 && ! bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 1955 return FALSE;
b49e97c9
TS
1956
1957 /* The first several global offset table entries are reserved. */
1958 s->_raw_size = MIPS_RESERVED_GOTNO * MIPS_ELF_GOT_SIZE (abfd);
1959
1960 amt = sizeof (struct mips_got_info);
1961 g = (struct mips_got_info *) bfd_alloc (abfd, amt);
1962 if (g == NULL)
b34976b6 1963 return FALSE;
b49e97c9
TS
1964 g->global_gotsym = NULL;
1965 g->local_gotno = MIPS_RESERVED_GOTNO;
1966 g->assigned_gotno = MIPS_RESERVED_GOTNO;
1967 if (elf_section_data (s) == NULL)
1968 {
1969 amt = sizeof (struct bfd_elf_section_data);
1970 s->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
1971 if (elf_section_data (s) == NULL)
b34976b6 1972 return FALSE;
b49e97c9
TS
1973 }
1974 elf_section_data (s)->tdata = (PTR) g;
1975 elf_section_data (s)->this_hdr.sh_flags
1976 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
1977
b34976b6 1978 return TRUE;
b49e97c9
TS
1979}
1980
1981/* Returns the .msym section for ABFD, creating it if it does not
1982 already exist. Returns NULL to indicate error. */
1983
1984static asection *
1985mips_elf_create_msym_section (abfd)
1986 bfd *abfd;
1987{
1988 asection *s;
1989
1990 s = bfd_get_section_by_name (abfd, ".msym");
1991 if (!s)
1992 {
1993 s = bfd_make_section (abfd, ".msym");
1994 if (!s
1995 || !bfd_set_section_flags (abfd, s,
1996 SEC_ALLOC
1997 | SEC_LOAD
1998 | SEC_HAS_CONTENTS
1999 | SEC_LINKER_CREATED
2000 | SEC_READONLY)
2001 || !bfd_set_section_alignment (abfd, s,
2002 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
2003 return NULL;
2004 }
2005
2006 return s;
2007}
2008\f
2009/* Calculate the value produced by the RELOCATION (which comes from
2010 the INPUT_BFD). The ADDEND is the addend to use for this
2011 RELOCATION; RELOCATION->R_ADDEND is ignored.
2012
2013 The result of the relocation calculation is stored in VALUEP.
2014 REQUIRE_JALXP indicates whether or not the opcode used with this
2015 relocation must be JALX.
2016
2017 This function returns bfd_reloc_continue if the caller need take no
2018 further action regarding this relocation, bfd_reloc_notsupported if
2019 something goes dramatically wrong, bfd_reloc_overflow if an
2020 overflow occurs, and bfd_reloc_ok to indicate success. */
2021
2022static bfd_reloc_status_type
2023mips_elf_calculate_relocation (abfd, input_bfd, input_section, info,
2024 relocation, addend, howto, local_syms,
2025 local_sections, valuep, namep,
bce03d3d 2026 require_jalxp, save_addend)
b49e97c9
TS
2027 bfd *abfd;
2028 bfd *input_bfd;
2029 asection *input_section;
2030 struct bfd_link_info *info;
2031 const Elf_Internal_Rela *relocation;
2032 bfd_vma addend;
2033 reloc_howto_type *howto;
2034 Elf_Internal_Sym *local_syms;
2035 asection **local_sections;
2036 bfd_vma *valuep;
2037 const char **namep;
b34976b6
AM
2038 bfd_boolean *require_jalxp;
2039 bfd_boolean save_addend;
b49e97c9
TS
2040{
2041 /* The eventual value we will return. */
2042 bfd_vma value;
2043 /* The address of the symbol against which the relocation is
2044 occurring. */
2045 bfd_vma symbol = 0;
2046 /* The final GP value to be used for the relocatable, executable, or
2047 shared object file being produced. */
2048 bfd_vma gp = MINUS_ONE;
2049 /* The place (section offset or address) of the storage unit being
2050 relocated. */
2051 bfd_vma p;
2052 /* The value of GP used to create the relocatable object. */
2053 bfd_vma gp0 = MINUS_ONE;
2054 /* The offset into the global offset table at which the address of
2055 the relocation entry symbol, adjusted by the addend, resides
2056 during execution. */
2057 bfd_vma g = MINUS_ONE;
2058 /* The section in which the symbol referenced by the relocation is
2059 located. */
2060 asection *sec = NULL;
2061 struct mips_elf_link_hash_entry *h = NULL;
b34976b6 2062 /* TRUE if the symbol referred to by this relocation is a local
b49e97c9 2063 symbol. */
b34976b6
AM
2064 bfd_boolean local_p, was_local_p;
2065 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
2066 bfd_boolean gp_disp_p = FALSE;
b49e97c9
TS
2067 Elf_Internal_Shdr *symtab_hdr;
2068 size_t extsymoff;
2069 unsigned long r_symndx;
2070 int r_type;
b34976b6 2071 /* TRUE if overflow occurred during the calculation of the
b49e97c9 2072 relocation value. */
b34976b6
AM
2073 bfd_boolean overflowed_p;
2074 /* TRUE if this relocation refers to a MIPS16 function. */
2075 bfd_boolean target_is_16_bit_code_p = FALSE;
b49e97c9
TS
2076
2077 /* Parse the relocation. */
2078 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
2079 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
2080 p = (input_section->output_section->vma
2081 + input_section->output_offset
2082 + relocation->r_offset);
2083
2084 /* Assume that there will be no overflow. */
b34976b6 2085 overflowed_p = FALSE;
b49e97c9
TS
2086
2087 /* Figure out whether or not the symbol is local, and get the offset
2088 used in the array of hash table entries. */
2089 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
2090 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
b34976b6 2091 local_sections, FALSE);
bce03d3d 2092 was_local_p = local_p;
b49e97c9
TS
2093 if (! elf_bad_symtab (input_bfd))
2094 extsymoff = symtab_hdr->sh_info;
2095 else
2096 {
2097 /* The symbol table does not follow the rule that local symbols
2098 must come before globals. */
2099 extsymoff = 0;
2100 }
2101
2102 /* Figure out the value of the symbol. */
2103 if (local_p)
2104 {
2105 Elf_Internal_Sym *sym;
2106
2107 sym = local_syms + r_symndx;
2108 sec = local_sections[r_symndx];
2109
2110 symbol = sec->output_section->vma + sec->output_offset;
d4df96e6
L
2111 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
2112 || (sec->flags & SEC_MERGE))
b49e97c9 2113 symbol += sym->st_value;
d4df96e6
L
2114 if ((sec->flags & SEC_MERGE)
2115 && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
2116 {
2117 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
2118 addend -= symbol;
2119 addend += sec->output_section->vma + sec->output_offset;
2120 }
b49e97c9
TS
2121
2122 /* MIPS16 text labels should be treated as odd. */
2123 if (sym->st_other == STO_MIPS16)
2124 ++symbol;
2125
2126 /* Record the name of this symbol, for our caller. */
2127 *namep = bfd_elf_string_from_elf_section (input_bfd,
2128 symtab_hdr->sh_link,
2129 sym->st_name);
2130 if (*namep == '\0')
2131 *namep = bfd_section_name (input_bfd, sec);
2132
2133 target_is_16_bit_code_p = (sym->st_other == STO_MIPS16);
2134 }
2135 else
2136 {
2137 /* For global symbols we look up the symbol in the hash-table. */
2138 h = ((struct mips_elf_link_hash_entry *)
2139 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
2140 /* Find the real hash-table entry for this symbol. */
2141 while (h->root.root.type == bfd_link_hash_indirect
2142 || h->root.root.type == bfd_link_hash_warning)
2143 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
2144
2145 /* Record the name of this symbol, for our caller. */
2146 *namep = h->root.root.root.string;
2147
2148 /* See if this is the special _gp_disp symbol. Note that such a
2149 symbol must always be a global symbol. */
2150 if (strcmp (h->root.root.root.string, "_gp_disp") == 0
2151 && ! NEWABI_P (input_bfd))
2152 {
2153 /* Relocations against _gp_disp are permitted only with
2154 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
2155 if (r_type != R_MIPS_HI16 && r_type != R_MIPS_LO16)
2156 return bfd_reloc_notsupported;
2157
b34976b6 2158 gp_disp_p = TRUE;
b49e97c9
TS
2159 }
2160 /* If this symbol is defined, calculate its address. Note that
2161 _gp_disp is a magic symbol, always implicitly defined by the
2162 linker, so it's inappropriate to check to see whether or not
2163 its defined. */
2164 else if ((h->root.root.type == bfd_link_hash_defined
2165 || h->root.root.type == bfd_link_hash_defweak)
2166 && h->root.root.u.def.section)
2167 {
2168 sec = h->root.root.u.def.section;
2169 if (sec->output_section)
2170 symbol = (h->root.root.u.def.value
2171 + sec->output_section->vma
2172 + sec->output_offset);
2173 else
2174 symbol = h->root.root.u.def.value;
2175 }
2176 else if (h->root.root.type == bfd_link_hash_undefweak)
2177 /* We allow relocations against undefined weak symbols, giving
2178 it the value zero, so that you can undefined weak functions
2179 and check to see if they exist by looking at their
2180 addresses. */
2181 symbol = 0;
2182 else if (info->shared
2183 && (!info->symbolic || info->allow_shlib_undefined)
2184 && !info->no_undefined
2185 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
2186 symbol = 0;
2187 else if (strcmp (h->root.root.root.string, "_DYNAMIC_LINK") == 0 ||
2188 strcmp (h->root.root.root.string, "_DYNAMIC_LINKING") == 0)
2189 {
2190 /* If this is a dynamic link, we should have created a
2191 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
2192 in in _bfd_mips_elf_create_dynamic_sections.
2193 Otherwise, we should define the symbol with a value of 0.
2194 FIXME: It should probably get into the symbol table
2195 somehow as well. */
2196 BFD_ASSERT (! info->shared);
2197 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
2198 symbol = 0;
2199 }
2200 else
2201 {
2202 if (! ((*info->callbacks->undefined_symbol)
2203 (info, h->root.root.root.string, input_bfd,
2204 input_section, relocation->r_offset,
2205 (!info->shared || info->no_undefined
2206 || ELF_ST_VISIBILITY (h->root.other)))))
2207 return bfd_reloc_undefined;
2208 symbol = 0;
2209 }
2210
2211 target_is_16_bit_code_p = (h->root.other == STO_MIPS16);
2212 }
2213
2214 /* If this is a 32- or 64-bit call to a 16-bit function with a stub, we
2215 need to redirect the call to the stub, unless we're already *in*
2216 a stub. */
2217 if (r_type != R_MIPS16_26 && !info->relocateable
2218 && ((h != NULL && h->fn_stub != NULL)
2219 || (local_p && elf_tdata (input_bfd)->local_stubs != NULL
2220 && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
2221 && !mips_elf_stub_section_p (input_bfd, input_section))
2222 {
2223 /* This is a 32- or 64-bit call to a 16-bit function. We should
2224 have already noticed that we were going to need the
2225 stub. */
2226 if (local_p)
2227 sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
2228 else
2229 {
2230 BFD_ASSERT (h->need_fn_stub);
2231 sec = h->fn_stub;
2232 }
2233
2234 symbol = sec->output_section->vma + sec->output_offset;
2235 }
2236 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
2237 need to redirect the call to the stub. */
2238 else if (r_type == R_MIPS16_26 && !info->relocateable
2239 && h != NULL
2240 && (h->call_stub != NULL || h->call_fp_stub != NULL)
2241 && !target_is_16_bit_code_p)
2242 {
2243 /* If both call_stub and call_fp_stub are defined, we can figure
2244 out which one to use by seeing which one appears in the input
2245 file. */
2246 if (h->call_stub != NULL && h->call_fp_stub != NULL)
2247 {
2248 asection *o;
2249
2250 sec = NULL;
2251 for (o = input_bfd->sections; o != NULL; o = o->next)
2252 {
2253 if (strncmp (bfd_get_section_name (input_bfd, o),
2254 CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
2255 {
2256 sec = h->call_fp_stub;
2257 break;
2258 }
2259 }
2260 if (sec == NULL)
2261 sec = h->call_stub;
2262 }
2263 else if (h->call_stub != NULL)
2264 sec = h->call_stub;
2265 else
2266 sec = h->call_fp_stub;
2267
2268 BFD_ASSERT (sec->_raw_size > 0);
2269 symbol = sec->output_section->vma + sec->output_offset;
2270 }
2271
2272 /* Calls from 16-bit code to 32-bit code and vice versa require the
2273 special jalx instruction. */
2274 *require_jalxp = (!info->relocateable
2275 && (((r_type == R_MIPS16_26) && !target_is_16_bit_code_p)
2276 || ((r_type == R_MIPS_26) && target_is_16_bit_code_p)));
2277
2278 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
b34976b6 2279 local_sections, TRUE);
b49e97c9
TS
2280
2281 /* If we haven't already determined the GOT offset, or the GP value,
2282 and we're going to need it, get it now. */
2283 switch (r_type)
2284 {
2285 case R_MIPS_CALL16:
2286 case R_MIPS_GOT16:
2287 case R_MIPS_GOT_DISP:
2288 case R_MIPS_GOT_HI16:
2289 case R_MIPS_CALL_HI16:
2290 case R_MIPS_GOT_LO16:
2291 case R_MIPS_CALL_LO16:
2292 /* Find the index into the GOT where this value is located. */
2293 if (!local_p)
2294 {
2295 BFD_ASSERT (addend == 0);
2296 g = mips_elf_global_got_index (elf_hash_table (info)->dynobj,
2297 (struct elf_link_hash_entry *) h);
2298 if (! elf_hash_table(info)->dynamic_sections_created
2299 || (info->shared
2300 && (info->symbolic || h->root.dynindx == -1)
2301 && (h->root.elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR)))
2302 {
2303 /* This is a static link or a -Bsymbolic link. The
2304 symbol is defined locally, or was forced to be local.
2305 We must initialize this entry in the GOT. */
2306 bfd *tmpbfd = elf_hash_table (info)->dynobj;
2307 asection *sgot = mips_elf_got_section(tmpbfd);
2308 MIPS_ELF_PUT_WORD (tmpbfd, symbol + addend, sgot->contents + g);
2309 }
2310 }
2311 else if (r_type == R_MIPS_GOT16 || r_type == R_MIPS_CALL16)
2312 /* There's no need to create a local GOT entry here; the
2313 calculation for a local GOT16 entry does not involve G. */
2314 break;
2315 else
2316 {
2317 g = mips_elf_local_got_index (abfd, info, symbol + addend);
2318 if (g == MINUS_ONE)
2319 return bfd_reloc_outofrange;
2320 }
2321
2322 /* Convert GOT indices to actual offsets. */
2323 g = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
2324 abfd, g);
2325 break;
2326
2327 case R_MIPS_HI16:
2328 case R_MIPS_LO16:
2329 case R_MIPS16_GPREL:
2330 case R_MIPS_GPREL16:
2331 case R_MIPS_GPREL32:
2332 case R_MIPS_LITERAL:
2333 gp0 = _bfd_get_gp_value (input_bfd);
2334 gp = _bfd_get_gp_value (abfd);
2335 break;
2336
2337 default:
2338 break;
2339 }
2340
2341 /* Figure out what kind of relocation is being performed. */
2342 switch (r_type)
2343 {
2344 case R_MIPS_NONE:
2345 return bfd_reloc_continue;
2346
2347 case R_MIPS_16:
2348 value = symbol + mips_elf_sign_extend (addend, 16);
2349 overflowed_p = mips_elf_overflow_p (value, 16);
2350 break;
2351
2352 case R_MIPS_32:
2353 case R_MIPS_REL32:
2354 case R_MIPS_64:
2355 if ((info->shared
2356 || (elf_hash_table (info)->dynamic_sections_created
2357 && h != NULL
2358 && ((h->root.elf_link_hash_flags
2359 & ELF_LINK_HASH_DEF_DYNAMIC) != 0)
2360 && ((h->root.elf_link_hash_flags
2361 & ELF_LINK_HASH_DEF_REGULAR) == 0)))
2362 && r_symndx != 0
2363 && (input_section->flags & SEC_ALLOC) != 0)
2364 {
2365 /* If we're creating a shared library, or this relocation is
2366 against a symbol in a shared library, then we can't know
2367 where the symbol will end up. So, we create a relocation
2368 record in the output, and leave the job up to the dynamic
2369 linker. */
2370 value = addend;
2371 if (!mips_elf_create_dynamic_relocation (abfd,
2372 info,
2373 relocation,
2374 h,
2375 sec,
2376 symbol,
2377 &value,
2378 input_section))
2379 return bfd_reloc_undefined;
2380 }
2381 else
2382 {
2383 if (r_type != R_MIPS_REL32)
2384 value = symbol + addend;
2385 else
2386 value = addend;
2387 }
2388 value &= howto->dst_mask;
2389 break;
2390
2391 case R_MIPS_PC32:
2392 case R_MIPS_PC64:
2393 case R_MIPS_GNU_REL_LO16:
2394 value = symbol + addend - p;
2395 value &= howto->dst_mask;
2396 break;
2397
2398 case R_MIPS_GNU_REL16_S2:
2399 value = symbol + mips_elf_sign_extend (addend << 2, 18) - p;
2400 overflowed_p = mips_elf_overflow_p (value, 18);
2401 value = (value >> 2) & howto->dst_mask;
2402 break;
2403
2404 case R_MIPS_GNU_REL_HI16:
2405 /* Instead of subtracting 'p' here, we should be subtracting the
2406 equivalent value for the LO part of the reloc, since the value
2407 here is relative to that address. Because that's not easy to do,
2408 we adjust 'addend' in _bfd_mips_elf_relocate_section(). See also
2409 the comment there for more information. */
2410 value = mips_elf_high (addend + symbol - p);
2411 value &= howto->dst_mask;
2412 break;
2413
2414 case R_MIPS16_26:
2415 /* The calculation for R_MIPS16_26 is just the same as for an
2416 R_MIPS_26. It's only the storage of the relocated field into
2417 the output file that's different. That's handled in
2418 mips_elf_perform_relocation. So, we just fall through to the
2419 R_MIPS_26 case here. */
2420 case R_MIPS_26:
2421 if (local_p)
2422 value = (((addend << 2) | ((p + 4) & 0xf0000000)) + symbol) >> 2;
2423 else
2424 value = (mips_elf_sign_extend (addend << 2, 28) + symbol) >> 2;
2425 value &= howto->dst_mask;
2426 break;
2427
2428 case R_MIPS_HI16:
2429 if (!gp_disp_p)
2430 {
2431 value = mips_elf_high (addend + symbol);
2432 value &= howto->dst_mask;
2433 }
2434 else
2435 {
2436 value = mips_elf_high (addend + gp - p);
2437 overflowed_p = mips_elf_overflow_p (value, 16);
2438 }
2439 break;
2440
2441 case R_MIPS_LO16:
2442 if (!gp_disp_p)
2443 value = (symbol + addend) & howto->dst_mask;
2444 else
2445 {
2446 value = addend + gp - p + 4;
2447 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
8dc1a139 2448 for overflow. But, on, say, IRIX5, relocations against
b49e97c9
TS
2449 _gp_disp are normally generated from the .cpload
2450 pseudo-op. It generates code that normally looks like
2451 this:
2452
2453 lui $gp,%hi(_gp_disp)
2454 addiu $gp,$gp,%lo(_gp_disp)
2455 addu $gp,$gp,$t9
2456
2457 Here $t9 holds the address of the function being called,
2458 as required by the MIPS ELF ABI. The R_MIPS_LO16
2459 relocation can easily overflow in this situation, but the
2460 R_MIPS_HI16 relocation will handle the overflow.
2461 Therefore, we consider this a bug in the MIPS ABI, and do
2462 not check for overflow here. */
2463 }
2464 break;
2465
2466 case R_MIPS_LITERAL:
2467 /* Because we don't merge literal sections, we can handle this
2468 just like R_MIPS_GPREL16. In the long run, we should merge
2469 shared literals, and then we will need to additional work
2470 here. */
2471
2472 /* Fall through. */
2473
2474 case R_MIPS16_GPREL:
2475 /* The R_MIPS16_GPREL performs the same calculation as
2476 R_MIPS_GPREL16, but stores the relocated bits in a different
2477 order. We don't need to do anything special here; the
2478 differences are handled in mips_elf_perform_relocation. */
2479 case R_MIPS_GPREL16:
bce03d3d
AO
2480 /* Only sign-extend the addend if it was extracted from the
2481 instruction. If the addend was separate, leave it alone,
2482 otherwise we may lose significant bits. */
2483 if (howto->partial_inplace)
2484 addend = mips_elf_sign_extend (addend, 16);
2485 value = symbol + addend - gp;
2486 /* If the symbol was local, any earlier relocatable links will
2487 have adjusted its addend with the gp offset, so compensate
2488 for that now. Don't do it for symbols forced local in this
2489 link, though, since they won't have had the gp offset applied
2490 to them before. */
2491 if (was_local_p)
2492 value += gp0;
b49e97c9
TS
2493 overflowed_p = mips_elf_overflow_p (value, 16);
2494 break;
2495
2496 case R_MIPS_GOT16:
2497 case R_MIPS_CALL16:
2498 if (local_p)
2499 {
b34976b6 2500 bfd_boolean forced;
b49e97c9
TS
2501
2502 /* The special case is when the symbol is forced to be local. We
2503 need the full address in the GOT since no R_MIPS_LO16 relocation
2504 follows. */
2505 forced = ! mips_elf_local_relocation_p (input_bfd, relocation,
b34976b6 2506 local_sections, FALSE);
b49e97c9
TS
2507 value = mips_elf_got16_entry (abfd, info, symbol + addend, forced);
2508 if (value == MINUS_ONE)
2509 return bfd_reloc_outofrange;
2510 value
2511 = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
4a14403c 2512 abfd, value);
b49e97c9
TS
2513 overflowed_p = mips_elf_overflow_p (value, 16);
2514 break;
2515 }
2516
2517 /* Fall through. */
2518
2519 case R_MIPS_GOT_DISP:
2520 value = g;
2521 overflowed_p = mips_elf_overflow_p (value, 16);
2522 break;
2523
2524 case R_MIPS_GPREL32:
bce03d3d
AO
2525 value = (addend + symbol + gp0 - gp);
2526 if (!save_addend)
2527 value &= howto->dst_mask;
b49e97c9
TS
2528 break;
2529
2530 case R_MIPS_PC16:
2531 value = mips_elf_sign_extend (addend, 16) + symbol - p;
2532 overflowed_p = mips_elf_overflow_p (value, 16);
2533 value = (bfd_vma) ((bfd_signed_vma) value / 4);
2534 break;
2535
2536 case R_MIPS_GOT_HI16:
2537 case R_MIPS_CALL_HI16:
2538 /* We're allowed to handle these two relocations identically.
2539 The dynamic linker is allowed to handle the CALL relocations
2540 differently by creating a lazy evaluation stub. */
2541 value = g;
2542 value = mips_elf_high (value);
2543 value &= howto->dst_mask;
2544 break;
2545
2546 case R_MIPS_GOT_LO16:
2547 case R_MIPS_CALL_LO16:
2548 value = g & howto->dst_mask;
2549 break;
2550
2551 case R_MIPS_GOT_PAGE:
2552 value = mips_elf_got_page (abfd, info, symbol + addend, NULL);
2553 if (value == MINUS_ONE)
2554 return bfd_reloc_outofrange;
2555 value = mips_elf_got_offset_from_index (elf_hash_table (info)->dynobj,
4a14403c 2556 abfd, value);
b49e97c9
TS
2557 overflowed_p = mips_elf_overflow_p (value, 16);
2558 break;
2559
2560 case R_MIPS_GOT_OFST:
2561 mips_elf_got_page (abfd, info, symbol + addend, &value);
2562 overflowed_p = mips_elf_overflow_p (value, 16);
2563 break;
2564
2565 case R_MIPS_SUB:
2566 value = symbol - addend;
2567 value &= howto->dst_mask;
2568 break;
2569
2570 case R_MIPS_HIGHER:
2571 value = mips_elf_higher (addend + symbol);
2572 value &= howto->dst_mask;
2573 break;
2574
2575 case R_MIPS_HIGHEST:
2576 value = mips_elf_highest (addend + symbol);
2577 value &= howto->dst_mask;
2578 break;
2579
2580 case R_MIPS_SCN_DISP:
2581 value = symbol + addend - sec->output_offset;
2582 value &= howto->dst_mask;
2583 break;
2584
2585 case R_MIPS_PJUMP:
2586 case R_MIPS_JALR:
2587 /* Both of these may be ignored. R_MIPS_JALR is an optimization
2588 hint; we could improve performance by honoring that hint. */
2589 return bfd_reloc_continue;
2590
2591 case R_MIPS_GNU_VTINHERIT:
2592 case R_MIPS_GNU_VTENTRY:
2593 /* We don't do anything with these at present. */
2594 return bfd_reloc_continue;
2595
2596 default:
2597 /* An unrecognized relocation type. */
2598 return bfd_reloc_notsupported;
2599 }
2600
2601 /* Store the VALUE for our caller. */
2602 *valuep = value;
2603 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
2604}
2605
2606/* Obtain the field relocated by RELOCATION. */
2607
2608static bfd_vma
2609mips_elf_obtain_contents (howto, relocation, input_bfd, contents)
2610 reloc_howto_type *howto;
2611 const Elf_Internal_Rela *relocation;
2612 bfd *input_bfd;
2613 bfd_byte *contents;
2614{
2615 bfd_vma x;
2616 bfd_byte *location = contents + relocation->r_offset;
2617
2618 /* Obtain the bytes. */
2619 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
2620
2621 if ((ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_26
2622 || ELF_R_TYPE (input_bfd, relocation->r_info) == R_MIPS16_GPREL)
2623 && bfd_little_endian (input_bfd))
2624 /* The two 16-bit words will be reversed on a little-endian system.
2625 See mips_elf_perform_relocation for more details. */
2626 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
2627
2628 return x;
2629}
2630
2631/* It has been determined that the result of the RELOCATION is the
2632 VALUE. Use HOWTO to place VALUE into the output file at the
2633 appropriate position. The SECTION is the section to which the
b34976b6 2634 relocation applies. If REQUIRE_JALX is TRUE, then the opcode used
b49e97c9
TS
2635 for the relocation must be either JAL or JALX, and it is
2636 unconditionally converted to JALX.
2637
b34976b6 2638 Returns FALSE if anything goes wrong. */
b49e97c9 2639
b34976b6 2640static bfd_boolean
b49e97c9
TS
2641mips_elf_perform_relocation (info, howto, relocation, value, input_bfd,
2642 input_section, contents, require_jalx)
2643 struct bfd_link_info *info;
2644 reloc_howto_type *howto;
2645 const Elf_Internal_Rela *relocation;
2646 bfd_vma value;
2647 bfd *input_bfd;
2648 asection *input_section;
2649 bfd_byte *contents;
b34976b6 2650 bfd_boolean require_jalx;
b49e97c9
TS
2651{
2652 bfd_vma x;
2653 bfd_byte *location;
2654 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
2655
2656 /* Figure out where the relocation is occurring. */
2657 location = contents + relocation->r_offset;
2658
2659 /* Obtain the current value. */
2660 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
2661
2662 /* Clear the field we are setting. */
2663 x &= ~howto->dst_mask;
2664
2665 /* If this is the R_MIPS16_26 relocation, we must store the
2666 value in a funny way. */
2667 if (r_type == R_MIPS16_26)
2668 {
2669 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2670 Most mips16 instructions are 16 bits, but these instructions
2671 are 32 bits.
2672
2673 The format of these instructions is:
2674
2675 +--------------+--------------------------------+
2676 ! JALX ! X! Imm 20:16 ! Imm 25:21 !
2677 +--------------+--------------------------------+
2678 ! Immediate 15:0 !
2679 +-----------------------------------------------+
2680
2681 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
2682 Note that the immediate value in the first word is swapped.
2683
2684 When producing a relocateable object file, R_MIPS16_26 is
2685 handled mostly like R_MIPS_26. In particular, the addend is
2686 stored as a straight 26-bit value in a 32-bit instruction.
2687 (gas makes life simpler for itself by never adjusting a
2688 R_MIPS16_26 reloc to be against a section, so the addend is
2689 always zero). However, the 32 bit instruction is stored as 2
2690 16-bit values, rather than a single 32-bit value. In a
2691 big-endian file, the result is the same; in a little-endian
2692 file, the two 16-bit halves of the 32 bit value are swapped.
2693 This is so that a disassembler can recognize the jal
2694 instruction.
2695
2696 When doing a final link, R_MIPS16_26 is treated as a 32 bit
2697 instruction stored as two 16-bit values. The addend A is the
2698 contents of the targ26 field. The calculation is the same as
2699 R_MIPS_26. When storing the calculated value, reorder the
2700 immediate value as shown above, and don't forget to store the
2701 value as two 16-bit values.
2702
2703 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2704 defined as
2705
2706 big-endian:
2707 +--------+----------------------+
2708 | | |
2709 | | targ26-16 |
2710 |31 26|25 0|
2711 +--------+----------------------+
2712
2713 little-endian:
2714 +----------+------+-------------+
2715 | | | |
2716 | sub1 | | sub2 |
2717 |0 9|10 15|16 31|
2718 +----------+--------------------+
2719 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2720 ((sub1 << 16) | sub2)).
2721
2722 When producing a relocateable object file, the calculation is
2723 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2724 When producing a fully linked file, the calculation is
2725 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2726 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff) */
2727
2728 if (!info->relocateable)
2729 /* Shuffle the bits according to the formula above. */
2730 value = (((value & 0x1f0000) << 5)
2731 | ((value & 0x3e00000) >> 5)
2732 | (value & 0xffff));
2733 }
2734 else if (r_type == R_MIPS16_GPREL)
2735 {
2736 /* R_MIPS16_GPREL is used for GP-relative addressing in mips16
2737 mode. A typical instruction will have a format like this:
2738
2739 +--------------+--------------------------------+
2740 ! EXTEND ! Imm 10:5 ! Imm 15:11 !
2741 +--------------+--------------------------------+
2742 ! Major ! rx ! ry ! Imm 4:0 !
2743 +--------------+--------------------------------+
2744
2745 EXTEND is the five bit value 11110. Major is the instruction
2746 opcode.
2747
2748 This is handled exactly like R_MIPS_GPREL16, except that the
2749 addend is retrieved and stored as shown in this diagram; that
2750 is, the Imm fields above replace the V-rel16 field.
2751
2752 All we need to do here is shuffle the bits appropriately. As
2753 above, the two 16-bit halves must be swapped on a
2754 little-endian system. */
2755 value = (((value & 0x7e0) << 16)
2756 | ((value & 0xf800) << 5)
2757 | (value & 0x1f));
2758 }
2759
2760 /* Set the field. */
2761 x |= (value & howto->dst_mask);
2762
2763 /* If required, turn JAL into JALX. */
2764 if (require_jalx)
2765 {
b34976b6 2766 bfd_boolean ok;
b49e97c9
TS
2767 bfd_vma opcode = x >> 26;
2768 bfd_vma jalx_opcode;
2769
2770 /* Check to see if the opcode is already JAL or JALX. */
2771 if (r_type == R_MIPS16_26)
2772 {
2773 ok = ((opcode == 0x6) || (opcode == 0x7));
2774 jalx_opcode = 0x7;
2775 }
2776 else
2777 {
2778 ok = ((opcode == 0x3) || (opcode == 0x1d));
2779 jalx_opcode = 0x1d;
2780 }
2781
2782 /* If the opcode is not JAL or JALX, there's a problem. */
2783 if (!ok)
2784 {
2785 (*_bfd_error_handler)
2786 (_("%s: %s+0x%lx: jump to stub routine which is not jal"),
2787 bfd_archive_filename (input_bfd),
2788 input_section->name,
2789 (unsigned long) relocation->r_offset);
2790 bfd_set_error (bfd_error_bad_value);
b34976b6 2791 return FALSE;
b49e97c9
TS
2792 }
2793
2794 /* Make this the JALX opcode. */
2795 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
2796 }
2797
2798 /* Swap the high- and low-order 16 bits on little-endian systems
2799 when doing a MIPS16 relocation. */
2800 if ((r_type == R_MIPS16_GPREL || r_type == R_MIPS16_26)
2801 && bfd_little_endian (input_bfd))
2802 x = (((x & 0xffff) << 16) | ((x & 0xffff0000) >> 16));
2803
2804 /* Put the value into the output. */
2805 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
b34976b6 2806 return TRUE;
b49e97c9
TS
2807}
2808
b34976b6 2809/* Returns TRUE if SECTION is a MIPS16 stub section. */
b49e97c9 2810
b34976b6 2811static bfd_boolean
b49e97c9
TS
2812mips_elf_stub_section_p (abfd, section)
2813 bfd *abfd ATTRIBUTE_UNUSED;
2814 asection *section;
2815{
2816 const char *name = bfd_get_section_name (abfd, section);
2817
2818 return (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0
2819 || strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
2820 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0);
2821}
2822\f
2823/* Add room for N relocations to the .rel.dyn section in ABFD. */
2824
2825static void
2826mips_elf_allocate_dynamic_relocations (abfd, n)
2827 bfd *abfd;
2828 unsigned int n;
2829{
2830 asection *s;
2831
2832 s = bfd_get_section_by_name (abfd, ".rel.dyn");
2833 BFD_ASSERT (s != NULL);
2834
2835 if (s->_raw_size == 0)
2836 {
2837 /* Make room for a null element. */
2838 s->_raw_size += MIPS_ELF_REL_SIZE (abfd);
2839 ++s->reloc_count;
2840 }
2841 s->_raw_size += n * MIPS_ELF_REL_SIZE (abfd);
2842}
2843
2844/* Create a rel.dyn relocation for the dynamic linker to resolve. REL
2845 is the original relocation, which is now being transformed into a
2846 dynamic relocation. The ADDENDP is adjusted if necessary; the
2847 caller should store the result in place of the original addend. */
2848
b34976b6 2849static bfd_boolean
b49e97c9
TS
2850mips_elf_create_dynamic_relocation (output_bfd, info, rel, h, sec,
2851 symbol, addendp, input_section)
2852 bfd *output_bfd;
2853 struct bfd_link_info *info;
2854 const Elf_Internal_Rela *rel;
2855 struct mips_elf_link_hash_entry *h;
2856 asection *sec;
2857 bfd_vma symbol;
2858 bfd_vma *addendp;
2859 asection *input_section;
2860{
947216bf 2861 Elf_Internal_Rela outrel[3];
b34976b6 2862 bfd_boolean skip;
b49e97c9
TS
2863 asection *sreloc;
2864 bfd *dynobj;
2865 int r_type;
2866
2867 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
2868 dynobj = elf_hash_table (info)->dynobj;
4a14403c 2869 sreloc = bfd_get_section_by_name (dynobj, ".rel.dyn");
b49e97c9
TS
2870 BFD_ASSERT (sreloc != NULL);
2871 BFD_ASSERT (sreloc->contents != NULL);
2872 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
2873 < sreloc->_raw_size);
2874
b34976b6 2875 skip = FALSE;
b49e97c9
TS
2876 outrel[0].r_offset =
2877 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
2878 outrel[1].r_offset =
2879 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
2880 outrel[2].r_offset =
2881 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
2882
2883#if 0
2884 /* We begin by assuming that the offset for the dynamic relocation
2885 is the same as for the original relocation. We'll adjust this
2886 later to reflect the correct output offsets. */
2887 if (elf_section_data (input_section)->sec_info_type != ELF_INFO_TYPE_STABS)
2888 {
2889 outrel[1].r_offset = rel[1].r_offset;
2890 outrel[2].r_offset = rel[2].r_offset;
2891 }
2892 else
2893 {
2894 /* Except that in a stab section things are more complex.
2895 Because we compress stab information, the offset given in the
2896 relocation may not be the one we want; we must let the stabs
2897 machinery tell us the offset. */
2898 outrel[1].r_offset = outrel[0].r_offset;
2899 outrel[2].r_offset = outrel[0].r_offset;
2900 /* If we didn't need the relocation at all, this value will be
2901 -1. */
2902 if (outrel[0].r_offset == (bfd_vma) -1)
b34976b6 2903 skip = TRUE;
b49e97c9
TS
2904 }
2905#endif
2906
2907 if (outrel[0].r_offset == (bfd_vma) -1)
b34976b6 2908 skip = TRUE;
b49e97c9
TS
2909 /* FIXME: For -2 runtime relocation needs to be skipped, but
2910 properly resolved statically and installed. */
2911 BFD_ASSERT (outrel[0].r_offset != (bfd_vma) -2);
2912
2913 /* If we've decided to skip this relocation, just output an empty
2914 record. Note that R_MIPS_NONE == 0, so that this call to memset
2915 is a way of setting R_TYPE to R_MIPS_NONE. */
2916 if (skip)
947216bf 2917 memset (outrel, 0, sizeof (Elf_Internal_Rela) * 3);
b49e97c9
TS
2918 else
2919 {
2920 long indx;
2921 bfd_vma section_offset;
2922
2923 /* We must now calculate the dynamic symbol table index to use
2924 in the relocation. */
2925 if (h != NULL
2926 && (! info->symbolic || (h->root.elf_link_hash_flags
2927 & ELF_LINK_HASH_DEF_REGULAR) == 0))
2928 {
2929 indx = h->root.dynindx;
2930 /* h->root.dynindx may be -1 if this symbol was marked to
2931 become local. */
2932 if (indx == -1)
2933 indx = 0;
2934 }
2935 else
2936 {
2937 if (sec != NULL && bfd_is_abs_section (sec))
2938 indx = 0;
2939 else if (sec == NULL || sec->owner == NULL)
2940 {
2941 bfd_set_error (bfd_error_bad_value);
b34976b6 2942 return FALSE;
b49e97c9
TS
2943 }
2944 else
2945 {
2946 indx = elf_section_data (sec->output_section)->dynindx;
2947 if (indx == 0)
2948 abort ();
2949 }
2950
2951 /* Figure out how far the target of the relocation is from
2952 the beginning of its section. */
2953 section_offset = symbol - sec->output_section->vma;
2954 /* The relocation we're building is section-relative.
2955 Therefore, the original addend must be adjusted by the
2956 section offset. */
2957 *addendp += section_offset;
2958 /* Now, the relocation is just against the section. */
2959 symbol = sec->output_section->vma;
2960 }
2961
2962 /* If the relocation was previously an absolute relocation and
2963 this symbol will not be referred to by the relocation, we must
2964 adjust it by the value we give it in the dynamic symbol table.
2965 Otherwise leave the job up to the dynamic linker. */
2966 if (!indx && r_type != R_MIPS_REL32)
2967 *addendp += symbol;
2968
2969 /* The relocation is always an REL32 relocation because we don't
2970 know where the shared library will wind up at load-time. */
34ea4a36
TS
2971 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
2972 R_MIPS_REL32);
7c4ca42d 2973 outrel[1].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
033fd5f9
AO
2974 ABI_64_P (output_bfd)
2975 ? R_MIPS_64
2976 : R_MIPS_NONE);
7c4ca42d
AO
2977 outrel[2].r_info = ELF_R_INFO (output_bfd, (unsigned long) 0,
2978 R_MIPS_NONE);
b49e97c9
TS
2979
2980 /* Adjust the output offset of the relocation to reference the
2981 correct location in the output file. */
2982 outrel[0].r_offset += (input_section->output_section->vma
2983 + input_section->output_offset);
2984 outrel[1].r_offset += (input_section->output_section->vma
2985 + input_section->output_offset);
2986 outrel[2].r_offset += (input_section->output_section->vma
2987 + input_section->output_offset);
2988 }
2989
2990 /* Put the relocation back out. We have to use the special
2991 relocation outputter in the 64-bit case since the 64-bit
2992 relocation format is non-standard. */
2993 if (ABI_64_P (output_bfd))
2994 {
2995 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
2996 (output_bfd, &outrel[0],
2997 (sreloc->contents
2998 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
2999 }
3000 else
947216bf
AM
3001 bfd_elf32_swap_reloc_out
3002 (output_bfd, &outrel[0],
3003 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
b49e97c9
TS
3004
3005 /* Record the index of the first relocation referencing H. This
3006 information is later emitted in the .msym section. */
3007 if (h != NULL
3008 && (h->min_dyn_reloc_index == 0
3009 || sreloc->reloc_count < h->min_dyn_reloc_index))
3010 h->min_dyn_reloc_index = sreloc->reloc_count;
3011
3012 /* We've now added another relocation. */
3013 ++sreloc->reloc_count;
3014
3015 /* Make sure the output section is writable. The dynamic linker
3016 will be writing to it. */
3017 elf_section_data (input_section->output_section)->this_hdr.sh_flags
3018 |= SHF_WRITE;
3019
3020 /* On IRIX5, make an entry of compact relocation info. */
3021 if (! skip && IRIX_COMPAT (output_bfd) == ict_irix5)
3022 {
3023 asection *scpt = bfd_get_section_by_name (dynobj, ".compact_rel");
3024 bfd_byte *cr;
3025
3026 if (scpt)
3027 {
3028 Elf32_crinfo cptrel;
3029
3030 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
3031 cptrel.vaddr = (rel->r_offset
3032 + input_section->output_section->vma
3033 + input_section->output_offset);
3034 if (r_type == R_MIPS_REL32)
3035 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
3036 else
3037 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
3038 mips_elf_set_cr_dist2to (cptrel, 0);
3039 cptrel.konst = *addendp;
3040
3041 cr = (scpt->contents
3042 + sizeof (Elf32_External_compact_rel));
3043 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
3044 ((Elf32_External_crinfo *) cr
3045 + scpt->reloc_count));
3046 ++scpt->reloc_count;
3047 }
3048 }
3049
b34976b6 3050 return TRUE;
b49e97c9
TS
3051}
3052\f
3053/* Return the ISA for a MIPS e_flags value. */
3054
3055static INLINE int
3056elf_mips_isa (flags)
3057 flagword flags;
3058{
3059 switch (flags & EF_MIPS_ARCH)
3060 {
3061 case E_MIPS_ARCH_1:
3062 return 1;
3063 case E_MIPS_ARCH_2:
3064 return 2;
3065 case E_MIPS_ARCH_3:
3066 return 3;
3067 case E_MIPS_ARCH_4:
3068 return 4;
3069 case E_MIPS_ARCH_5:
3070 return 5;
3071 case E_MIPS_ARCH_32:
3072 return 32;
3073 case E_MIPS_ARCH_64:
3074 return 64;
3075 }
3076 return 4;
3077}
3078
3079/* Return the MACH for a MIPS e_flags value. */
3080
3081unsigned long
3082_bfd_elf_mips_mach (flags)
3083 flagword flags;
3084{
3085 switch (flags & EF_MIPS_MACH)
3086 {
3087 case E_MIPS_MACH_3900:
3088 return bfd_mach_mips3900;
3089
3090 case E_MIPS_MACH_4010:
3091 return bfd_mach_mips4010;
3092
3093 case E_MIPS_MACH_4100:
3094 return bfd_mach_mips4100;
3095
3096 case E_MIPS_MACH_4111:
3097 return bfd_mach_mips4111;
3098
00707a0e
RS
3099 case E_MIPS_MACH_4120:
3100 return bfd_mach_mips4120;
3101
b49e97c9
TS
3102 case E_MIPS_MACH_4650:
3103 return bfd_mach_mips4650;
3104
00707a0e
RS
3105 case E_MIPS_MACH_5400:
3106 return bfd_mach_mips5400;
3107
3108 case E_MIPS_MACH_5500:
3109 return bfd_mach_mips5500;
3110
b49e97c9
TS
3111 case E_MIPS_MACH_SB1:
3112 return bfd_mach_mips_sb1;
3113
3114 default:
3115 switch (flags & EF_MIPS_ARCH)
3116 {
3117 default:
3118 case E_MIPS_ARCH_1:
3119 return bfd_mach_mips3000;
3120 break;
3121
3122 case E_MIPS_ARCH_2:
3123 return bfd_mach_mips6000;
3124 break;
3125
3126 case E_MIPS_ARCH_3:
3127 return bfd_mach_mips4000;
3128 break;
3129
3130 case E_MIPS_ARCH_4:
3131 return bfd_mach_mips8000;
3132 break;
3133
3134 case E_MIPS_ARCH_5:
3135 return bfd_mach_mips5;
3136 break;
3137
3138 case E_MIPS_ARCH_32:
3139 return bfd_mach_mipsisa32;
3140 break;
3141
3142 case E_MIPS_ARCH_64:
3143 return bfd_mach_mipsisa64;
3144 break;
3145 }
3146 }
3147
3148 return 0;
3149}
3150
3151/* Return printable name for ABI. */
3152
3153static INLINE char *
3154elf_mips_abi_name (abfd)
3155 bfd *abfd;
3156{
3157 flagword flags;
3158
3159 flags = elf_elfheader (abfd)->e_flags;
3160 switch (flags & EF_MIPS_ABI)
3161 {
3162 case 0:
3163 if (ABI_N32_P (abfd))
3164 return "N32";
3165 else if (ABI_64_P (abfd))
3166 return "64";
3167 else
3168 return "none";
3169 case E_MIPS_ABI_O32:
3170 return "O32";
3171 case E_MIPS_ABI_O64:
3172 return "O64";
3173 case E_MIPS_ABI_EABI32:
3174 return "EABI32";
3175 case E_MIPS_ABI_EABI64:
3176 return "EABI64";
3177 default:
3178 return "unknown abi";
3179 }
3180}
3181\f
3182/* MIPS ELF uses two common sections. One is the usual one, and the
3183 other is for small objects. All the small objects are kept
3184 together, and then referenced via the gp pointer, which yields
3185 faster assembler code. This is what we use for the small common
3186 section. This approach is copied from ecoff.c. */
3187static asection mips_elf_scom_section;
3188static asymbol mips_elf_scom_symbol;
3189static asymbol *mips_elf_scom_symbol_ptr;
3190
3191/* MIPS ELF also uses an acommon section, which represents an
3192 allocated common symbol which may be overridden by a
3193 definition in a shared library. */
3194static asection mips_elf_acom_section;
3195static asymbol mips_elf_acom_symbol;
3196static asymbol *mips_elf_acom_symbol_ptr;
3197
3198/* Handle the special MIPS section numbers that a symbol may use.
3199 This is used for both the 32-bit and the 64-bit ABI. */
3200
3201void
3202_bfd_mips_elf_symbol_processing (abfd, asym)
3203 bfd *abfd;
3204 asymbol *asym;
3205{
3206 elf_symbol_type *elfsym;
3207
3208 elfsym = (elf_symbol_type *) asym;
3209 switch (elfsym->internal_elf_sym.st_shndx)
3210 {
3211 case SHN_MIPS_ACOMMON:
3212 /* This section is used in a dynamically linked executable file.
3213 It is an allocated common section. The dynamic linker can
3214 either resolve these symbols to something in a shared
3215 library, or it can just leave them here. For our purposes,
3216 we can consider these symbols to be in a new section. */
3217 if (mips_elf_acom_section.name == NULL)
3218 {
3219 /* Initialize the acommon section. */
3220 mips_elf_acom_section.name = ".acommon";
3221 mips_elf_acom_section.flags = SEC_ALLOC;
3222 mips_elf_acom_section.output_section = &mips_elf_acom_section;
3223 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
3224 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
3225 mips_elf_acom_symbol.name = ".acommon";
3226 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
3227 mips_elf_acom_symbol.section = &mips_elf_acom_section;
3228 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
3229 }
3230 asym->section = &mips_elf_acom_section;
3231 break;
3232
3233 case SHN_COMMON:
3234 /* Common symbols less than the GP size are automatically
3235 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
3236 if (asym->value > elf_gp_size (abfd)
3237 || IRIX_COMPAT (abfd) == ict_irix6)
3238 break;
3239 /* Fall through. */
3240 case SHN_MIPS_SCOMMON:
3241 if (mips_elf_scom_section.name == NULL)
3242 {
3243 /* Initialize the small common section. */
3244 mips_elf_scom_section.name = ".scommon";
3245 mips_elf_scom_section.flags = SEC_IS_COMMON;
3246 mips_elf_scom_section.output_section = &mips_elf_scom_section;
3247 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
3248 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
3249 mips_elf_scom_symbol.name = ".scommon";
3250 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
3251 mips_elf_scom_symbol.section = &mips_elf_scom_section;
3252 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
3253 }
3254 asym->section = &mips_elf_scom_section;
3255 asym->value = elfsym->internal_elf_sym.st_size;
3256 break;
3257
3258 case SHN_MIPS_SUNDEFINED:
3259 asym->section = bfd_und_section_ptr;
3260 break;
3261
3262#if 0 /* for SGI_COMPAT */
3263 case SHN_MIPS_TEXT:
3264 asym->section = mips_elf_text_section_ptr;
3265 break;
3266
3267 case SHN_MIPS_DATA:
3268 asym->section = mips_elf_data_section_ptr;
3269 break;
3270#endif
3271 }
3272}
3273\f
3274/* Work over a section just before writing it out. This routine is
3275 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
3276 sections that need the SHF_MIPS_GPREL flag by name; there has to be
3277 a better way. */
3278
b34976b6 3279bfd_boolean
b49e97c9
TS
3280_bfd_mips_elf_section_processing (abfd, hdr)
3281 bfd *abfd;
3282 Elf_Internal_Shdr *hdr;
3283{
3284 if (hdr->sh_type == SHT_MIPS_REGINFO
3285 && hdr->sh_size > 0)
3286 {
3287 bfd_byte buf[4];
3288
3289 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
3290 BFD_ASSERT (hdr->contents == NULL);
3291
3292 if (bfd_seek (abfd,
3293 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
3294 SEEK_SET) != 0)
b34976b6 3295 return FALSE;
b49e97c9
TS
3296 H_PUT_32 (abfd, elf_gp (abfd), buf);
3297 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
b34976b6 3298 return FALSE;
b49e97c9
TS
3299 }
3300
3301 if (hdr->sh_type == SHT_MIPS_OPTIONS
3302 && hdr->bfd_section != NULL
3303 && elf_section_data (hdr->bfd_section) != NULL
3304 && elf_section_data (hdr->bfd_section)->tdata != NULL)
3305 {
3306 bfd_byte *contents, *l, *lend;
3307
3308 /* We stored the section contents in the elf_section_data tdata
3309 field in the set_section_contents routine. We save the
3310 section contents so that we don't have to read them again.
3311 At this point we know that elf_gp is set, so we can look
3312 through the section contents to see if there is an
3313 ODK_REGINFO structure. */
3314
3315 contents = (bfd_byte *) elf_section_data (hdr->bfd_section)->tdata;
3316 l = contents;
3317 lend = contents + hdr->sh_size;
3318 while (l + sizeof (Elf_External_Options) <= lend)
3319 {
3320 Elf_Internal_Options intopt;
3321
3322 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
3323 &intopt);
3324 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
3325 {
3326 bfd_byte buf[8];
3327
3328 if (bfd_seek (abfd,
3329 (hdr->sh_offset
3330 + (l - contents)
3331 + sizeof (Elf_External_Options)
3332 + (sizeof (Elf64_External_RegInfo) - 8)),
3333 SEEK_SET) != 0)
b34976b6 3334 return FALSE;
b49e97c9
TS
3335 H_PUT_64 (abfd, elf_gp (abfd), buf);
3336 if (bfd_bwrite (buf, (bfd_size_type) 8, abfd) != 8)
b34976b6 3337 return FALSE;
b49e97c9
TS
3338 }
3339 else if (intopt.kind == ODK_REGINFO)
3340 {
3341 bfd_byte buf[4];
3342
3343 if (bfd_seek (abfd,
3344 (hdr->sh_offset
3345 + (l - contents)
3346 + sizeof (Elf_External_Options)
3347 + (sizeof (Elf32_External_RegInfo) - 4)),
3348 SEEK_SET) != 0)
b34976b6 3349 return FALSE;
b49e97c9
TS
3350 H_PUT_32 (abfd, elf_gp (abfd), buf);
3351 if (bfd_bwrite (buf, (bfd_size_type) 4, abfd) != 4)
b34976b6 3352 return FALSE;
b49e97c9
TS
3353 }
3354 l += intopt.size;
3355 }
3356 }
3357
3358 if (hdr->bfd_section != NULL)
3359 {
3360 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
3361
3362 if (strcmp (name, ".sdata") == 0
3363 || strcmp (name, ".lit8") == 0
3364 || strcmp (name, ".lit4") == 0)
3365 {
3366 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
3367 hdr->sh_type = SHT_PROGBITS;
3368 }
3369 else if (strcmp (name, ".sbss") == 0)
3370 {
3371 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
3372 hdr->sh_type = SHT_NOBITS;
3373 }
3374 else if (strcmp (name, ".srdata") == 0)
3375 {
3376 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
3377 hdr->sh_type = SHT_PROGBITS;
3378 }
3379 else if (strcmp (name, ".compact_rel") == 0)
3380 {
3381 hdr->sh_flags = 0;
3382 hdr->sh_type = SHT_PROGBITS;
3383 }
3384 else if (strcmp (name, ".rtproc") == 0)
3385 {
3386 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
3387 {
3388 unsigned int adjust;
3389
3390 adjust = hdr->sh_size % hdr->sh_addralign;
3391 if (adjust != 0)
3392 hdr->sh_size += hdr->sh_addralign - adjust;
3393 }
3394 }
3395 }
3396
b34976b6 3397 return TRUE;
b49e97c9
TS
3398}
3399
3400/* Handle a MIPS specific section when reading an object file. This
3401 is called when elfcode.h finds a section with an unknown type.
3402 This routine supports both the 32-bit and 64-bit ELF ABI.
3403
3404 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
3405 how to. */
3406
b34976b6 3407bfd_boolean
b49e97c9
TS
3408_bfd_mips_elf_section_from_shdr (abfd, hdr, name)
3409 bfd *abfd;
3410 Elf_Internal_Shdr *hdr;
90937f86 3411 const char *name;
b49e97c9
TS
3412{
3413 flagword flags = 0;
3414
3415 /* There ought to be a place to keep ELF backend specific flags, but
3416 at the moment there isn't one. We just keep track of the
3417 sections by their name, instead. Fortunately, the ABI gives
3418 suggested names for all the MIPS specific sections, so we will
3419 probably get away with this. */
3420 switch (hdr->sh_type)
3421 {
3422 case SHT_MIPS_LIBLIST:
3423 if (strcmp (name, ".liblist") != 0)
b34976b6 3424 return FALSE;
b49e97c9
TS
3425 break;
3426 case SHT_MIPS_MSYM:
3427 if (strcmp (name, ".msym") != 0)
b34976b6 3428 return FALSE;
b49e97c9
TS
3429 break;
3430 case SHT_MIPS_CONFLICT:
3431 if (strcmp (name, ".conflict") != 0)
b34976b6 3432 return FALSE;
b49e97c9
TS
3433 break;
3434 case SHT_MIPS_GPTAB:
3435 if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) != 0)
b34976b6 3436 return FALSE;
b49e97c9
TS
3437 break;
3438 case SHT_MIPS_UCODE:
3439 if (strcmp (name, ".ucode") != 0)
b34976b6 3440 return FALSE;
b49e97c9
TS
3441 break;
3442 case SHT_MIPS_DEBUG:
3443 if (strcmp (name, ".mdebug") != 0)
b34976b6 3444 return FALSE;
b49e97c9
TS
3445 flags = SEC_DEBUGGING;
3446 break;
3447 case SHT_MIPS_REGINFO:
3448 if (strcmp (name, ".reginfo") != 0
3449 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
b34976b6 3450 return FALSE;
b49e97c9
TS
3451 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
3452 break;
3453 case SHT_MIPS_IFACE:
3454 if (strcmp (name, ".MIPS.interfaces") != 0)
b34976b6 3455 return FALSE;
b49e97c9
TS
3456 break;
3457 case SHT_MIPS_CONTENT:
3458 if (strncmp (name, ".MIPS.content", sizeof ".MIPS.content" - 1) != 0)
b34976b6 3459 return FALSE;
b49e97c9
TS
3460 break;
3461 case SHT_MIPS_OPTIONS:
3462 if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) != 0)
b34976b6 3463 return FALSE;
b49e97c9
TS
3464 break;
3465 case SHT_MIPS_DWARF:
3466 if (strncmp (name, ".debug_", sizeof ".debug_" - 1) != 0)
b34976b6 3467 return FALSE;
b49e97c9
TS
3468 break;
3469 case SHT_MIPS_SYMBOL_LIB:
3470 if (strcmp (name, ".MIPS.symlib") != 0)
b34976b6 3471 return FALSE;
b49e97c9
TS
3472 break;
3473 case SHT_MIPS_EVENTS:
3474 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) != 0
3475 && strncmp (name, ".MIPS.post_rel",
3476 sizeof ".MIPS.post_rel" - 1) != 0)
b34976b6 3477 return FALSE;
b49e97c9
TS
3478 break;
3479 default:
b34976b6 3480 return FALSE;
b49e97c9
TS
3481 }
3482
3483 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name))
b34976b6 3484 return FALSE;
b49e97c9
TS
3485
3486 if (flags)
3487 {
3488 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
3489 (bfd_get_section_flags (abfd,
3490 hdr->bfd_section)
3491 | flags)))
b34976b6 3492 return FALSE;
b49e97c9
TS
3493 }
3494
3495 /* FIXME: We should record sh_info for a .gptab section. */
3496
3497 /* For a .reginfo section, set the gp value in the tdata information
3498 from the contents of this section. We need the gp value while
3499 processing relocs, so we just get it now. The .reginfo section
3500 is not used in the 64-bit MIPS ELF ABI. */
3501 if (hdr->sh_type == SHT_MIPS_REGINFO)
3502 {
3503 Elf32_External_RegInfo ext;
3504 Elf32_RegInfo s;
3505
3506 if (! bfd_get_section_contents (abfd, hdr->bfd_section, (PTR) &ext,
3507 (file_ptr) 0,
3508 (bfd_size_type) sizeof ext))
b34976b6 3509 return FALSE;
b49e97c9
TS
3510 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
3511 elf_gp (abfd) = s.ri_gp_value;
3512 }
3513
3514 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
3515 set the gp value based on what we find. We may see both
3516 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
3517 they should agree. */
3518 if (hdr->sh_type == SHT_MIPS_OPTIONS)
3519 {
3520 bfd_byte *contents, *l, *lend;
3521
3522 contents = (bfd_byte *) bfd_malloc (hdr->sh_size);
3523 if (contents == NULL)
b34976b6 3524 return FALSE;
b49e97c9
TS
3525 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
3526 (file_ptr) 0, hdr->sh_size))
3527 {
3528 free (contents);
b34976b6 3529 return FALSE;
b49e97c9
TS
3530 }
3531 l = contents;
3532 lend = contents + hdr->sh_size;
3533 while (l + sizeof (Elf_External_Options) <= lend)
3534 {
3535 Elf_Internal_Options intopt;
3536
3537 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
3538 &intopt);
3539 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
3540 {
3541 Elf64_Internal_RegInfo intreg;
3542
3543 bfd_mips_elf64_swap_reginfo_in
3544 (abfd,
3545 ((Elf64_External_RegInfo *)
3546 (l + sizeof (Elf_External_Options))),
3547 &intreg);
3548 elf_gp (abfd) = intreg.ri_gp_value;
3549 }
3550 else if (intopt.kind == ODK_REGINFO)
3551 {
3552 Elf32_RegInfo intreg;
3553
3554 bfd_mips_elf32_swap_reginfo_in
3555 (abfd,
3556 ((Elf32_External_RegInfo *)
3557 (l + sizeof (Elf_External_Options))),
3558 &intreg);
3559 elf_gp (abfd) = intreg.ri_gp_value;
3560 }
3561 l += intopt.size;
3562 }
3563 free (contents);
3564 }
3565
b34976b6 3566 return TRUE;
b49e97c9
TS
3567}
3568
3569/* Set the correct type for a MIPS ELF section. We do this by the
3570 section name, which is a hack, but ought to work. This routine is
3571 used by both the 32-bit and the 64-bit ABI. */
3572
b34976b6 3573bfd_boolean
b49e97c9
TS
3574_bfd_mips_elf_fake_sections (abfd, hdr, sec)
3575 bfd *abfd;
947216bf 3576 Elf_Internal_Shdr *hdr;
b49e97c9
TS
3577 asection *sec;
3578{
3579 register const char *name;
3580
3581 name = bfd_get_section_name (abfd, sec);
3582
3583 if (strcmp (name, ".liblist") == 0)
3584 {
3585 hdr->sh_type = SHT_MIPS_LIBLIST;
3586 hdr->sh_info = sec->_raw_size / sizeof (Elf32_Lib);
3587 /* The sh_link field is set in final_write_processing. */
3588 }
3589 else if (strcmp (name, ".conflict") == 0)
3590 hdr->sh_type = SHT_MIPS_CONFLICT;
3591 else if (strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0)
3592 {
3593 hdr->sh_type = SHT_MIPS_GPTAB;
3594 hdr->sh_entsize = sizeof (Elf32_External_gptab);
3595 /* The sh_info field is set in final_write_processing. */
3596 }
3597 else if (strcmp (name, ".ucode") == 0)
3598 hdr->sh_type = SHT_MIPS_UCODE;
3599 else if (strcmp (name, ".mdebug") == 0)
3600 {
3601 hdr->sh_type = SHT_MIPS_DEBUG;
8dc1a139 3602 /* In a shared object on IRIX 5.3, the .mdebug section has an
b49e97c9
TS
3603 entsize of 0. FIXME: Does this matter? */
3604 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
3605 hdr->sh_entsize = 0;
3606 else
3607 hdr->sh_entsize = 1;
3608 }
3609 else if (strcmp (name, ".reginfo") == 0)
3610 {
3611 hdr->sh_type = SHT_MIPS_REGINFO;
8dc1a139 3612 /* In a shared object on IRIX 5.3, the .reginfo section has an
b49e97c9
TS
3613 entsize of 0x18. FIXME: Does this matter? */
3614 if (SGI_COMPAT (abfd))
3615 {
3616 if ((abfd->flags & DYNAMIC) != 0)
3617 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
3618 else
3619 hdr->sh_entsize = 1;
3620 }
3621 else
3622 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
3623 }
3624 else if (SGI_COMPAT (abfd)
3625 && (strcmp (name, ".hash") == 0
3626 || strcmp (name, ".dynamic") == 0
3627 || strcmp (name, ".dynstr") == 0))
3628 {
3629 if (SGI_COMPAT (abfd))
3630 hdr->sh_entsize = 0;
3631#if 0
8dc1a139 3632 /* This isn't how the IRIX6 linker behaves. */
b49e97c9
TS
3633 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
3634#endif
3635 }
3636 else if (strcmp (name, ".got") == 0
3637 || strcmp (name, ".srdata") == 0
3638 || strcmp (name, ".sdata") == 0
3639 || strcmp (name, ".sbss") == 0
3640 || strcmp (name, ".lit4") == 0
3641 || strcmp (name, ".lit8") == 0)
3642 hdr->sh_flags |= SHF_MIPS_GPREL;
3643 else if (strcmp (name, ".MIPS.interfaces") == 0)
3644 {
3645 hdr->sh_type = SHT_MIPS_IFACE;
3646 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
3647 }
3648 else if (strncmp (name, ".MIPS.content", strlen (".MIPS.content")) == 0)
3649 {
3650 hdr->sh_type = SHT_MIPS_CONTENT;
3651 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
3652 /* The sh_info field is set in final_write_processing. */
3653 }
3654 else if (strcmp (name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
3655 {
3656 hdr->sh_type = SHT_MIPS_OPTIONS;
3657 hdr->sh_entsize = 1;
3658 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
3659 }
3660 else if (strncmp (name, ".debug_", sizeof ".debug_" - 1) == 0)
3661 hdr->sh_type = SHT_MIPS_DWARF;
3662 else if (strcmp (name, ".MIPS.symlib") == 0)
3663 {
3664 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
3665 /* The sh_link and sh_info fields are set in
3666 final_write_processing. */
3667 }
3668 else if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0
3669 || strncmp (name, ".MIPS.post_rel",
3670 sizeof ".MIPS.post_rel" - 1) == 0)
3671 {
3672 hdr->sh_type = SHT_MIPS_EVENTS;
3673 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
3674 /* The sh_link field is set in final_write_processing. */
3675 }
3676 else if (strcmp (name, ".msym") == 0)
3677 {
3678 hdr->sh_type = SHT_MIPS_MSYM;
3679 hdr->sh_flags |= SHF_ALLOC;
3680 hdr->sh_entsize = 8;
3681 }
3682
3683 /* The generic elf_fake_sections will set up REL_HDR using the
3684 default kind of relocations. But, we may actually need both
3685 kinds of relocations, so we set up the second header here.
3686
3687 This is not necessary for the O32 ABI since that only uses Elf32_Rel
3688 relocations (cf. System V ABI, MIPS RISC Processor Supplement,
3689 3rd Edition, p. 4-17). It breaks the IRIX 5/6 32-bit ld, since one
3690 of the resulting empty .rela.<section> sections starts with
3691 sh_offset == object size, and ld doesn't allow that. While the check
3692 is arguably bogus for empty or SHT_NOBITS sections, it can easily be
3693 avoided by not emitting those useless sections in the first place. */
14366460 3694 if (! SGI_COMPAT (abfd) && ! NEWABI_P(abfd)
4a14403c 3695 && (sec->flags & SEC_RELOC) != 0)
b49e97c9
TS
3696 {
3697 struct bfd_elf_section_data *esd;
3698 bfd_size_type amt = sizeof (Elf_Internal_Shdr);
3699
3700 esd = elf_section_data (sec);
3701 BFD_ASSERT (esd->rel_hdr2 == NULL);
3702 esd->rel_hdr2 = (Elf_Internal_Shdr *) bfd_zalloc (abfd, amt);
3703 if (!esd->rel_hdr2)
b34976b6 3704 return FALSE;
b49e97c9
TS
3705 _bfd_elf_init_reloc_shdr (abfd, esd->rel_hdr2, sec,
3706 !elf_section_data (sec)->use_rela_p);
3707 }
3708
b34976b6 3709 return TRUE;
b49e97c9
TS
3710}
3711
3712/* Given a BFD section, try to locate the corresponding ELF section
3713 index. This is used by both the 32-bit and the 64-bit ABI.
3714 Actually, it's not clear to me that the 64-bit ABI supports these,
3715 but for non-PIC objects we will certainly want support for at least
3716 the .scommon section. */
3717
b34976b6 3718bfd_boolean
b49e97c9
TS
3719_bfd_mips_elf_section_from_bfd_section (abfd, sec, retval)
3720 bfd *abfd ATTRIBUTE_UNUSED;
3721 asection *sec;
3722 int *retval;
3723{
3724 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
3725 {
3726 *retval = SHN_MIPS_SCOMMON;
b34976b6 3727 return TRUE;
b49e97c9
TS
3728 }
3729 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
3730 {
3731 *retval = SHN_MIPS_ACOMMON;
b34976b6 3732 return TRUE;
b49e97c9 3733 }
b34976b6 3734 return FALSE;
b49e97c9
TS
3735}
3736\f
3737/* Hook called by the linker routine which adds symbols from an object
3738 file. We must handle the special MIPS section numbers here. */
3739
b34976b6 3740bfd_boolean
b49e97c9
TS
3741_bfd_mips_elf_add_symbol_hook (abfd, info, sym, namep, flagsp, secp, valp)
3742 bfd *abfd;
3743 struct bfd_link_info *info;
3744 const Elf_Internal_Sym *sym;
3745 const char **namep;
3746 flagword *flagsp ATTRIBUTE_UNUSED;
3747 asection **secp;
3748 bfd_vma *valp;
3749{
3750 if (SGI_COMPAT (abfd)
3751 && (abfd->flags & DYNAMIC) != 0
3752 && strcmp (*namep, "_rld_new_interface") == 0)
3753 {
8dc1a139 3754 /* Skip IRIX5 rld entry name. */
b49e97c9 3755 *namep = NULL;
b34976b6 3756 return TRUE;
b49e97c9
TS
3757 }
3758
3759 switch (sym->st_shndx)
3760 {
3761 case SHN_COMMON:
3762 /* Common symbols less than the GP size are automatically
3763 treated as SHN_MIPS_SCOMMON symbols. */
3764 if (sym->st_size > elf_gp_size (abfd)
3765 || IRIX_COMPAT (abfd) == ict_irix6)
3766 break;
3767 /* Fall through. */
3768 case SHN_MIPS_SCOMMON:
3769 *secp = bfd_make_section_old_way (abfd, ".scommon");
3770 (*secp)->flags |= SEC_IS_COMMON;
3771 *valp = sym->st_size;
3772 break;
3773
3774 case SHN_MIPS_TEXT:
3775 /* This section is used in a shared object. */
3776 if (elf_tdata (abfd)->elf_text_section == NULL)
3777 {
3778 asymbol *elf_text_symbol;
3779 asection *elf_text_section;
3780 bfd_size_type amt = sizeof (asection);
3781
3782 elf_text_section = bfd_zalloc (abfd, amt);
3783 if (elf_text_section == NULL)
b34976b6 3784 return FALSE;
b49e97c9
TS
3785
3786 amt = sizeof (asymbol);
3787 elf_text_symbol = bfd_zalloc (abfd, amt);
3788 if (elf_text_symbol == NULL)
b34976b6 3789 return FALSE;
b49e97c9
TS
3790
3791 /* Initialize the section. */
3792
3793 elf_tdata (abfd)->elf_text_section = elf_text_section;
3794 elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
3795
3796 elf_text_section->symbol = elf_text_symbol;
3797 elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
3798
3799 elf_text_section->name = ".text";
3800 elf_text_section->flags = SEC_NO_FLAGS;
3801 elf_text_section->output_section = NULL;
3802 elf_text_section->owner = abfd;
3803 elf_text_symbol->name = ".text";
3804 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
3805 elf_text_symbol->section = elf_text_section;
3806 }
3807 /* This code used to do *secp = bfd_und_section_ptr if
3808 info->shared. I don't know why, and that doesn't make sense,
3809 so I took it out. */
3810 *secp = elf_tdata (abfd)->elf_text_section;
3811 break;
3812
3813 case SHN_MIPS_ACOMMON:
3814 /* Fall through. XXX Can we treat this as allocated data? */
3815 case SHN_MIPS_DATA:
3816 /* This section is used in a shared object. */
3817 if (elf_tdata (abfd)->elf_data_section == NULL)
3818 {
3819 asymbol *elf_data_symbol;
3820 asection *elf_data_section;
3821 bfd_size_type amt = sizeof (asection);
3822
3823 elf_data_section = bfd_zalloc (abfd, amt);
3824 if (elf_data_section == NULL)
b34976b6 3825 return FALSE;
b49e97c9
TS
3826
3827 amt = sizeof (asymbol);
3828 elf_data_symbol = bfd_zalloc (abfd, amt);
3829 if (elf_data_symbol == NULL)
b34976b6 3830 return FALSE;
b49e97c9
TS
3831
3832 /* Initialize the section. */
3833
3834 elf_tdata (abfd)->elf_data_section = elf_data_section;
3835 elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
3836
3837 elf_data_section->symbol = elf_data_symbol;
3838 elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
3839
3840 elf_data_section->name = ".data";
3841 elf_data_section->flags = SEC_NO_FLAGS;
3842 elf_data_section->output_section = NULL;
3843 elf_data_section->owner = abfd;
3844 elf_data_symbol->name = ".data";
3845 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
3846 elf_data_symbol->section = elf_data_section;
3847 }
3848 /* This code used to do *secp = bfd_und_section_ptr if
3849 info->shared. I don't know why, and that doesn't make sense,
3850 so I took it out. */
3851 *secp = elf_tdata (abfd)->elf_data_section;
3852 break;
3853
3854 case SHN_MIPS_SUNDEFINED:
3855 *secp = bfd_und_section_ptr;
3856 break;
3857 }
3858
3859 if (SGI_COMPAT (abfd)
3860 && ! info->shared
3861 && info->hash->creator == abfd->xvec
3862 && strcmp (*namep, "__rld_obj_head") == 0)
3863 {
3864 struct elf_link_hash_entry *h;
14a793b2 3865 struct bfd_link_hash_entry *bh;
b49e97c9
TS
3866
3867 /* Mark __rld_obj_head as dynamic. */
14a793b2 3868 bh = NULL;
b49e97c9
TS
3869 if (! (_bfd_generic_link_add_one_symbol
3870 (info, abfd, *namep, BSF_GLOBAL, *secp,
b34976b6 3871 (bfd_vma) *valp, (const char *) NULL, FALSE,
14a793b2 3872 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 3873 return FALSE;
14a793b2
AM
3874
3875 h = (struct elf_link_hash_entry *) bh;
b49e97c9
TS
3876 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
3877 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
3878 h->type = STT_OBJECT;
3879
3880 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 3881 return FALSE;
b49e97c9 3882
b34976b6 3883 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
b49e97c9
TS
3884 }
3885
3886 /* If this is a mips16 text symbol, add 1 to the value to make it
3887 odd. This will cause something like .word SYM to come up with
3888 the right value when it is loaded into the PC. */
3889 if (sym->st_other == STO_MIPS16)
3890 ++*valp;
3891
b34976b6 3892 return TRUE;
b49e97c9
TS
3893}
3894
3895/* This hook function is called before the linker writes out a global
3896 symbol. We mark symbols as small common if appropriate. This is
3897 also where we undo the increment of the value for a mips16 symbol. */
3898
b34976b6 3899bfd_boolean
b49e97c9
TS
3900_bfd_mips_elf_link_output_symbol_hook (abfd, info, name, sym, input_sec)
3901 bfd *abfd ATTRIBUTE_UNUSED;
3902 struct bfd_link_info *info ATTRIBUTE_UNUSED;
3903 const char *name ATTRIBUTE_UNUSED;
3904 Elf_Internal_Sym *sym;
3905 asection *input_sec;
3906{
3907 /* If we see a common symbol, which implies a relocatable link, then
3908 if a symbol was small common in an input file, mark it as small
3909 common in the output file. */
3910 if (sym->st_shndx == SHN_COMMON
3911 && strcmp (input_sec->name, ".scommon") == 0)
3912 sym->st_shndx = SHN_MIPS_SCOMMON;
3913
3914 if (sym->st_other == STO_MIPS16
3915 && (sym->st_value & 1) != 0)
3916 --sym->st_value;
3917
b34976b6 3918 return TRUE;
b49e97c9
TS
3919}
3920\f
3921/* Functions for the dynamic linker. */
3922
3923/* Create dynamic sections when linking against a dynamic object. */
3924
b34976b6 3925bfd_boolean
b49e97c9
TS
3926_bfd_mips_elf_create_dynamic_sections (abfd, info)
3927 bfd *abfd;
3928 struct bfd_link_info *info;
3929{
3930 struct elf_link_hash_entry *h;
14a793b2 3931 struct bfd_link_hash_entry *bh;
b49e97c9
TS
3932 flagword flags;
3933 register asection *s;
3934 const char * const *namep;
3935
3936 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
3937 | SEC_LINKER_CREATED | SEC_READONLY);
3938
3939 /* Mips ABI requests the .dynamic section to be read only. */
3940 s = bfd_get_section_by_name (abfd, ".dynamic");
3941 if (s != NULL)
3942 {
3943 if (! bfd_set_section_flags (abfd, s, flags))
b34976b6 3944 return FALSE;
b49e97c9
TS
3945 }
3946
3947 /* We need to create .got section. */
3948 if (! mips_elf_create_got_section (abfd, info))
b34976b6 3949 return FALSE;
b49e97c9
TS
3950
3951 /* Create the .msym section on IRIX6. It is used by the dynamic
3952 linker to speed up dynamic relocations, and to avoid computing
3953 the ELF hash for symbols. */
3954 if (IRIX_COMPAT (abfd) == ict_irix6
3955 && !mips_elf_create_msym_section (abfd))
b34976b6 3956 return FALSE;
b49e97c9
TS
3957
3958 /* Create .stub section. */
3959 if (bfd_get_section_by_name (abfd,
3960 MIPS_ELF_STUB_SECTION_NAME (abfd)) == NULL)
3961 {
3962 s = bfd_make_section (abfd, MIPS_ELF_STUB_SECTION_NAME (abfd));
3963 if (s == NULL
3964 || ! bfd_set_section_flags (abfd, s, flags | SEC_CODE)
3965 || ! bfd_set_section_alignment (abfd, s,
3966 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 3967 return FALSE;
b49e97c9
TS
3968 }
3969
3970 if ((IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
3971 && !info->shared
3972 && bfd_get_section_by_name (abfd, ".rld_map") == NULL)
3973 {
3974 s = bfd_make_section (abfd, ".rld_map");
3975 if (s == NULL
3976 || ! bfd_set_section_flags (abfd, s, flags &~ (flagword) SEC_READONLY)
3977 || ! bfd_set_section_alignment (abfd, s,
3978 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 3979 return FALSE;
b49e97c9
TS
3980 }
3981
3982 /* On IRIX5, we adjust add some additional symbols and change the
3983 alignments of several sections. There is no ABI documentation
3984 indicating that this is necessary on IRIX6, nor any evidence that
3985 the linker takes such action. */
3986 if (IRIX_COMPAT (abfd) == ict_irix5)
3987 {
3988 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
3989 {
14a793b2 3990 bh = NULL;
b49e97c9
TS
3991 if (! (_bfd_generic_link_add_one_symbol
3992 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr,
b34976b6 3993 (bfd_vma) 0, (const char *) NULL, FALSE,
14a793b2 3994 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 3995 return FALSE;
14a793b2
AM
3996
3997 h = (struct elf_link_hash_entry *) bh;
b49e97c9
TS
3998 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
3999 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4000 h->type = STT_SECTION;
4001
4002 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 4003 return FALSE;
b49e97c9
TS
4004 }
4005
4006 /* We need to create a .compact_rel section. */
4007 if (SGI_COMPAT (abfd))
4008 {
4009 if (!mips_elf_create_compact_rel_section (abfd, info))
b34976b6 4010 return FALSE;
b49e97c9
TS
4011 }
4012
44c410de 4013 /* Change alignments of some sections. */
b49e97c9
TS
4014 s = bfd_get_section_by_name (abfd, ".hash");
4015 if (s != NULL)
4016 bfd_set_section_alignment (abfd, s, 4);
4017 s = bfd_get_section_by_name (abfd, ".dynsym");
4018 if (s != NULL)
4019 bfd_set_section_alignment (abfd, s, 4);
4020 s = bfd_get_section_by_name (abfd, ".dynstr");
4021 if (s != NULL)
4022 bfd_set_section_alignment (abfd, s, 4);
4023 s = bfd_get_section_by_name (abfd, ".reginfo");
4024 if (s != NULL)
4025 bfd_set_section_alignment (abfd, s, 4);
4026 s = bfd_get_section_by_name (abfd, ".dynamic");
4027 if (s != NULL)
4028 bfd_set_section_alignment (abfd, s, 4);
4029 }
4030
4031 if (!info->shared)
4032 {
14a793b2
AM
4033 const char *name;
4034
4035 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
4036 bh = NULL;
4037 if (!(_bfd_generic_link_add_one_symbol
4038 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr,
b34976b6 4039 (bfd_vma) 0, (const char *) NULL, FALSE,
14a793b2 4040 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 4041 return FALSE;
14a793b2
AM
4042
4043 h = (struct elf_link_hash_entry *) bh;
b49e97c9
TS
4044 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4045 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4046 h->type = STT_SECTION;
4047
4048 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 4049 return FALSE;
b49e97c9
TS
4050
4051 if (! mips_elf_hash_table (info)->use_rld_obj_head)
4052 {
4053 /* __rld_map is a four byte word located in the .data section
4054 and is filled in by the rtld to contain a pointer to
4055 the _r_debug structure. Its symbol value will be set in
4056 _bfd_mips_elf_finish_dynamic_symbol. */
4057 s = bfd_get_section_by_name (abfd, ".rld_map");
4058 BFD_ASSERT (s != NULL);
4059
14a793b2
AM
4060 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
4061 bh = NULL;
4062 if (!(_bfd_generic_link_add_one_symbol
4063 (info, abfd, name, BSF_GLOBAL, s,
b34976b6 4064 (bfd_vma) 0, (const char *) NULL, FALSE,
14a793b2 4065 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 4066 return FALSE;
14a793b2
AM
4067
4068 h = (struct elf_link_hash_entry *) bh;
b49e97c9
TS
4069 h->elf_link_hash_flags &= ~ELF_LINK_NON_ELF;
4070 h->elf_link_hash_flags |= ELF_LINK_HASH_DEF_REGULAR;
4071 h->type = STT_OBJECT;
4072
4073 if (! bfd_elf32_link_record_dynamic_symbol (info, h))
b34976b6 4074 return FALSE;
b49e97c9
TS
4075 }
4076 }
4077
b34976b6 4078 return TRUE;
b49e97c9
TS
4079}
4080\f
4081/* Look through the relocs for a section during the first phase, and
4082 allocate space in the global offset table. */
4083
b34976b6 4084bfd_boolean
b49e97c9
TS
4085_bfd_mips_elf_check_relocs (abfd, info, sec, relocs)
4086 bfd *abfd;
4087 struct bfd_link_info *info;
4088 asection *sec;
4089 const Elf_Internal_Rela *relocs;
4090{
4091 const char *name;
4092 bfd *dynobj;
4093 Elf_Internal_Shdr *symtab_hdr;
4094 struct elf_link_hash_entry **sym_hashes;
4095 struct mips_got_info *g;
4096 size_t extsymoff;
4097 const Elf_Internal_Rela *rel;
4098 const Elf_Internal_Rela *rel_end;
4099 asection *sgot;
4100 asection *sreloc;
4101 struct elf_backend_data *bed;
4102
4103 if (info->relocateable)
b34976b6 4104 return TRUE;
b49e97c9
TS
4105
4106 dynobj = elf_hash_table (info)->dynobj;
4107 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
4108 sym_hashes = elf_sym_hashes (abfd);
4109 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
4110
4111 /* Check for the mips16 stub sections. */
4112
4113 name = bfd_get_section_name (abfd, sec);
4114 if (strncmp (name, FN_STUB, sizeof FN_STUB - 1) == 0)
4115 {
4116 unsigned long r_symndx;
4117
4118 /* Look at the relocation information to figure out which symbol
4119 this is for. */
4120
4121 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
4122
4123 if (r_symndx < extsymoff
4124 || sym_hashes[r_symndx - extsymoff] == NULL)
4125 {
4126 asection *o;
4127
4128 /* This stub is for a local symbol. This stub will only be
4129 needed if there is some relocation in this BFD, other
4130 than a 16 bit function call, which refers to this symbol. */
4131 for (o = abfd->sections; o != NULL; o = o->next)
4132 {
4133 Elf_Internal_Rela *sec_relocs;
4134 const Elf_Internal_Rela *r, *rend;
4135
4136 /* We can ignore stub sections when looking for relocs. */
4137 if ((o->flags & SEC_RELOC) == 0
4138 || o->reloc_count == 0
4139 || strncmp (bfd_get_section_name (abfd, o), FN_STUB,
4140 sizeof FN_STUB - 1) == 0
4141 || strncmp (bfd_get_section_name (abfd, o), CALL_STUB,
4142 sizeof CALL_STUB - 1) == 0
4143 || strncmp (bfd_get_section_name (abfd, o), CALL_FP_STUB,
4144 sizeof CALL_FP_STUB - 1) == 0)
4145 continue;
4146
ee6423ed 4147 sec_relocs = (MNAME(abfd,_bfd_elf,link_read_relocs)
b49e97c9
TS
4148 (abfd, o, (PTR) NULL,
4149 (Elf_Internal_Rela *) NULL,
4150 info->keep_memory));
4151 if (sec_relocs == NULL)
b34976b6 4152 return FALSE;
b49e97c9
TS
4153
4154 rend = sec_relocs + o->reloc_count;
4155 for (r = sec_relocs; r < rend; r++)
4156 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
4157 && ELF_R_TYPE (abfd, r->r_info) != R_MIPS16_26)
4158 break;
4159
6cdc0ccc 4160 if (elf_section_data (o)->relocs != sec_relocs)
b49e97c9
TS
4161 free (sec_relocs);
4162
4163 if (r < rend)
4164 break;
4165 }
4166
4167 if (o == NULL)
4168 {
4169 /* There is no non-call reloc for this stub, so we do
4170 not need it. Since this function is called before
4171 the linker maps input sections to output sections, we
4172 can easily discard it by setting the SEC_EXCLUDE
4173 flag. */
4174 sec->flags |= SEC_EXCLUDE;
b34976b6 4175 return TRUE;
b49e97c9
TS
4176 }
4177
4178 /* Record this stub in an array of local symbol stubs for
4179 this BFD. */
4180 if (elf_tdata (abfd)->local_stubs == NULL)
4181 {
4182 unsigned long symcount;
4183 asection **n;
4184 bfd_size_type amt;
4185
4186 if (elf_bad_symtab (abfd))
4187 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
4188 else
4189 symcount = symtab_hdr->sh_info;
4190 amt = symcount * sizeof (asection *);
4191 n = (asection **) bfd_zalloc (abfd, amt);
4192 if (n == NULL)
b34976b6 4193 return FALSE;
b49e97c9
TS
4194 elf_tdata (abfd)->local_stubs = n;
4195 }
4196
4197 elf_tdata (abfd)->local_stubs[r_symndx] = sec;
4198
4199 /* We don't need to set mips16_stubs_seen in this case.
4200 That flag is used to see whether we need to look through
4201 the global symbol table for stubs. We don't need to set
4202 it here, because we just have a local stub. */
4203 }
4204 else
4205 {
4206 struct mips_elf_link_hash_entry *h;
4207
4208 h = ((struct mips_elf_link_hash_entry *)
4209 sym_hashes[r_symndx - extsymoff]);
4210
4211 /* H is the symbol this stub is for. */
4212
4213 h->fn_stub = sec;
b34976b6 4214 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
b49e97c9
TS
4215 }
4216 }
4217 else if (strncmp (name, CALL_STUB, sizeof CALL_STUB - 1) == 0
4218 || strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
4219 {
4220 unsigned long r_symndx;
4221 struct mips_elf_link_hash_entry *h;
4222 asection **loc;
4223
4224 /* Look at the relocation information to figure out which symbol
4225 this is for. */
4226
4227 r_symndx = ELF_R_SYM (abfd, relocs->r_info);
4228
4229 if (r_symndx < extsymoff
4230 || sym_hashes[r_symndx - extsymoff] == NULL)
4231 {
4232 /* This stub was actually built for a static symbol defined
4233 in the same file. We assume that all static symbols in
4234 mips16 code are themselves mips16, so we can simply
4235 discard this stub. Since this function is called before
4236 the linker maps input sections to output sections, we can
4237 easily discard it by setting the SEC_EXCLUDE flag. */
4238 sec->flags |= SEC_EXCLUDE;
b34976b6 4239 return TRUE;
b49e97c9
TS
4240 }
4241
4242 h = ((struct mips_elf_link_hash_entry *)
4243 sym_hashes[r_symndx - extsymoff]);
4244
4245 /* H is the symbol this stub is for. */
4246
4247 if (strncmp (name, CALL_FP_STUB, sizeof CALL_FP_STUB - 1) == 0)
4248 loc = &h->call_fp_stub;
4249 else
4250 loc = &h->call_stub;
4251
4252 /* If we already have an appropriate stub for this function, we
4253 don't need another one, so we can discard this one. Since
4254 this function is called before the linker maps input sections
4255 to output sections, we can easily discard it by setting the
4256 SEC_EXCLUDE flag. We can also discard this section if we
4257 happen to already know that this is a mips16 function; it is
4258 not necessary to check this here, as it is checked later, but
4259 it is slightly faster to check now. */
4260 if (*loc != NULL || h->root.other == STO_MIPS16)
4261 {
4262 sec->flags |= SEC_EXCLUDE;
b34976b6 4263 return TRUE;
b49e97c9
TS
4264 }
4265
4266 *loc = sec;
b34976b6 4267 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
b49e97c9
TS
4268 }
4269
4270 if (dynobj == NULL)
4271 {
4272 sgot = NULL;
4273 g = NULL;
4274 }
4275 else
4276 {
4277 sgot = mips_elf_got_section (dynobj);
4278 if (sgot == NULL)
4279 g = NULL;
4280 else
4281 {
4282 BFD_ASSERT (elf_section_data (sgot) != NULL);
4283 g = (struct mips_got_info *) elf_section_data (sgot)->tdata;
4284 BFD_ASSERT (g != NULL);
4285 }
4286 }
4287
4288 sreloc = NULL;
4289 bed = get_elf_backend_data (abfd);
4290 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
4291 for (rel = relocs; rel < rel_end; ++rel)
4292 {
4293 unsigned long r_symndx;
4294 unsigned int r_type;
4295 struct elf_link_hash_entry *h;
4296
4297 r_symndx = ELF_R_SYM (abfd, rel->r_info);
4298 r_type = ELF_R_TYPE (abfd, rel->r_info);
4299
4300 if (r_symndx < extsymoff)
4301 h = NULL;
4302 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
4303 {
4304 (*_bfd_error_handler)
4305 (_("%s: Malformed reloc detected for section %s"),
4306 bfd_archive_filename (abfd), name);
4307 bfd_set_error (bfd_error_bad_value);
b34976b6 4308 return FALSE;
b49e97c9
TS
4309 }
4310 else
4311 {
4312 h = sym_hashes[r_symndx - extsymoff];
4313
4314 /* This may be an indirect symbol created because of a version. */
4315 if (h != NULL)
4316 {
4317 while (h->root.type == bfd_link_hash_indirect)
4318 h = (struct elf_link_hash_entry *) h->root.u.i.link;
4319 }
4320 }
4321
4322 /* Some relocs require a global offset table. */
4323 if (dynobj == NULL || sgot == NULL)
4324 {
4325 switch (r_type)
4326 {
4327 case R_MIPS_GOT16:
4328 case R_MIPS_CALL16:
4329 case R_MIPS_CALL_HI16:
4330 case R_MIPS_CALL_LO16:
4331 case R_MIPS_GOT_HI16:
4332 case R_MIPS_GOT_LO16:
4333 case R_MIPS_GOT_PAGE:
4334 case R_MIPS_GOT_OFST:
4335 case R_MIPS_GOT_DISP:
4336 if (dynobj == NULL)
4337 elf_hash_table (info)->dynobj = dynobj = abfd;
4338 if (! mips_elf_create_got_section (dynobj, info))
b34976b6 4339 return FALSE;
b49e97c9
TS
4340 g = mips_elf_got_info (dynobj, &sgot);
4341 break;
4342
4343 case R_MIPS_32:
4344 case R_MIPS_REL32:
4345 case R_MIPS_64:
4346 if (dynobj == NULL
4347 && (info->shared || h != NULL)
4348 && (sec->flags & SEC_ALLOC) != 0)
4349 elf_hash_table (info)->dynobj = dynobj = abfd;
4350 break;
4351
4352 default:
4353 break;
4354 }
4355 }
4356
4357 if (!h && (r_type == R_MIPS_CALL_LO16
4358 || r_type == R_MIPS_GOT_LO16
4359 || r_type == R_MIPS_GOT_DISP))
4360 {
4361 /* We may need a local GOT entry for this relocation. We
4362 don't count R_MIPS_GOT_PAGE because we can estimate the
4363 maximum number of pages needed by looking at the size of
4364 the segment. Similar comments apply to R_MIPS_GOT16 and
4365 R_MIPS_CALL16. We don't count R_MIPS_GOT_HI16, or
4366 R_MIPS_CALL_HI16 because these are always followed by an
4367 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.
4368
4369 This estimation is very conservative since we can merge
4370 duplicate entries in the GOT. In order to be less
4371 conservative, we could actually build the GOT here,
4372 rather than in relocate_section. */
4373 g->local_gotno++;
4374 sgot->_raw_size += MIPS_ELF_GOT_SIZE (dynobj);
4375 }
4376
4377 switch (r_type)
4378 {
4379 case R_MIPS_CALL16:
4380 if (h == NULL)
4381 {
4382 (*_bfd_error_handler)
4383 (_("%s: CALL16 reloc at 0x%lx not against global symbol"),
4384 bfd_archive_filename (abfd), (unsigned long) rel->r_offset);
4385 bfd_set_error (bfd_error_bad_value);
b34976b6 4386 return FALSE;
b49e97c9
TS
4387 }
4388 /* Fall through. */
4389
4390 case R_MIPS_CALL_HI16:
4391 case R_MIPS_CALL_LO16:
4392 if (h != NULL)
4393 {
4394 /* This symbol requires a global offset table entry. */
4395 if (! mips_elf_record_global_got_symbol (h, info, g))
b34976b6 4396 return FALSE;
b49e97c9
TS
4397
4398 /* We need a stub, not a plt entry for the undefined
4399 function. But we record it as if it needs plt. See
4400 elf_adjust_dynamic_symbol in elflink.h. */
4401 h->elf_link_hash_flags |= ELF_LINK_HASH_NEEDS_PLT;
4402 h->type = STT_FUNC;
4403 }
4404 break;
4405
4406 case R_MIPS_GOT16:
4407 case R_MIPS_GOT_HI16:
4408 case R_MIPS_GOT_LO16:
4409 case R_MIPS_GOT_DISP:
4410 /* This symbol requires a global offset table entry. */
4411 if (h && ! mips_elf_record_global_got_symbol (h, info, g))
b34976b6 4412 return FALSE;
b49e97c9
TS
4413 break;
4414
4415 case R_MIPS_32:
4416 case R_MIPS_REL32:
4417 case R_MIPS_64:
4418 if ((info->shared || h != NULL)
4419 && (sec->flags & SEC_ALLOC) != 0)
4420 {
4421 if (sreloc == NULL)
4422 {
4423 const char *dname = ".rel.dyn";
4424
4425 sreloc = bfd_get_section_by_name (dynobj, dname);
4426 if (sreloc == NULL)
4427 {
4428 sreloc = bfd_make_section (dynobj, dname);
4429 if (sreloc == NULL
4430 || ! bfd_set_section_flags (dynobj, sreloc,
4431 (SEC_ALLOC
4432 | SEC_LOAD
4433 | SEC_HAS_CONTENTS
4434 | SEC_IN_MEMORY
4435 | SEC_LINKER_CREATED
4436 | SEC_READONLY))
4437 || ! bfd_set_section_alignment (dynobj, sreloc,
4438 4))
b34976b6 4439 return FALSE;
b49e97c9
TS
4440 }
4441 }
4442#define MIPS_READONLY_SECTION (SEC_ALLOC | SEC_LOAD | SEC_READONLY)
4443 if (info->shared)
4444 {
4445 /* When creating a shared object, we must copy these
4446 reloc types into the output file as R_MIPS_REL32
4447 relocs. We make room for this reloc in the
4448 .rel.dyn reloc section. */
4449 mips_elf_allocate_dynamic_relocations (dynobj, 1);
4450 if ((sec->flags & MIPS_READONLY_SECTION)
4451 == MIPS_READONLY_SECTION)
4452 /* We tell the dynamic linker that there are
4453 relocations against the text segment. */
4454 info->flags |= DF_TEXTREL;
4455 }
4456 else
4457 {
4458 struct mips_elf_link_hash_entry *hmips;
4459
4460 /* We only need to copy this reloc if the symbol is
4461 defined in a dynamic object. */
4462 hmips = (struct mips_elf_link_hash_entry *) h;
4463 ++hmips->possibly_dynamic_relocs;
4464 if ((sec->flags & MIPS_READONLY_SECTION)
4465 == MIPS_READONLY_SECTION)
4466 /* We need it to tell the dynamic linker if there
4467 are relocations against the text segment. */
b34976b6 4468 hmips->readonly_reloc = TRUE;
b49e97c9
TS
4469 }
4470
4471 /* Even though we don't directly need a GOT entry for
4472 this symbol, a symbol must have a dynamic symbol
4473 table index greater that DT_MIPS_GOTSYM if there are
4474 dynamic relocations against it. */
4475 if (h != NULL
4476 && ! mips_elf_record_global_got_symbol (h, info, g))
b34976b6 4477 return FALSE;
b49e97c9
TS
4478 }
4479
4480 if (SGI_COMPAT (abfd))
4481 mips_elf_hash_table (info)->compact_rel_size +=
4482 sizeof (Elf32_External_crinfo);
4483 break;
4484
4485 case R_MIPS_26:
4486 case R_MIPS_GPREL16:
4487 case R_MIPS_LITERAL:
4488 case R_MIPS_GPREL32:
4489 if (SGI_COMPAT (abfd))
4490 mips_elf_hash_table (info)->compact_rel_size +=
4491 sizeof (Elf32_External_crinfo);
4492 break;
4493
4494 /* This relocation describes the C++ object vtable hierarchy.
4495 Reconstruct it for later use during GC. */
4496 case R_MIPS_GNU_VTINHERIT:
4497 if (!_bfd_elf32_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
b34976b6 4498 return FALSE;
b49e97c9
TS
4499 break;
4500
4501 /* This relocation describes which C++ vtable entries are actually
4502 used. Record for later use during GC. */
4503 case R_MIPS_GNU_VTENTRY:
4504 if (!_bfd_elf32_gc_record_vtentry (abfd, sec, h, rel->r_offset))
b34976b6 4505 return FALSE;
b49e97c9
TS
4506 break;
4507
4508 default:
4509 break;
4510 }
4511
4512 /* We must not create a stub for a symbol that has relocations
4513 related to taking the function's address. */
4514 switch (r_type)
4515 {
4516 default:
4517 if (h != NULL)
4518 {
4519 struct mips_elf_link_hash_entry *mh;
4520
4521 mh = (struct mips_elf_link_hash_entry *) h;
b34976b6 4522 mh->no_fn_stub = TRUE;
b49e97c9
TS
4523 }
4524 break;
4525 case R_MIPS_CALL16:
4526 case R_MIPS_CALL_HI16:
4527 case R_MIPS_CALL_LO16:
4528 break;
4529 }
4530
4531 /* If this reloc is not a 16 bit call, and it has a global
4532 symbol, then we will need the fn_stub if there is one.
4533 References from a stub section do not count. */
4534 if (h != NULL
4535 && r_type != R_MIPS16_26
4536 && strncmp (bfd_get_section_name (abfd, sec), FN_STUB,
4537 sizeof FN_STUB - 1) != 0
4538 && strncmp (bfd_get_section_name (abfd, sec), CALL_STUB,
4539 sizeof CALL_STUB - 1) != 0
4540 && strncmp (bfd_get_section_name (abfd, sec), CALL_FP_STUB,
4541 sizeof CALL_FP_STUB - 1) != 0)
4542 {
4543 struct mips_elf_link_hash_entry *mh;
4544
4545 mh = (struct mips_elf_link_hash_entry *) h;
b34976b6 4546 mh->need_fn_stub = TRUE;
b49e97c9
TS
4547 }
4548 }
4549
b34976b6 4550 return TRUE;
b49e97c9
TS
4551}
4552\f
4553/* Adjust a symbol defined by a dynamic object and referenced by a
4554 regular object. The current definition is in some section of the
4555 dynamic object, but we're not including those sections. We have to
4556 change the definition to something the rest of the link can
4557 understand. */
4558
b34976b6 4559bfd_boolean
b49e97c9
TS
4560_bfd_mips_elf_adjust_dynamic_symbol (info, h)
4561 struct bfd_link_info *info;
4562 struct elf_link_hash_entry *h;
4563{
4564 bfd *dynobj;
4565 struct mips_elf_link_hash_entry *hmips;
4566 asection *s;
4567
4568 dynobj = elf_hash_table (info)->dynobj;
4569
4570 /* Make sure we know what is going on here. */
4571 BFD_ASSERT (dynobj != NULL
4572 && ((h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT)
4573 || h->weakdef != NULL
4574 || ((h->elf_link_hash_flags
4575 & ELF_LINK_HASH_DEF_DYNAMIC) != 0
4576 && (h->elf_link_hash_flags
4577 & ELF_LINK_HASH_REF_REGULAR) != 0
4578 && (h->elf_link_hash_flags
4579 & ELF_LINK_HASH_DEF_REGULAR) == 0)));
4580
4581 /* If this symbol is defined in a dynamic object, we need to copy
4582 any R_MIPS_32 or R_MIPS_REL32 relocs against it into the output
4583 file. */
4584 hmips = (struct mips_elf_link_hash_entry *) h;
4585 if (! info->relocateable
4586 && hmips->possibly_dynamic_relocs != 0
4587 && (h->root.type == bfd_link_hash_defweak
4588 || (h->elf_link_hash_flags
4589 & ELF_LINK_HASH_DEF_REGULAR) == 0))
4590 {
4591 mips_elf_allocate_dynamic_relocations (dynobj,
4592 hmips->possibly_dynamic_relocs);
4593 if (hmips->readonly_reloc)
4594 /* We tell the dynamic linker that there are relocations
4595 against the text segment. */
4596 info->flags |= DF_TEXTREL;
4597 }
4598
4599 /* For a function, create a stub, if allowed. */
4600 if (! hmips->no_fn_stub
4601 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) != 0)
4602 {
4603 if (! elf_hash_table (info)->dynamic_sections_created)
b34976b6 4604 return TRUE;
b49e97c9
TS
4605
4606 /* If this symbol is not defined in a regular file, then set
4607 the symbol to the stub location. This is required to make
4608 function pointers compare as equal between the normal
4609 executable and the shared library. */
4610 if ((h->elf_link_hash_flags & ELF_LINK_HASH_DEF_REGULAR) == 0)
4611 {
4612 /* We need .stub section. */
4613 s = bfd_get_section_by_name (dynobj,
4614 MIPS_ELF_STUB_SECTION_NAME (dynobj));
4615 BFD_ASSERT (s != NULL);
4616
4617 h->root.u.def.section = s;
4618 h->root.u.def.value = s->_raw_size;
4619
4620 /* XXX Write this stub address somewhere. */
4621 h->plt.offset = s->_raw_size;
4622
4623 /* Make room for this stub code. */
4624 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
4625
4626 /* The last half word of the stub will be filled with the index
4627 of this symbol in .dynsym section. */
b34976b6 4628 return TRUE;
b49e97c9
TS
4629 }
4630 }
4631 else if ((h->type == STT_FUNC)
4632 && (h->elf_link_hash_flags & ELF_LINK_HASH_NEEDS_PLT) == 0)
4633 {
4634 /* This will set the entry for this symbol in the GOT to 0, and
4635 the dynamic linker will take care of this. */
4636 h->root.u.def.value = 0;
b34976b6 4637 return TRUE;
b49e97c9
TS
4638 }
4639
4640 /* If this is a weak symbol, and there is a real definition, the
4641 processor independent code will have arranged for us to see the
4642 real definition first, and we can just use the same value. */
4643 if (h->weakdef != NULL)
4644 {
4645 BFD_ASSERT (h->weakdef->root.type == bfd_link_hash_defined
4646 || h->weakdef->root.type == bfd_link_hash_defweak);
4647 h->root.u.def.section = h->weakdef->root.u.def.section;
4648 h->root.u.def.value = h->weakdef->root.u.def.value;
b34976b6 4649 return TRUE;
b49e97c9
TS
4650 }
4651
4652 /* This is a reference to a symbol defined by a dynamic object which
4653 is not a function. */
4654
b34976b6 4655 return TRUE;
b49e97c9
TS
4656}
4657\f
4658/* This function is called after all the input files have been read,
4659 and the input sections have been assigned to output sections. We
4660 check for any mips16 stub sections that we can discard. */
4661
b34976b6 4662bfd_boolean
b49e97c9
TS
4663_bfd_mips_elf_always_size_sections (output_bfd, info)
4664 bfd *output_bfd;
4665 struct bfd_link_info *info;
4666{
4667 asection *ri;
4668
4669 /* The .reginfo section has a fixed size. */
4670 ri = bfd_get_section_by_name (output_bfd, ".reginfo");
4671 if (ri != NULL)
4672 bfd_set_section_size (output_bfd, ri,
4673 (bfd_size_type) sizeof (Elf32_External_RegInfo));
4674
4675 if (info->relocateable
4676 || ! mips_elf_hash_table (info)->mips16_stubs_seen)
b34976b6 4677 return TRUE;
b49e97c9
TS
4678
4679 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
4680 mips_elf_check_mips16_stubs,
4681 (PTR) NULL);
4682
b34976b6 4683 return TRUE;
b49e97c9
TS
4684}
4685
4686/* Set the sizes of the dynamic sections. */
4687
b34976b6 4688bfd_boolean
b49e97c9
TS
4689_bfd_mips_elf_size_dynamic_sections (output_bfd, info)
4690 bfd *output_bfd;
4691 struct bfd_link_info *info;
4692{
4693 bfd *dynobj;
4694 asection *s;
b34976b6 4695 bfd_boolean reltext;
b49e97c9
TS
4696 struct mips_got_info *g = NULL;
4697
4698 dynobj = elf_hash_table (info)->dynobj;
4699 BFD_ASSERT (dynobj != NULL);
4700
4701 if (elf_hash_table (info)->dynamic_sections_created)
4702 {
4703 /* Set the contents of the .interp section to the interpreter. */
4704 if (! info->shared)
4705 {
4706 s = bfd_get_section_by_name (dynobj, ".interp");
4707 BFD_ASSERT (s != NULL);
4708 s->_raw_size
4709 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
4710 s->contents
4711 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
4712 }
4713 }
4714
4715 /* The check_relocs and adjust_dynamic_symbol entry points have
4716 determined the sizes of the various dynamic sections. Allocate
4717 memory for them. */
b34976b6 4718 reltext = FALSE;
b49e97c9
TS
4719 for (s = dynobj->sections; s != NULL; s = s->next)
4720 {
4721 const char *name;
b34976b6 4722 bfd_boolean strip;
b49e97c9
TS
4723
4724 /* It's OK to base decisions on the section name, because none
4725 of the dynobj section names depend upon the input files. */
4726 name = bfd_get_section_name (dynobj, s);
4727
4728 if ((s->flags & SEC_LINKER_CREATED) == 0)
4729 continue;
4730
b34976b6 4731 strip = FALSE;
b49e97c9
TS
4732
4733 if (strncmp (name, ".rel", 4) == 0)
4734 {
4735 if (s->_raw_size == 0)
4736 {
4737 /* We only strip the section if the output section name
4738 has the same name. Otherwise, there might be several
4739 input sections for this output section. FIXME: This
4740 code is probably not needed these days anyhow, since
4741 the linker now does not create empty output sections. */
4742 if (s->output_section != NULL
4743 && strcmp (name,
4744 bfd_get_section_name (s->output_section->owner,
4745 s->output_section)) == 0)
b34976b6 4746 strip = TRUE;
b49e97c9
TS
4747 }
4748 else
4749 {
4750 const char *outname;
4751 asection *target;
4752
4753 /* If this relocation section applies to a read only
4754 section, then we probably need a DT_TEXTREL entry.
4755 If the relocation section is .rel.dyn, we always
4756 assert a DT_TEXTREL entry rather than testing whether
4757 there exists a relocation to a read only section or
4758 not. */
4759 outname = bfd_get_section_name (output_bfd,
4760 s->output_section);
4761 target = bfd_get_section_by_name (output_bfd, outname + 4);
4762 if ((target != NULL
4763 && (target->flags & SEC_READONLY) != 0
4764 && (target->flags & SEC_ALLOC) != 0)
4765 || strcmp (outname, ".rel.dyn") == 0)
b34976b6 4766 reltext = TRUE;
b49e97c9
TS
4767
4768 /* We use the reloc_count field as a counter if we need
4769 to copy relocs into the output file. */
4770 if (strcmp (name, ".rel.dyn") != 0)
4771 s->reloc_count = 0;
4772 }
4773 }
4774 else if (strncmp (name, ".got", 4) == 0)
4775 {
4776 int i;
4777 bfd_size_type loadable_size = 0;
4778 bfd_size_type local_gotno;
4779 bfd *sub;
4780
4781 BFD_ASSERT (elf_section_data (s) != NULL);
4782 g = (struct mips_got_info *) elf_section_data (s)->tdata;
4783 BFD_ASSERT (g != NULL);
4784
4785 /* Calculate the total loadable size of the output. That
4786 will give us the maximum number of GOT_PAGE entries
4787 required. */
4788 for (sub = info->input_bfds; sub; sub = sub->link_next)
4789 {
4790 asection *subsection;
4791
4792 for (subsection = sub->sections;
4793 subsection;
4794 subsection = subsection->next)
4795 {
4796 if ((subsection->flags & SEC_ALLOC) == 0)
4797 continue;
4798 loadable_size += ((subsection->_raw_size + 0xf)
4799 &~ (bfd_size_type) 0xf);
4800 }
4801 }
4802 loadable_size += MIPS_FUNCTION_STUB_SIZE;
4803
4804 /* Assume there are two loadable segments consisting of
4805 contiguous sections. Is 5 enough? */
4806 local_gotno = (loadable_size >> 16) + 5;
4a14403c 4807 if (NEWABI_P (output_bfd))
b49e97c9
TS
4808 /* It's possible we will need GOT_PAGE entries as well as
4809 GOT16 entries. Often, these will be able to share GOT
4810 entries, but not always. */
4811 local_gotno *= 2;
4812
4813 g->local_gotno += local_gotno;
4814 s->_raw_size += local_gotno * MIPS_ELF_GOT_SIZE (dynobj);
4815
4816 /* There has to be a global GOT entry for every symbol with
4817 a dynamic symbol table index of DT_MIPS_GOTSYM or
4818 higher. Therefore, it make sense to put those symbols
4819 that need GOT entries at the end of the symbol table. We
4820 do that here. */
4821 if (! mips_elf_sort_hash_table (info, 1))
b34976b6 4822 return FALSE;
b49e97c9
TS
4823
4824 if (g->global_gotsym != NULL)
4825 i = elf_hash_table (info)->dynsymcount - g->global_gotsym->dynindx;
4826 else
4827 /* If there are no global symbols, or none requiring
4828 relocations, then GLOBAL_GOTSYM will be NULL. */
4829 i = 0;
4830 g->global_gotno = i;
4831 s->_raw_size += i * MIPS_ELF_GOT_SIZE (dynobj);
4832 }
4833 else if (strcmp (name, MIPS_ELF_STUB_SECTION_NAME (output_bfd)) == 0)
4834 {
8dc1a139 4835 /* IRIX rld assumes that the function stub isn't at the end
b49e97c9
TS
4836 of .text section. So put a dummy. XXX */
4837 s->_raw_size += MIPS_FUNCTION_STUB_SIZE;
4838 }
4839 else if (! info->shared
4840 && ! mips_elf_hash_table (info)->use_rld_obj_head
4841 && strncmp (name, ".rld_map", 8) == 0)
4842 {
4843 /* We add a room for __rld_map. It will be filled in by the
4844 rtld to contain a pointer to the _r_debug structure. */
4845 s->_raw_size += 4;
4846 }
4847 else if (SGI_COMPAT (output_bfd)
4848 && strncmp (name, ".compact_rel", 12) == 0)
4849 s->_raw_size += mips_elf_hash_table (info)->compact_rel_size;
4850 else if (strcmp (name, ".msym") == 0)
4851 s->_raw_size = (sizeof (Elf32_External_Msym)
4852 * (elf_hash_table (info)->dynsymcount
4853 + bfd_count_sections (output_bfd)));
4854 else if (strncmp (name, ".init", 5) != 0)
4855 {
4856 /* It's not one of our sections, so don't allocate space. */
4857 continue;
4858 }
4859
4860 if (strip)
4861 {
4862 _bfd_strip_section_from_output (info, s);
4863 continue;
4864 }
4865
4866 /* Allocate memory for the section contents. */
4867 s->contents = (bfd_byte *) bfd_zalloc (dynobj, s->_raw_size);
4868 if (s->contents == NULL && s->_raw_size != 0)
4869 {
4870 bfd_set_error (bfd_error_no_memory);
b34976b6 4871 return FALSE;
b49e97c9
TS
4872 }
4873 }
4874
4875 if (elf_hash_table (info)->dynamic_sections_created)
4876 {
4877 /* Add some entries to the .dynamic section. We fill in the
4878 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
4879 must add the entries now so that we get the correct size for
4880 the .dynamic section. The DT_DEBUG entry is filled in by the
4881 dynamic linker and used by the debugger. */
4882 if (! info->shared)
4883 {
4884 /* SGI object has the equivalence of DT_DEBUG in the
4885 DT_MIPS_RLD_MAP entry. */
4886 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
b34976b6 4887 return FALSE;
b49e97c9
TS
4888 if (!SGI_COMPAT (output_bfd))
4889 {
4890 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
b34976b6 4891 return FALSE;
b49e97c9
TS
4892 }
4893 }
4894 else
4895 {
4896 /* Shared libraries on traditional mips have DT_DEBUG. */
4897 if (!SGI_COMPAT (output_bfd))
4898 {
4899 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
b34976b6 4900 return FALSE;
b49e97c9
TS
4901 }
4902 }
4903
4904 if (reltext && SGI_COMPAT (output_bfd))
4905 info->flags |= DF_TEXTREL;
4906
4907 if ((info->flags & DF_TEXTREL) != 0)
4908 {
4909 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
b34976b6 4910 return FALSE;
b49e97c9
TS
4911 }
4912
4913 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
b34976b6 4914 return FALSE;
b49e97c9
TS
4915
4916 if (bfd_get_section_by_name (dynobj, ".rel.dyn"))
4917 {
4918 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
b34976b6 4919 return FALSE;
b49e97c9
TS
4920
4921 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
b34976b6 4922 return FALSE;
b49e97c9
TS
4923
4924 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
b34976b6 4925 return FALSE;
b49e97c9
TS
4926 }
4927
4928 if (SGI_COMPAT (output_bfd))
4929 {
4930 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICTNO, 0))
b34976b6 4931 return FALSE;
b49e97c9
TS
4932 }
4933
4934 if (SGI_COMPAT (output_bfd))
4935 {
4936 if (!MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLISTNO, 0))
b34976b6 4937 return FALSE;
b49e97c9
TS
4938 }
4939
4940 if (bfd_get_section_by_name (dynobj, ".conflict") != NULL)
4941 {
4942 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_CONFLICT, 0))
b34976b6 4943 return FALSE;
b49e97c9
TS
4944
4945 s = bfd_get_section_by_name (dynobj, ".liblist");
4946 BFD_ASSERT (s != NULL);
4947
4948 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LIBLIST, 0))
b34976b6 4949 return FALSE;
b49e97c9
TS
4950 }
4951
4952 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
b34976b6 4953 return FALSE;
b49e97c9
TS
4954
4955 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
b34976b6 4956 return FALSE;
b49e97c9
TS
4957
4958#if 0
4959 /* Time stamps in executable files are a bad idea. */
4960 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_TIME_STAMP, 0))
b34976b6 4961 return FALSE;
b49e97c9
TS
4962#endif
4963
4964#if 0 /* FIXME */
4965 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_ICHECKSUM, 0))
b34976b6 4966 return FALSE;
b49e97c9
TS
4967#endif
4968
4969#if 0 /* FIXME */
4970 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_IVERSION, 0))
b34976b6 4971 return FALSE;
b49e97c9
TS
4972#endif
4973
4974 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
b34976b6 4975 return FALSE;
b49e97c9
TS
4976
4977 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
b34976b6 4978 return FALSE;
b49e97c9
TS
4979
4980 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
b34976b6 4981 return FALSE;
b49e97c9
TS
4982
4983 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
b34976b6 4984 return FALSE;
b49e97c9
TS
4985
4986 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
b34976b6 4987 return FALSE;
b49e97c9
TS
4988
4989 if (IRIX_COMPAT (dynobj) == ict_irix5
4990 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
b34976b6 4991 return FALSE;
b49e97c9
TS
4992
4993 if (IRIX_COMPAT (dynobj) == ict_irix6
4994 && (bfd_get_section_by_name
4995 (dynobj, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
4996 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
b34976b6 4997 return FALSE;
b49e97c9
TS
4998
4999 if (bfd_get_section_by_name (dynobj, ".msym")
5000 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_MSYM, 0))
b34976b6 5001 return FALSE;
b49e97c9
TS
5002 }
5003
b34976b6 5004 return TRUE;
b49e97c9
TS
5005}
5006\f
5007/* Relocate a MIPS ELF section. */
5008
b34976b6 5009bfd_boolean
b49e97c9
TS
5010_bfd_mips_elf_relocate_section (output_bfd, info, input_bfd, input_section,
5011 contents, relocs, local_syms, local_sections)
5012 bfd *output_bfd;
5013 struct bfd_link_info *info;
5014 bfd *input_bfd;
5015 asection *input_section;
5016 bfd_byte *contents;
5017 Elf_Internal_Rela *relocs;
5018 Elf_Internal_Sym *local_syms;
5019 asection **local_sections;
5020{
5021 Elf_Internal_Rela *rel;
5022 const Elf_Internal_Rela *relend;
5023 bfd_vma addend = 0;
b34976b6 5024 bfd_boolean use_saved_addend_p = FALSE;
b49e97c9
TS
5025 struct elf_backend_data *bed;
5026
5027 bed = get_elf_backend_data (output_bfd);
5028 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
5029 for (rel = relocs; rel < relend; ++rel)
5030 {
5031 const char *name;
5032 bfd_vma value;
5033 reloc_howto_type *howto;
b34976b6
AM
5034 bfd_boolean require_jalx;
5035 /* TRUE if the relocation is a RELA relocation, rather than a
b49e97c9 5036 REL relocation. */
b34976b6 5037 bfd_boolean rela_relocation_p = TRUE;
b49e97c9
TS
5038 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
5039 const char * msg = (const char *) NULL;
5040
5041 /* Find the relocation howto for this relocation. */
4a14403c 5042 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
b49e97c9
TS
5043 {
5044 /* Some 32-bit code uses R_MIPS_64. In particular, people use
5045 64-bit code, but make sure all their addresses are in the
5046 lowermost or uppermost 32-bit section of the 64-bit address
5047 space. Thus, when they use an R_MIPS_64 they mean what is
5048 usually meant by R_MIPS_32, with the exception that the
5049 stored value is sign-extended to 64 bits. */
b34976b6 5050 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
b49e97c9
TS
5051
5052 /* On big-endian systems, we need to lie about the position
5053 of the reloc. */
5054 if (bfd_big_endian (input_bfd))
5055 rel->r_offset += 4;
5056 }
5057 else
5058 /* NewABI defaults to RELA relocations. */
5059 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type,
4ffba85c
AO
5060 NEWABI_P (input_bfd)
5061 && (MIPS_RELOC_RELA_P
5062 (input_bfd, input_section,
5063 rel - relocs)));
b49e97c9
TS
5064
5065 if (!use_saved_addend_p)
5066 {
5067 Elf_Internal_Shdr *rel_hdr;
5068
5069 /* If these relocations were originally of the REL variety,
5070 we must pull the addend out of the field that will be
5071 relocated. Otherwise, we simply use the contents of the
5072 RELA relocation. To determine which flavor or relocation
5073 this is, we depend on the fact that the INPUT_SECTION's
5074 REL_HDR is read before its REL_HDR2. */
5075 rel_hdr = &elf_section_data (input_section)->rel_hdr;
5076 if ((size_t) (rel - relocs)
5077 >= (NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel))
5078 rel_hdr = elf_section_data (input_section)->rel_hdr2;
5079 if (rel_hdr->sh_entsize == MIPS_ELF_REL_SIZE (input_bfd))
5080 {
5081 /* Note that this is a REL relocation. */
b34976b6 5082 rela_relocation_p = FALSE;
b49e97c9
TS
5083
5084 /* Get the addend, which is stored in the input file. */
5085 addend = mips_elf_obtain_contents (howto, rel, input_bfd,
5086 contents);
5087 addend &= howto->src_mask;
5a659663 5088 addend <<= howto->rightshift;
b49e97c9
TS
5089
5090 /* For some kinds of relocations, the ADDEND is a
5091 combination of the addend stored in two different
5092 relocations. */
5093 if (r_type == R_MIPS_HI16
5094 || r_type == R_MIPS_GNU_REL_HI16
5095 || (r_type == R_MIPS_GOT16
5096 && mips_elf_local_relocation_p (input_bfd, rel,
b34976b6 5097 local_sections, FALSE)))
b49e97c9
TS
5098 {
5099 bfd_vma l;
5100 const Elf_Internal_Rela *lo16_relocation;
5101 reloc_howto_type *lo16_howto;
5102 unsigned int lo;
5103
5104 /* The combined value is the sum of the HI16 addend,
5105 left-shifted by sixteen bits, and the LO16
5106 addend, sign extended. (Usually, the code does
5107 a `lui' of the HI16 value, and then an `addiu' of
5108 the LO16 value.)
5109
5110 Scan ahead to find a matching LO16 relocation. */
5111 if (r_type == R_MIPS_GNU_REL_HI16)
5112 lo = R_MIPS_GNU_REL_LO16;
5113 else
5114 lo = R_MIPS_LO16;
5115 lo16_relocation = mips_elf_next_relocation (input_bfd, lo,
5116 rel, relend);
5117 if (lo16_relocation == NULL)
b34976b6 5118 return FALSE;
b49e97c9
TS
5119
5120 /* Obtain the addend kept there. */
b34976b6 5121 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, lo, FALSE);
b49e97c9
TS
5122 l = mips_elf_obtain_contents (lo16_howto, lo16_relocation,
5123 input_bfd, contents);
5124 l &= lo16_howto->src_mask;
5a659663 5125 l <<= lo16_howto->rightshift;
b49e97c9
TS
5126 l = mips_elf_sign_extend (l, 16);
5127
5128 addend <<= 16;
5129
5130 /* Compute the combined addend. */
5131 addend += l;
5132
5133 /* If PC-relative, subtract the difference between the
5134 address of the LO part of the reloc and the address of
5135 the HI part. The relocation is relative to the LO
5136 part, but mips_elf_calculate_relocation() doesn't
5137 know its address or the difference from the HI part, so
5138 we subtract that difference here. See also the
5139 comment in mips_elf_calculate_relocation(). */
5140 if (r_type == R_MIPS_GNU_REL_HI16)
5141 addend -= (lo16_relocation->r_offset - rel->r_offset);
5142 }
5143 else if (r_type == R_MIPS16_GPREL)
5144 {
5145 /* The addend is scrambled in the object file. See
5146 mips_elf_perform_relocation for details on the
5147 format. */
5148 addend = (((addend & 0x1f0000) >> 5)
5149 | ((addend & 0x7e00000) >> 16)
5150 | (addend & 0x1f));
5151 }
5152 }
5153 else
5154 addend = rel->r_addend;
5155 }
5156
5157 if (info->relocateable)
5158 {
5159 Elf_Internal_Sym *sym;
5160 unsigned long r_symndx;
5161
4a14403c 5162 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
b49e97c9
TS
5163 && bfd_big_endian (input_bfd))
5164 rel->r_offset -= 4;
5165
5166 /* Since we're just relocating, all we need to do is copy
5167 the relocations back out to the object file, unless
5168 they're against a section symbol, in which case we need
5169 to adjust by the section offset, or unless they're GP
5170 relative in which case we need to adjust by the amount
5171 that we're adjusting GP in this relocateable object. */
5172
5173 if (! mips_elf_local_relocation_p (input_bfd, rel, local_sections,
b34976b6 5174 FALSE))
b49e97c9
TS
5175 /* There's nothing to do for non-local relocations. */
5176 continue;
5177
5178 if (r_type == R_MIPS16_GPREL
5179 || r_type == R_MIPS_GPREL16
5180 || r_type == R_MIPS_GPREL32
5181 || r_type == R_MIPS_LITERAL)
5182 addend -= (_bfd_get_gp_value (output_bfd)
5183 - _bfd_get_gp_value (input_bfd));
b49e97c9
TS
5184
5185 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
5186 sym = local_syms + r_symndx;
5187 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5188 /* Adjust the addend appropriately. */
5189 addend += local_sections[r_symndx]->output_offset;
5190
5a659663
TS
5191 if (howto->partial_inplace)
5192 {
5193 /* If the relocation is for a R_MIPS_HI16 or R_MIPS_GOT16,
5194 then we only want to write out the high-order 16 bits.
5195 The subsequent R_MIPS_LO16 will handle the low-order bits.
5196 */
5197 if (r_type == R_MIPS_HI16 || r_type == R_MIPS_GOT16
5198 || r_type == R_MIPS_GNU_REL_HI16)
5199 addend = mips_elf_high (addend);
5200 else if (r_type == R_MIPS_HIGHER)
5201 addend = mips_elf_higher (addend);
5202 else if (r_type == R_MIPS_HIGHEST)
5203 addend = mips_elf_highest (addend);
5204 }
b49e97c9
TS
5205
5206 if (rela_relocation_p)
5207 /* If this is a RELA relocation, just update the addend.
5208 We have to cast away constness for REL. */
5209 rel->r_addend = addend;
5210 else
5211 {
5212 /* Otherwise, we have to write the value back out. Note
5213 that we use the source mask, rather than the
5214 destination mask because the place to which we are
5215 writing will be source of the addend in the final
5216 link. */
5a659663 5217 addend >>= howto->rightshift;
b49e97c9
TS
5218 addend &= howto->src_mask;
5219
5a659663 5220 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
5221 /* See the comment above about using R_MIPS_64 in the 32-bit
5222 ABI. Here, we need to update the addend. It would be
5223 possible to get away with just using the R_MIPS_32 reloc
5224 but for endianness. */
5225 {
5226 bfd_vma sign_bits;
5227 bfd_vma low_bits;
5228 bfd_vma high_bits;
5229
5230 if (addend & ((bfd_vma) 1 << 31))
5231#ifdef BFD64
5232 sign_bits = ((bfd_vma) 1 << 32) - 1;
5233#else
5234 sign_bits = -1;
5235#endif
5236 else
5237 sign_bits = 0;
5238
5239 /* If we don't know that we have a 64-bit type,
5240 do two separate stores. */
5241 if (bfd_big_endian (input_bfd))
5242 {
5243 /* Store the sign-bits (which are most significant)
5244 first. */
5245 low_bits = sign_bits;
5246 high_bits = addend;
5247 }
5248 else
5249 {
5250 low_bits = addend;
5251 high_bits = sign_bits;
5252 }
5253 bfd_put_32 (input_bfd, low_bits,
5254 contents + rel->r_offset);
5255 bfd_put_32 (input_bfd, high_bits,
5256 contents + rel->r_offset + 4);
5257 continue;
5258 }
5259
5260 if (! mips_elf_perform_relocation (info, howto, rel, addend,
5261 input_bfd, input_section,
b34976b6
AM
5262 contents, FALSE))
5263 return FALSE;
b49e97c9
TS
5264 }
5265
5266 /* Go on to the next relocation. */
5267 continue;
5268 }
5269
5270 /* In the N32 and 64-bit ABIs there may be multiple consecutive
5271 relocations for the same offset. In that case we are
5272 supposed to treat the output of each relocation as the addend
5273 for the next. */
5274 if (rel + 1 < relend
5275 && rel->r_offset == rel[1].r_offset
5276 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
b34976b6 5277 use_saved_addend_p = TRUE;
b49e97c9 5278 else
b34976b6 5279 use_saved_addend_p = FALSE;
b49e97c9 5280
5a659663
TS
5281 addend >>= howto->rightshift;
5282
b49e97c9
TS
5283 /* Figure out what value we are supposed to relocate. */
5284 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
5285 input_section, info, rel,
5286 addend, howto, local_syms,
5287 local_sections, &value,
bce03d3d
AO
5288 &name, &require_jalx,
5289 use_saved_addend_p))
b49e97c9
TS
5290 {
5291 case bfd_reloc_continue:
5292 /* There's nothing to do. */
5293 continue;
5294
5295 case bfd_reloc_undefined:
5296 /* mips_elf_calculate_relocation already called the
5297 undefined_symbol callback. There's no real point in
5298 trying to perform the relocation at this point, so we
5299 just skip ahead to the next relocation. */
5300 continue;
5301
5302 case bfd_reloc_notsupported:
5303 msg = _("internal error: unsupported relocation error");
5304 info->callbacks->warning
5305 (info, msg, name, input_bfd, input_section, rel->r_offset);
b34976b6 5306 return FALSE;
b49e97c9
TS
5307
5308 case bfd_reloc_overflow:
5309 if (use_saved_addend_p)
5310 /* Ignore overflow until we reach the last relocation for
5311 a given location. */
5312 ;
5313 else
5314 {
5315 BFD_ASSERT (name != NULL);
5316 if (! ((*info->callbacks->reloc_overflow)
5317 (info, name, howto->name, (bfd_vma) 0,
5318 input_bfd, input_section, rel->r_offset)))
b34976b6 5319 return FALSE;
b49e97c9
TS
5320 }
5321 break;
5322
5323 case bfd_reloc_ok:
5324 break;
5325
5326 default:
5327 abort ();
5328 break;
5329 }
5330
5331 /* If we've got another relocation for the address, keep going
5332 until we reach the last one. */
5333 if (use_saved_addend_p)
5334 {
5335 addend = value;
5336 continue;
5337 }
5338
4a14403c 5339 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
5340 /* See the comment above about using R_MIPS_64 in the 32-bit
5341 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
5342 that calculated the right value. Now, however, we
5343 sign-extend the 32-bit result to 64-bits, and store it as a
5344 64-bit value. We are especially generous here in that we
5345 go to extreme lengths to support this usage on systems with
5346 only a 32-bit VMA. */
5347 {
5348 bfd_vma sign_bits;
5349 bfd_vma low_bits;
5350 bfd_vma high_bits;
5351
5352 if (value & ((bfd_vma) 1 << 31))
5353#ifdef BFD64
5354 sign_bits = ((bfd_vma) 1 << 32) - 1;
5355#else
5356 sign_bits = -1;
5357#endif
5358 else
5359 sign_bits = 0;
5360
5361 /* If we don't know that we have a 64-bit type,
5362 do two separate stores. */
5363 if (bfd_big_endian (input_bfd))
5364 {
5365 /* Undo what we did above. */
5366 rel->r_offset -= 4;
5367 /* Store the sign-bits (which are most significant)
5368 first. */
5369 low_bits = sign_bits;
5370 high_bits = value;
5371 }
5372 else
5373 {
5374 low_bits = value;
5375 high_bits = sign_bits;
5376 }
5377 bfd_put_32 (input_bfd, low_bits,
5378 contents + rel->r_offset);
5379 bfd_put_32 (input_bfd, high_bits,
5380 contents + rel->r_offset + 4);
5381 continue;
5382 }
5383
5384 /* Actually perform the relocation. */
5385 if (! mips_elf_perform_relocation (info, howto, rel, value,
5386 input_bfd, input_section,
5387 contents, require_jalx))
b34976b6 5388 return FALSE;
b49e97c9
TS
5389 }
5390
b34976b6 5391 return TRUE;
b49e97c9
TS
5392}
5393\f
5394/* If NAME is one of the special IRIX6 symbols defined by the linker,
5395 adjust it appropriately now. */
5396
5397static void
5398mips_elf_irix6_finish_dynamic_symbol (abfd, name, sym)
5399 bfd *abfd ATTRIBUTE_UNUSED;
5400 const char *name;
5401 Elf_Internal_Sym *sym;
5402{
5403 /* The linker script takes care of providing names and values for
5404 these, but we must place them into the right sections. */
5405 static const char* const text_section_symbols[] = {
5406 "_ftext",
5407 "_etext",
5408 "__dso_displacement",
5409 "__elf_header",
5410 "__program_header_table",
5411 NULL
5412 };
5413
5414 static const char* const data_section_symbols[] = {
5415 "_fdata",
5416 "_edata",
5417 "_end",
5418 "_fbss",
5419 NULL
5420 };
5421
5422 const char* const *p;
5423 int i;
5424
5425 for (i = 0; i < 2; ++i)
5426 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
5427 *p;
5428 ++p)
5429 if (strcmp (*p, name) == 0)
5430 {
5431 /* All of these symbols are given type STT_SECTION by the
5432 IRIX6 linker. */
5433 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5434
5435 /* The IRIX linker puts these symbols in special sections. */
5436 if (i == 0)
5437 sym->st_shndx = SHN_MIPS_TEXT;
5438 else
5439 sym->st_shndx = SHN_MIPS_DATA;
5440
5441 break;
5442 }
5443}
5444
5445/* Finish up dynamic symbol handling. We set the contents of various
5446 dynamic sections here. */
5447
b34976b6 5448bfd_boolean
b49e97c9
TS
5449_bfd_mips_elf_finish_dynamic_symbol (output_bfd, info, h, sym)
5450 bfd *output_bfd;
5451 struct bfd_link_info *info;
5452 struct elf_link_hash_entry *h;
5453 Elf_Internal_Sym *sym;
5454{
5455 bfd *dynobj;
5456 bfd_vma gval;
5457 asection *sgot;
5458 asection *smsym;
5459 struct mips_got_info *g;
5460 const char *name;
5461 struct mips_elf_link_hash_entry *mh;
5462
5463 dynobj = elf_hash_table (info)->dynobj;
5464 gval = sym->st_value;
5465 mh = (struct mips_elf_link_hash_entry *) h;
5466
5467 if (h->plt.offset != (bfd_vma) -1)
5468 {
5469 asection *s;
5470 bfd_byte stub[MIPS_FUNCTION_STUB_SIZE];
5471
5472 /* This symbol has a stub. Set it up. */
5473
5474 BFD_ASSERT (h->dynindx != -1);
5475
5476 s = bfd_get_section_by_name (dynobj,
5477 MIPS_ELF_STUB_SECTION_NAME (dynobj));
5478 BFD_ASSERT (s != NULL);
5479
5480 /* FIXME: Can h->dynindex be more than 64K? */
5481 if (h->dynindx & 0xffff0000)
b34976b6 5482 return FALSE;
b49e97c9
TS
5483
5484 /* Fill the stub. */
5485 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub);
5486 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + 4);
5487 bfd_put_32 (output_bfd, STUB_JALR, stub + 8);
5488 bfd_put_32 (output_bfd, STUB_LI16 (output_bfd) + h->dynindx, stub + 12);
5489
5490 BFD_ASSERT (h->plt.offset <= s->_raw_size);
5491 memcpy (s->contents + h->plt.offset, stub, MIPS_FUNCTION_STUB_SIZE);
5492
5493 /* Mark the symbol as undefined. plt.offset != -1 occurs
5494 only for the referenced symbol. */
5495 sym->st_shndx = SHN_UNDEF;
5496
5497 /* The run-time linker uses the st_value field of the symbol
5498 to reset the global offset table entry for this external
5499 to its stub address when unlinking a shared object. */
5500 gval = s->output_section->vma + s->output_offset + h->plt.offset;
5501 sym->st_value = gval;
5502 }
5503
5504 BFD_ASSERT (h->dynindx != -1
5505 || (h->elf_link_hash_flags & ELF_LINK_FORCED_LOCAL) != 0);
5506
5507 sgot = mips_elf_got_section (dynobj);
5508 BFD_ASSERT (sgot != NULL);
5509 BFD_ASSERT (elf_section_data (sgot) != NULL);
5510 g = (struct mips_got_info *) elf_section_data (sgot)->tdata;
5511 BFD_ASSERT (g != NULL);
5512
5513 /* Run through the global symbol table, creating GOT entries for all
5514 the symbols that need them. */
5515 if (g->global_gotsym != NULL
5516 && h->dynindx >= g->global_gotsym->dynindx)
5517 {
5518 bfd_vma offset;
5519 bfd_vma value;
5520
5521 if (sym->st_value)
5522 value = sym->st_value;
5523 else
5524 {
5525 /* For an entity defined in a shared object, this will be
5526 NULL. (For functions in shared objects for
5527 which we have created stubs, ST_VALUE will be non-NULL.
5528 That's because such the functions are now no longer defined
5529 in a shared object.) */
5530
5531 if (info->shared && h->root.type == bfd_link_hash_undefined)
5532 value = 0;
5533 else
5534 value = h->root.u.def.value;
5535 }
5536 offset = mips_elf_global_got_index (dynobj, h);
5537 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
5538 }
5539
5540 /* Create a .msym entry, if appropriate. */
5541 smsym = bfd_get_section_by_name (dynobj, ".msym");
5542 if (smsym)
5543 {
5544 Elf32_Internal_Msym msym;
5545
5546 msym.ms_hash_value = bfd_elf_hash (h->root.root.string);
5547 /* It is undocumented what the `1' indicates, but IRIX6 uses
5548 this value. */
5549 msym.ms_info = ELF32_MS_INFO (mh->min_dyn_reloc_index, 1);
5550 bfd_mips_elf_swap_msym_out
5551 (dynobj, &msym,
5552 ((Elf32_External_Msym *) smsym->contents) + h->dynindx);
5553 }
5554
5555 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
5556 name = h->root.root.string;
5557 if (strcmp (name, "_DYNAMIC") == 0
5558 || strcmp (name, "_GLOBAL_OFFSET_TABLE_") == 0)
5559 sym->st_shndx = SHN_ABS;
5560 else if (strcmp (name, "_DYNAMIC_LINK") == 0
5561 || strcmp (name, "_DYNAMIC_LINKING") == 0)
5562 {
5563 sym->st_shndx = SHN_ABS;
5564 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5565 sym->st_value = 1;
5566 }
4a14403c 5567 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
b49e97c9
TS
5568 {
5569 sym->st_shndx = SHN_ABS;
5570 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5571 sym->st_value = elf_gp (output_bfd);
5572 }
5573 else if (SGI_COMPAT (output_bfd))
5574 {
5575 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
5576 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
5577 {
5578 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5579 sym->st_other = STO_PROTECTED;
5580 sym->st_value = 0;
5581 sym->st_shndx = SHN_MIPS_DATA;
5582 }
5583 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
5584 {
5585 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
5586 sym->st_other = STO_PROTECTED;
5587 sym->st_value = mips_elf_hash_table (info)->procedure_count;
5588 sym->st_shndx = SHN_ABS;
5589 }
5590 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
5591 {
5592 if (h->type == STT_FUNC)
5593 sym->st_shndx = SHN_MIPS_TEXT;
5594 else if (h->type == STT_OBJECT)
5595 sym->st_shndx = SHN_MIPS_DATA;
5596 }
5597 }
5598
5599 /* Handle the IRIX6-specific symbols. */
5600 if (IRIX_COMPAT (output_bfd) == ict_irix6)
5601 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
5602
5603 if (! info->shared)
5604 {
5605 if (! mips_elf_hash_table (info)->use_rld_obj_head
5606 && (strcmp (name, "__rld_map") == 0
5607 || strcmp (name, "__RLD_MAP") == 0))
5608 {
5609 asection *s = bfd_get_section_by_name (dynobj, ".rld_map");
5610 BFD_ASSERT (s != NULL);
5611 sym->st_value = s->output_section->vma + s->output_offset;
5612 bfd_put_32 (output_bfd, (bfd_vma) 0, s->contents);
5613 if (mips_elf_hash_table (info)->rld_value == 0)
5614 mips_elf_hash_table (info)->rld_value = sym->st_value;
5615 }
5616 else if (mips_elf_hash_table (info)->use_rld_obj_head
5617 && strcmp (name, "__rld_obj_head") == 0)
5618 {
5619 /* IRIX6 does not use a .rld_map section. */
5620 if (IRIX_COMPAT (output_bfd) == ict_irix5
5621 || IRIX_COMPAT (output_bfd) == ict_none)
5622 BFD_ASSERT (bfd_get_section_by_name (dynobj, ".rld_map")
5623 != NULL);
5624 mips_elf_hash_table (info)->rld_value = sym->st_value;
5625 }
5626 }
5627
5628 /* If this is a mips16 symbol, force the value to be even. */
5629 if (sym->st_other == STO_MIPS16
5630 && (sym->st_value & 1) != 0)
5631 --sym->st_value;
5632
b34976b6 5633 return TRUE;
b49e97c9
TS
5634}
5635
5636/* Finish up the dynamic sections. */
5637
b34976b6 5638bfd_boolean
b49e97c9
TS
5639_bfd_mips_elf_finish_dynamic_sections (output_bfd, info)
5640 bfd *output_bfd;
5641 struct bfd_link_info *info;
5642{
5643 bfd *dynobj;
5644 asection *sdyn;
5645 asection *sgot;
5646 struct mips_got_info *g;
5647
5648 dynobj = elf_hash_table (info)->dynobj;
5649
5650 sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
5651
5652 sgot = bfd_get_section_by_name (dynobj, ".got");
5653 if (sgot == NULL)
5654 g = NULL;
5655 else
5656 {
5657 BFD_ASSERT (elf_section_data (sgot) != NULL);
5658 g = (struct mips_got_info *) elf_section_data (sgot)->tdata;
5659 BFD_ASSERT (g != NULL);
5660 }
5661
5662 if (elf_hash_table (info)->dynamic_sections_created)
5663 {
5664 bfd_byte *b;
5665
5666 BFD_ASSERT (sdyn != NULL);
5667 BFD_ASSERT (g != NULL);
5668
5669 for (b = sdyn->contents;
5670 b < sdyn->contents + sdyn->_raw_size;
5671 b += MIPS_ELF_DYN_SIZE (dynobj))
5672 {
5673 Elf_Internal_Dyn dyn;
5674 const char *name;
5675 size_t elemsize;
5676 asection *s;
b34976b6 5677 bfd_boolean swap_out_p;
b49e97c9
TS
5678
5679 /* Read in the current dynamic entry. */
5680 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
5681
5682 /* Assume that we're going to modify it and write it out. */
b34976b6 5683 swap_out_p = TRUE;
b49e97c9
TS
5684
5685 switch (dyn.d_tag)
5686 {
5687 case DT_RELENT:
5688 s = (bfd_get_section_by_name (dynobj, ".rel.dyn"));
5689 BFD_ASSERT (s != NULL);
5690 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
5691 break;
5692
5693 case DT_STRSZ:
5694 /* Rewrite DT_STRSZ. */
5695 dyn.d_un.d_val =
5696 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
5697 break;
5698
5699 case DT_PLTGOT:
5700 name = ".got";
5701 goto get_vma;
5702 case DT_MIPS_CONFLICT:
5703 name = ".conflict";
5704 goto get_vma;
5705 case DT_MIPS_LIBLIST:
5706 name = ".liblist";
5707 get_vma:
5708 s = bfd_get_section_by_name (output_bfd, name);
5709 BFD_ASSERT (s != NULL);
5710 dyn.d_un.d_ptr = s->vma;
5711 break;
5712
5713 case DT_MIPS_RLD_VERSION:
5714 dyn.d_un.d_val = 1; /* XXX */
5715 break;
5716
5717 case DT_MIPS_FLAGS:
5718 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
5719 break;
5720
5721 case DT_MIPS_CONFLICTNO:
5722 name = ".conflict";
5723 elemsize = sizeof (Elf32_Conflict);
5724 goto set_elemno;
5725
5726 case DT_MIPS_LIBLISTNO:
5727 name = ".liblist";
5728 elemsize = sizeof (Elf32_Lib);
5729 set_elemno:
5730 s = bfd_get_section_by_name (output_bfd, name);
5731 if (s != NULL)
5732 {
5733 if (s->_cooked_size != 0)
5734 dyn.d_un.d_val = s->_cooked_size / elemsize;
5735 else
5736 dyn.d_un.d_val = s->_raw_size / elemsize;
5737 }
5738 else
5739 dyn.d_un.d_val = 0;
5740 break;
5741
5742 case DT_MIPS_TIME_STAMP:
5743 time ((time_t *) &dyn.d_un.d_val);
5744 break;
5745
5746 case DT_MIPS_ICHECKSUM:
5747 /* XXX FIXME: */
b34976b6 5748 swap_out_p = FALSE;
b49e97c9
TS
5749 break;
5750
5751 case DT_MIPS_IVERSION:
5752 /* XXX FIXME: */
b34976b6 5753 swap_out_p = FALSE;
b49e97c9
TS
5754 break;
5755
5756 case DT_MIPS_BASE_ADDRESS:
5757 s = output_bfd->sections;
5758 BFD_ASSERT (s != NULL);
5759 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
5760 break;
5761
5762 case DT_MIPS_LOCAL_GOTNO:
5763 dyn.d_un.d_val = g->local_gotno;
5764 break;
5765
5766 case DT_MIPS_UNREFEXTNO:
5767 /* The index into the dynamic symbol table which is the
5768 entry of the first external symbol that is not
5769 referenced within the same object. */
5770 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
5771 break;
5772
5773 case DT_MIPS_GOTSYM:
5774 if (g->global_gotsym)
5775 {
5776 dyn.d_un.d_val = g->global_gotsym->dynindx;
5777 break;
5778 }
5779 /* In case if we don't have global got symbols we default
5780 to setting DT_MIPS_GOTSYM to the same value as
5781 DT_MIPS_SYMTABNO, so we just fall through. */
5782
5783 case DT_MIPS_SYMTABNO:
5784 name = ".dynsym";
5785 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
5786 s = bfd_get_section_by_name (output_bfd, name);
5787 BFD_ASSERT (s != NULL);
5788
5789 if (s->_cooked_size != 0)
5790 dyn.d_un.d_val = s->_cooked_size / elemsize;
5791 else
5792 dyn.d_un.d_val = s->_raw_size / elemsize;
5793 break;
5794
5795 case DT_MIPS_HIPAGENO:
5796 dyn.d_un.d_val = g->local_gotno - MIPS_RESERVED_GOTNO;
5797 break;
5798
5799 case DT_MIPS_RLD_MAP:
5800 dyn.d_un.d_ptr = mips_elf_hash_table (info)->rld_value;
5801 break;
5802
5803 case DT_MIPS_OPTIONS:
5804 s = (bfd_get_section_by_name
5805 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
5806 dyn.d_un.d_ptr = s->vma;
5807 break;
5808
5809 case DT_MIPS_MSYM:
5810 s = (bfd_get_section_by_name (output_bfd, ".msym"));
5811 dyn.d_un.d_ptr = s->vma;
5812 break;
5813
5814 default:
b34976b6 5815 swap_out_p = FALSE;
b49e97c9
TS
5816 break;
5817 }
5818
5819 if (swap_out_p)
5820 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
5821 (dynobj, &dyn, b);
5822 }
5823 }
5824
5825 /* The first entry of the global offset table will be filled at
5826 runtime. The second entry will be used by some runtime loaders.
8dc1a139 5827 This isn't the case of IRIX rld. */
b49e97c9
TS
5828 if (sgot != NULL && sgot->_raw_size > 0)
5829 {
5830 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
5831 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0x80000000,
5832 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
5833 }
5834
5835 if (sgot != NULL)
5836 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
5837 = MIPS_ELF_GOT_SIZE (output_bfd);
5838
5839 {
5840 asection *smsym;
5841 asection *s;
5842 Elf32_compact_rel cpt;
5843
5844 /* ??? The section symbols for the output sections were set up in
5845 _bfd_elf_final_link. SGI sets the STT_NOTYPE attribute for these
5846 symbols. Should we do so? */
5847
5848 smsym = bfd_get_section_by_name (dynobj, ".msym");
5849 if (smsym != NULL)
5850 {
5851 Elf32_Internal_Msym msym;
5852
5853 msym.ms_hash_value = 0;
5854 msym.ms_info = ELF32_MS_INFO (0, 1);
5855
5856 for (s = output_bfd->sections; s != NULL; s = s->next)
5857 {
5858 long dynindx = elf_section_data (s)->dynindx;
5859
5860 bfd_mips_elf_swap_msym_out
5861 (output_bfd, &msym,
5862 (((Elf32_External_Msym *) smsym->contents)
5863 + dynindx));
5864 }
5865 }
5866
5867 if (SGI_COMPAT (output_bfd))
5868 {
5869 /* Write .compact_rel section out. */
5870 s = bfd_get_section_by_name (dynobj, ".compact_rel");
5871 if (s != NULL)
5872 {
5873 cpt.id1 = 1;
5874 cpt.num = s->reloc_count;
5875 cpt.id2 = 2;
5876 cpt.offset = (s->output_section->filepos
5877 + sizeof (Elf32_External_compact_rel));
5878 cpt.reserved0 = 0;
5879 cpt.reserved1 = 0;
5880 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
5881 ((Elf32_External_compact_rel *)
5882 s->contents));
5883
5884 /* Clean up a dummy stub function entry in .text. */
5885 s = bfd_get_section_by_name (dynobj,
5886 MIPS_ELF_STUB_SECTION_NAME (dynobj));
5887 if (s != NULL)
5888 {
5889 file_ptr dummy_offset;
5890
5891 BFD_ASSERT (s->_raw_size >= MIPS_FUNCTION_STUB_SIZE);
5892 dummy_offset = s->_raw_size - MIPS_FUNCTION_STUB_SIZE;
5893 memset (s->contents + dummy_offset, 0,
5894 MIPS_FUNCTION_STUB_SIZE);
5895 }
5896 }
5897 }
5898
5899 /* We need to sort the entries of the dynamic relocation section. */
5900
5901 if (!ABI_64_P (output_bfd))
5902 {
5903 asection *reldyn;
5904
5905 reldyn = bfd_get_section_by_name (dynobj, ".rel.dyn");
5906 if (reldyn != NULL && reldyn->reloc_count > 2)
5907 {
5908 reldyn_sorting_bfd = output_bfd;
5909 qsort ((Elf32_External_Rel *) reldyn->contents + 1,
5910 (size_t) reldyn->reloc_count - 1,
5911 sizeof (Elf32_External_Rel), sort_dynamic_relocs);
5912 }
5913 }
5914
5915 /* Clean up a first relocation in .rel.dyn. */
5916 s = bfd_get_section_by_name (dynobj, ".rel.dyn");
5917 if (s != NULL && s->_raw_size > 0)
5918 memset (s->contents, 0, MIPS_ELF_REL_SIZE (dynobj));
5919 }
5920
b34976b6 5921 return TRUE;
b49e97c9
TS
5922}
5923
5924/* The final processing done just before writing out a MIPS ELF object
5925 file. This gets the MIPS architecture right based on the machine
5926 number. This is used by both the 32-bit and the 64-bit ABI. */
5927
5928void
5929_bfd_mips_elf_final_write_processing (abfd, linker)
5930 bfd *abfd;
b34976b6 5931 bfd_boolean linker ATTRIBUTE_UNUSED;
b49e97c9
TS
5932{
5933 unsigned long val;
5934 unsigned int i;
5935 Elf_Internal_Shdr **hdrpp;
5936 const char *name;
5937 asection *sec;
5938
5939 switch (bfd_get_mach (abfd))
5940 {
5941 default:
5942 case bfd_mach_mips3000:
5943 val = E_MIPS_ARCH_1;
5944 break;
5945
5946 case bfd_mach_mips3900:
5947 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
5948 break;
5949
5950 case bfd_mach_mips6000:
5951 val = E_MIPS_ARCH_2;
5952 break;
5953
5954 case bfd_mach_mips4000:
5955 case bfd_mach_mips4300:
5956 case bfd_mach_mips4400:
5957 case bfd_mach_mips4600:
5958 val = E_MIPS_ARCH_3;
5959 break;
5960
5961 case bfd_mach_mips4010:
5962 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
5963 break;
5964
5965 case bfd_mach_mips4100:
5966 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
5967 break;
5968
5969 case bfd_mach_mips4111:
5970 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
5971 break;
5972
00707a0e
RS
5973 case bfd_mach_mips4120:
5974 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
5975 break;
5976
b49e97c9
TS
5977 case bfd_mach_mips4650:
5978 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
5979 break;
5980
00707a0e
RS
5981 case bfd_mach_mips5400:
5982 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
5983 break;
5984
5985 case bfd_mach_mips5500:
5986 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
5987 break;
5988
b49e97c9
TS
5989 case bfd_mach_mips5000:
5990 case bfd_mach_mips8000:
5991 case bfd_mach_mips10000:
5992 case bfd_mach_mips12000:
5993 val = E_MIPS_ARCH_4;
5994 break;
5995
5996 case bfd_mach_mips5:
5997 val = E_MIPS_ARCH_5;
5998 break;
5999
6000 case bfd_mach_mips_sb1:
6001 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
6002 break;
6003
6004 case bfd_mach_mipsisa32:
6005 val = E_MIPS_ARCH_32;
6006 break;
6007
6008 case bfd_mach_mipsisa64:
6009 val = E_MIPS_ARCH_64;
6010 }
6011
6012 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
6013 elf_elfheader (abfd)->e_flags |= val;
6014
6015 /* Set the sh_info field for .gptab sections and other appropriate
6016 info for each special section. */
6017 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
6018 i < elf_numsections (abfd);
6019 i++, hdrpp++)
6020 {
6021 switch ((*hdrpp)->sh_type)
6022 {
6023 case SHT_MIPS_MSYM:
6024 case SHT_MIPS_LIBLIST:
6025 sec = bfd_get_section_by_name (abfd, ".dynstr");
6026 if (sec != NULL)
6027 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
6028 break;
6029
6030 case SHT_MIPS_GPTAB:
6031 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
6032 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
6033 BFD_ASSERT (name != NULL
6034 && strncmp (name, ".gptab.", sizeof ".gptab." - 1) == 0);
6035 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
6036 BFD_ASSERT (sec != NULL);
6037 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
6038 break;
6039
6040 case SHT_MIPS_CONTENT:
6041 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
6042 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
6043 BFD_ASSERT (name != NULL
6044 && strncmp (name, ".MIPS.content",
6045 sizeof ".MIPS.content" - 1) == 0);
6046 sec = bfd_get_section_by_name (abfd,
6047 name + sizeof ".MIPS.content" - 1);
6048 BFD_ASSERT (sec != NULL);
6049 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
6050 break;
6051
6052 case SHT_MIPS_SYMBOL_LIB:
6053 sec = bfd_get_section_by_name (abfd, ".dynsym");
6054 if (sec != NULL)
6055 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
6056 sec = bfd_get_section_by_name (abfd, ".liblist");
6057 if (sec != NULL)
6058 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
6059 break;
6060
6061 case SHT_MIPS_EVENTS:
6062 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
6063 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
6064 BFD_ASSERT (name != NULL);
6065 if (strncmp (name, ".MIPS.events", sizeof ".MIPS.events" - 1) == 0)
6066 sec = bfd_get_section_by_name (abfd,
6067 name + sizeof ".MIPS.events" - 1);
6068 else
6069 {
6070 BFD_ASSERT (strncmp (name, ".MIPS.post_rel",
6071 sizeof ".MIPS.post_rel" - 1) == 0);
6072 sec = bfd_get_section_by_name (abfd,
6073 (name
6074 + sizeof ".MIPS.post_rel" - 1));
6075 }
6076 BFD_ASSERT (sec != NULL);
6077 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
6078 break;
6079
6080 }
6081 }
6082}
6083\f
8dc1a139 6084/* When creating an IRIX5 executable, we need REGINFO and RTPROC
b49e97c9
TS
6085 segments. */
6086
6087int
6088_bfd_mips_elf_additional_program_headers (abfd)
6089 bfd *abfd;
6090{
6091 asection *s;
6092 int ret = 0;
6093
6094 /* See if we need a PT_MIPS_REGINFO segment. */
6095 s = bfd_get_section_by_name (abfd, ".reginfo");
6096 if (s && (s->flags & SEC_LOAD))
6097 ++ret;
6098
6099 /* See if we need a PT_MIPS_OPTIONS segment. */
6100 if (IRIX_COMPAT (abfd) == ict_irix6
6101 && bfd_get_section_by_name (abfd,
6102 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
6103 ++ret;
6104
6105 /* See if we need a PT_MIPS_RTPROC segment. */
6106 if (IRIX_COMPAT (abfd) == ict_irix5
6107 && bfd_get_section_by_name (abfd, ".dynamic")
6108 && bfd_get_section_by_name (abfd, ".mdebug"))
6109 ++ret;
6110
6111 return ret;
6112}
6113
8dc1a139 6114/* Modify the segment map for an IRIX5 executable. */
b49e97c9 6115
b34976b6 6116bfd_boolean
b49e97c9
TS
6117_bfd_mips_elf_modify_segment_map (abfd)
6118 bfd *abfd;
6119{
6120 asection *s;
6121 struct elf_segment_map *m, **pm;
6122 bfd_size_type amt;
6123
6124 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
6125 segment. */
6126 s = bfd_get_section_by_name (abfd, ".reginfo");
6127 if (s != NULL && (s->flags & SEC_LOAD) != 0)
6128 {
6129 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
6130 if (m->p_type == PT_MIPS_REGINFO)
6131 break;
6132 if (m == NULL)
6133 {
6134 amt = sizeof *m;
6135 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
6136 if (m == NULL)
b34976b6 6137 return FALSE;
b49e97c9
TS
6138
6139 m->p_type = PT_MIPS_REGINFO;
6140 m->count = 1;
6141 m->sections[0] = s;
6142
6143 /* We want to put it after the PHDR and INTERP segments. */
6144 pm = &elf_tdata (abfd)->segment_map;
6145 while (*pm != NULL
6146 && ((*pm)->p_type == PT_PHDR
6147 || (*pm)->p_type == PT_INTERP))
6148 pm = &(*pm)->next;
6149
6150 m->next = *pm;
6151 *pm = m;
6152 }
6153 }
6154
6155 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
6156 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
44c410de 6157 PT_OPTIONS segment immediately following the program header
b49e97c9 6158 table. */
c1fd6598
AO
6159 if (NEWABI_P (abfd)
6160 /* On non-IRIX6 new abi, we'll have already created a segment
6161 for this section, so don't create another. I'm not sure this
6162 is not also the case for IRIX 6, but I can't test it right
6163 now. */
6164 && IRIX_COMPAT (abfd) == ict_irix6)
b49e97c9
TS
6165 {
6166 for (s = abfd->sections; s; s = s->next)
6167 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
6168 break;
6169
6170 if (s)
6171 {
6172 struct elf_segment_map *options_segment;
6173
6174 /* Usually, there's a program header table. But, sometimes
6175 there's not (like when running the `ld' testsuite). So,
6176 if there's no program header table, we just put the
44c410de 6177 options segment at the end. */
b49e97c9
TS
6178 for (pm = &elf_tdata (abfd)->segment_map;
6179 *pm != NULL;
6180 pm = &(*pm)->next)
6181 if ((*pm)->p_type == PT_PHDR)
6182 break;
6183
6184 amt = sizeof (struct elf_segment_map);
6185 options_segment = bfd_zalloc (abfd, amt);
6186 options_segment->next = *pm;
6187 options_segment->p_type = PT_MIPS_OPTIONS;
6188 options_segment->p_flags = PF_R;
b34976b6 6189 options_segment->p_flags_valid = TRUE;
b49e97c9
TS
6190 options_segment->count = 1;
6191 options_segment->sections[0] = s;
6192 *pm = options_segment;
6193 }
6194 }
6195 else
6196 {
6197 if (IRIX_COMPAT (abfd) == ict_irix5)
6198 {
6199 /* If there are .dynamic and .mdebug sections, we make a room
6200 for the RTPROC header. FIXME: Rewrite without section names. */
6201 if (bfd_get_section_by_name (abfd, ".interp") == NULL
6202 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
6203 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
6204 {
6205 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
6206 if (m->p_type == PT_MIPS_RTPROC)
6207 break;
6208 if (m == NULL)
6209 {
6210 amt = sizeof *m;
6211 m = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
6212 if (m == NULL)
b34976b6 6213 return FALSE;
b49e97c9
TS
6214
6215 m->p_type = PT_MIPS_RTPROC;
6216
6217 s = bfd_get_section_by_name (abfd, ".rtproc");
6218 if (s == NULL)
6219 {
6220 m->count = 0;
6221 m->p_flags = 0;
6222 m->p_flags_valid = 1;
6223 }
6224 else
6225 {
6226 m->count = 1;
6227 m->sections[0] = s;
6228 }
6229
6230 /* We want to put it after the DYNAMIC segment. */
6231 pm = &elf_tdata (abfd)->segment_map;
6232 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
6233 pm = &(*pm)->next;
6234 if (*pm != NULL)
6235 pm = &(*pm)->next;
6236
6237 m->next = *pm;
6238 *pm = m;
6239 }
6240 }
6241 }
8dc1a139 6242 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
b49e97c9
TS
6243 .dynstr, .dynsym, and .hash sections, and everything in
6244 between. */
6245 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
6246 pm = &(*pm)->next)
6247 if ((*pm)->p_type == PT_DYNAMIC)
6248 break;
6249 m = *pm;
6250 if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
6251 {
6252 /* For a normal mips executable the permissions for the PT_DYNAMIC
6253 segment are read, write and execute. We do that here since
6254 the code in elf.c sets only the read permission. This matters
6255 sometimes for the dynamic linker. */
6256 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
6257 {
6258 m->p_flags = PF_R | PF_W | PF_X;
6259 m->p_flags_valid = 1;
6260 }
6261 }
6262 if (m != NULL
6263 && m->count == 1 && strcmp (m->sections[0]->name, ".dynamic") == 0)
6264 {
6265 static const char *sec_names[] =
6266 {
6267 ".dynamic", ".dynstr", ".dynsym", ".hash"
6268 };
6269 bfd_vma low, high;
6270 unsigned int i, c;
6271 struct elf_segment_map *n;
6272
6273 low = 0xffffffff;
6274 high = 0;
6275 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
6276 {
6277 s = bfd_get_section_by_name (abfd, sec_names[i]);
6278 if (s != NULL && (s->flags & SEC_LOAD) != 0)
6279 {
6280 bfd_size_type sz;
6281
6282 if (low > s->vma)
6283 low = s->vma;
6284 sz = s->_cooked_size;
6285 if (sz == 0)
6286 sz = s->_raw_size;
6287 if (high < s->vma + sz)
6288 high = s->vma + sz;
6289 }
6290 }
6291
6292 c = 0;
6293 for (s = abfd->sections; s != NULL; s = s->next)
6294 if ((s->flags & SEC_LOAD) != 0
6295 && s->vma >= low
6296 && ((s->vma
6297 + (s->_cooked_size !=
6298 0 ? s->_cooked_size : s->_raw_size)) <= high))
6299 ++c;
6300
6301 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
6302 n = (struct elf_segment_map *) bfd_zalloc (abfd, amt);
6303 if (n == NULL)
b34976b6 6304 return FALSE;
b49e97c9
TS
6305 *n = *m;
6306 n->count = c;
6307
6308 i = 0;
6309 for (s = abfd->sections; s != NULL; s = s->next)
6310 {
6311 if ((s->flags & SEC_LOAD) != 0
6312 && s->vma >= low
6313 && ((s->vma
6314 + (s->_cooked_size != 0 ?
6315 s->_cooked_size : s->_raw_size)) <= high))
6316 {
6317 n->sections[i] = s;
6318 ++i;
6319 }
6320 }
6321
6322 *pm = n;
6323 }
6324 }
6325
b34976b6 6326 return TRUE;
b49e97c9
TS
6327}
6328\f
6329/* Return the section that should be marked against GC for a given
6330 relocation. */
6331
6332asection *
1e2f5b6e
AM
6333_bfd_mips_elf_gc_mark_hook (sec, info, rel, h, sym)
6334 asection *sec;
b49e97c9
TS
6335 struct bfd_link_info *info ATTRIBUTE_UNUSED;
6336 Elf_Internal_Rela *rel;
6337 struct elf_link_hash_entry *h;
6338 Elf_Internal_Sym *sym;
6339{
6340 /* ??? Do mips16 stub sections need to be handled special? */
6341
6342 if (h != NULL)
6343 {
1e2f5b6e 6344 switch (ELF_R_TYPE (sec->owner, rel->r_info))
b49e97c9
TS
6345 {
6346 case R_MIPS_GNU_VTINHERIT:
6347 case R_MIPS_GNU_VTENTRY:
6348 break;
6349
6350 default:
6351 switch (h->root.type)
6352 {
6353 case bfd_link_hash_defined:
6354 case bfd_link_hash_defweak:
6355 return h->root.u.def.section;
6356
6357 case bfd_link_hash_common:
6358 return h->root.u.c.p->section;
6359
6360 default:
6361 break;
6362 }
6363 }
6364 }
6365 else
1e2f5b6e 6366 return bfd_section_from_elf_index (sec->owner, sym->st_shndx);
b49e97c9
TS
6367
6368 return NULL;
6369}
6370
6371/* Update the got entry reference counts for the section being removed. */
6372
b34976b6 6373bfd_boolean
b49e97c9
TS
6374_bfd_mips_elf_gc_sweep_hook (abfd, info, sec, relocs)
6375 bfd *abfd ATTRIBUTE_UNUSED;
6376 struct bfd_link_info *info ATTRIBUTE_UNUSED;
6377 asection *sec ATTRIBUTE_UNUSED;
6378 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED;
6379{
6380#if 0
6381 Elf_Internal_Shdr *symtab_hdr;
6382 struct elf_link_hash_entry **sym_hashes;
6383 bfd_signed_vma *local_got_refcounts;
6384 const Elf_Internal_Rela *rel, *relend;
6385 unsigned long r_symndx;
6386 struct elf_link_hash_entry *h;
6387
6388 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
6389 sym_hashes = elf_sym_hashes (abfd);
6390 local_got_refcounts = elf_local_got_refcounts (abfd);
6391
6392 relend = relocs + sec->reloc_count;
6393 for (rel = relocs; rel < relend; rel++)
6394 switch (ELF_R_TYPE (abfd, rel->r_info))
6395 {
6396 case R_MIPS_GOT16:
6397 case R_MIPS_CALL16:
6398 case R_MIPS_CALL_HI16:
6399 case R_MIPS_CALL_LO16:
6400 case R_MIPS_GOT_HI16:
6401 case R_MIPS_GOT_LO16:
4a14403c
TS
6402 case R_MIPS_GOT_DISP:
6403 case R_MIPS_GOT_PAGE:
6404 case R_MIPS_GOT_OFST:
b49e97c9
TS
6405 /* ??? It would seem that the existing MIPS code does no sort
6406 of reference counting or whatnot on its GOT and PLT entries,
6407 so it is not possible to garbage collect them at this time. */
6408 break;
6409
6410 default:
6411 break;
6412 }
6413#endif
6414
b34976b6 6415 return TRUE;
b49e97c9
TS
6416}
6417\f
6418/* Copy data from a MIPS ELF indirect symbol to its direct symbol,
6419 hiding the old indirect symbol. Process additional relocation
6420 information. Also called for weakdefs, in which case we just let
6421 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
6422
6423void
b48fa14c
AM
6424_bfd_mips_elf_copy_indirect_symbol (bed, dir, ind)
6425 struct elf_backend_data *bed;
b49e97c9
TS
6426 struct elf_link_hash_entry *dir, *ind;
6427{
6428 struct mips_elf_link_hash_entry *dirmips, *indmips;
6429
b48fa14c 6430 _bfd_elf_link_hash_copy_indirect (bed, dir, ind);
b49e97c9
TS
6431
6432 if (ind->root.type != bfd_link_hash_indirect)
6433 return;
6434
6435 dirmips = (struct mips_elf_link_hash_entry *) dir;
6436 indmips = (struct mips_elf_link_hash_entry *) ind;
6437 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
6438 if (indmips->readonly_reloc)
b34976b6 6439 dirmips->readonly_reloc = TRUE;
b49e97c9
TS
6440 if (dirmips->min_dyn_reloc_index == 0
6441 || (indmips->min_dyn_reloc_index != 0
6442 && indmips->min_dyn_reloc_index < dirmips->min_dyn_reloc_index))
6443 dirmips->min_dyn_reloc_index = indmips->min_dyn_reloc_index;
6444 if (indmips->no_fn_stub)
b34976b6 6445 dirmips->no_fn_stub = TRUE;
b49e97c9
TS
6446}
6447
6448void
6449_bfd_mips_elf_hide_symbol (info, entry, force_local)
6450 struct bfd_link_info *info;
6451 struct elf_link_hash_entry *entry;
b34976b6 6452 bfd_boolean force_local;
b49e97c9
TS
6453{
6454 bfd *dynobj;
6455 asection *got;
6456 struct mips_got_info *g;
6457 struct mips_elf_link_hash_entry *h;
7c5fcef7 6458
b49e97c9 6459 h = (struct mips_elf_link_hash_entry *) entry;
7c5fcef7
L
6460 if (h->forced_local)
6461 return;
b34976b6 6462 h->forced_local = TRUE;
7c5fcef7 6463
b49e97c9
TS
6464 dynobj = elf_hash_table (info)->dynobj;
6465 got = bfd_get_section_by_name (dynobj, ".got");
6466 g = (struct mips_got_info *) elf_section_data (got)->tdata;
6467
6468 _bfd_elf_link_hash_hide_symbol (info, &h->root, force_local);
6469
6470 /* FIXME: Do we allocate too much GOT space here? */
6471 g->local_gotno++;
6472 got->_raw_size += MIPS_ELF_GOT_SIZE (dynobj);
6473}
6474\f
d01414a5
TS
6475#define PDR_SIZE 32
6476
b34976b6 6477bfd_boolean
d01414a5
TS
6478_bfd_mips_elf_discard_info (abfd, cookie, info)
6479 bfd *abfd;
6480 struct elf_reloc_cookie *cookie;
6481 struct bfd_link_info *info;
6482{
6483 asection *o;
b34976b6 6484 bfd_boolean ret = FALSE;
d01414a5
TS
6485 unsigned char *tdata;
6486 size_t i, skip;
6487
6488 o = bfd_get_section_by_name (abfd, ".pdr");
6489 if (! o)
b34976b6 6490 return FALSE;
d01414a5 6491 if (o->_raw_size == 0)
b34976b6 6492 return FALSE;
d01414a5 6493 if (o->_raw_size % PDR_SIZE != 0)
b34976b6 6494 return FALSE;
d01414a5
TS
6495 if (o->output_section != NULL
6496 && bfd_is_abs_section (o->output_section))
b34976b6 6497 return FALSE;
d01414a5
TS
6498
6499 tdata = bfd_zmalloc (o->_raw_size / PDR_SIZE);
6500 if (! tdata)
b34976b6 6501 return FALSE;
d01414a5 6502
ee6423ed
AO
6503 cookie->rels = (MNAME(abfd,_bfd_elf,link_read_relocs)
6504 (abfd, o, (PTR) NULL,
6505 (Elf_Internal_Rela *) NULL,
6506 info->keep_memory));
d01414a5
TS
6507 if (!cookie->rels)
6508 {
6509 free (tdata);
b34976b6 6510 return FALSE;
d01414a5
TS
6511 }
6512
6513 cookie->rel = cookie->rels;
6514 cookie->relend = cookie->rels + o->reloc_count;
6515
6516 for (i = 0, skip = 0; i < o->_raw_size; i ++)
6517 {
ee6423ed 6518 if (MNAME(abfd,_bfd_elf,reloc_symbol_deleted_p) (i * PDR_SIZE, cookie))
d01414a5
TS
6519 {
6520 tdata[i] = 1;
6521 skip ++;
6522 }
6523 }
6524
6525 if (skip != 0)
6526 {
6527 elf_section_data (o)->tdata = tdata;
6528 o->_cooked_size = o->_raw_size - skip * PDR_SIZE;
b34976b6 6529 ret = TRUE;
d01414a5
TS
6530 }
6531 else
6532 free (tdata);
6533
6534 if (! info->keep_memory)
6535 free (cookie->rels);
6536
6537 return ret;
6538}
6539
b34976b6 6540bfd_boolean
53bfd6b4
MR
6541_bfd_mips_elf_ignore_discarded_relocs (sec)
6542 asection *sec;
6543{
6544 if (strcmp (sec->name, ".pdr") == 0)
b34976b6
AM
6545 return TRUE;
6546 return FALSE;
53bfd6b4 6547}
d01414a5 6548
b34976b6 6549bfd_boolean
d01414a5
TS
6550_bfd_mips_elf_write_section (output_bfd, sec, contents)
6551 bfd *output_bfd;
6552 asection *sec;
6553 bfd_byte *contents;
6554{
6555 bfd_byte *to, *from, *end;
6556 int i;
6557
6558 if (strcmp (sec->name, ".pdr") != 0)
b34976b6 6559 return FALSE;
d01414a5
TS
6560
6561 if (elf_section_data (sec)->tdata == NULL)
b34976b6 6562 return FALSE;
d01414a5
TS
6563
6564 to = contents;
6565 end = contents + sec->_raw_size;
6566 for (from = contents, i = 0;
6567 from < end;
6568 from += PDR_SIZE, i++)
6569 {
6570 if (((unsigned char *) elf_section_data (sec)->tdata)[i] == 1)
6571 continue;
6572 if (to != from)
6573 memcpy (to, from, PDR_SIZE);
6574 to += PDR_SIZE;
6575 }
6576 bfd_set_section_contents (output_bfd, sec->output_section, contents,
6577 (file_ptr) sec->output_offset,
6578 sec->_cooked_size);
b34976b6 6579 return TRUE;
d01414a5 6580}
53bfd6b4 6581\f
b49e97c9
TS
6582/* MIPS ELF uses a special find_nearest_line routine in order the
6583 handle the ECOFF debugging information. */
6584
6585struct mips_elf_find_line
6586{
6587 struct ecoff_debug_info d;
6588 struct ecoff_find_line i;
6589};
6590
b34976b6 6591bfd_boolean
b49e97c9
TS
6592_bfd_mips_elf_find_nearest_line (abfd, section, symbols, offset, filename_ptr,
6593 functionname_ptr, line_ptr)
6594 bfd *abfd;
6595 asection *section;
6596 asymbol **symbols;
6597 bfd_vma offset;
6598 const char **filename_ptr;
6599 const char **functionname_ptr;
6600 unsigned int *line_ptr;
6601{
6602 asection *msec;
6603
6604 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
6605 filename_ptr, functionname_ptr,
6606 line_ptr))
b34976b6 6607 return TRUE;
b49e97c9
TS
6608
6609 if (_bfd_dwarf2_find_nearest_line (abfd, section, symbols, offset,
6610 filename_ptr, functionname_ptr,
6611 line_ptr,
6612 (unsigned) (ABI_64_P (abfd) ? 8 : 0),
6613 &elf_tdata (abfd)->dwarf2_find_line_info))
b34976b6 6614 return TRUE;
b49e97c9
TS
6615
6616 msec = bfd_get_section_by_name (abfd, ".mdebug");
6617 if (msec != NULL)
6618 {
6619 flagword origflags;
6620 struct mips_elf_find_line *fi;
6621 const struct ecoff_debug_swap * const swap =
6622 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
6623
6624 /* If we are called during a link, mips_elf_final_link may have
6625 cleared the SEC_HAS_CONTENTS field. We force it back on here
6626 if appropriate (which it normally will be). */
6627 origflags = msec->flags;
6628 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
6629 msec->flags |= SEC_HAS_CONTENTS;
6630
6631 fi = elf_tdata (abfd)->find_line_info;
6632 if (fi == NULL)
6633 {
6634 bfd_size_type external_fdr_size;
6635 char *fraw_src;
6636 char *fraw_end;
6637 struct fdr *fdr_ptr;
6638 bfd_size_type amt = sizeof (struct mips_elf_find_line);
6639
6640 fi = (struct mips_elf_find_line *) bfd_zalloc (abfd, amt);
6641 if (fi == NULL)
6642 {
6643 msec->flags = origflags;
b34976b6 6644 return FALSE;
b49e97c9
TS
6645 }
6646
6647 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
6648 {
6649 msec->flags = origflags;
b34976b6 6650 return FALSE;
b49e97c9
TS
6651 }
6652
6653 /* Swap in the FDR information. */
6654 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
6655 fi->d.fdr = (struct fdr *) bfd_alloc (abfd, amt);
6656 if (fi->d.fdr == NULL)
6657 {
6658 msec->flags = origflags;
b34976b6 6659 return FALSE;
b49e97c9
TS
6660 }
6661 external_fdr_size = swap->external_fdr_size;
6662 fdr_ptr = fi->d.fdr;
6663 fraw_src = (char *) fi->d.external_fdr;
6664 fraw_end = (fraw_src
6665 + fi->d.symbolic_header.ifdMax * external_fdr_size);
6666 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
6667 (*swap->swap_fdr_in) (abfd, (PTR) fraw_src, fdr_ptr);
6668
6669 elf_tdata (abfd)->find_line_info = fi;
6670
6671 /* Note that we don't bother to ever free this information.
6672 find_nearest_line is either called all the time, as in
6673 objdump -l, so the information should be saved, or it is
6674 rarely called, as in ld error messages, so the memory
6675 wasted is unimportant. Still, it would probably be a
6676 good idea for free_cached_info to throw it away. */
6677 }
6678
6679 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
6680 &fi->i, filename_ptr, functionname_ptr,
6681 line_ptr))
6682 {
6683 msec->flags = origflags;
b34976b6 6684 return TRUE;
b49e97c9
TS
6685 }
6686
6687 msec->flags = origflags;
6688 }
6689
6690 /* Fall back on the generic ELF find_nearest_line routine. */
6691
6692 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
6693 filename_ptr, functionname_ptr,
6694 line_ptr);
6695}
6696\f
6697/* When are writing out the .options or .MIPS.options section,
6698 remember the bytes we are writing out, so that we can install the
6699 GP value in the section_processing routine. */
6700
b34976b6 6701bfd_boolean
b49e97c9
TS
6702_bfd_mips_elf_set_section_contents (abfd, section, location, offset, count)
6703 bfd *abfd;
6704 sec_ptr section;
6705 PTR location;
6706 file_ptr offset;
6707 bfd_size_type count;
6708{
6709 if (strcmp (section->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
6710 {
6711 bfd_byte *c;
6712
6713 if (elf_section_data (section) == NULL)
6714 {
6715 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
6716 section->used_by_bfd = (PTR) bfd_zalloc (abfd, amt);
6717 if (elf_section_data (section) == NULL)
b34976b6 6718 return FALSE;
b49e97c9
TS
6719 }
6720 c = (bfd_byte *) elf_section_data (section)->tdata;
6721 if (c == NULL)
6722 {
6723 bfd_size_type size;
6724
6725 if (section->_cooked_size != 0)
6726 size = section->_cooked_size;
6727 else
6728 size = section->_raw_size;
6729 c = (bfd_byte *) bfd_zalloc (abfd, size);
6730 if (c == NULL)
b34976b6 6731 return FALSE;
b49e97c9
TS
6732 elf_section_data (section)->tdata = (PTR) c;
6733 }
6734
6735 memcpy (c + offset, location, (size_t) count);
6736 }
6737
6738 return _bfd_elf_set_section_contents (abfd, section, location, offset,
6739 count);
6740}
6741
6742/* This is almost identical to bfd_generic_get_... except that some
6743 MIPS relocations need to be handled specially. Sigh. */
6744
6745bfd_byte *
6746_bfd_elf_mips_get_relocated_section_contents (abfd, link_info, link_order,
6747 data, relocateable, symbols)
6748 bfd *abfd;
6749 struct bfd_link_info *link_info;
6750 struct bfd_link_order *link_order;
6751 bfd_byte *data;
b34976b6 6752 bfd_boolean relocateable;
b49e97c9
TS
6753 asymbol **symbols;
6754{
6755 /* Get enough memory to hold the stuff */
6756 bfd *input_bfd = link_order->u.indirect.section->owner;
6757 asection *input_section = link_order->u.indirect.section;
6758
6759 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
6760 arelent **reloc_vector = NULL;
6761 long reloc_count;
6762
6763 if (reloc_size < 0)
6764 goto error_return;
6765
6766 reloc_vector = (arelent **) bfd_malloc ((bfd_size_type) reloc_size);
6767 if (reloc_vector == NULL && reloc_size != 0)
6768 goto error_return;
6769
6770 /* read in the section */
6771 if (!bfd_get_section_contents (input_bfd,
6772 input_section,
6773 (PTR) data,
6774 (file_ptr) 0,
6775 input_section->_raw_size))
6776 goto error_return;
6777
6778 /* We're not relaxing the section, so just copy the size info */
6779 input_section->_cooked_size = input_section->_raw_size;
b34976b6 6780 input_section->reloc_done = TRUE;
b49e97c9
TS
6781
6782 reloc_count = bfd_canonicalize_reloc (input_bfd,
6783 input_section,
6784 reloc_vector,
6785 symbols);
6786 if (reloc_count < 0)
6787 goto error_return;
6788
6789 if (reloc_count > 0)
6790 {
6791 arelent **parent;
6792 /* for mips */
6793 int gp_found;
6794 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
6795
6796 {
6797 struct bfd_hash_entry *h;
6798 struct bfd_link_hash_entry *lh;
6799 /* Skip all this stuff if we aren't mixing formats. */
6800 if (abfd && input_bfd
6801 && abfd->xvec == input_bfd->xvec)
6802 lh = 0;
6803 else
6804 {
b34976b6 6805 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
b49e97c9
TS
6806 lh = (struct bfd_link_hash_entry *) h;
6807 }
6808 lookup:
6809 if (lh)
6810 {
6811 switch (lh->type)
6812 {
6813 case bfd_link_hash_undefined:
6814 case bfd_link_hash_undefweak:
6815 case bfd_link_hash_common:
6816 gp_found = 0;
6817 break;
6818 case bfd_link_hash_defined:
6819 case bfd_link_hash_defweak:
6820 gp_found = 1;
6821 gp = lh->u.def.value;
6822 break;
6823 case bfd_link_hash_indirect:
6824 case bfd_link_hash_warning:
6825 lh = lh->u.i.link;
6826 /* @@FIXME ignoring warning for now */
6827 goto lookup;
6828 case bfd_link_hash_new:
6829 default:
6830 abort ();
6831 }
6832 }
6833 else
6834 gp_found = 0;
6835 }
6836 /* end mips */
6837 for (parent = reloc_vector; *parent != (arelent *) NULL;
6838 parent++)
6839 {
6840 char *error_message = (char *) NULL;
6841 bfd_reloc_status_type r;
6842
6843 /* Specific to MIPS: Deal with relocation types that require
6844 knowing the gp of the output bfd. */
6845 asymbol *sym = *(*parent)->sym_ptr_ptr;
6846 if (bfd_is_abs_section (sym->section) && abfd)
6847 {
44c410de 6848 /* The special_function wouldn't get called anyway. */
b49e97c9
TS
6849 }
6850 else if (!gp_found)
6851 {
6852 /* The gp isn't there; let the special function code
6853 fall over on its own. */
6854 }
6855 else if ((*parent)->howto->special_function
6856 == _bfd_mips_elf32_gprel16_reloc)
6857 {
6858 /* bypass special_function call */
6859 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
6860 input_section, relocateable,
6861 (PTR) data, gp);
6862 goto skip_bfd_perform_relocation;
6863 }
6864 /* end mips specific stuff */
6865
6866 r = bfd_perform_relocation (input_bfd,
6867 *parent,
6868 (PTR) data,
6869 input_section,
6870 relocateable ? abfd : (bfd *) NULL,
6871 &error_message);
6872 skip_bfd_perform_relocation:
6873
6874 if (relocateable)
6875 {
6876 asection *os = input_section->output_section;
6877
6878 /* A partial link, so keep the relocs */
6879 os->orelocation[os->reloc_count] = *parent;
6880 os->reloc_count++;
6881 }
6882
6883 if (r != bfd_reloc_ok)
6884 {
6885 switch (r)
6886 {
6887 case bfd_reloc_undefined:
6888 if (!((*link_info->callbacks->undefined_symbol)
6889 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
6890 input_bfd, input_section, (*parent)->address,
b34976b6 6891 TRUE)))
b49e97c9
TS
6892 goto error_return;
6893 break;
6894 case bfd_reloc_dangerous:
6895 BFD_ASSERT (error_message != (char *) NULL);
6896 if (!((*link_info->callbacks->reloc_dangerous)
6897 (link_info, error_message, input_bfd, input_section,
6898 (*parent)->address)))
6899 goto error_return;
6900 break;
6901 case bfd_reloc_overflow:
6902 if (!((*link_info->callbacks->reloc_overflow)
6903 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
6904 (*parent)->howto->name, (*parent)->addend,
6905 input_bfd, input_section, (*parent)->address)))
6906 goto error_return;
6907 break;
6908 case bfd_reloc_outofrange:
6909 default:
6910 abort ();
6911 break;
6912 }
6913
6914 }
6915 }
6916 }
6917 if (reloc_vector != NULL)
6918 free (reloc_vector);
6919 return data;
6920
6921error_return:
6922 if (reloc_vector != NULL)
6923 free (reloc_vector);
6924 return NULL;
6925}
6926\f
6927/* Create a MIPS ELF linker hash table. */
6928
6929struct bfd_link_hash_table *
6930_bfd_mips_elf_link_hash_table_create (abfd)
6931 bfd *abfd;
6932{
6933 struct mips_elf_link_hash_table *ret;
6934 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
6935
e2d34d7d 6936 ret = (struct mips_elf_link_hash_table *) bfd_malloc (amt);
b49e97c9
TS
6937 if (ret == (struct mips_elf_link_hash_table *) NULL)
6938 return NULL;
6939
6940 if (! _bfd_elf_link_hash_table_init (&ret->root, abfd,
6941 mips_elf_link_hash_newfunc))
6942 {
e2d34d7d 6943 free (ret);
b49e97c9
TS
6944 return NULL;
6945 }
6946
6947#if 0
6948 /* We no longer use this. */
6949 for (i = 0; i < SIZEOF_MIPS_DYNSYM_SECNAMES; i++)
6950 ret->dynsym_sec_strindex[i] = (bfd_size_type) -1;
6951#endif
6952 ret->procedure_count = 0;
6953 ret->compact_rel_size = 0;
b34976b6 6954 ret->use_rld_obj_head = FALSE;
b49e97c9 6955 ret->rld_value = 0;
b34976b6 6956 ret->mips16_stubs_seen = FALSE;
b49e97c9
TS
6957
6958 return &ret->root.root;
6959}
6960\f
6961/* We need to use a special link routine to handle the .reginfo and
6962 the .mdebug sections. We need to merge all instances of these
6963 sections together, not write them all out sequentially. */
6964
b34976b6 6965bfd_boolean
b49e97c9
TS
6966_bfd_mips_elf_final_link (abfd, info)
6967 bfd *abfd;
6968 struct bfd_link_info *info;
6969{
6970 asection **secpp;
6971 asection *o;
6972 struct bfd_link_order *p;
6973 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
6974 asection *rtproc_sec;
6975 Elf32_RegInfo reginfo;
6976 struct ecoff_debug_info debug;
6977 const struct ecoff_debug_swap *swap
6978 = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
6979 HDRR *symhdr = &debug.symbolic_header;
6980 PTR mdebug_handle = NULL;
6981 asection *s;
6982 EXTR esym;
6983 unsigned int i;
6984 bfd_size_type amt;
6985
6986 static const char * const secname[] =
6987 {
6988 ".text", ".init", ".fini", ".data",
6989 ".rodata", ".sdata", ".sbss", ".bss"
6990 };
6991 static const int sc[] =
6992 {
6993 scText, scInit, scFini, scData,
6994 scRData, scSData, scSBss, scBss
6995 };
6996
6997 /* If all the things we linked together were PIC, but we're
6998 producing an executable (rather than a shared object), then the
6999 resulting file is CPIC (i.e., it calls PIC code.) */
7000 if (!info->shared
7001 && !info->relocateable
7002 && elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
7003 {
7004 elf_elfheader (abfd)->e_flags &= ~EF_MIPS_PIC;
7005 elf_elfheader (abfd)->e_flags |= EF_MIPS_CPIC;
7006 }
7007
7008 /* We'd carefully arranged the dynamic symbol indices, and then the
7009 generic size_dynamic_sections renumbered them out from under us.
7010 Rather than trying somehow to prevent the renumbering, just do
7011 the sort again. */
7012 if (elf_hash_table (info)->dynamic_sections_created)
7013 {
7014 bfd *dynobj;
7015 asection *got;
7016 struct mips_got_info *g;
7017
7018 /* When we resort, we must tell mips_elf_sort_hash_table what
7019 the lowest index it may use is. That's the number of section
7020 symbols we're going to add. The generic ELF linker only
7021 adds these symbols when building a shared object. Note that
7022 we count the sections after (possibly) removing the .options
7023 section above. */
7024 if (! mips_elf_sort_hash_table (info, (info->shared
7025 ? bfd_count_sections (abfd) + 1
7026 : 1)))
b34976b6 7027 return FALSE;
b49e97c9
TS
7028
7029 /* Make sure we didn't grow the global .got region. */
7030 dynobj = elf_hash_table (info)->dynobj;
7031 got = bfd_get_section_by_name (dynobj, ".got");
7032 g = (struct mips_got_info *) elf_section_data (got)->tdata;
7033
7034 if (g->global_gotsym != NULL)
7035 BFD_ASSERT ((elf_hash_table (info)->dynsymcount
7036 - g->global_gotsym->dynindx)
7037 <= g->global_gotno);
7038 }
7039
a902ee94
SC
7040#if 0
7041 /* We want to set the GP value for ld -r. */
b49e97c9
TS
7042 /* On IRIX5, we omit the .options section. On IRIX6, however, we
7043 include it, even though we don't process it quite right. (Some
7044 entries are supposed to be merged.) Empirically, we seem to be
7045 better off including it then not. */
7046 if (IRIX_COMPAT (abfd) == ict_irix5 || IRIX_COMPAT (abfd) == ict_none)
7047 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
7048 {
7049 if (strcmp ((*secpp)->name, MIPS_ELF_OPTIONS_SECTION_NAME (abfd)) == 0)
7050 {
7051 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
7052 if (p->type == bfd_indirect_link_order)
7053 p->u.indirect.section->flags &= ~SEC_HAS_CONTENTS;
7054 (*secpp)->link_order_head = NULL;
7055 bfd_section_list_remove (abfd, secpp);
7056 --abfd->section_count;
7057
7058 break;
7059 }
7060 }
7061
7062 /* We include .MIPS.options, even though we don't process it quite right.
7063 (Some entries are supposed to be merged.) At IRIX6 empirically we seem
7064 to be better off including it than not. */
7065 for (secpp = &abfd->sections; *secpp != NULL; secpp = &(*secpp)->next)
7066 {
7067 if (strcmp ((*secpp)->name, ".MIPS.options") == 0)
7068 {
7069 for (p = (*secpp)->link_order_head; p != NULL; p = p->next)
7070 if (p->type == bfd_indirect_link_order)
7071 p->u.indirect.section->flags &=~ SEC_HAS_CONTENTS;
7072 (*secpp)->link_order_head = NULL;
7073 bfd_section_list_remove (abfd, secpp);
7074 --abfd->section_count;
b34976b6 7075
b49e97c9
TS
7076 break;
7077 }
7078 }
a902ee94 7079#endif
b49e97c9
TS
7080
7081 /* Get a value for the GP register. */
7082 if (elf_gp (abfd) == 0)
7083 {
7084 struct bfd_link_hash_entry *h;
7085
b34976b6 7086 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
b49e97c9
TS
7087 if (h != (struct bfd_link_hash_entry *) NULL
7088 && h->type == bfd_link_hash_defined)
7089 elf_gp (abfd) = (h->u.def.value
7090 + h->u.def.section->output_section->vma
7091 + h->u.def.section->output_offset);
7092 else if (info->relocateable)
7093 {
7094 bfd_vma lo = MINUS_ONE;
7095
7096 /* Find the GP-relative section with the lowest offset. */
7097 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
7098 if (o->vma < lo
7099 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
7100 lo = o->vma;
7101
7102 /* And calculate GP relative to that. */
7103 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (abfd);
7104 }
7105 else
7106 {
7107 /* If the relocate_section function needs to do a reloc
7108 involving the GP value, it should make a reloc_dangerous
7109 callback to warn that GP is not defined. */
7110 }
7111 }
7112
7113 /* Go through the sections and collect the .reginfo and .mdebug
7114 information. */
7115 reginfo_sec = NULL;
7116 mdebug_sec = NULL;
7117 gptab_data_sec = NULL;
7118 gptab_bss_sec = NULL;
7119 for (o = abfd->sections; o != (asection *) NULL; o = o->next)
7120 {
7121 if (strcmp (o->name, ".reginfo") == 0)
7122 {
7123 memset (&reginfo, 0, sizeof reginfo);
7124
7125 /* We have found the .reginfo section in the output file.
7126 Look through all the link_orders comprising it and merge
7127 the information together. */
7128 for (p = o->link_order_head;
7129 p != (struct bfd_link_order *) NULL;
7130 p = p->next)
7131 {
7132 asection *input_section;
7133 bfd *input_bfd;
7134 Elf32_External_RegInfo ext;
7135 Elf32_RegInfo sub;
7136
7137 if (p->type != bfd_indirect_link_order)
7138 {
7139 if (p->type == bfd_data_link_order)
7140 continue;
7141 abort ();
7142 }
7143
7144 input_section = p->u.indirect.section;
7145 input_bfd = input_section->owner;
7146
7147 /* The linker emulation code has probably clobbered the
7148 size to be zero bytes. */
7149 if (input_section->_raw_size == 0)
7150 input_section->_raw_size = sizeof (Elf32_External_RegInfo);
7151
7152 if (! bfd_get_section_contents (input_bfd, input_section,
7153 (PTR) &ext,
7154 (file_ptr) 0,
7155 (bfd_size_type) sizeof ext))
b34976b6 7156 return FALSE;
b49e97c9
TS
7157
7158 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
7159
7160 reginfo.ri_gprmask |= sub.ri_gprmask;
7161 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
7162 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
7163 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
7164 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
7165
7166 /* ri_gp_value is set by the function
7167 mips_elf32_section_processing when the section is
7168 finally written out. */
7169
7170 /* Hack: reset the SEC_HAS_CONTENTS flag so that
7171 elf_link_input_bfd ignores this section. */
7172 input_section->flags &= ~SEC_HAS_CONTENTS;
7173 }
7174
7175 /* Size has been set in _bfd_mips_elf_always_size_sections. */
7176 BFD_ASSERT(o->_raw_size == sizeof (Elf32_External_RegInfo));
7177
7178 /* Skip this section later on (I don't think this currently
7179 matters, but someday it might). */
7180 o->link_order_head = (struct bfd_link_order *) NULL;
7181
7182 reginfo_sec = o;
7183 }
7184
7185 if (strcmp (o->name, ".mdebug") == 0)
7186 {
7187 struct extsym_info einfo;
7188 bfd_vma last;
7189
7190 /* We have found the .mdebug section in the output file.
7191 Look through all the link_orders comprising it and merge
7192 the information together. */
7193 symhdr->magic = swap->sym_magic;
7194 /* FIXME: What should the version stamp be? */
7195 symhdr->vstamp = 0;
7196 symhdr->ilineMax = 0;
7197 symhdr->cbLine = 0;
7198 symhdr->idnMax = 0;
7199 symhdr->ipdMax = 0;
7200 symhdr->isymMax = 0;
7201 symhdr->ioptMax = 0;
7202 symhdr->iauxMax = 0;
7203 symhdr->issMax = 0;
7204 symhdr->issExtMax = 0;
7205 symhdr->ifdMax = 0;
7206 symhdr->crfd = 0;
7207 symhdr->iextMax = 0;
7208
7209 /* We accumulate the debugging information itself in the
7210 debug_info structure. */
7211 debug.line = NULL;
7212 debug.external_dnr = NULL;
7213 debug.external_pdr = NULL;
7214 debug.external_sym = NULL;
7215 debug.external_opt = NULL;
7216 debug.external_aux = NULL;
7217 debug.ss = NULL;
7218 debug.ssext = debug.ssext_end = NULL;
7219 debug.external_fdr = NULL;
7220 debug.external_rfd = NULL;
7221 debug.external_ext = debug.external_ext_end = NULL;
7222
7223 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
7224 if (mdebug_handle == (PTR) NULL)
b34976b6 7225 return FALSE;
b49e97c9
TS
7226
7227 esym.jmptbl = 0;
7228 esym.cobol_main = 0;
7229 esym.weakext = 0;
7230 esym.reserved = 0;
7231 esym.ifd = ifdNil;
7232 esym.asym.iss = issNil;
7233 esym.asym.st = stLocal;
7234 esym.asym.reserved = 0;
7235 esym.asym.index = indexNil;
7236 last = 0;
7237 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
7238 {
7239 esym.asym.sc = sc[i];
7240 s = bfd_get_section_by_name (abfd, secname[i]);
7241 if (s != NULL)
7242 {
7243 esym.asym.value = s->vma;
7244 last = s->vma + s->_raw_size;
7245 }
7246 else
7247 esym.asym.value = last;
7248 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
7249 secname[i], &esym))
b34976b6 7250 return FALSE;
b49e97c9
TS
7251 }
7252
7253 for (p = o->link_order_head;
7254 p != (struct bfd_link_order *) NULL;
7255 p = p->next)
7256 {
7257 asection *input_section;
7258 bfd *input_bfd;
7259 const struct ecoff_debug_swap *input_swap;
7260 struct ecoff_debug_info input_debug;
7261 char *eraw_src;
7262 char *eraw_end;
7263
7264 if (p->type != bfd_indirect_link_order)
7265 {
7266 if (p->type == bfd_data_link_order)
7267 continue;
7268 abort ();
7269 }
7270
7271 input_section = p->u.indirect.section;
7272 input_bfd = input_section->owner;
7273
7274 if (bfd_get_flavour (input_bfd) != bfd_target_elf_flavour
7275 || (get_elf_backend_data (input_bfd)
7276 ->elf_backend_ecoff_debug_swap) == NULL)
7277 {
7278 /* I don't know what a non MIPS ELF bfd would be
7279 doing with a .mdebug section, but I don't really
7280 want to deal with it. */
7281 continue;
7282 }
7283
7284 input_swap = (get_elf_backend_data (input_bfd)
7285 ->elf_backend_ecoff_debug_swap);
7286
7287 BFD_ASSERT (p->size == input_section->_raw_size);
7288
7289 /* The ECOFF linking code expects that we have already
7290 read in the debugging information and set up an
7291 ecoff_debug_info structure, so we do that now. */
7292 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
7293 &input_debug))
b34976b6 7294 return FALSE;
b49e97c9
TS
7295
7296 if (! (bfd_ecoff_debug_accumulate
7297 (mdebug_handle, abfd, &debug, swap, input_bfd,
7298 &input_debug, input_swap, info)))
b34976b6 7299 return FALSE;
b49e97c9
TS
7300
7301 /* Loop through the external symbols. For each one with
7302 interesting information, try to find the symbol in
7303 the linker global hash table and save the information
7304 for the output external symbols. */
7305 eraw_src = input_debug.external_ext;
7306 eraw_end = (eraw_src
7307 + (input_debug.symbolic_header.iextMax
7308 * input_swap->external_ext_size));
7309 for (;
7310 eraw_src < eraw_end;
7311 eraw_src += input_swap->external_ext_size)
7312 {
7313 EXTR ext;
7314 const char *name;
7315 struct mips_elf_link_hash_entry *h;
7316
7317 (*input_swap->swap_ext_in) (input_bfd, (PTR) eraw_src, &ext);
7318 if (ext.asym.sc == scNil
7319 || ext.asym.sc == scUndefined
7320 || ext.asym.sc == scSUndefined)
7321 continue;
7322
7323 name = input_debug.ssext + ext.asym.iss;
7324 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
b34976b6 7325 name, FALSE, FALSE, TRUE);
b49e97c9
TS
7326 if (h == NULL || h->esym.ifd != -2)
7327 continue;
7328
7329 if (ext.ifd != -1)
7330 {
7331 BFD_ASSERT (ext.ifd
7332 < input_debug.symbolic_header.ifdMax);
7333 ext.ifd = input_debug.ifdmap[ext.ifd];
7334 }
7335
7336 h->esym = ext;
7337 }
7338
7339 /* Free up the information we just read. */
7340 free (input_debug.line);
7341 free (input_debug.external_dnr);
7342 free (input_debug.external_pdr);
7343 free (input_debug.external_sym);
7344 free (input_debug.external_opt);
7345 free (input_debug.external_aux);
7346 free (input_debug.ss);
7347 free (input_debug.ssext);
7348 free (input_debug.external_fdr);
7349 free (input_debug.external_rfd);
7350 free (input_debug.external_ext);
7351
7352 /* Hack: reset the SEC_HAS_CONTENTS flag so that
7353 elf_link_input_bfd ignores this section. */
7354 input_section->flags &= ~SEC_HAS_CONTENTS;
7355 }
7356
7357 if (SGI_COMPAT (abfd) && info->shared)
7358 {
7359 /* Create .rtproc section. */
7360 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
7361 if (rtproc_sec == NULL)
7362 {
7363 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
7364 | SEC_LINKER_CREATED | SEC_READONLY);
7365
7366 rtproc_sec = bfd_make_section (abfd, ".rtproc");
7367 if (rtproc_sec == NULL
7368 || ! bfd_set_section_flags (abfd, rtproc_sec, flags)
7369 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
b34976b6 7370 return FALSE;
b49e97c9
TS
7371 }
7372
7373 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
7374 info, rtproc_sec,
7375 &debug))
b34976b6 7376 return FALSE;
b49e97c9
TS
7377 }
7378
7379 /* Build the external symbol information. */
7380 einfo.abfd = abfd;
7381 einfo.info = info;
7382 einfo.debug = &debug;
7383 einfo.swap = swap;
b34976b6 7384 einfo.failed = FALSE;
b49e97c9
TS
7385 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
7386 mips_elf_output_extsym,
7387 (PTR) &einfo);
7388 if (einfo.failed)
b34976b6 7389 return FALSE;
b49e97c9
TS
7390
7391 /* Set the size of the .mdebug section. */
7392 o->_raw_size = bfd_ecoff_debug_size (abfd, &debug, swap);
7393
7394 /* Skip this section later on (I don't think this currently
7395 matters, but someday it might). */
7396 o->link_order_head = (struct bfd_link_order *) NULL;
7397
7398 mdebug_sec = o;
7399 }
7400
7401 if (strncmp (o->name, ".gptab.", sizeof ".gptab." - 1) == 0)
7402 {
7403 const char *subname;
7404 unsigned int c;
7405 Elf32_gptab *tab;
7406 Elf32_External_gptab *ext_tab;
7407 unsigned int j;
7408
7409 /* The .gptab.sdata and .gptab.sbss sections hold
7410 information describing how the small data area would
7411 change depending upon the -G switch. These sections
7412 not used in executables files. */
7413 if (! info->relocateable)
7414 {
7415 for (p = o->link_order_head;
7416 p != (struct bfd_link_order *) NULL;
7417 p = p->next)
7418 {
7419 asection *input_section;
7420
7421 if (p->type != bfd_indirect_link_order)
7422 {
7423 if (p->type == bfd_data_link_order)
7424 continue;
7425 abort ();
7426 }
7427
7428 input_section = p->u.indirect.section;
7429
7430 /* Hack: reset the SEC_HAS_CONTENTS flag so that
7431 elf_link_input_bfd ignores this section. */
7432 input_section->flags &= ~SEC_HAS_CONTENTS;
7433 }
7434
7435 /* Skip this section later on (I don't think this
7436 currently matters, but someday it might). */
7437 o->link_order_head = (struct bfd_link_order *) NULL;
7438
7439 /* Really remove the section. */
7440 for (secpp = &abfd->sections;
7441 *secpp != o;
7442 secpp = &(*secpp)->next)
7443 ;
7444 bfd_section_list_remove (abfd, secpp);
7445 --abfd->section_count;
7446
7447 continue;
7448 }
7449
7450 /* There is one gptab for initialized data, and one for
7451 uninitialized data. */
7452 if (strcmp (o->name, ".gptab.sdata") == 0)
7453 gptab_data_sec = o;
7454 else if (strcmp (o->name, ".gptab.sbss") == 0)
7455 gptab_bss_sec = o;
7456 else
7457 {
7458 (*_bfd_error_handler)
7459 (_("%s: illegal section name `%s'"),
7460 bfd_get_filename (abfd), o->name);
7461 bfd_set_error (bfd_error_nonrepresentable_section);
b34976b6 7462 return FALSE;
b49e97c9
TS
7463 }
7464
7465 /* The linker script always combines .gptab.data and
7466 .gptab.sdata into .gptab.sdata, and likewise for
7467 .gptab.bss and .gptab.sbss. It is possible that there is
7468 no .sdata or .sbss section in the output file, in which
7469 case we must change the name of the output section. */
7470 subname = o->name + sizeof ".gptab" - 1;
7471 if (bfd_get_section_by_name (abfd, subname) == NULL)
7472 {
7473 if (o == gptab_data_sec)
7474 o->name = ".gptab.data";
7475 else
7476 o->name = ".gptab.bss";
7477 subname = o->name + sizeof ".gptab" - 1;
7478 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
7479 }
7480
7481 /* Set up the first entry. */
7482 c = 1;
7483 amt = c * sizeof (Elf32_gptab);
7484 tab = (Elf32_gptab *) bfd_malloc (amt);
7485 if (tab == NULL)
b34976b6 7486 return FALSE;
b49e97c9
TS
7487 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
7488 tab[0].gt_header.gt_unused = 0;
7489
7490 /* Combine the input sections. */
7491 for (p = o->link_order_head;
7492 p != (struct bfd_link_order *) NULL;
7493 p = p->next)
7494 {
7495 asection *input_section;
7496 bfd *input_bfd;
7497 bfd_size_type size;
7498 unsigned long last;
7499 bfd_size_type gpentry;
7500
7501 if (p->type != bfd_indirect_link_order)
7502 {
7503 if (p->type == bfd_data_link_order)
7504 continue;
7505 abort ();
7506 }
7507
7508 input_section = p->u.indirect.section;
7509 input_bfd = input_section->owner;
7510
7511 /* Combine the gptab entries for this input section one
7512 by one. We know that the input gptab entries are
7513 sorted by ascending -G value. */
7514 size = bfd_section_size (input_bfd, input_section);
7515 last = 0;
7516 for (gpentry = sizeof (Elf32_External_gptab);
7517 gpentry < size;
7518 gpentry += sizeof (Elf32_External_gptab))
7519 {
7520 Elf32_External_gptab ext_gptab;
7521 Elf32_gptab int_gptab;
7522 unsigned long val;
7523 unsigned long add;
b34976b6 7524 bfd_boolean exact;
b49e97c9
TS
7525 unsigned int look;
7526
7527 if (! (bfd_get_section_contents
7528 (input_bfd, input_section, (PTR) &ext_gptab,
7529 (file_ptr) gpentry,
7530 (bfd_size_type) sizeof (Elf32_External_gptab))))
7531 {
7532 free (tab);
b34976b6 7533 return FALSE;
b49e97c9
TS
7534 }
7535
7536 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
7537 &int_gptab);
7538 val = int_gptab.gt_entry.gt_g_value;
7539 add = int_gptab.gt_entry.gt_bytes - last;
7540
b34976b6 7541 exact = FALSE;
b49e97c9
TS
7542 for (look = 1; look < c; look++)
7543 {
7544 if (tab[look].gt_entry.gt_g_value >= val)
7545 tab[look].gt_entry.gt_bytes += add;
7546
7547 if (tab[look].gt_entry.gt_g_value == val)
b34976b6 7548 exact = TRUE;
b49e97c9
TS
7549 }
7550
7551 if (! exact)
7552 {
7553 Elf32_gptab *new_tab;
7554 unsigned int max;
7555
7556 /* We need a new table entry. */
7557 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
7558 new_tab = (Elf32_gptab *) bfd_realloc ((PTR) tab, amt);
7559 if (new_tab == NULL)
7560 {
7561 free (tab);
b34976b6 7562 return FALSE;
b49e97c9
TS
7563 }
7564 tab = new_tab;
7565 tab[c].gt_entry.gt_g_value = val;
7566 tab[c].gt_entry.gt_bytes = add;
7567
7568 /* Merge in the size for the next smallest -G
7569 value, since that will be implied by this new
7570 value. */
7571 max = 0;
7572 for (look = 1; look < c; look++)
7573 {
7574 if (tab[look].gt_entry.gt_g_value < val
7575 && (max == 0
7576 || (tab[look].gt_entry.gt_g_value
7577 > tab[max].gt_entry.gt_g_value)))
7578 max = look;
7579 }
7580 if (max != 0)
7581 tab[c].gt_entry.gt_bytes +=
7582 tab[max].gt_entry.gt_bytes;
7583
7584 ++c;
7585 }
7586
7587 last = int_gptab.gt_entry.gt_bytes;
7588 }
7589
7590 /* Hack: reset the SEC_HAS_CONTENTS flag so that
7591 elf_link_input_bfd ignores this section. */
7592 input_section->flags &= ~SEC_HAS_CONTENTS;
7593 }
7594
7595 /* The table must be sorted by -G value. */
7596 if (c > 2)
7597 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
7598
7599 /* Swap out the table. */
7600 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
7601 ext_tab = (Elf32_External_gptab *) bfd_alloc (abfd, amt);
7602 if (ext_tab == NULL)
7603 {
7604 free (tab);
b34976b6 7605 return FALSE;
b49e97c9
TS
7606 }
7607
7608 for (j = 0; j < c; j++)
7609 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
7610 free (tab);
7611
7612 o->_raw_size = c * sizeof (Elf32_External_gptab);
7613 o->contents = (bfd_byte *) ext_tab;
7614
7615 /* Skip this section later on (I don't think this currently
7616 matters, but someday it might). */
7617 o->link_order_head = (struct bfd_link_order *) NULL;
7618 }
7619 }
7620
7621 /* Invoke the regular ELF backend linker to do all the work. */
ee6423ed 7622 if (!MNAME(abfd,bfd_elf,bfd_final_link) (abfd, info))
b34976b6 7623 return FALSE;
b49e97c9
TS
7624
7625 /* Now write out the computed sections. */
7626
7627 if (reginfo_sec != (asection *) NULL)
7628 {
7629 Elf32_External_RegInfo ext;
7630
7631 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
7632 if (! bfd_set_section_contents (abfd, reginfo_sec, (PTR) &ext,
7633 (file_ptr) 0,
7634 (bfd_size_type) sizeof ext))
b34976b6 7635 return FALSE;
b49e97c9
TS
7636 }
7637
7638 if (mdebug_sec != (asection *) NULL)
7639 {
7640 BFD_ASSERT (abfd->output_has_begun);
7641 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
7642 swap, info,
7643 mdebug_sec->filepos))
b34976b6 7644 return FALSE;
b49e97c9
TS
7645
7646 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
7647 }
7648
7649 if (gptab_data_sec != (asection *) NULL)
7650 {
7651 if (! bfd_set_section_contents (abfd, gptab_data_sec,
7652 gptab_data_sec->contents,
7653 (file_ptr) 0,
7654 gptab_data_sec->_raw_size))
b34976b6 7655 return FALSE;
b49e97c9
TS
7656 }
7657
7658 if (gptab_bss_sec != (asection *) NULL)
7659 {
7660 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
7661 gptab_bss_sec->contents,
7662 (file_ptr) 0,
7663 gptab_bss_sec->_raw_size))
b34976b6 7664 return FALSE;
b49e97c9
TS
7665 }
7666
7667 if (SGI_COMPAT (abfd))
7668 {
7669 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
7670 if (rtproc_sec != NULL)
7671 {
7672 if (! bfd_set_section_contents (abfd, rtproc_sec,
7673 rtproc_sec->contents,
7674 (file_ptr) 0,
7675 rtproc_sec->_raw_size))
b34976b6 7676 return FALSE;
b49e97c9
TS
7677 }
7678 }
7679
b34976b6 7680 return TRUE;
b49e97c9
TS
7681}
7682\f
b34976b6 7683/* Return TRUE if machine EXTENSION is an extension of machine BASE,
00707a0e
RS
7684 meaning that it should be safe to link code for the two machines
7685 and set the output machine to EXTENSION. EXTENSION and BASE are
7686 both submasks of EF_MIPS_MACH. */
7687
b34976b6 7688static bfd_boolean
00707a0e
RS
7689_bfd_mips_elf_mach_extends_p (base, extension)
7690 flagword base, extension;
7691{
7692 /* The vr5500 ISA is an extension of the core vr5400 ISA, but doesn't
7693 include the multimedia stuff. It seems better to allow vr5400
7694 and vr5500 code to be merged anyway, since many libraries will
7695 just use the core ISA. Perhaps we could add some sort of ASE
7696 flag if this ever proves a problem. */
7697 return (base == 0
7698 || (base == E_MIPS_MACH_5400 && extension == E_MIPS_MACH_5500)
7699 || (base == E_MIPS_MACH_4100 && extension == E_MIPS_MACH_4111)
7700 || (base == E_MIPS_MACH_4100 && extension == E_MIPS_MACH_4120));
7701}
7702
b49e97c9
TS
7703/* Merge backend specific data from an object file to the output
7704 object file when linking. */
7705
b34976b6 7706bfd_boolean
b49e97c9
TS
7707_bfd_mips_elf_merge_private_bfd_data (ibfd, obfd)
7708 bfd *ibfd;
7709 bfd *obfd;
7710{
7711 flagword old_flags;
7712 flagword new_flags;
b34976b6
AM
7713 bfd_boolean ok;
7714 bfd_boolean null_input_bfd = TRUE;
b49e97c9
TS
7715 asection *sec;
7716
7717 /* Check if we have the same endianess */
82e51918 7718 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
b34976b6 7719 return FALSE;
b49e97c9
TS
7720
7721 if (bfd_get_flavour (ibfd) != bfd_target_elf_flavour
7722 || bfd_get_flavour (obfd) != bfd_target_elf_flavour)
b34976b6 7723 return TRUE;
b49e97c9
TS
7724
7725 new_flags = elf_elfheader (ibfd)->e_flags;
7726 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
7727 old_flags = elf_elfheader (obfd)->e_flags;
7728
7729 if (! elf_flags_init (obfd))
7730 {
b34976b6 7731 elf_flags_init (obfd) = TRUE;
b49e97c9
TS
7732 elf_elfheader (obfd)->e_flags = new_flags;
7733 elf_elfheader (obfd)->e_ident[EI_CLASS]
7734 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
7735
7736 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
7737 && bfd_get_arch_info (obfd)->the_default)
7738 {
7739 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
7740 bfd_get_mach (ibfd)))
b34976b6 7741 return FALSE;
b49e97c9
TS
7742 }
7743
b34976b6 7744 return TRUE;
b49e97c9
TS
7745 }
7746
7747 /* Check flag compatibility. */
7748
7749 new_flags &= ~EF_MIPS_NOREORDER;
7750 old_flags &= ~EF_MIPS_NOREORDER;
7751
7752 if (new_flags == old_flags)
b34976b6 7753 return TRUE;
b49e97c9
TS
7754
7755 /* Check to see if the input BFD actually contains any sections.
7756 If not, its flags may not have been initialised either, but it cannot
7757 actually cause any incompatibility. */
7758 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
7759 {
7760 /* Ignore synthetic sections and empty .text, .data and .bss sections
7761 which are automatically generated by gas. */
7762 if (strcmp (sec->name, ".reginfo")
7763 && strcmp (sec->name, ".mdebug")
7764 && ((!strcmp (sec->name, ".text")
7765 || !strcmp (sec->name, ".data")
7766 || !strcmp (sec->name, ".bss"))
7767 && sec->_raw_size != 0))
7768 {
b34976b6 7769 null_input_bfd = FALSE;
b49e97c9
TS
7770 break;
7771 }
7772 }
7773 if (null_input_bfd)
b34976b6 7774 return TRUE;
b49e97c9 7775
b34976b6 7776 ok = TRUE;
b49e97c9
TS
7777
7778 if ((new_flags & EF_MIPS_PIC) != (old_flags & EF_MIPS_PIC))
7779 {
7780 new_flags &= ~EF_MIPS_PIC;
7781 old_flags &= ~EF_MIPS_PIC;
7782 (*_bfd_error_handler)
7783 (_("%s: linking PIC files with non-PIC files"),
7784 bfd_archive_filename (ibfd));
b34976b6 7785 ok = FALSE;
b49e97c9
TS
7786 }
7787
7788 if ((new_flags & EF_MIPS_CPIC) != (old_flags & EF_MIPS_CPIC))
7789 {
7790 new_flags &= ~EF_MIPS_CPIC;
7791 old_flags &= ~EF_MIPS_CPIC;
7792 (*_bfd_error_handler)
7793 (_("%s: linking abicalls files with non-abicalls files"),
7794 bfd_archive_filename (ibfd));
b34976b6 7795 ok = FALSE;
b49e97c9
TS
7796 }
7797
7798 /* Compare the ISA's. */
7799 if ((new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH))
7800 != (old_flags & (EF_MIPS_ARCH | EF_MIPS_MACH)))
7801 {
7802 int new_mach = new_flags & EF_MIPS_MACH;
7803 int old_mach = old_flags & EF_MIPS_MACH;
7804 int new_isa = elf_mips_isa (new_flags);
7805 int old_isa = elf_mips_isa (old_flags);
7806
7807 /* If either has no machine specified, just compare the general isa's.
7808 Some combinations of machines are ok, if the isa's match. */
00707a0e
RS
7809 if (new_mach == old_mach
7810 || _bfd_mips_elf_mach_extends_p (new_mach, old_mach)
7811 || _bfd_mips_elf_mach_extends_p (old_mach, new_mach))
b49e97c9
TS
7812 {
7813 /* Don't warn about mixing code using 32-bit ISAs, or mixing code
7814 using 64-bit ISAs. They will normally use the same data sizes
7815 and calling conventions. */
7816
7817 if (( (new_isa == 1 || new_isa == 2 || new_isa == 32)
7818 ^ (old_isa == 1 || old_isa == 2 || old_isa == 32)) != 0)
7819 {
7820 (*_bfd_error_handler)
7821 (_("%s: ISA mismatch (-mips%d) with previous modules (-mips%d)"),
7822 bfd_archive_filename (ibfd), new_isa, old_isa);
b34976b6 7823 ok = FALSE;
b49e97c9
TS
7824 }
7825 else
7826 {
7827 /* Do we need to update the mach field? */
00707a0e
RS
7828 if (_bfd_mips_elf_mach_extends_p (old_mach, new_mach))
7829 {
7830 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_MACH;
7831 elf_elfheader (obfd)->e_flags |= new_mach;
7832 }
b49e97c9
TS
7833
7834 /* Do we need to update the ISA field? */
7835 if (new_isa > old_isa)
7836 {
7837 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_ARCH;
7838 elf_elfheader (obfd)->e_flags
7839 |= new_flags & EF_MIPS_ARCH;
7840 }
7841 }
7842 }
7843 else
7844 {
7845 (*_bfd_error_handler)
7846 (_("%s: ISA mismatch (%d) with previous modules (%d)"),
7847 bfd_archive_filename (ibfd),
7848 _bfd_elf_mips_mach (new_flags),
7849 _bfd_elf_mips_mach (old_flags));
b34976b6 7850 ok = FALSE;
b49e97c9
TS
7851 }
7852
7853 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
7854 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
7855 }
7856
7857 /* Compare ABI's. The 64-bit ABI does not use EF_MIPS_ABI. But, it
7858 does set EI_CLASS differently from any 32-bit ABI. */
7859 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
7860 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
7861 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
7862 {
7863 /* Only error if both are set (to different values). */
7864 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
7865 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
7866 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
7867 {
7868 (*_bfd_error_handler)
7869 (_("%s: ABI mismatch: linking %s module with previous %s modules"),
7870 bfd_archive_filename (ibfd),
7871 elf_mips_abi_name (ibfd),
7872 elf_mips_abi_name (obfd));
b34976b6 7873 ok = FALSE;
b49e97c9
TS
7874 }
7875 new_flags &= ~EF_MIPS_ABI;
7876 old_flags &= ~EF_MIPS_ABI;
7877 }
7878
fb39dac1
RS
7879 /* For now, allow arbitrary mixing of ASEs (retain the union). */
7880 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
7881 {
7882 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
7883
7884 new_flags &= ~ EF_MIPS_ARCH_ASE;
7885 old_flags &= ~ EF_MIPS_ARCH_ASE;
7886 }
7887
b49e97c9
TS
7888 /* Warn about any other mismatches */
7889 if (new_flags != old_flags)
7890 {
7891 (*_bfd_error_handler)
7892 (_("%s: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
7893 bfd_archive_filename (ibfd), (unsigned long) new_flags,
7894 (unsigned long) old_flags);
b34976b6 7895 ok = FALSE;
b49e97c9
TS
7896 }
7897
7898 if (! ok)
7899 {
7900 bfd_set_error (bfd_error_bad_value);
b34976b6 7901 return FALSE;
b49e97c9
TS
7902 }
7903
b34976b6 7904 return TRUE;
b49e97c9
TS
7905}
7906
7907/* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
7908
b34976b6 7909bfd_boolean
b49e97c9
TS
7910_bfd_mips_elf_set_private_flags (abfd, flags)
7911 bfd *abfd;
7912 flagword flags;
7913{
7914 BFD_ASSERT (!elf_flags_init (abfd)
7915 || elf_elfheader (abfd)->e_flags == flags);
7916
7917 elf_elfheader (abfd)->e_flags = flags;
b34976b6
AM
7918 elf_flags_init (abfd) = TRUE;
7919 return TRUE;
b49e97c9
TS
7920}
7921
b34976b6 7922bfd_boolean
b49e97c9
TS
7923_bfd_mips_elf_print_private_bfd_data (abfd, ptr)
7924 bfd *abfd;
7925 PTR ptr;
7926{
7927 FILE *file = (FILE *) ptr;
7928
7929 BFD_ASSERT (abfd != NULL && ptr != NULL);
7930
7931 /* Print normal ELF private data. */
7932 _bfd_elf_print_private_bfd_data (abfd, ptr);
7933
7934 /* xgettext:c-format */
7935 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
7936
7937 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
7938 fprintf (file, _(" [abi=O32]"));
7939 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
7940 fprintf (file, _(" [abi=O64]"));
7941 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
7942 fprintf (file, _(" [abi=EABI32]"));
7943 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7944 fprintf (file, _(" [abi=EABI64]"));
7945 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
7946 fprintf (file, _(" [abi unknown]"));
7947 else if (ABI_N32_P (abfd))
7948 fprintf (file, _(" [abi=N32]"));
7949 else if (ABI_64_P (abfd))
7950 fprintf (file, _(" [abi=64]"));
7951 else
7952 fprintf (file, _(" [no abi set]"));
7953
7954 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
7955 fprintf (file, _(" [mips1]"));
7956 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
7957 fprintf (file, _(" [mips2]"));
7958 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
7959 fprintf (file, _(" [mips3]"));
7960 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
7961 fprintf (file, _(" [mips4]"));
7962 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
7963 fprintf (file, _(" [mips5]"));
7964 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
7965 fprintf (file, _(" [mips32]"));
7966 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
7967 fprintf (file, _(" [mips64]"));
7968 else
7969 fprintf (file, _(" [unknown ISA]"));
7970
40d32fc6
CD
7971 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
7972 fprintf (file, _(" [mdmx]"));
7973
7974 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
7975 fprintf (file, _(" [mips16]"));
7976
b49e97c9
TS
7977 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
7978 fprintf (file, _(" [32bitmode]"));
7979 else
7980 fprintf (file, _(" [not 32bitmode]"));
7981
7982 fputc ('\n', file);
7983
b34976b6 7984 return TRUE;
b49e97c9 7985}