]> git.ipfire.org Git - thirdparty/binutils-gdb.git/blame - bfd/elfxx-mips.c
Add output_type to bfd_link_info
[thirdparty/binutils-gdb.git] / bfd / elfxx-mips.c
CommitLineData
b49e97c9 1/* MIPS-specific support for ELF
b90efa5b 2 Copyright (C) 1993-2015 Free Software Foundation, Inc.
b49e97c9
TS
3
4 Most of the information added by Ian Lance Taylor, Cygnus Support,
5 <ian@cygnus.com>.
6 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7 <mark@codesourcery.com>
8 Traditional MIPS targets support added by Koundinya.K, Dansk Data
9 Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10
ae9a127f 11 This file is part of BFD, the Binary File Descriptor library.
b49e97c9 12
ae9a127f
NC
13 This program is free software; you can redistribute it and/or modify
14 it under the terms of the GNU General Public License as published by
cd123cb7 15 the Free Software Foundation; either version 3 of the License, or
ae9a127f 16 (at your option) any later version.
b49e97c9 17
ae9a127f
NC
18 This program is distributed in the hope that it will be useful,
19 but WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 GNU General Public License for more details.
b49e97c9 22
ae9a127f
NC
23 You should have received a copy of the GNU General Public License
24 along with this program; if not, write to the Free Software
cd123cb7
NC
25 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26 MA 02110-1301, USA. */
27
b49e97c9
TS
28
29/* This file handles functionality common to the different MIPS ABI's. */
30
b49e97c9 31#include "sysdep.h"
3db64b00 32#include "bfd.h"
b49e97c9 33#include "libbfd.h"
64543e1a 34#include "libiberty.h"
b49e97c9
TS
35#include "elf-bfd.h"
36#include "elfxx-mips.h"
37#include "elf/mips.h"
0a44bf69 38#include "elf-vxworks.h"
2f0c68f2 39#include "dwarf2.h"
b49e97c9
TS
40
41/* Get the ECOFF swapping routines. */
42#include "coff/sym.h"
43#include "coff/symconst.h"
44#include "coff/ecoff.h"
45#include "coff/mips.h"
46
b15e6682
AO
47#include "hashtab.h"
48
9ab066b4
RS
49/* Types of TLS GOT entry. */
50enum mips_got_tls_type {
51 GOT_TLS_NONE,
52 GOT_TLS_GD,
53 GOT_TLS_LDM,
54 GOT_TLS_IE
55};
56
ead49a57 57/* This structure is used to hold information about one GOT entry.
3dff0dd1
RS
58 There are four types of entry:
59
60 (1) an absolute address
61 requires: abfd == NULL
62 fields: d.address
63
64 (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
65 requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
66 fields: abfd, symndx, d.addend, tls_type
67
68 (3) a SYMBOL address, where SYMBOL is not local to an input bfd
69 requires: abfd != NULL, symndx == -1
70 fields: d.h, tls_type
71
72 (4) a TLS LDM slot
73 requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
74 fields: none; there's only one of these per GOT. */
b15e6682
AO
75struct mips_got_entry
76{
3dff0dd1 77 /* One input bfd that needs the GOT entry. */
b15e6682 78 bfd *abfd;
f4416af6
AO
79 /* The index of the symbol, as stored in the relocation r_info, if
80 we have a local symbol; -1 otherwise. */
81 long symndx;
82 union
83 {
84 /* If abfd == NULL, an address that must be stored in the got. */
85 bfd_vma address;
86 /* If abfd != NULL && symndx != -1, the addend of the relocation
87 that should be added to the symbol value. */
88 bfd_vma addend;
89 /* If abfd != NULL && symndx == -1, the hash table entry
3dff0dd1 90 corresponding to a symbol in the GOT. The symbol's entry
020d7251
RS
91 is in the local area if h->global_got_area is GGA_NONE,
92 otherwise it is in the global area. */
f4416af6
AO
93 struct mips_elf_link_hash_entry *h;
94 } d;
0f20cc35 95
9ab066b4
RS
96 /* The TLS type of this GOT entry. An LDM GOT entry will be a local
97 symbol entry with r_symndx == 0. */
0f20cc35
DJ
98 unsigned char tls_type;
99
9ab066b4
RS
100 /* True if we have filled in the GOT contents for a TLS entry,
101 and created the associated relocations. */
102 unsigned char tls_initialized;
103
b15e6682 104 /* The offset from the beginning of the .got section to the entry
f4416af6
AO
105 corresponding to this symbol+addend. If it's a global symbol
106 whose offset is yet to be decided, it's going to be -1. */
107 long gotidx;
b15e6682
AO
108};
109
13db6b44
RS
110/* This structure represents a GOT page reference from an input bfd.
111 Each instance represents a symbol + ADDEND, where the representation
112 of the symbol depends on whether it is local to the input bfd.
113 If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
114 Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
115
116 Page references with SYMNDX >= 0 always become page references
117 in the output. Page references with SYMNDX < 0 only become page
118 references if the symbol binds locally; in other cases, the page
119 reference decays to a global GOT reference. */
120struct mips_got_page_ref
121{
122 long symndx;
123 union
124 {
125 struct mips_elf_link_hash_entry *h;
126 bfd *abfd;
127 } u;
128 bfd_vma addend;
129};
130
c224138d
RS
131/* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
132 The structures form a non-overlapping list that is sorted by increasing
133 MIN_ADDEND. */
134struct mips_got_page_range
135{
136 struct mips_got_page_range *next;
137 bfd_signed_vma min_addend;
138 bfd_signed_vma max_addend;
139};
140
141/* This structure describes the range of addends that are applied to page
13db6b44 142 relocations against a given section. */
c224138d
RS
143struct mips_got_page_entry
144{
13db6b44
RS
145 /* The section that these entries are based on. */
146 asection *sec;
c224138d
RS
147 /* The ranges for this page entry. */
148 struct mips_got_page_range *ranges;
149 /* The maximum number of page entries needed for RANGES. */
150 bfd_vma num_pages;
151};
152
f0abc2a1 153/* This structure is used to hold .got information when linking. */
b49e97c9
TS
154
155struct mips_got_info
156{
b49e97c9
TS
157 /* The number of global .got entries. */
158 unsigned int global_gotno;
23cc69b6
RS
159 /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */
160 unsigned int reloc_only_gotno;
0f20cc35
DJ
161 /* The number of .got slots used for TLS. */
162 unsigned int tls_gotno;
163 /* The first unused TLS .got entry. Used only during
164 mips_elf_initialize_tls_index. */
165 unsigned int tls_assigned_gotno;
c224138d 166 /* The number of local .got entries, eventually including page entries. */
b49e97c9 167 unsigned int local_gotno;
c224138d
RS
168 /* The maximum number of page entries needed. */
169 unsigned int page_gotno;
ab361d49
RS
170 /* The number of relocations needed for the GOT entries. */
171 unsigned int relocs;
cb22ccf4
KCY
172 /* The first unused local .got entry. */
173 unsigned int assigned_low_gotno;
174 /* The last unused local .got entry. */
175 unsigned int assigned_high_gotno;
b15e6682
AO
176 /* A hash table holding members of the got. */
177 struct htab *got_entries;
13db6b44
RS
178 /* A hash table holding mips_got_page_ref structures. */
179 struct htab *got_page_refs;
c224138d
RS
180 /* A hash table of mips_got_page_entry structures. */
181 struct htab *got_page_entries;
f4416af6
AO
182 /* In multi-got links, a pointer to the next got (err, rather, most
183 of the time, it points to the previous got). */
184 struct mips_got_info *next;
185};
186
d7206569 187/* Structure passed when merging bfds' gots. */
f4416af6
AO
188
189struct mips_elf_got_per_bfd_arg
190{
f4416af6
AO
191 /* The output bfd. */
192 bfd *obfd;
193 /* The link information. */
194 struct bfd_link_info *info;
195 /* A pointer to the primary got, i.e., the one that's going to get
196 the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197 DT_MIPS_GOTSYM. */
198 struct mips_got_info *primary;
199 /* A non-primary got we're trying to merge with other input bfd's
200 gots. */
201 struct mips_got_info *current;
202 /* The maximum number of got entries that can be addressed with a
203 16-bit offset. */
204 unsigned int max_count;
c224138d
RS
205 /* The maximum number of page entries needed by each got. */
206 unsigned int max_pages;
0f20cc35
DJ
207 /* The total number of global entries which will live in the
208 primary got and be automatically relocated. This includes
209 those not referenced by the primary GOT but included in
210 the "master" GOT. */
211 unsigned int global_count;
f4416af6
AO
212};
213
ab361d49
RS
214/* A structure used to pass information to htab_traverse callbacks
215 when laying out the GOT. */
f4416af6 216
ab361d49 217struct mips_elf_traverse_got_arg
f4416af6 218{
ab361d49 219 struct bfd_link_info *info;
f4416af6
AO
220 struct mips_got_info *g;
221 int value;
0f20cc35
DJ
222};
223
f0abc2a1
AM
224struct _mips_elf_section_data
225{
226 struct bfd_elf_section_data elf;
227 union
228 {
f0abc2a1
AM
229 bfd_byte *tdata;
230 } u;
231};
232
233#define mips_elf_section_data(sec) \
68bfbfcc 234 ((struct _mips_elf_section_data *) elf_section_data (sec))
f0abc2a1 235
d5eaccd7
RS
236#define is_mips_elf(bfd) \
237 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
238 && elf_tdata (bfd) != NULL \
4dfe6ac6 239 && elf_object_id (bfd) == MIPS_ELF_DATA)
d5eaccd7 240
634835ae
RS
241/* The ABI says that every symbol used by dynamic relocations must have
242 a global GOT entry. Among other things, this provides the dynamic
243 linker with a free, directly-indexed cache. The GOT can therefore
244 contain symbols that are not referenced by GOT relocations themselves
245 (in other words, it may have symbols that are not referenced by things
246 like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
247
248 GOT relocations are less likely to overflow if we put the associated
249 GOT entries towards the beginning. We therefore divide the global
250 GOT entries into two areas: "normal" and "reloc-only". Entries in
251 the first area can be used for both dynamic relocations and GP-relative
252 accesses, while those in the "reloc-only" area are for dynamic
253 relocations only.
254
255 These GGA_* ("Global GOT Area") values are organised so that lower
256 values are more general than higher values. Also, non-GGA_NONE
257 values are ordered by the position of the area in the GOT. */
258#define GGA_NORMAL 0
259#define GGA_RELOC_ONLY 1
260#define GGA_NONE 2
261
861fb55a
DJ
262/* Information about a non-PIC interface to a PIC function. There are
263 two ways of creating these interfaces. The first is to add:
264
265 lui $25,%hi(func)
266 addiu $25,$25,%lo(func)
267
268 immediately before a PIC function "func". The second is to add:
269
270 lui $25,%hi(func)
271 j func
272 addiu $25,$25,%lo(func)
273
274 to a separate trampoline section.
275
276 Stubs of the first kind go in a new section immediately before the
277 target function. Stubs of the second kind go in a single section
278 pointed to by the hash table's "strampoline" field. */
279struct mips_elf_la25_stub {
280 /* The generated section that contains this stub. */
281 asection *stub_section;
282
283 /* The offset of the stub from the start of STUB_SECTION. */
284 bfd_vma offset;
285
286 /* One symbol for the original function. Its location is available
287 in H->root.root.u.def. */
288 struct mips_elf_link_hash_entry *h;
289};
290
291/* Macros for populating a mips_elf_la25_stub. */
292
293#define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */
294#define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
295#define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */
d21911ea
MR
296#define LA25_LUI_MICROMIPS(VAL) \
297 (0x41b90000 | (VAL)) /* lui t9,VAL */
298#define LA25_J_MICROMIPS(VAL) \
299 (0xd4000000 | (((VAL) >> 1) & 0x3ffffff)) /* j VAL */
300#define LA25_ADDIU_MICROMIPS(VAL) \
301 (0x33390000 | (VAL)) /* addiu t9,t9,VAL */
861fb55a 302
b49e97c9
TS
303/* This structure is passed to mips_elf_sort_hash_table_f when sorting
304 the dynamic symbols. */
305
306struct mips_elf_hash_sort_data
307{
308 /* The symbol in the global GOT with the lowest dynamic symbol table
309 index. */
310 struct elf_link_hash_entry *low;
0f20cc35
DJ
311 /* The least dynamic symbol table index corresponding to a non-TLS
312 symbol with a GOT entry. */
b49e97c9 313 long min_got_dynindx;
f4416af6
AO
314 /* The greatest dynamic symbol table index corresponding to a symbol
315 with a GOT entry that is not referenced (e.g., a dynamic symbol
9e4aeb93 316 with dynamic relocations pointing to it from non-primary GOTs). */
f4416af6 317 long max_unref_got_dynindx;
b49e97c9
TS
318 /* The greatest dynamic symbol table index not corresponding to a
319 symbol without a GOT entry. */
320 long max_non_got_dynindx;
321};
322
1bbce132
MR
323/* We make up to two PLT entries if needed, one for standard MIPS code
324 and one for compressed code, either a MIPS16 or microMIPS one. We
325 keep a separate record of traditional lazy-binding stubs, for easier
326 processing. */
327
328struct plt_entry
329{
330 /* Traditional SVR4 stub offset, or -1 if none. */
331 bfd_vma stub_offset;
332
333 /* Standard PLT entry offset, or -1 if none. */
334 bfd_vma mips_offset;
335
336 /* Compressed PLT entry offset, or -1 if none. */
337 bfd_vma comp_offset;
338
339 /* The corresponding .got.plt index, or -1 if none. */
340 bfd_vma gotplt_index;
341
342 /* Whether we need a standard PLT entry. */
343 unsigned int need_mips : 1;
344
345 /* Whether we need a compressed PLT entry. */
346 unsigned int need_comp : 1;
347};
348
b49e97c9
TS
349/* The MIPS ELF linker needs additional information for each symbol in
350 the global hash table. */
351
352struct mips_elf_link_hash_entry
353{
354 struct elf_link_hash_entry root;
355
356 /* External symbol information. */
357 EXTR esym;
358
861fb55a
DJ
359 /* The la25 stub we have created for ths symbol, if any. */
360 struct mips_elf_la25_stub *la25_stub;
361
b49e97c9
TS
362 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
363 this symbol. */
364 unsigned int possibly_dynamic_relocs;
365
b49e97c9
TS
366 /* If there is a stub that 32 bit functions should use to call this
367 16 bit function, this points to the section containing the stub. */
368 asection *fn_stub;
369
b49e97c9
TS
370 /* If there is a stub that 16 bit functions should use to call this
371 32 bit function, this points to the section containing the stub. */
372 asection *call_stub;
373
374 /* This is like the call_stub field, but it is used if the function
375 being called returns a floating point value. */
376 asection *call_fp_stub;
7c5fcef7 377
634835ae
RS
378 /* The highest GGA_* value that satisfies all references to this symbol. */
379 unsigned int global_got_area : 2;
380
6ccf4795
RS
381 /* True if all GOT relocations against this symbol are for calls. This is
382 a looser condition than no_fn_stub below, because there may be other
383 non-call non-GOT relocations against the symbol. */
384 unsigned int got_only_for_calls : 1;
385
71782a75
RS
386 /* True if one of the relocations described by possibly_dynamic_relocs
387 is against a readonly section. */
388 unsigned int readonly_reloc : 1;
389
861fb55a
DJ
390 /* True if there is a relocation against this symbol that must be
391 resolved by the static linker (in other words, if the relocation
392 cannot possibly be made dynamic). */
393 unsigned int has_static_relocs : 1;
394
71782a75
RS
395 /* True if we must not create a .MIPS.stubs entry for this symbol.
396 This is set, for example, if there are relocations related to
397 taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
398 See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */
399 unsigned int no_fn_stub : 1;
400
401 /* Whether we need the fn_stub; this is true if this symbol appears
402 in any relocs other than a 16 bit call. */
403 unsigned int need_fn_stub : 1;
404
861fb55a
DJ
405 /* True if this symbol is referenced by branch relocations from
406 any non-PIC input file. This is used to determine whether an
407 la25 stub is required. */
408 unsigned int has_nonpic_branches : 1;
33bb52fb
RS
409
410 /* Does this symbol need a traditional MIPS lazy-binding stub
411 (as opposed to a PLT entry)? */
412 unsigned int needs_lazy_stub : 1;
1bbce132
MR
413
414 /* Does this symbol resolve to a PLT entry? */
415 unsigned int use_plt_entry : 1;
b49e97c9
TS
416};
417
418/* MIPS ELF linker hash table. */
419
420struct mips_elf_link_hash_table
421{
422 struct elf_link_hash_table root;
861fb55a 423
b49e97c9
TS
424 /* The number of .rtproc entries. */
425 bfd_size_type procedure_count;
861fb55a 426
b49e97c9
TS
427 /* The size of the .compact_rel section (if SGI_COMPAT). */
428 bfd_size_type compact_rel_size;
861fb55a 429
e6aea42d
MR
430 /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
431 is set to the address of __rld_obj_head as in IRIX5 and IRIX6. */
b34976b6 432 bfd_boolean use_rld_obj_head;
861fb55a 433
b4082c70
DD
434 /* The __rld_map or __rld_obj_head symbol. */
435 struct elf_link_hash_entry *rld_symbol;
861fb55a 436
b49e97c9 437 /* This is set if we see any mips16 stub sections. */
b34976b6 438 bfd_boolean mips16_stubs_seen;
861fb55a
DJ
439
440 /* True if we can generate copy relocs and PLTs. */
441 bfd_boolean use_plts_and_copy_relocs;
442
833794fc
MR
443 /* True if we can only use 32-bit microMIPS instructions. */
444 bfd_boolean insn32;
445
0a44bf69
RS
446 /* True if we're generating code for VxWorks. */
447 bfd_boolean is_vxworks;
861fb55a 448
0e53d9da
AN
449 /* True if we already reported the small-data section overflow. */
450 bfd_boolean small_data_overflow_reported;
861fb55a 451
0a44bf69
RS
452 /* Shortcuts to some dynamic sections, or NULL if they are not
453 being used. */
454 asection *srelbss;
455 asection *sdynbss;
456 asection *srelplt;
457 asection *srelplt2;
458 asection *sgotplt;
459 asection *splt;
4e41d0d7 460 asection *sstubs;
a8028dd0 461 asection *sgot;
861fb55a 462
a8028dd0
RS
463 /* The master GOT information. */
464 struct mips_got_info *got_info;
861fb55a 465
d222d210
RS
466 /* The global symbol in the GOT with the lowest index in the dynamic
467 symbol table. */
468 struct elf_link_hash_entry *global_gotsym;
469
861fb55a 470 /* The size of the PLT header in bytes. */
0a44bf69 471 bfd_vma plt_header_size;
861fb55a 472
1bbce132
MR
473 /* The size of a standard PLT entry in bytes. */
474 bfd_vma plt_mips_entry_size;
475
476 /* The size of a compressed PLT entry in bytes. */
477 bfd_vma plt_comp_entry_size;
478
479 /* The offset of the next standard PLT entry to create. */
480 bfd_vma plt_mips_offset;
481
482 /* The offset of the next compressed PLT entry to create. */
483 bfd_vma plt_comp_offset;
484
485 /* The index of the next .got.plt entry to create. */
486 bfd_vma plt_got_index;
861fb55a 487
33bb52fb
RS
488 /* The number of functions that need a lazy-binding stub. */
489 bfd_vma lazy_stub_count;
861fb55a 490
5108fc1b
RS
491 /* The size of a function stub entry in bytes. */
492 bfd_vma function_stub_size;
861fb55a
DJ
493
494 /* The number of reserved entries at the beginning of the GOT. */
495 unsigned int reserved_gotno;
496
497 /* The section used for mips_elf_la25_stub trampolines.
498 See the comment above that structure for details. */
499 asection *strampoline;
500
501 /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
502 pairs. */
503 htab_t la25_stubs;
504
505 /* A function FN (NAME, IS, OS) that creates a new input section
506 called NAME and links it to output section OS. If IS is nonnull,
507 the new section should go immediately before it, otherwise it
508 should go at the (current) beginning of OS.
509
510 The function returns the new section on success, otherwise it
511 returns null. */
512 asection *(*add_stub_section) (const char *, asection *, asection *);
13db6b44
RS
513
514 /* Small local sym cache. */
515 struct sym_cache sym_cache;
1bbce132
MR
516
517 /* Is the PLT header compressed? */
518 unsigned int plt_header_is_comp : 1;
861fb55a
DJ
519};
520
4dfe6ac6
NC
521/* Get the MIPS ELF linker hash table from a link_info structure. */
522
523#define mips_elf_hash_table(p) \
524 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
525 == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
526
861fb55a 527/* A structure used to communicate with htab_traverse callbacks. */
4dfe6ac6
NC
528struct mips_htab_traverse_info
529{
861fb55a
DJ
530 /* The usual link-wide information. */
531 struct bfd_link_info *info;
532 bfd *output_bfd;
533
534 /* Starts off FALSE and is set to TRUE if the link should be aborted. */
535 bfd_boolean error;
b49e97c9
TS
536};
537
6ae68ba3
MR
538/* MIPS ELF private object data. */
539
540struct mips_elf_obj_tdata
541{
542 /* Generic ELF private object data. */
543 struct elf_obj_tdata root;
544
545 /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output. */
546 bfd *abi_fp_bfd;
ee227692 547
b60bf9be
CF
548 /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output. */
549 bfd *abi_msa_bfd;
550
351cdf24
MF
551 /* The abiflags for this object. */
552 Elf_Internal_ABIFlags_v0 abiflags;
553 bfd_boolean abiflags_valid;
554
ee227692
RS
555 /* The GOT requirements of input bfds. */
556 struct mips_got_info *got;
698600e4
AM
557
558 /* Used by _bfd_mips_elf_find_nearest_line. The structure could be
559 included directly in this one, but there's no point to wasting
560 the memory just for the infrequently called find_nearest_line. */
561 struct mips_elf_find_line *find_line_info;
562
563 /* An array of stub sections indexed by symbol number. */
564 asection **local_stubs;
565 asection **local_call_stubs;
566
567 /* The Irix 5 support uses two virtual sections, which represent
568 text/data symbols defined in dynamic objects. */
569 asymbol *elf_data_symbol;
570 asymbol *elf_text_symbol;
571 asection *elf_data_section;
572 asection *elf_text_section;
6ae68ba3
MR
573};
574
575/* Get MIPS ELF private object data from BFD's tdata. */
576
577#define mips_elf_tdata(bfd) \
578 ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
579
0f20cc35
DJ
580#define TLS_RELOC_P(r_type) \
581 (r_type == R_MIPS_TLS_DTPMOD32 \
582 || r_type == R_MIPS_TLS_DTPMOD64 \
583 || r_type == R_MIPS_TLS_DTPREL32 \
584 || r_type == R_MIPS_TLS_DTPREL64 \
585 || r_type == R_MIPS_TLS_GD \
586 || r_type == R_MIPS_TLS_LDM \
587 || r_type == R_MIPS_TLS_DTPREL_HI16 \
588 || r_type == R_MIPS_TLS_DTPREL_LO16 \
589 || r_type == R_MIPS_TLS_GOTTPREL \
590 || r_type == R_MIPS_TLS_TPREL32 \
591 || r_type == R_MIPS_TLS_TPREL64 \
592 || r_type == R_MIPS_TLS_TPREL_HI16 \
df58fc94 593 || r_type == R_MIPS_TLS_TPREL_LO16 \
d0f13682
CLT
594 || r_type == R_MIPS16_TLS_GD \
595 || r_type == R_MIPS16_TLS_LDM \
596 || r_type == R_MIPS16_TLS_DTPREL_HI16 \
597 || r_type == R_MIPS16_TLS_DTPREL_LO16 \
598 || r_type == R_MIPS16_TLS_GOTTPREL \
599 || r_type == R_MIPS16_TLS_TPREL_HI16 \
600 || r_type == R_MIPS16_TLS_TPREL_LO16 \
df58fc94
RS
601 || r_type == R_MICROMIPS_TLS_GD \
602 || r_type == R_MICROMIPS_TLS_LDM \
603 || r_type == R_MICROMIPS_TLS_DTPREL_HI16 \
604 || r_type == R_MICROMIPS_TLS_DTPREL_LO16 \
605 || r_type == R_MICROMIPS_TLS_GOTTPREL \
606 || r_type == R_MICROMIPS_TLS_TPREL_HI16 \
607 || r_type == R_MICROMIPS_TLS_TPREL_LO16)
0f20cc35 608
b49e97c9
TS
609/* Structure used to pass information to mips_elf_output_extsym. */
610
611struct extsym_info
612{
9e4aeb93
RS
613 bfd *abfd;
614 struct bfd_link_info *info;
b49e97c9
TS
615 struct ecoff_debug_info *debug;
616 const struct ecoff_debug_swap *swap;
b34976b6 617 bfd_boolean failed;
b49e97c9
TS
618};
619
8dc1a139 620/* The names of the runtime procedure table symbols used on IRIX5. */
b49e97c9
TS
621
622static const char * const mips_elf_dynsym_rtproc_names[] =
623{
624 "_procedure_table",
625 "_procedure_string_table",
626 "_procedure_table_size",
627 NULL
628};
629
630/* These structures are used to generate the .compact_rel section on
8dc1a139 631 IRIX5. */
b49e97c9
TS
632
633typedef struct
634{
635 unsigned long id1; /* Always one? */
636 unsigned long num; /* Number of compact relocation entries. */
637 unsigned long id2; /* Always two? */
638 unsigned long offset; /* The file offset of the first relocation. */
639 unsigned long reserved0; /* Zero? */
640 unsigned long reserved1; /* Zero? */
641} Elf32_compact_rel;
642
643typedef struct
644{
645 bfd_byte id1[4];
646 bfd_byte num[4];
647 bfd_byte id2[4];
648 bfd_byte offset[4];
649 bfd_byte reserved0[4];
650 bfd_byte reserved1[4];
651} Elf32_External_compact_rel;
652
653typedef struct
654{
655 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
656 unsigned int rtype : 4; /* Relocation types. See below. */
657 unsigned int dist2to : 8;
658 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
659 unsigned long konst; /* KONST field. See below. */
660 unsigned long vaddr; /* VADDR to be relocated. */
661} Elf32_crinfo;
662
663typedef struct
664{
665 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
666 unsigned int rtype : 4; /* Relocation types. See below. */
667 unsigned int dist2to : 8;
668 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
669 unsigned long konst; /* KONST field. See below. */
670} Elf32_crinfo2;
671
672typedef struct
673{
674 bfd_byte info[4];
675 bfd_byte konst[4];
676 bfd_byte vaddr[4];
677} Elf32_External_crinfo;
678
679typedef struct
680{
681 bfd_byte info[4];
682 bfd_byte konst[4];
683} Elf32_External_crinfo2;
684
685/* These are the constants used to swap the bitfields in a crinfo. */
686
687#define CRINFO_CTYPE (0x1)
688#define CRINFO_CTYPE_SH (31)
689#define CRINFO_RTYPE (0xf)
690#define CRINFO_RTYPE_SH (27)
691#define CRINFO_DIST2TO (0xff)
692#define CRINFO_DIST2TO_SH (19)
693#define CRINFO_RELVADDR (0x7ffff)
694#define CRINFO_RELVADDR_SH (0)
695
696/* A compact relocation info has long (3 words) or short (2 words)
697 formats. A short format doesn't have VADDR field and relvaddr
698 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
699#define CRF_MIPS_LONG 1
700#define CRF_MIPS_SHORT 0
701
702/* There are 4 types of compact relocation at least. The value KONST
703 has different meaning for each type:
704
705 (type) (konst)
706 CT_MIPS_REL32 Address in data
707 CT_MIPS_WORD Address in word (XXX)
708 CT_MIPS_GPHI_LO GP - vaddr
709 CT_MIPS_JMPAD Address to jump
710 */
711
712#define CRT_MIPS_REL32 0xa
713#define CRT_MIPS_WORD 0xb
714#define CRT_MIPS_GPHI_LO 0xc
715#define CRT_MIPS_JMPAD 0xd
716
717#define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
718#define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
719#define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
720#define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
721\f
722/* The structure of the runtime procedure descriptor created by the
723 loader for use by the static exception system. */
724
725typedef struct runtime_pdr {
ae9a127f
NC
726 bfd_vma adr; /* Memory address of start of procedure. */
727 long regmask; /* Save register mask. */
728 long regoffset; /* Save register offset. */
729 long fregmask; /* Save floating point register mask. */
730 long fregoffset; /* Save floating point register offset. */
731 long frameoffset; /* Frame size. */
732 short framereg; /* Frame pointer register. */
733 short pcreg; /* Offset or reg of return pc. */
734 long irpss; /* Index into the runtime string table. */
b49e97c9 735 long reserved;
ae9a127f 736 struct exception_info *exception_info;/* Pointer to exception array. */
b49e97c9
TS
737} RPDR, *pRPDR;
738#define cbRPDR sizeof (RPDR)
739#define rpdNil ((pRPDR) 0)
740\f
b15e6682 741static struct mips_got_entry *mips_elf_create_local_got_entry
a8028dd0
RS
742 (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
743 struct mips_elf_link_hash_entry *, int);
b34976b6 744static bfd_boolean mips_elf_sort_hash_table_f
9719ad41 745 (struct mips_elf_link_hash_entry *, void *);
9719ad41
RS
746static bfd_vma mips_elf_high
747 (bfd_vma);
b34976b6 748static bfd_boolean mips_elf_create_dynamic_relocation
9719ad41
RS
749 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
750 struct mips_elf_link_hash_entry *, asection *, bfd_vma,
751 bfd_vma *, asection *);
f4416af6 752static bfd_vma mips_elf_adjust_gp
9719ad41 753 (bfd *, struct mips_got_info *, bfd *);
f4416af6 754
b49e97c9
TS
755/* This will be used when we sort the dynamic relocation records. */
756static bfd *reldyn_sorting_bfd;
757
6d30f5b2
NC
758/* True if ABFD is for CPUs with load interlocking that include
759 non-MIPS1 CPUs and R3900. */
760#define LOAD_INTERLOCKS_P(abfd) \
761 ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
762 || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
763
cd8d5a82
CF
764/* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
765 This should be safe for all architectures. We enable this predicate
766 for RM9000 for now. */
767#define JAL_TO_BAL_P(abfd) \
768 ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
769
770/* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
771 This should be safe for all architectures. We enable this predicate for
772 all CPUs. */
773#define JALR_TO_BAL_P(abfd) 1
774
38a7df63
CF
775/* True if ABFD is for CPUs that are faster if JR is converted to B.
776 This should be safe for all architectures. We enable this predicate for
777 all CPUs. */
778#define JR_TO_B_P(abfd) 1
779
861fb55a
DJ
780/* True if ABFD is a PIC object. */
781#define PIC_OBJECT_P(abfd) \
782 ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
783
351cdf24
MF
784/* Nonzero if ABFD is using the O32 ABI. */
785#define ABI_O32_P(abfd) \
786 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
787
b49e97c9 788/* Nonzero if ABFD is using the N32 ABI. */
b49e97c9
TS
789#define ABI_N32_P(abfd) \
790 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
791
4a14403c 792/* Nonzero if ABFD is using the N64 ABI. */
b49e97c9 793#define ABI_64_P(abfd) \
141ff970 794 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
b49e97c9 795
4a14403c
TS
796/* Nonzero if ABFD is using NewABI conventions. */
797#define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
798
e8faf7d1
MR
799/* Nonzero if ABFD has microMIPS code. */
800#define MICROMIPS_P(abfd) \
801 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
802
7361da2c
AB
803/* Nonzero if ABFD is MIPS R6. */
804#define MIPSR6_P(abfd) \
805 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
806 || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
807
4a14403c 808/* The IRIX compatibility level we are striving for. */
b49e97c9
TS
809#define IRIX_COMPAT(abfd) \
810 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
811
b49e97c9
TS
812/* Whether we are trying to be compatible with IRIX at all. */
813#define SGI_COMPAT(abfd) \
814 (IRIX_COMPAT (abfd) != ict_none)
815
816/* The name of the options section. */
817#define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
d80dcc6a 818 (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
b49e97c9 819
cc2e31b9
RS
820/* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
821 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */
822#define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
823 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
824
351cdf24
MF
825/* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section. */
826#define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
827 (strcmp (NAME, ".MIPS.abiflags") == 0)
828
943284cc
DJ
829/* Whether the section is readonly. */
830#define MIPS_ELF_READONLY_SECTION(sec) \
831 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \
832 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
833
b49e97c9 834/* The name of the stub section. */
ca07892d 835#define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
b49e97c9
TS
836
837/* The size of an external REL relocation. */
838#define MIPS_ELF_REL_SIZE(abfd) \
839 (get_elf_backend_data (abfd)->s->sizeof_rel)
840
0a44bf69
RS
841/* The size of an external RELA relocation. */
842#define MIPS_ELF_RELA_SIZE(abfd) \
843 (get_elf_backend_data (abfd)->s->sizeof_rela)
844
b49e97c9
TS
845/* The size of an external dynamic table entry. */
846#define MIPS_ELF_DYN_SIZE(abfd) \
847 (get_elf_backend_data (abfd)->s->sizeof_dyn)
848
849/* The size of a GOT entry. */
850#define MIPS_ELF_GOT_SIZE(abfd) \
851 (get_elf_backend_data (abfd)->s->arch_size / 8)
852
b4082c70
DD
853/* The size of the .rld_map section. */
854#define MIPS_ELF_RLD_MAP_SIZE(abfd) \
855 (get_elf_backend_data (abfd)->s->arch_size / 8)
856
b49e97c9
TS
857/* The size of a symbol-table entry. */
858#define MIPS_ELF_SYM_SIZE(abfd) \
859 (get_elf_backend_data (abfd)->s->sizeof_sym)
860
861/* The default alignment for sections, as a power of two. */
862#define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
45d6a902 863 (get_elf_backend_data (abfd)->s->log_file_align)
b49e97c9
TS
864
865/* Get word-sized data. */
866#define MIPS_ELF_GET_WORD(abfd, ptr) \
867 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
868
869/* Put out word-sized data. */
870#define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
871 (ABI_64_P (abfd) \
872 ? bfd_put_64 (abfd, val, ptr) \
873 : bfd_put_32 (abfd, val, ptr))
874
861fb55a
DJ
875/* The opcode for word-sized loads (LW or LD). */
876#define MIPS_ELF_LOAD_WORD(abfd) \
877 (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
878
b49e97c9 879/* Add a dynamic symbol table-entry. */
9719ad41 880#define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
5a580b3a 881 _bfd_elf_add_dynamic_entry (info, tag, val)
b49e97c9
TS
882
883#define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
884 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
885
0a44bf69
RS
886/* The name of the dynamic relocation section. */
887#define MIPS_ELF_REL_DYN_NAME(INFO) \
888 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
889
b49e97c9
TS
890/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
891 from smaller values. Start with zero, widen, *then* decrement. */
892#define MINUS_ONE (((bfd_vma)0) - 1)
c5ae1840 893#define MINUS_TWO (((bfd_vma)0) - 2)
b49e97c9 894
51e38d68
RS
895/* The value to write into got[1] for SVR4 targets, to identify it is
896 a GNU object. The dynamic linker can then use got[1] to store the
897 module pointer. */
898#define MIPS_ELF_GNU_GOT1_MASK(abfd) \
899 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
900
f4416af6 901/* The offset of $gp from the beginning of the .got section. */
0a44bf69
RS
902#define ELF_MIPS_GP_OFFSET(INFO) \
903 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
f4416af6
AO
904
905/* The maximum size of the GOT for it to be addressable using 16-bit
906 offsets from $gp. */
0a44bf69 907#define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
f4416af6 908
6a691779 909/* Instructions which appear in a stub. */
3d6746ca
DD
910#define STUB_LW(abfd) \
911 ((ABI_64_P (abfd) \
912 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
913 : 0x8f998010)) /* lw t9,0x8010(gp) */
40fc1451 914#define STUB_MOVE 0x03e07825 /* or t7,ra,zero */
3d6746ca
DD
915#define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */
916#define STUB_JALR 0x0320f809 /* jalr t9,ra */
5108fc1b
RS
917#define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */
918#define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */
3d6746ca
DD
919#define STUB_LI16S(abfd, VAL) \
920 ((ABI_64_P (abfd) \
921 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \
922 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */
923
1bbce132
MR
924/* Likewise for the microMIPS ASE. */
925#define STUB_LW_MICROMIPS(abfd) \
926 (ABI_64_P (abfd) \
927 ? 0xdf3c8010 /* ld t9,0x8010(gp) */ \
928 : 0xff3c8010) /* lw t9,0x8010(gp) */
929#define STUB_MOVE_MICROMIPS 0x0dff /* move t7,ra */
40fc1451 930#define STUB_MOVE32_MICROMIPS 0x001f7a90 /* or t7,ra,zero */
1bbce132
MR
931#define STUB_LUI_MICROMIPS(VAL) \
932 (0x41b80000 + (VAL)) /* lui t8,VAL */
933#define STUB_JALR_MICROMIPS 0x45d9 /* jalr t9 */
833794fc 934#define STUB_JALR32_MICROMIPS 0x03f90f3c /* jalr ra,t9 */
1bbce132
MR
935#define STUB_ORI_MICROMIPS(VAL) \
936 (0x53180000 + (VAL)) /* ori t8,t8,VAL */
937#define STUB_LI16U_MICROMIPS(VAL) \
938 (0x53000000 + (VAL)) /* ori t8,zero,VAL unsigned */
939#define STUB_LI16S_MICROMIPS(abfd, VAL) \
940 (ABI_64_P (abfd) \
941 ? 0x5f000000 + (VAL) /* daddiu t8,zero,VAL sign extended */ \
942 : 0x33000000 + (VAL)) /* addiu t8,zero,VAL sign extended */
943
5108fc1b
RS
944#define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
945#define MIPS_FUNCTION_STUB_BIG_SIZE 20
1bbce132
MR
946#define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
947#define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
833794fc
MR
948#define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
949#define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
b49e97c9
TS
950
951/* The name of the dynamic interpreter. This is put in the .interp
952 section. */
953
954#define ELF_DYNAMIC_INTERPRETER(abfd) \
955 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
956 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
957 : "/usr/lib/libc.so.1")
958
959#ifdef BFD64
ee6423ed
AO
960#define MNAME(bfd,pre,pos) \
961 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
b49e97c9
TS
962#define ELF_R_SYM(bfd, i) \
963 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
964#define ELF_R_TYPE(bfd, i) \
965 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
966#define ELF_R_INFO(bfd, s, t) \
967 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
968#else
ee6423ed 969#define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
b49e97c9
TS
970#define ELF_R_SYM(bfd, i) \
971 (ELF32_R_SYM (i))
972#define ELF_R_TYPE(bfd, i) \
973 (ELF32_R_TYPE (i))
974#define ELF_R_INFO(bfd, s, t) \
975 (ELF32_R_INFO (s, t))
976#endif
977\f
978 /* The mips16 compiler uses a couple of special sections to handle
979 floating point arguments.
980
981 Section names that look like .mips16.fn.FNNAME contain stubs that
982 copy floating point arguments from the fp regs to the gp regs and
983 then jump to FNNAME. If any 32 bit function calls FNNAME, the
984 call should be redirected to the stub instead. If no 32 bit
985 function calls FNNAME, the stub should be discarded. We need to
986 consider any reference to the function, not just a call, because
987 if the address of the function is taken we will need the stub,
988 since the address might be passed to a 32 bit function.
989
990 Section names that look like .mips16.call.FNNAME contain stubs
991 that copy floating point arguments from the gp regs to the fp
992 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
993 then any 16 bit function that calls FNNAME should be redirected
994 to the stub instead. If FNNAME is not a 32 bit function, the
995 stub should be discarded.
996
997 .mips16.call.fp.FNNAME sections are similar, but contain stubs
998 which call FNNAME and then copy the return value from the fp regs
999 to the gp regs. These stubs store the return value in $18 while
1000 calling FNNAME; any function which might call one of these stubs
1001 must arrange to save $18 around the call. (This case is not
1002 needed for 32 bit functions that call 16 bit functions, because
1003 16 bit functions always return floating point values in both
1004 $f0/$f1 and $2/$3.)
1005
1006 Note that in all cases FNNAME might be defined statically.
1007 Therefore, FNNAME is not used literally. Instead, the relocation
1008 information will indicate which symbol the section is for.
1009
1010 We record any stubs that we find in the symbol table. */
1011
1012#define FN_STUB ".mips16.fn."
1013#define CALL_STUB ".mips16.call."
1014#define CALL_FP_STUB ".mips16.call.fp."
b9d58d71
TS
1015
1016#define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1017#define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1018#define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
b49e97c9 1019\f
861fb55a 1020/* The format of the first PLT entry in an O32 executable. */
6d30f5b2
NC
1021static const bfd_vma mips_o32_exec_plt0_entry[] =
1022{
861fb55a
DJ
1023 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */
1024 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */
1025 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */
1026 0x031cc023, /* subu $24, $24, $28 */
40fc1451 1027 0x03e07825, /* or t7, ra, zero */
861fb55a
DJ
1028 0x0018c082, /* srl $24, $24, 2 */
1029 0x0320f809, /* jalr $25 */
1030 0x2718fffe /* subu $24, $24, 2 */
1031};
1032
1033/* The format of the first PLT entry in an N32 executable. Different
1034 because gp ($28) is not available; we use t2 ($14) instead. */
6d30f5b2
NC
1035static const bfd_vma mips_n32_exec_plt0_entry[] =
1036{
861fb55a
DJ
1037 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
1038 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */
1039 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
1040 0x030ec023, /* subu $24, $24, $14 */
40fc1451 1041 0x03e07825, /* or t7, ra, zero */
861fb55a
DJ
1042 0x0018c082, /* srl $24, $24, 2 */
1043 0x0320f809, /* jalr $25 */
1044 0x2718fffe /* subu $24, $24, 2 */
1045};
1046
1047/* The format of the first PLT entry in an N64 executable. Different
1048 from N32 because of the increased size of GOT entries. */
6d30f5b2
NC
1049static const bfd_vma mips_n64_exec_plt0_entry[] =
1050{
861fb55a
DJ
1051 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
1052 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */
1053 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
1054 0x030ec023, /* subu $24, $24, $14 */
40fc1451 1055 0x03e07825, /* or t7, ra, zero */
861fb55a
DJ
1056 0x0018c0c2, /* srl $24, $24, 3 */
1057 0x0320f809, /* jalr $25 */
1058 0x2718fffe /* subu $24, $24, 2 */
1059};
1060
1bbce132
MR
1061/* The format of the microMIPS first PLT entry in an O32 executable.
1062 We rely on v0 ($2) rather than t8 ($24) to contain the address
1063 of the GOTPLT entry handled, so this stub may only be used when
1064 all the subsequent PLT entries are microMIPS code too.
1065
1066 The trailing NOP is for alignment and correct disassembly only. */
1067static const bfd_vma micromips_o32_exec_plt0_entry[] =
1068{
1069 0x7980, 0x0000, /* addiupc $3, (&GOTPLT[0]) - . */
1070 0xff23, 0x0000, /* lw $25, 0($3) */
1071 0x0535, /* subu $2, $2, $3 */
1072 0x2525, /* srl $2, $2, 2 */
1073 0x3302, 0xfffe, /* subu $24, $2, 2 */
1074 0x0dff, /* move $15, $31 */
1075 0x45f9, /* jalrs $25 */
1076 0x0f83, /* move $28, $3 */
1077 0x0c00 /* nop */
1078};
1079
833794fc
MR
1080/* The format of the microMIPS first PLT entry in an O32 executable
1081 in the insn32 mode. */
1082static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1083{
1084 0x41bc, 0x0000, /* lui $28, %hi(&GOTPLT[0]) */
1085 0xff3c, 0x0000, /* lw $25, %lo(&GOTPLT[0])($28) */
1086 0x339c, 0x0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */
1087 0x0398, 0xc1d0, /* subu $24, $24, $28 */
40fc1451 1088 0x001f, 0x7a90, /* or $15, $31, zero */
833794fc
MR
1089 0x0318, 0x1040, /* srl $24, $24, 2 */
1090 0x03f9, 0x0f3c, /* jalr $25 */
1091 0x3318, 0xfffe /* subu $24, $24, 2 */
1092};
1093
1bbce132 1094/* The format of subsequent standard PLT entries. */
6d30f5b2
NC
1095static const bfd_vma mips_exec_plt_entry[] =
1096{
861fb55a
DJ
1097 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */
1098 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */
1099 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */
1100 0x03200008 /* jr $25 */
1101};
1102
7361da2c
AB
1103/* In the following PLT entry the JR and ADDIU instructions will
1104 be swapped in _bfd_mips_elf_finish_dynamic_symbol because
1105 LOAD_INTERLOCKS_P will be true for MIPS R6. */
1106static const bfd_vma mipsr6_exec_plt_entry[] =
1107{
1108 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */
1109 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */
1110 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */
1111 0x03200009 /* jr $25 */
1112};
1113
1bbce132
MR
1114/* The format of subsequent MIPS16 o32 PLT entries. We use v0 ($2)
1115 and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1116 directly addressable. */
1117static const bfd_vma mips16_o32_exec_plt_entry[] =
1118{
1119 0xb203, /* lw $2, 12($pc) */
1120 0x9a60, /* lw $3, 0($2) */
1121 0x651a, /* move $24, $2 */
1122 0xeb00, /* jr $3 */
1123 0x653b, /* move $25, $3 */
1124 0x6500, /* nop */
1125 0x0000, 0x0000 /* .word (.got.plt entry) */
1126};
1127
1128/* The format of subsequent microMIPS o32 PLT entries. We use v0 ($2)
1129 as a temporary because t8 ($24) is not addressable with ADDIUPC. */
1130static const bfd_vma micromips_o32_exec_plt_entry[] =
1131{
1132 0x7900, 0x0000, /* addiupc $2, (.got.plt entry) - . */
1133 0xff22, 0x0000, /* lw $25, 0($2) */
1134 0x4599, /* jr $25 */
1135 0x0f02 /* move $24, $2 */
1136};
1137
833794fc
MR
1138/* The format of subsequent microMIPS o32 PLT entries in the insn32 mode. */
1139static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1140{
1141 0x41af, 0x0000, /* lui $15, %hi(.got.plt entry) */
1142 0xff2f, 0x0000, /* lw $25, %lo(.got.plt entry)($15) */
1143 0x0019, 0x0f3c, /* jr $25 */
1144 0x330f, 0x0000 /* addiu $24, $15, %lo(.got.plt entry) */
1145};
1146
0a44bf69 1147/* The format of the first PLT entry in a VxWorks executable. */
6d30f5b2
NC
1148static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1149{
0a44bf69
RS
1150 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */
1151 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */
1152 0x8f390008, /* lw t9, 8(t9) */
1153 0x00000000, /* nop */
1154 0x03200008, /* jr t9 */
1155 0x00000000 /* nop */
1156};
1157
1158/* The format of subsequent PLT entries. */
6d30f5b2
NC
1159static const bfd_vma mips_vxworks_exec_plt_entry[] =
1160{
0a44bf69
RS
1161 0x10000000, /* b .PLT_resolver */
1162 0x24180000, /* li t8, <pltindex> */
1163 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */
1164 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */
1165 0x8f390000, /* lw t9, 0(t9) */
1166 0x00000000, /* nop */
1167 0x03200008, /* jr t9 */
1168 0x00000000 /* nop */
1169};
1170
1171/* The format of the first PLT entry in a VxWorks shared object. */
6d30f5b2
NC
1172static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1173{
0a44bf69
RS
1174 0x8f990008, /* lw t9, 8(gp) */
1175 0x00000000, /* nop */
1176 0x03200008, /* jr t9 */
1177 0x00000000, /* nop */
1178 0x00000000, /* nop */
1179 0x00000000 /* nop */
1180};
1181
1182/* The format of subsequent PLT entries. */
6d30f5b2
NC
1183static const bfd_vma mips_vxworks_shared_plt_entry[] =
1184{
0a44bf69
RS
1185 0x10000000, /* b .PLT_resolver */
1186 0x24180000 /* li t8, <pltindex> */
1187};
1188\f
d21911ea
MR
1189/* microMIPS 32-bit opcode helper installer. */
1190
1191static void
1192bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1193{
1194 bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1195 bfd_put_16 (abfd, opcode & 0xffff, ptr + 2);
1196}
1197
1198/* microMIPS 32-bit opcode helper retriever. */
1199
1200static bfd_vma
1201bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1202{
1203 return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1204}
1205\f
b49e97c9
TS
1206/* Look up an entry in a MIPS ELF linker hash table. */
1207
1208#define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
1209 ((struct mips_elf_link_hash_entry *) \
1210 elf_link_hash_lookup (&(table)->root, (string), (create), \
1211 (copy), (follow)))
1212
1213/* Traverse a MIPS ELF linker hash table. */
1214
1215#define mips_elf_link_hash_traverse(table, func, info) \
1216 (elf_link_hash_traverse \
1217 (&(table)->root, \
9719ad41 1218 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
b49e97c9
TS
1219 (info)))
1220
0f20cc35
DJ
1221/* Find the base offsets for thread-local storage in this object,
1222 for GD/LD and IE/LE respectively. */
1223
1224#define TP_OFFSET 0x7000
1225#define DTP_OFFSET 0x8000
1226
1227static bfd_vma
1228dtprel_base (struct bfd_link_info *info)
1229{
1230 /* If tls_sec is NULL, we should have signalled an error already. */
1231 if (elf_hash_table (info)->tls_sec == NULL)
1232 return 0;
1233 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1234}
1235
1236static bfd_vma
1237tprel_base (struct bfd_link_info *info)
1238{
1239 /* If tls_sec is NULL, we should have signalled an error already. */
1240 if (elf_hash_table (info)->tls_sec == NULL)
1241 return 0;
1242 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1243}
1244
b49e97c9
TS
1245/* Create an entry in a MIPS ELF linker hash table. */
1246
1247static struct bfd_hash_entry *
9719ad41
RS
1248mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1249 struct bfd_hash_table *table, const char *string)
b49e97c9
TS
1250{
1251 struct mips_elf_link_hash_entry *ret =
1252 (struct mips_elf_link_hash_entry *) entry;
1253
1254 /* Allocate the structure if it has not already been allocated by a
1255 subclass. */
9719ad41
RS
1256 if (ret == NULL)
1257 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1258 if (ret == NULL)
b49e97c9
TS
1259 return (struct bfd_hash_entry *) ret;
1260
1261 /* Call the allocation method of the superclass. */
1262 ret = ((struct mips_elf_link_hash_entry *)
1263 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1264 table, string));
9719ad41 1265 if (ret != NULL)
b49e97c9
TS
1266 {
1267 /* Set local fields. */
1268 memset (&ret->esym, 0, sizeof (EXTR));
1269 /* We use -2 as a marker to indicate that the information has
1270 not been set. -1 means there is no associated ifd. */
1271 ret->esym.ifd = -2;
861fb55a 1272 ret->la25_stub = 0;
b49e97c9 1273 ret->possibly_dynamic_relocs = 0;
b49e97c9 1274 ret->fn_stub = NULL;
b49e97c9
TS
1275 ret->call_stub = NULL;
1276 ret->call_fp_stub = NULL;
634835ae 1277 ret->global_got_area = GGA_NONE;
6ccf4795 1278 ret->got_only_for_calls = TRUE;
71782a75 1279 ret->readonly_reloc = FALSE;
861fb55a 1280 ret->has_static_relocs = FALSE;
71782a75
RS
1281 ret->no_fn_stub = FALSE;
1282 ret->need_fn_stub = FALSE;
861fb55a 1283 ret->has_nonpic_branches = FALSE;
33bb52fb 1284 ret->needs_lazy_stub = FALSE;
1bbce132 1285 ret->use_plt_entry = FALSE;
b49e97c9
TS
1286 }
1287
1288 return (struct bfd_hash_entry *) ret;
1289}
f0abc2a1 1290
6ae68ba3
MR
1291/* Allocate MIPS ELF private object data. */
1292
1293bfd_boolean
1294_bfd_mips_elf_mkobject (bfd *abfd)
1295{
1296 return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1297 MIPS_ELF_DATA);
1298}
1299
f0abc2a1 1300bfd_boolean
9719ad41 1301_bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
f0abc2a1 1302{
f592407e
AM
1303 if (!sec->used_by_bfd)
1304 {
1305 struct _mips_elf_section_data *sdata;
1306 bfd_size_type amt = sizeof (*sdata);
f0abc2a1 1307
f592407e
AM
1308 sdata = bfd_zalloc (abfd, amt);
1309 if (sdata == NULL)
1310 return FALSE;
1311 sec->used_by_bfd = sdata;
1312 }
f0abc2a1
AM
1313
1314 return _bfd_elf_new_section_hook (abfd, sec);
1315}
b49e97c9
TS
1316\f
1317/* Read ECOFF debugging information from a .mdebug section into a
1318 ecoff_debug_info structure. */
1319
b34976b6 1320bfd_boolean
9719ad41
RS
1321_bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1322 struct ecoff_debug_info *debug)
b49e97c9
TS
1323{
1324 HDRR *symhdr;
1325 const struct ecoff_debug_swap *swap;
9719ad41 1326 char *ext_hdr;
b49e97c9
TS
1327
1328 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1329 memset (debug, 0, sizeof (*debug));
1330
9719ad41 1331 ext_hdr = bfd_malloc (swap->external_hdr_size);
b49e97c9
TS
1332 if (ext_hdr == NULL && swap->external_hdr_size != 0)
1333 goto error_return;
1334
9719ad41 1335 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
82e51918 1336 swap->external_hdr_size))
b49e97c9
TS
1337 goto error_return;
1338
1339 symhdr = &debug->symbolic_header;
1340 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1341
1342 /* The symbolic header contains absolute file offsets and sizes to
1343 read. */
1344#define READ(ptr, offset, count, size, type) \
1345 if (symhdr->count == 0) \
1346 debug->ptr = NULL; \
1347 else \
1348 { \
1349 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
9719ad41 1350 debug->ptr = bfd_malloc (amt); \
b49e97c9
TS
1351 if (debug->ptr == NULL) \
1352 goto error_return; \
9719ad41 1353 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \
b49e97c9
TS
1354 || bfd_bread (debug->ptr, amt, abfd) != amt) \
1355 goto error_return; \
1356 }
1357
1358 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
9719ad41
RS
1359 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1360 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1361 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1362 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
b49e97c9
TS
1363 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1364 union aux_ext *);
1365 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1366 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
9719ad41
RS
1367 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1368 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1369 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
b49e97c9
TS
1370#undef READ
1371
1372 debug->fdr = NULL;
b49e97c9 1373
b34976b6 1374 return TRUE;
b49e97c9
TS
1375
1376 error_return:
1377 if (ext_hdr != NULL)
1378 free (ext_hdr);
1379 if (debug->line != NULL)
1380 free (debug->line);
1381 if (debug->external_dnr != NULL)
1382 free (debug->external_dnr);
1383 if (debug->external_pdr != NULL)
1384 free (debug->external_pdr);
1385 if (debug->external_sym != NULL)
1386 free (debug->external_sym);
1387 if (debug->external_opt != NULL)
1388 free (debug->external_opt);
1389 if (debug->external_aux != NULL)
1390 free (debug->external_aux);
1391 if (debug->ss != NULL)
1392 free (debug->ss);
1393 if (debug->ssext != NULL)
1394 free (debug->ssext);
1395 if (debug->external_fdr != NULL)
1396 free (debug->external_fdr);
1397 if (debug->external_rfd != NULL)
1398 free (debug->external_rfd);
1399 if (debug->external_ext != NULL)
1400 free (debug->external_ext);
b34976b6 1401 return FALSE;
b49e97c9
TS
1402}
1403\f
1404/* Swap RPDR (runtime procedure table entry) for output. */
1405
1406static void
9719ad41 1407ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
b49e97c9
TS
1408{
1409 H_PUT_S32 (abfd, in->adr, ex->p_adr);
1410 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1411 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1412 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1413 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1414 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1415
1416 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1417 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1418
1419 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
b49e97c9
TS
1420}
1421
1422/* Create a runtime procedure table from the .mdebug section. */
1423
b34976b6 1424static bfd_boolean
9719ad41
RS
1425mips_elf_create_procedure_table (void *handle, bfd *abfd,
1426 struct bfd_link_info *info, asection *s,
1427 struct ecoff_debug_info *debug)
b49e97c9
TS
1428{
1429 const struct ecoff_debug_swap *swap;
1430 HDRR *hdr = &debug->symbolic_header;
1431 RPDR *rpdr, *rp;
1432 struct rpdr_ext *erp;
9719ad41 1433 void *rtproc;
b49e97c9
TS
1434 struct pdr_ext *epdr;
1435 struct sym_ext *esym;
1436 char *ss, **sv;
1437 char *str;
1438 bfd_size_type size;
1439 bfd_size_type count;
1440 unsigned long sindex;
1441 unsigned long i;
1442 PDR pdr;
1443 SYMR sym;
1444 const char *no_name_func = _("static procedure (no name)");
1445
1446 epdr = NULL;
1447 rpdr = NULL;
1448 esym = NULL;
1449 ss = NULL;
1450 sv = NULL;
1451
1452 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1453
1454 sindex = strlen (no_name_func) + 1;
1455 count = hdr->ipdMax;
1456 if (count > 0)
1457 {
1458 size = swap->external_pdr_size;
1459
9719ad41 1460 epdr = bfd_malloc (size * count);
b49e97c9
TS
1461 if (epdr == NULL)
1462 goto error_return;
1463
9719ad41 1464 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
b49e97c9
TS
1465 goto error_return;
1466
1467 size = sizeof (RPDR);
9719ad41 1468 rp = rpdr = bfd_malloc (size * count);
b49e97c9
TS
1469 if (rpdr == NULL)
1470 goto error_return;
1471
1472 size = sizeof (char *);
9719ad41 1473 sv = bfd_malloc (size * count);
b49e97c9
TS
1474 if (sv == NULL)
1475 goto error_return;
1476
1477 count = hdr->isymMax;
1478 size = swap->external_sym_size;
9719ad41 1479 esym = bfd_malloc (size * count);
b49e97c9
TS
1480 if (esym == NULL)
1481 goto error_return;
1482
9719ad41 1483 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
b49e97c9
TS
1484 goto error_return;
1485
1486 count = hdr->issMax;
9719ad41 1487 ss = bfd_malloc (count);
b49e97c9
TS
1488 if (ss == NULL)
1489 goto error_return;
f075ee0c 1490 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
b49e97c9
TS
1491 goto error_return;
1492
1493 count = hdr->ipdMax;
1494 for (i = 0; i < (unsigned long) count; i++, rp++)
1495 {
9719ad41
RS
1496 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1497 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
b49e97c9
TS
1498 rp->adr = sym.value;
1499 rp->regmask = pdr.regmask;
1500 rp->regoffset = pdr.regoffset;
1501 rp->fregmask = pdr.fregmask;
1502 rp->fregoffset = pdr.fregoffset;
1503 rp->frameoffset = pdr.frameoffset;
1504 rp->framereg = pdr.framereg;
1505 rp->pcreg = pdr.pcreg;
1506 rp->irpss = sindex;
1507 sv[i] = ss + sym.iss;
1508 sindex += strlen (sv[i]) + 1;
1509 }
1510 }
1511
1512 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1513 size = BFD_ALIGN (size, 16);
9719ad41 1514 rtproc = bfd_alloc (abfd, size);
b49e97c9
TS
1515 if (rtproc == NULL)
1516 {
1517 mips_elf_hash_table (info)->procedure_count = 0;
1518 goto error_return;
1519 }
1520
1521 mips_elf_hash_table (info)->procedure_count = count + 2;
1522
9719ad41 1523 erp = rtproc;
b49e97c9
TS
1524 memset (erp, 0, sizeof (struct rpdr_ext));
1525 erp++;
1526 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1527 strcpy (str, no_name_func);
1528 str += strlen (no_name_func) + 1;
1529 for (i = 0; i < count; i++)
1530 {
1531 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1532 strcpy (str, sv[i]);
1533 str += strlen (sv[i]) + 1;
1534 }
1535 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1536
1537 /* Set the size and contents of .rtproc section. */
eea6121a 1538 s->size = size;
9719ad41 1539 s->contents = rtproc;
b49e97c9
TS
1540
1541 /* Skip this section later on (I don't think this currently
1542 matters, but someday it might). */
8423293d 1543 s->map_head.link_order = NULL;
b49e97c9
TS
1544
1545 if (epdr != NULL)
1546 free (epdr);
1547 if (rpdr != NULL)
1548 free (rpdr);
1549 if (esym != NULL)
1550 free (esym);
1551 if (ss != NULL)
1552 free (ss);
1553 if (sv != NULL)
1554 free (sv);
1555
b34976b6 1556 return TRUE;
b49e97c9
TS
1557
1558 error_return:
1559 if (epdr != NULL)
1560 free (epdr);
1561 if (rpdr != NULL)
1562 free (rpdr);
1563 if (esym != NULL)
1564 free (esym);
1565 if (ss != NULL)
1566 free (ss);
1567 if (sv != NULL)
1568 free (sv);
b34976b6 1569 return FALSE;
b49e97c9 1570}
738e5348 1571\f
861fb55a
DJ
1572/* We're going to create a stub for H. Create a symbol for the stub's
1573 value and size, to help make the disassembly easier to read. */
1574
1575static bfd_boolean
1576mips_elf_create_stub_symbol (struct bfd_link_info *info,
1577 struct mips_elf_link_hash_entry *h,
1578 const char *prefix, asection *s, bfd_vma value,
1579 bfd_vma size)
1580{
1581 struct bfd_link_hash_entry *bh;
1582 struct elf_link_hash_entry *elfh;
1583 const char *name;
1584
df58fc94
RS
1585 if (ELF_ST_IS_MICROMIPS (h->root.other))
1586 value |= 1;
1587
861fb55a
DJ
1588 /* Create a new symbol. */
1589 name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1590 bh = NULL;
1591 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1592 BSF_LOCAL, s, value, NULL,
1593 TRUE, FALSE, &bh))
1594 return FALSE;
1595
1596 /* Make it a local function. */
1597 elfh = (struct elf_link_hash_entry *) bh;
1598 elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1599 elfh->size = size;
1600 elfh->forced_local = 1;
1601 return TRUE;
1602}
1603
738e5348
RS
1604/* We're about to redefine H. Create a symbol to represent H's
1605 current value and size, to help make the disassembly easier
1606 to read. */
1607
1608static bfd_boolean
1609mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1610 struct mips_elf_link_hash_entry *h,
1611 const char *prefix)
1612{
1613 struct bfd_link_hash_entry *bh;
1614 struct elf_link_hash_entry *elfh;
1615 const char *name;
1616 asection *s;
1617 bfd_vma value;
1618
1619 /* Read the symbol's value. */
1620 BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1621 || h->root.root.type == bfd_link_hash_defweak);
1622 s = h->root.root.u.def.section;
1623 value = h->root.root.u.def.value;
1624
1625 /* Create a new symbol. */
1626 name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1627 bh = NULL;
1628 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1629 BSF_LOCAL, s, value, NULL,
1630 TRUE, FALSE, &bh))
1631 return FALSE;
1632
1633 /* Make it local and copy the other attributes from H. */
1634 elfh = (struct elf_link_hash_entry *) bh;
1635 elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1636 elfh->other = h->root.other;
1637 elfh->size = h->root.size;
1638 elfh->forced_local = 1;
1639 return TRUE;
1640}
1641
1642/* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1643 function rather than to a hard-float stub. */
1644
1645static bfd_boolean
1646section_allows_mips16_refs_p (asection *section)
1647{
1648 const char *name;
1649
1650 name = bfd_get_section_name (section->owner, section);
1651 return (FN_STUB_P (name)
1652 || CALL_STUB_P (name)
1653 || CALL_FP_STUB_P (name)
1654 || strcmp (name, ".pdr") == 0);
1655}
1656
1657/* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1658 stub section of some kind. Return the R_SYMNDX of the target
1659 function, or 0 if we can't decide which function that is. */
1660
1661static unsigned long
cb4437b8
MR
1662mips16_stub_symndx (const struct elf_backend_data *bed,
1663 asection *sec ATTRIBUTE_UNUSED,
502e814e 1664 const Elf_Internal_Rela *relocs,
738e5348
RS
1665 const Elf_Internal_Rela *relend)
1666{
cb4437b8 1667 int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
738e5348
RS
1668 const Elf_Internal_Rela *rel;
1669
cb4437b8
MR
1670 /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1671 one in a compound relocation. */
1672 for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
738e5348
RS
1673 if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1674 return ELF_R_SYM (sec->owner, rel->r_info);
1675
1676 /* Otherwise trust the first relocation, whatever its kind. This is
1677 the traditional behavior. */
1678 if (relocs < relend)
1679 return ELF_R_SYM (sec->owner, relocs->r_info);
1680
1681 return 0;
1682}
b49e97c9
TS
1683
1684/* Check the mips16 stubs for a particular symbol, and see if we can
1685 discard them. */
1686
861fb55a
DJ
1687static void
1688mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1689 struct mips_elf_link_hash_entry *h)
b49e97c9 1690{
738e5348
RS
1691 /* Dynamic symbols must use the standard call interface, in case other
1692 objects try to call them. */
1693 if (h->fn_stub != NULL
1694 && h->root.dynindx != -1)
1695 {
1696 mips_elf_create_shadow_symbol (info, h, ".mips16.");
1697 h->need_fn_stub = TRUE;
1698 }
1699
b49e97c9
TS
1700 if (h->fn_stub != NULL
1701 && ! h->need_fn_stub)
1702 {
1703 /* We don't need the fn_stub; the only references to this symbol
1704 are 16 bit calls. Clobber the size to 0 to prevent it from
1705 being included in the link. */
eea6121a 1706 h->fn_stub->size = 0;
b49e97c9
TS
1707 h->fn_stub->flags &= ~SEC_RELOC;
1708 h->fn_stub->reloc_count = 0;
1709 h->fn_stub->flags |= SEC_EXCLUDE;
1710 }
1711
1712 if (h->call_stub != NULL
30c09090 1713 && ELF_ST_IS_MIPS16 (h->root.other))
b49e97c9
TS
1714 {
1715 /* We don't need the call_stub; this is a 16 bit function, so
1716 calls from other 16 bit functions are OK. Clobber the size
1717 to 0 to prevent it from being included in the link. */
eea6121a 1718 h->call_stub->size = 0;
b49e97c9
TS
1719 h->call_stub->flags &= ~SEC_RELOC;
1720 h->call_stub->reloc_count = 0;
1721 h->call_stub->flags |= SEC_EXCLUDE;
1722 }
1723
1724 if (h->call_fp_stub != NULL
30c09090 1725 && ELF_ST_IS_MIPS16 (h->root.other))
b49e97c9
TS
1726 {
1727 /* We don't need the call_stub; this is a 16 bit function, so
1728 calls from other 16 bit functions are OK. Clobber the size
1729 to 0 to prevent it from being included in the link. */
eea6121a 1730 h->call_fp_stub->size = 0;
b49e97c9
TS
1731 h->call_fp_stub->flags &= ~SEC_RELOC;
1732 h->call_fp_stub->reloc_count = 0;
1733 h->call_fp_stub->flags |= SEC_EXCLUDE;
1734 }
861fb55a
DJ
1735}
1736
1737/* Hashtable callbacks for mips_elf_la25_stubs. */
1738
1739static hashval_t
1740mips_elf_la25_stub_hash (const void *entry_)
1741{
1742 const struct mips_elf_la25_stub *entry;
1743
1744 entry = (struct mips_elf_la25_stub *) entry_;
1745 return entry->h->root.root.u.def.section->id
1746 + entry->h->root.root.u.def.value;
1747}
1748
1749static int
1750mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1751{
1752 const struct mips_elf_la25_stub *entry1, *entry2;
1753
1754 entry1 = (struct mips_elf_la25_stub *) entry1_;
1755 entry2 = (struct mips_elf_la25_stub *) entry2_;
1756 return ((entry1->h->root.root.u.def.section
1757 == entry2->h->root.root.u.def.section)
1758 && (entry1->h->root.root.u.def.value
1759 == entry2->h->root.root.u.def.value));
1760}
1761
1762/* Called by the linker to set up the la25 stub-creation code. FN is
1763 the linker's implementation of add_stub_function. Return true on
1764 success. */
1765
1766bfd_boolean
1767_bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1768 asection *(*fn) (const char *, asection *,
1769 asection *))
1770{
1771 struct mips_elf_link_hash_table *htab;
1772
1773 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1774 if (htab == NULL)
1775 return FALSE;
1776
861fb55a
DJ
1777 htab->add_stub_section = fn;
1778 htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1779 mips_elf_la25_stub_eq, NULL);
1780 if (htab->la25_stubs == NULL)
1781 return FALSE;
1782
1783 return TRUE;
1784}
1785
1786/* Return true if H is a locally-defined PIC function, in the sense
8f0c309a
CLT
1787 that it or its fn_stub might need $25 to be valid on entry.
1788 Note that MIPS16 functions set up $gp using PC-relative instructions,
1789 so they themselves never need $25 to be valid. Only non-MIPS16
1790 entry points are of interest here. */
861fb55a
DJ
1791
1792static bfd_boolean
1793mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1794{
1795 return ((h->root.root.type == bfd_link_hash_defined
1796 || h->root.root.type == bfd_link_hash_defweak)
1797 && h->root.def_regular
1798 && !bfd_is_abs_section (h->root.root.u.def.section)
8f0c309a
CLT
1799 && (!ELF_ST_IS_MIPS16 (h->root.other)
1800 || (h->fn_stub && h->need_fn_stub))
861fb55a
DJ
1801 && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1802 || ELF_ST_IS_MIPS_PIC (h->root.other)));
1803}
1804
8f0c309a
CLT
1805/* Set *SEC to the input section that contains the target of STUB.
1806 Return the offset of the target from the start of that section. */
1807
1808static bfd_vma
1809mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1810 asection **sec)
1811{
1812 if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1813 {
1814 BFD_ASSERT (stub->h->need_fn_stub);
1815 *sec = stub->h->fn_stub;
1816 return 0;
1817 }
1818 else
1819 {
1820 *sec = stub->h->root.root.u.def.section;
1821 return stub->h->root.root.u.def.value;
1822 }
1823}
1824
861fb55a
DJ
1825/* STUB describes an la25 stub that we have decided to implement
1826 by inserting an LUI/ADDIU pair before the target function.
1827 Create the section and redirect the function symbol to it. */
1828
1829static bfd_boolean
1830mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1831 struct bfd_link_info *info)
1832{
1833 struct mips_elf_link_hash_table *htab;
1834 char *name;
1835 asection *s, *input_section;
1836 unsigned int align;
1837
1838 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1839 if (htab == NULL)
1840 return FALSE;
861fb55a
DJ
1841
1842 /* Create a unique name for the new section. */
1843 name = bfd_malloc (11 + sizeof (".text.stub."));
1844 if (name == NULL)
1845 return FALSE;
1846 sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1847
1848 /* Create the section. */
8f0c309a 1849 mips_elf_get_la25_target (stub, &input_section);
861fb55a
DJ
1850 s = htab->add_stub_section (name, input_section,
1851 input_section->output_section);
1852 if (s == NULL)
1853 return FALSE;
1854
1855 /* Make sure that any padding goes before the stub. */
1856 align = input_section->alignment_power;
1857 if (!bfd_set_section_alignment (s->owner, s, align))
1858 return FALSE;
1859 if (align > 3)
1860 s->size = (1 << align) - 8;
1861
1862 /* Create a symbol for the stub. */
1863 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1864 stub->stub_section = s;
1865 stub->offset = s->size;
1866
1867 /* Allocate room for it. */
1868 s->size += 8;
1869 return TRUE;
1870}
1871
1872/* STUB describes an la25 stub that we have decided to implement
1873 with a separate trampoline. Allocate room for it and redirect
1874 the function symbol to it. */
1875
1876static bfd_boolean
1877mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1878 struct bfd_link_info *info)
1879{
1880 struct mips_elf_link_hash_table *htab;
1881 asection *s;
1882
1883 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1884 if (htab == NULL)
1885 return FALSE;
861fb55a
DJ
1886
1887 /* Create a trampoline section, if we haven't already. */
1888 s = htab->strampoline;
1889 if (s == NULL)
1890 {
1891 asection *input_section = stub->h->root.root.u.def.section;
1892 s = htab->add_stub_section (".text", NULL,
1893 input_section->output_section);
1894 if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1895 return FALSE;
1896 htab->strampoline = s;
1897 }
1898
1899 /* Create a symbol for the stub. */
1900 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1901 stub->stub_section = s;
1902 stub->offset = s->size;
1903
1904 /* Allocate room for it. */
1905 s->size += 16;
1906 return TRUE;
1907}
1908
1909/* H describes a symbol that needs an la25 stub. Make sure that an
1910 appropriate stub exists and point H at it. */
1911
1912static bfd_boolean
1913mips_elf_add_la25_stub (struct bfd_link_info *info,
1914 struct mips_elf_link_hash_entry *h)
1915{
1916 struct mips_elf_link_hash_table *htab;
1917 struct mips_elf_la25_stub search, *stub;
1918 bfd_boolean use_trampoline_p;
1919 asection *s;
1920 bfd_vma value;
1921 void **slot;
1922
861fb55a
DJ
1923 /* Describe the stub we want. */
1924 search.stub_section = NULL;
1925 search.offset = 0;
1926 search.h = h;
1927
1928 /* See if we've already created an equivalent stub. */
1929 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1930 if (htab == NULL)
1931 return FALSE;
1932
861fb55a
DJ
1933 slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1934 if (slot == NULL)
1935 return FALSE;
1936
1937 stub = (struct mips_elf_la25_stub *) *slot;
1938 if (stub != NULL)
1939 {
1940 /* We can reuse the existing stub. */
1941 h->la25_stub = stub;
1942 return TRUE;
1943 }
1944
1945 /* Create a permanent copy of ENTRY and add it to the hash table. */
1946 stub = bfd_malloc (sizeof (search));
1947 if (stub == NULL)
1948 return FALSE;
1949 *stub = search;
1950 *slot = stub;
1951
8f0c309a
CLT
1952 /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1953 of the section and if we would need no more than 2 nops. */
1954 value = mips_elf_get_la25_target (stub, &s);
1955 use_trampoline_p = (value != 0 || s->alignment_power > 4);
1956
861fb55a
DJ
1957 h->la25_stub = stub;
1958 return (use_trampoline_p
1959 ? mips_elf_add_la25_trampoline (stub, info)
1960 : mips_elf_add_la25_intro (stub, info));
1961}
1962
1963/* A mips_elf_link_hash_traverse callback that is called before sizing
1964 sections. DATA points to a mips_htab_traverse_info structure. */
1965
1966static bfd_boolean
1967mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1968{
1969 struct mips_htab_traverse_info *hti;
1970
1971 hti = (struct mips_htab_traverse_info *) data;
0e1862bb 1972 if (!bfd_link_relocatable (hti->info))
861fb55a 1973 mips_elf_check_mips16_stubs (hti->info, h);
b49e97c9 1974
861fb55a
DJ
1975 if (mips_elf_local_pic_function_p (h))
1976 {
ba85c43e
NC
1977 /* PR 12845: If H is in a section that has been garbage
1978 collected it will have its output section set to *ABS*. */
1979 if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1980 return TRUE;
1981
861fb55a
DJ
1982 /* H is a function that might need $25 to be valid on entry.
1983 If we're creating a non-PIC relocatable object, mark H as
1984 being PIC. If we're creating a non-relocatable object with
1985 non-PIC branches and jumps to H, make sure that H has an la25
1986 stub. */
0e1862bb 1987 if (bfd_link_relocatable (hti->info))
861fb55a
DJ
1988 {
1989 if (!PIC_OBJECT_P (hti->output_bfd))
1990 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1991 }
1992 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1993 {
1994 hti->error = TRUE;
1995 return FALSE;
1996 }
1997 }
b34976b6 1998 return TRUE;
b49e97c9
TS
1999}
2000\f
d6f16593
MR
2001/* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2002 Most mips16 instructions are 16 bits, but these instructions
2003 are 32 bits.
2004
2005 The format of these instructions is:
2006
2007 +--------------+--------------------------------+
2008 | JALX | X| Imm 20:16 | Imm 25:21 |
2009 +--------------+--------------------------------+
2010 | Immediate 15:0 |
2011 +-----------------------------------------------+
2012
2013 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
2014 Note that the immediate value in the first word is swapped.
2015
2016 When producing a relocatable object file, R_MIPS16_26 is
2017 handled mostly like R_MIPS_26. In particular, the addend is
2018 stored as a straight 26-bit value in a 32-bit instruction.
2019 (gas makes life simpler for itself by never adjusting a
2020 R_MIPS16_26 reloc to be against a section, so the addend is
2021 always zero). However, the 32 bit instruction is stored as 2
2022 16-bit values, rather than a single 32-bit value. In a
2023 big-endian file, the result is the same; in a little-endian
2024 file, the two 16-bit halves of the 32 bit value are swapped.
2025 This is so that a disassembler can recognize the jal
2026 instruction.
2027
2028 When doing a final link, R_MIPS16_26 is treated as a 32 bit
2029 instruction stored as two 16-bit values. The addend A is the
2030 contents of the targ26 field. The calculation is the same as
2031 R_MIPS_26. When storing the calculated value, reorder the
2032 immediate value as shown above, and don't forget to store the
2033 value as two 16-bit values.
2034
2035 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2036 defined as
2037
2038 big-endian:
2039 +--------+----------------------+
2040 | | |
2041 | | targ26-16 |
2042 |31 26|25 0|
2043 +--------+----------------------+
2044
2045 little-endian:
2046 +----------+------+-------------+
2047 | | | |
2048 | sub1 | | sub2 |
2049 |0 9|10 15|16 31|
2050 +----------+--------------------+
2051 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2052 ((sub1 << 16) | sub2)).
2053
2054 When producing a relocatable object file, the calculation is
2055 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2056 When producing a fully linked file, the calculation is
2057 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2058 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2059
738e5348
RS
2060 The table below lists the other MIPS16 instruction relocations.
2061 Each one is calculated in the same way as the non-MIPS16 relocation
2062 given on the right, but using the extended MIPS16 layout of 16-bit
2063 immediate fields:
2064
2065 R_MIPS16_GPREL R_MIPS_GPREL16
2066 R_MIPS16_GOT16 R_MIPS_GOT16
2067 R_MIPS16_CALL16 R_MIPS_CALL16
2068 R_MIPS16_HI16 R_MIPS_HI16
2069 R_MIPS16_LO16 R_MIPS_LO16
2070
2071 A typical instruction will have a format like this:
d6f16593
MR
2072
2073 +--------------+--------------------------------+
2074 | EXTEND | Imm 10:5 | Imm 15:11 |
2075 +--------------+--------------------------------+
2076 | Major | rx | ry | Imm 4:0 |
2077 +--------------+--------------------------------+
2078
2079 EXTEND is the five bit value 11110. Major is the instruction
2080 opcode.
2081
738e5348
RS
2082 All we need to do here is shuffle the bits appropriately.
2083 As above, the two 16-bit halves must be swapped on a
2084 little-endian system. */
2085
2086static inline bfd_boolean
2087mips16_reloc_p (int r_type)
2088{
2089 switch (r_type)
2090 {
2091 case R_MIPS16_26:
2092 case R_MIPS16_GPREL:
2093 case R_MIPS16_GOT16:
2094 case R_MIPS16_CALL16:
2095 case R_MIPS16_HI16:
2096 case R_MIPS16_LO16:
d0f13682
CLT
2097 case R_MIPS16_TLS_GD:
2098 case R_MIPS16_TLS_LDM:
2099 case R_MIPS16_TLS_DTPREL_HI16:
2100 case R_MIPS16_TLS_DTPREL_LO16:
2101 case R_MIPS16_TLS_GOTTPREL:
2102 case R_MIPS16_TLS_TPREL_HI16:
2103 case R_MIPS16_TLS_TPREL_LO16:
738e5348
RS
2104 return TRUE;
2105
2106 default:
2107 return FALSE;
2108 }
2109}
2110
df58fc94
RS
2111/* Check if a microMIPS reloc. */
2112
2113static inline bfd_boolean
2114micromips_reloc_p (unsigned int r_type)
2115{
2116 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2117}
2118
2119/* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2120 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1
2121 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */
2122
2123static inline bfd_boolean
2124micromips_reloc_shuffle_p (unsigned int r_type)
2125{
2126 return (micromips_reloc_p (r_type)
2127 && r_type != R_MICROMIPS_PC7_S1
2128 && r_type != R_MICROMIPS_PC10_S1);
2129}
2130
738e5348
RS
2131static inline bfd_boolean
2132got16_reloc_p (int r_type)
2133{
df58fc94
RS
2134 return (r_type == R_MIPS_GOT16
2135 || r_type == R_MIPS16_GOT16
2136 || r_type == R_MICROMIPS_GOT16);
738e5348
RS
2137}
2138
2139static inline bfd_boolean
2140call16_reloc_p (int r_type)
2141{
df58fc94
RS
2142 return (r_type == R_MIPS_CALL16
2143 || r_type == R_MIPS16_CALL16
2144 || r_type == R_MICROMIPS_CALL16);
2145}
2146
2147static inline bfd_boolean
2148got_disp_reloc_p (unsigned int r_type)
2149{
2150 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2151}
2152
2153static inline bfd_boolean
2154got_page_reloc_p (unsigned int r_type)
2155{
2156 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2157}
2158
2159static inline bfd_boolean
2160got_ofst_reloc_p (unsigned int r_type)
2161{
2162 return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2163}
2164
2165static inline bfd_boolean
2166got_hi16_reloc_p (unsigned int r_type)
2167{
2168 return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2169}
2170
2171static inline bfd_boolean
2172got_lo16_reloc_p (unsigned int r_type)
2173{
2174 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2175}
2176
2177static inline bfd_boolean
2178call_hi16_reloc_p (unsigned int r_type)
2179{
2180 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2181}
2182
2183static inline bfd_boolean
2184call_lo16_reloc_p (unsigned int r_type)
2185{
2186 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
738e5348
RS
2187}
2188
2189static inline bfd_boolean
2190hi16_reloc_p (int r_type)
2191{
df58fc94
RS
2192 return (r_type == R_MIPS_HI16
2193 || r_type == R_MIPS16_HI16
7361da2c
AB
2194 || r_type == R_MICROMIPS_HI16
2195 || r_type == R_MIPS_PCHI16);
738e5348 2196}
d6f16593 2197
738e5348
RS
2198static inline bfd_boolean
2199lo16_reloc_p (int r_type)
2200{
df58fc94
RS
2201 return (r_type == R_MIPS_LO16
2202 || r_type == R_MIPS16_LO16
7361da2c
AB
2203 || r_type == R_MICROMIPS_LO16
2204 || r_type == R_MIPS_PCLO16);
738e5348
RS
2205}
2206
2207static inline bfd_boolean
2208mips16_call_reloc_p (int r_type)
2209{
2210 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2211}
d6f16593 2212
38a7df63
CF
2213static inline bfd_boolean
2214jal_reloc_p (int r_type)
2215{
df58fc94
RS
2216 return (r_type == R_MIPS_26
2217 || r_type == R_MIPS16_26
2218 || r_type == R_MICROMIPS_26_S1);
2219}
2220
7361da2c
AB
2221static inline bfd_boolean
2222aligned_pcrel_reloc_p (int r_type)
2223{
2224 return (r_type == R_MIPS_PC18_S3
2225 || r_type == R_MIPS_PC19_S2);
2226}
2227
df58fc94
RS
2228static inline bfd_boolean
2229micromips_branch_reloc_p (int r_type)
2230{
2231 return (r_type == R_MICROMIPS_26_S1
2232 || r_type == R_MICROMIPS_PC16_S1
2233 || r_type == R_MICROMIPS_PC10_S1
2234 || r_type == R_MICROMIPS_PC7_S1);
2235}
2236
2237static inline bfd_boolean
2238tls_gd_reloc_p (unsigned int r_type)
2239{
d0f13682
CLT
2240 return (r_type == R_MIPS_TLS_GD
2241 || r_type == R_MIPS16_TLS_GD
2242 || r_type == R_MICROMIPS_TLS_GD);
df58fc94
RS
2243}
2244
2245static inline bfd_boolean
2246tls_ldm_reloc_p (unsigned int r_type)
2247{
d0f13682
CLT
2248 return (r_type == R_MIPS_TLS_LDM
2249 || r_type == R_MIPS16_TLS_LDM
2250 || r_type == R_MICROMIPS_TLS_LDM);
df58fc94
RS
2251}
2252
2253static inline bfd_boolean
2254tls_gottprel_reloc_p (unsigned int r_type)
2255{
d0f13682
CLT
2256 return (r_type == R_MIPS_TLS_GOTTPREL
2257 || r_type == R_MIPS16_TLS_GOTTPREL
2258 || r_type == R_MICROMIPS_TLS_GOTTPREL);
38a7df63
CF
2259}
2260
d6f16593 2261void
df58fc94
RS
2262_bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2263 bfd_boolean jal_shuffle, bfd_byte *data)
d6f16593 2264{
df58fc94 2265 bfd_vma first, second, val;
d6f16593 2266
df58fc94 2267 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
d6f16593
MR
2268 return;
2269
df58fc94
RS
2270 /* Pick up the first and second halfwords of the instruction. */
2271 first = bfd_get_16 (abfd, data);
2272 second = bfd_get_16 (abfd, data + 2);
2273 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2274 val = first << 16 | second;
2275 else if (r_type != R_MIPS16_26)
2276 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2277 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
d6f16593 2278 else
df58fc94
RS
2279 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2280 | ((first & 0x1f) << 21) | second);
d6f16593
MR
2281 bfd_put_32 (abfd, val, data);
2282}
2283
2284void
df58fc94
RS
2285_bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2286 bfd_boolean jal_shuffle, bfd_byte *data)
d6f16593 2287{
df58fc94 2288 bfd_vma first, second, val;
d6f16593 2289
df58fc94 2290 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
d6f16593
MR
2291 return;
2292
2293 val = bfd_get_32 (abfd, data);
df58fc94 2294 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
d6f16593 2295 {
df58fc94
RS
2296 second = val & 0xffff;
2297 first = val >> 16;
2298 }
2299 else if (r_type != R_MIPS16_26)
2300 {
2301 second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2302 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
d6f16593
MR
2303 }
2304 else
2305 {
df58fc94
RS
2306 second = val & 0xffff;
2307 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2308 | ((val >> 21) & 0x1f);
d6f16593 2309 }
df58fc94
RS
2310 bfd_put_16 (abfd, second, data + 2);
2311 bfd_put_16 (abfd, first, data);
d6f16593
MR
2312}
2313
b49e97c9 2314bfd_reloc_status_type
9719ad41
RS
2315_bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2316 arelent *reloc_entry, asection *input_section,
2317 bfd_boolean relocatable, void *data, bfd_vma gp)
b49e97c9
TS
2318{
2319 bfd_vma relocation;
a7ebbfdf 2320 bfd_signed_vma val;
30ac9238 2321 bfd_reloc_status_type status;
b49e97c9
TS
2322
2323 if (bfd_is_com_section (symbol->section))
2324 relocation = 0;
2325 else
2326 relocation = symbol->value;
2327
2328 relocation += symbol->section->output_section->vma;
2329 relocation += symbol->section->output_offset;
2330
07515404 2331 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
b49e97c9
TS
2332 return bfd_reloc_outofrange;
2333
b49e97c9 2334 /* Set val to the offset into the section or symbol. */
a7ebbfdf
TS
2335 val = reloc_entry->addend;
2336
30ac9238 2337 _bfd_mips_elf_sign_extend (val, 16);
a7ebbfdf 2338
b49e97c9 2339 /* Adjust val for the final section location and GP value. If we
1049f94e 2340 are producing relocatable output, we don't want to do this for
b49e97c9 2341 an external symbol. */
1049f94e 2342 if (! relocatable
b49e97c9
TS
2343 || (symbol->flags & BSF_SECTION_SYM) != 0)
2344 val += relocation - gp;
2345
a7ebbfdf
TS
2346 if (reloc_entry->howto->partial_inplace)
2347 {
30ac9238
RS
2348 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2349 (bfd_byte *) data
2350 + reloc_entry->address);
2351 if (status != bfd_reloc_ok)
2352 return status;
a7ebbfdf
TS
2353 }
2354 else
2355 reloc_entry->addend = val;
b49e97c9 2356
1049f94e 2357 if (relocatable)
b49e97c9 2358 reloc_entry->address += input_section->output_offset;
30ac9238
RS
2359
2360 return bfd_reloc_ok;
2361}
2362
2363/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2364 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
2365 that contains the relocation field and DATA points to the start of
2366 INPUT_SECTION. */
2367
2368struct mips_hi16
2369{
2370 struct mips_hi16 *next;
2371 bfd_byte *data;
2372 asection *input_section;
2373 arelent rel;
2374};
2375
2376/* FIXME: This should not be a static variable. */
2377
2378static struct mips_hi16 *mips_hi16_list;
2379
2380/* A howto special_function for REL *HI16 relocations. We can only
2381 calculate the correct value once we've seen the partnering
2382 *LO16 relocation, so just save the information for later.
2383
2384 The ABI requires that the *LO16 immediately follow the *HI16.
2385 However, as a GNU extension, we permit an arbitrary number of
2386 *HI16s to be associated with a single *LO16. This significantly
2387 simplies the relocation handling in gcc. */
2388
2389bfd_reloc_status_type
2390_bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2391 asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2392 asection *input_section, bfd *output_bfd,
2393 char **error_message ATTRIBUTE_UNUSED)
2394{
2395 struct mips_hi16 *n;
2396
07515404 2397 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2398 return bfd_reloc_outofrange;
2399
2400 n = bfd_malloc (sizeof *n);
2401 if (n == NULL)
2402 return bfd_reloc_outofrange;
2403
2404 n->next = mips_hi16_list;
2405 n->data = data;
2406 n->input_section = input_section;
2407 n->rel = *reloc_entry;
2408 mips_hi16_list = n;
2409
2410 if (output_bfd != NULL)
2411 reloc_entry->address += input_section->output_offset;
2412
2413 return bfd_reloc_ok;
2414}
2415
738e5348 2416/* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just
30ac9238
RS
2417 like any other 16-bit relocation when applied to global symbols, but is
2418 treated in the same as R_MIPS_HI16 when applied to local symbols. */
2419
2420bfd_reloc_status_type
2421_bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2422 void *data, asection *input_section,
2423 bfd *output_bfd, char **error_message)
2424{
2425 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2426 || bfd_is_und_section (bfd_get_section (symbol))
2427 || bfd_is_com_section (bfd_get_section (symbol)))
2428 /* The relocation is against a global symbol. */
2429 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2430 input_section, output_bfd,
2431 error_message);
2432
2433 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2434 input_section, output_bfd, error_message);
2435}
2436
2437/* A howto special_function for REL *LO16 relocations. The *LO16 itself
2438 is a straightforward 16 bit inplace relocation, but we must deal with
2439 any partnering high-part relocations as well. */
2440
2441bfd_reloc_status_type
2442_bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2443 void *data, asection *input_section,
2444 bfd *output_bfd, char **error_message)
2445{
2446 bfd_vma vallo;
d6f16593 2447 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
30ac9238 2448
07515404 2449 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2450 return bfd_reloc_outofrange;
2451
df58fc94 2452 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
d6f16593 2453 location);
df58fc94
RS
2454 vallo = bfd_get_32 (abfd, location);
2455 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2456 location);
d6f16593 2457
30ac9238
RS
2458 while (mips_hi16_list != NULL)
2459 {
2460 bfd_reloc_status_type ret;
2461 struct mips_hi16 *hi;
2462
2463 hi = mips_hi16_list;
2464
738e5348
RS
2465 /* R_MIPS*_GOT16 relocations are something of a special case. We
2466 want to install the addend in the same way as for a R_MIPS*_HI16
30ac9238
RS
2467 relocation (with a rightshift of 16). However, since GOT16
2468 relocations can also be used with global symbols, their howto
2469 has a rightshift of 0. */
2470 if (hi->rel.howto->type == R_MIPS_GOT16)
2471 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
738e5348
RS
2472 else if (hi->rel.howto->type == R_MIPS16_GOT16)
2473 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
df58fc94
RS
2474 else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2475 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
30ac9238
RS
2476
2477 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
2478 carry or borrow will induce a change of +1 or -1 in the high part. */
2479 hi->rel.addend += (vallo + 0x8000) & 0xffff;
2480
30ac9238
RS
2481 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2482 hi->input_section, output_bfd,
2483 error_message);
2484 if (ret != bfd_reloc_ok)
2485 return ret;
2486
2487 mips_hi16_list = hi->next;
2488 free (hi);
2489 }
2490
2491 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2492 input_section, output_bfd,
2493 error_message);
2494}
2495
2496/* A generic howto special_function. This calculates and installs the
2497 relocation itself, thus avoiding the oft-discussed problems in
2498 bfd_perform_relocation and bfd_install_relocation. */
2499
2500bfd_reloc_status_type
2501_bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2502 asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2503 asection *input_section, bfd *output_bfd,
2504 char **error_message ATTRIBUTE_UNUSED)
2505{
2506 bfd_signed_vma val;
2507 bfd_reloc_status_type status;
2508 bfd_boolean relocatable;
2509
2510 relocatable = (output_bfd != NULL);
2511
07515404 2512 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2513 return bfd_reloc_outofrange;
2514
2515 /* Build up the field adjustment in VAL. */
2516 val = 0;
2517 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2518 {
2519 /* Either we're calculating the final field value or we have a
2520 relocation against a section symbol. Add in the section's
2521 offset or address. */
2522 val += symbol->section->output_section->vma;
2523 val += symbol->section->output_offset;
2524 }
2525
2526 if (!relocatable)
2527 {
2528 /* We're calculating the final field value. Add in the symbol's value
2529 and, if pc-relative, subtract the address of the field itself. */
2530 val += symbol->value;
2531 if (reloc_entry->howto->pc_relative)
2532 {
2533 val -= input_section->output_section->vma;
2534 val -= input_section->output_offset;
2535 val -= reloc_entry->address;
2536 }
2537 }
2538
2539 /* VAL is now the final adjustment. If we're keeping this relocation
2540 in the output file, and if the relocation uses a separate addend,
2541 we just need to add VAL to that addend. Otherwise we need to add
2542 VAL to the relocation field itself. */
2543 if (relocatable && !reloc_entry->howto->partial_inplace)
2544 reloc_entry->addend += val;
2545 else
2546 {
d6f16593
MR
2547 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2548
30ac9238
RS
2549 /* Add in the separate addend, if any. */
2550 val += reloc_entry->addend;
2551
2552 /* Add VAL to the relocation field. */
df58fc94
RS
2553 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2554 location);
30ac9238 2555 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
d6f16593 2556 location);
df58fc94
RS
2557 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2558 location);
d6f16593 2559
30ac9238
RS
2560 if (status != bfd_reloc_ok)
2561 return status;
2562 }
2563
2564 if (relocatable)
2565 reloc_entry->address += input_section->output_offset;
b49e97c9
TS
2566
2567 return bfd_reloc_ok;
2568}
2569\f
2570/* Swap an entry in a .gptab section. Note that these routines rely
2571 on the equivalence of the two elements of the union. */
2572
2573static void
9719ad41
RS
2574bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2575 Elf32_gptab *in)
b49e97c9
TS
2576{
2577 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2578 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2579}
2580
2581static void
9719ad41
RS
2582bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2583 Elf32_External_gptab *ex)
b49e97c9
TS
2584{
2585 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2586 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2587}
2588
2589static void
9719ad41
RS
2590bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2591 Elf32_External_compact_rel *ex)
b49e97c9
TS
2592{
2593 H_PUT_32 (abfd, in->id1, ex->id1);
2594 H_PUT_32 (abfd, in->num, ex->num);
2595 H_PUT_32 (abfd, in->id2, ex->id2);
2596 H_PUT_32 (abfd, in->offset, ex->offset);
2597 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2598 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2599}
2600
2601static void
9719ad41
RS
2602bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2603 Elf32_External_crinfo *ex)
b49e97c9
TS
2604{
2605 unsigned long l;
2606
2607 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2608 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2609 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2610 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2611 H_PUT_32 (abfd, l, ex->info);
2612 H_PUT_32 (abfd, in->konst, ex->konst);
2613 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2614}
b49e97c9
TS
2615\f
2616/* A .reginfo section holds a single Elf32_RegInfo structure. These
2617 routines swap this structure in and out. They are used outside of
2618 BFD, so they are globally visible. */
2619
2620void
9719ad41
RS
2621bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2622 Elf32_RegInfo *in)
b49e97c9
TS
2623{
2624 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2625 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2626 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2627 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2628 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2629 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2630}
2631
2632void
9719ad41
RS
2633bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2634 Elf32_External_RegInfo *ex)
b49e97c9
TS
2635{
2636 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2637 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2638 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2639 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2640 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2641 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2642}
2643
2644/* In the 64 bit ABI, the .MIPS.options section holds register
2645 information in an Elf64_Reginfo structure. These routines swap
2646 them in and out. They are globally visible because they are used
2647 outside of BFD. These routines are here so that gas can call them
2648 without worrying about whether the 64 bit ABI has been included. */
2649
2650void
9719ad41
RS
2651bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2652 Elf64_Internal_RegInfo *in)
b49e97c9
TS
2653{
2654 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2655 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2656 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2657 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2658 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2659 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2660 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2661}
2662
2663void
9719ad41
RS
2664bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2665 Elf64_External_RegInfo *ex)
b49e97c9
TS
2666{
2667 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2668 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2669 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2670 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2671 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2672 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2673 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2674}
2675
2676/* Swap in an options header. */
2677
2678void
9719ad41
RS
2679bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2680 Elf_Internal_Options *in)
b49e97c9
TS
2681{
2682 in->kind = H_GET_8 (abfd, ex->kind);
2683 in->size = H_GET_8 (abfd, ex->size);
2684 in->section = H_GET_16 (abfd, ex->section);
2685 in->info = H_GET_32 (abfd, ex->info);
2686}
2687
2688/* Swap out an options header. */
2689
2690void
9719ad41
RS
2691bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2692 Elf_External_Options *ex)
b49e97c9
TS
2693{
2694 H_PUT_8 (abfd, in->kind, ex->kind);
2695 H_PUT_8 (abfd, in->size, ex->size);
2696 H_PUT_16 (abfd, in->section, ex->section);
2697 H_PUT_32 (abfd, in->info, ex->info);
2698}
351cdf24
MF
2699
2700/* Swap in an abiflags structure. */
2701
2702void
2703bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2704 const Elf_External_ABIFlags_v0 *ex,
2705 Elf_Internal_ABIFlags_v0 *in)
2706{
2707 in->version = H_GET_16 (abfd, ex->version);
2708 in->isa_level = H_GET_8 (abfd, ex->isa_level);
2709 in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2710 in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2711 in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2712 in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2713 in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2714 in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2715 in->ases = H_GET_32 (abfd, ex->ases);
2716 in->flags1 = H_GET_32 (abfd, ex->flags1);
2717 in->flags2 = H_GET_32 (abfd, ex->flags2);
2718}
2719
2720/* Swap out an abiflags structure. */
2721
2722void
2723bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2724 const Elf_Internal_ABIFlags_v0 *in,
2725 Elf_External_ABIFlags_v0 *ex)
2726{
2727 H_PUT_16 (abfd, in->version, ex->version);
2728 H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2729 H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2730 H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2731 H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2732 H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2733 H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2734 H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2735 H_PUT_32 (abfd, in->ases, ex->ases);
2736 H_PUT_32 (abfd, in->flags1, ex->flags1);
2737 H_PUT_32 (abfd, in->flags2, ex->flags2);
2738}
b49e97c9
TS
2739\f
2740/* This function is called via qsort() to sort the dynamic relocation
2741 entries by increasing r_symndx value. */
2742
2743static int
9719ad41 2744sort_dynamic_relocs (const void *arg1, const void *arg2)
b49e97c9 2745{
947216bf
AM
2746 Elf_Internal_Rela int_reloc1;
2747 Elf_Internal_Rela int_reloc2;
6870500c 2748 int diff;
b49e97c9 2749
947216bf
AM
2750 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2751 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
b49e97c9 2752
6870500c
RS
2753 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2754 if (diff != 0)
2755 return diff;
2756
2757 if (int_reloc1.r_offset < int_reloc2.r_offset)
2758 return -1;
2759 if (int_reloc1.r_offset > int_reloc2.r_offset)
2760 return 1;
2761 return 0;
b49e97c9
TS
2762}
2763
f4416af6
AO
2764/* Like sort_dynamic_relocs, but used for elf64 relocations. */
2765
2766static int
7e3102a7
AM
2767sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2768 const void *arg2 ATTRIBUTE_UNUSED)
f4416af6 2769{
7e3102a7 2770#ifdef BFD64
f4416af6
AO
2771 Elf_Internal_Rela int_reloc1[3];
2772 Elf_Internal_Rela int_reloc2[3];
2773
2774 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2775 (reldyn_sorting_bfd, arg1, int_reloc1);
2776 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2777 (reldyn_sorting_bfd, arg2, int_reloc2);
2778
6870500c
RS
2779 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2780 return -1;
2781 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2782 return 1;
2783
2784 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2785 return -1;
2786 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2787 return 1;
2788 return 0;
7e3102a7
AM
2789#else
2790 abort ();
2791#endif
f4416af6
AO
2792}
2793
2794
b49e97c9
TS
2795/* This routine is used to write out ECOFF debugging external symbol
2796 information. It is called via mips_elf_link_hash_traverse. The
2797 ECOFF external symbol information must match the ELF external
2798 symbol information. Unfortunately, at this point we don't know
2799 whether a symbol is required by reloc information, so the two
2800 tables may wind up being different. We must sort out the external
2801 symbol information before we can set the final size of the .mdebug
2802 section, and we must set the size of the .mdebug section before we
2803 can relocate any sections, and we can't know which symbols are
2804 required by relocation until we relocate the sections.
2805 Fortunately, it is relatively unlikely that any symbol will be
2806 stripped but required by a reloc. In particular, it can not happen
2807 when generating a final executable. */
2808
b34976b6 2809static bfd_boolean
9719ad41 2810mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
b49e97c9 2811{
9719ad41 2812 struct extsym_info *einfo = data;
b34976b6 2813 bfd_boolean strip;
b49e97c9
TS
2814 asection *sec, *output_section;
2815
b49e97c9 2816 if (h->root.indx == -2)
b34976b6 2817 strip = FALSE;
f5385ebf 2818 else if ((h->root.def_dynamic
77cfaee6
AM
2819 || h->root.ref_dynamic
2820 || h->root.type == bfd_link_hash_new)
f5385ebf
AM
2821 && !h->root.def_regular
2822 && !h->root.ref_regular)
b34976b6 2823 strip = TRUE;
b49e97c9
TS
2824 else if (einfo->info->strip == strip_all
2825 || (einfo->info->strip == strip_some
2826 && bfd_hash_lookup (einfo->info->keep_hash,
2827 h->root.root.root.string,
b34976b6
AM
2828 FALSE, FALSE) == NULL))
2829 strip = TRUE;
b49e97c9 2830 else
b34976b6 2831 strip = FALSE;
b49e97c9
TS
2832
2833 if (strip)
b34976b6 2834 return TRUE;
b49e97c9
TS
2835
2836 if (h->esym.ifd == -2)
2837 {
2838 h->esym.jmptbl = 0;
2839 h->esym.cobol_main = 0;
2840 h->esym.weakext = 0;
2841 h->esym.reserved = 0;
2842 h->esym.ifd = ifdNil;
2843 h->esym.asym.value = 0;
2844 h->esym.asym.st = stGlobal;
2845
2846 if (h->root.root.type == bfd_link_hash_undefined
2847 || h->root.root.type == bfd_link_hash_undefweak)
2848 {
2849 const char *name;
2850
2851 /* Use undefined class. Also, set class and type for some
2852 special symbols. */
2853 name = h->root.root.root.string;
2854 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2855 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2856 {
2857 h->esym.asym.sc = scData;
2858 h->esym.asym.st = stLabel;
2859 h->esym.asym.value = 0;
2860 }
2861 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2862 {
2863 h->esym.asym.sc = scAbs;
2864 h->esym.asym.st = stLabel;
2865 h->esym.asym.value =
2866 mips_elf_hash_table (einfo->info)->procedure_count;
2867 }
4a14403c 2868 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
b49e97c9
TS
2869 {
2870 h->esym.asym.sc = scAbs;
2871 h->esym.asym.st = stLabel;
2872 h->esym.asym.value = elf_gp (einfo->abfd);
2873 }
2874 else
2875 h->esym.asym.sc = scUndefined;
2876 }
2877 else if (h->root.root.type != bfd_link_hash_defined
2878 && h->root.root.type != bfd_link_hash_defweak)
2879 h->esym.asym.sc = scAbs;
2880 else
2881 {
2882 const char *name;
2883
2884 sec = h->root.root.u.def.section;
2885 output_section = sec->output_section;
2886
2887 /* When making a shared library and symbol h is the one from
2888 the another shared library, OUTPUT_SECTION may be null. */
2889 if (output_section == NULL)
2890 h->esym.asym.sc = scUndefined;
2891 else
2892 {
2893 name = bfd_section_name (output_section->owner, output_section);
2894
2895 if (strcmp (name, ".text") == 0)
2896 h->esym.asym.sc = scText;
2897 else if (strcmp (name, ".data") == 0)
2898 h->esym.asym.sc = scData;
2899 else if (strcmp (name, ".sdata") == 0)
2900 h->esym.asym.sc = scSData;
2901 else if (strcmp (name, ".rodata") == 0
2902 || strcmp (name, ".rdata") == 0)
2903 h->esym.asym.sc = scRData;
2904 else if (strcmp (name, ".bss") == 0)
2905 h->esym.asym.sc = scBss;
2906 else if (strcmp (name, ".sbss") == 0)
2907 h->esym.asym.sc = scSBss;
2908 else if (strcmp (name, ".init") == 0)
2909 h->esym.asym.sc = scInit;
2910 else if (strcmp (name, ".fini") == 0)
2911 h->esym.asym.sc = scFini;
2912 else
2913 h->esym.asym.sc = scAbs;
2914 }
2915 }
2916
2917 h->esym.asym.reserved = 0;
2918 h->esym.asym.index = indexNil;
2919 }
2920
2921 if (h->root.root.type == bfd_link_hash_common)
2922 h->esym.asym.value = h->root.root.u.c.size;
2923 else if (h->root.root.type == bfd_link_hash_defined
2924 || h->root.root.type == bfd_link_hash_defweak)
2925 {
2926 if (h->esym.asym.sc == scCommon)
2927 h->esym.asym.sc = scBss;
2928 else if (h->esym.asym.sc == scSCommon)
2929 h->esym.asym.sc = scSBss;
2930
2931 sec = h->root.root.u.def.section;
2932 output_section = sec->output_section;
2933 if (output_section != NULL)
2934 h->esym.asym.value = (h->root.root.u.def.value
2935 + sec->output_offset
2936 + output_section->vma);
2937 else
2938 h->esym.asym.value = 0;
2939 }
33bb52fb 2940 else
b49e97c9
TS
2941 {
2942 struct mips_elf_link_hash_entry *hd = h;
b49e97c9
TS
2943
2944 while (hd->root.root.type == bfd_link_hash_indirect)
33bb52fb 2945 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
b49e97c9 2946
33bb52fb 2947 if (hd->needs_lazy_stub)
b49e97c9 2948 {
1bbce132
MR
2949 BFD_ASSERT (hd->root.plt.plist != NULL);
2950 BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
b49e97c9
TS
2951 /* Set type and value for a symbol with a function stub. */
2952 h->esym.asym.st = stProc;
2953 sec = hd->root.root.u.def.section;
2954 if (sec == NULL)
2955 h->esym.asym.value = 0;
2956 else
2957 {
2958 output_section = sec->output_section;
2959 if (output_section != NULL)
1bbce132 2960 h->esym.asym.value = (hd->root.plt.plist->stub_offset
b49e97c9
TS
2961 + sec->output_offset
2962 + output_section->vma);
2963 else
2964 h->esym.asym.value = 0;
2965 }
b49e97c9
TS
2966 }
2967 }
2968
2969 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2970 h->root.root.root.string,
2971 &h->esym))
2972 {
b34976b6
AM
2973 einfo->failed = TRUE;
2974 return FALSE;
b49e97c9
TS
2975 }
2976
b34976b6 2977 return TRUE;
b49e97c9
TS
2978}
2979
2980/* A comparison routine used to sort .gptab entries. */
2981
2982static int
9719ad41 2983gptab_compare (const void *p1, const void *p2)
b49e97c9 2984{
9719ad41
RS
2985 const Elf32_gptab *a1 = p1;
2986 const Elf32_gptab *a2 = p2;
b49e97c9
TS
2987
2988 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2989}
2990\f
b15e6682 2991/* Functions to manage the got entry hash table. */
f4416af6
AO
2992
2993/* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2994 hash number. */
2995
2996static INLINE hashval_t
9719ad41 2997mips_elf_hash_bfd_vma (bfd_vma addr)
f4416af6
AO
2998{
2999#ifdef BFD64
3000 return addr + (addr >> 32);
3001#else
3002 return addr;
3003#endif
3004}
3005
f4416af6 3006static hashval_t
d9bf376d 3007mips_elf_got_entry_hash (const void *entry_)
f4416af6
AO
3008{
3009 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3010
e641e783 3011 return (entry->symndx
9ab066b4
RS
3012 + ((entry->tls_type == GOT_TLS_LDM) << 18)
3013 + (entry->tls_type == GOT_TLS_LDM ? 0
e641e783
RS
3014 : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3015 : entry->symndx >= 0 ? (entry->abfd->id
3016 + mips_elf_hash_bfd_vma (entry->d.addend))
3017 : entry->d.h->root.root.root.hash));
f4416af6
AO
3018}
3019
3020static int
3dff0dd1 3021mips_elf_got_entry_eq (const void *entry1, const void *entry2)
f4416af6
AO
3022{
3023 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3024 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3025
e641e783 3026 return (e1->symndx == e2->symndx
9ab066b4
RS
3027 && e1->tls_type == e2->tls_type
3028 && (e1->tls_type == GOT_TLS_LDM ? TRUE
e641e783
RS
3029 : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3030 : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3031 && e1->d.addend == e2->d.addend)
3032 : e2->abfd && e1->d.h == e2->d.h));
b15e6682 3033}
c224138d 3034
13db6b44
RS
3035static hashval_t
3036mips_got_page_ref_hash (const void *ref_)
3037{
3038 const struct mips_got_page_ref *ref;
3039
3040 ref = (const struct mips_got_page_ref *) ref_;
3041 return ((ref->symndx >= 0
3042 ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3043 : ref->u.h->root.root.root.hash)
3044 + mips_elf_hash_bfd_vma (ref->addend));
3045}
3046
3047static int
3048mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3049{
3050 const struct mips_got_page_ref *ref1, *ref2;
3051
3052 ref1 = (const struct mips_got_page_ref *) ref1_;
3053 ref2 = (const struct mips_got_page_ref *) ref2_;
3054 return (ref1->symndx == ref2->symndx
3055 && (ref1->symndx < 0
3056 ? ref1->u.h == ref2->u.h
3057 : ref1->u.abfd == ref2->u.abfd)
3058 && ref1->addend == ref2->addend);
3059}
3060
c224138d
RS
3061static hashval_t
3062mips_got_page_entry_hash (const void *entry_)
3063{
3064 const struct mips_got_page_entry *entry;
3065
3066 entry = (const struct mips_got_page_entry *) entry_;
13db6b44 3067 return entry->sec->id;
c224138d
RS
3068}
3069
3070static int
3071mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3072{
3073 const struct mips_got_page_entry *entry1, *entry2;
3074
3075 entry1 = (const struct mips_got_page_entry *) entry1_;
3076 entry2 = (const struct mips_got_page_entry *) entry2_;
13db6b44 3077 return entry1->sec == entry2->sec;
c224138d 3078}
b15e6682 3079\f
3dff0dd1 3080/* Create and return a new mips_got_info structure. */
5334aa52
RS
3081
3082static struct mips_got_info *
3dff0dd1 3083mips_elf_create_got_info (bfd *abfd)
5334aa52
RS
3084{
3085 struct mips_got_info *g;
3086
3087 g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3088 if (g == NULL)
3089 return NULL;
3090
3dff0dd1
RS
3091 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3092 mips_elf_got_entry_eq, NULL);
5334aa52
RS
3093 if (g->got_entries == NULL)
3094 return NULL;
3095
13db6b44
RS
3096 g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3097 mips_got_page_ref_eq, NULL);
3098 if (g->got_page_refs == NULL)
5334aa52
RS
3099 return NULL;
3100
3101 return g;
3102}
3103
ee227692
RS
3104/* Return the GOT info for input bfd ABFD, trying to create a new one if
3105 CREATE_P and if ABFD doesn't already have a GOT. */
3106
3107static struct mips_got_info *
3108mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3109{
3110 struct mips_elf_obj_tdata *tdata;
3111
3112 if (!is_mips_elf (abfd))
3113 return NULL;
3114
3115 tdata = mips_elf_tdata (abfd);
3116 if (!tdata->got && create_p)
3dff0dd1 3117 tdata->got = mips_elf_create_got_info (abfd);
ee227692
RS
3118 return tdata->got;
3119}
3120
d7206569
RS
3121/* Record that ABFD should use output GOT G. */
3122
3123static void
3124mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3125{
3126 struct mips_elf_obj_tdata *tdata;
3127
3128 BFD_ASSERT (is_mips_elf (abfd));
3129 tdata = mips_elf_tdata (abfd);
3130 if (tdata->got)
3131 {
3132 /* The GOT structure itself and the hash table entries are
3133 allocated to a bfd, but the hash tables aren't. */
3134 htab_delete (tdata->got->got_entries);
13db6b44
RS
3135 htab_delete (tdata->got->got_page_refs);
3136 if (tdata->got->got_page_entries)
3137 htab_delete (tdata->got->got_page_entries);
d7206569
RS
3138 }
3139 tdata->got = g;
3140}
3141
0a44bf69
RS
3142/* Return the dynamic relocation section. If it doesn't exist, try to
3143 create a new it if CREATE_P, otherwise return NULL. Also return NULL
3144 if creation fails. */
f4416af6
AO
3145
3146static asection *
0a44bf69 3147mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
f4416af6 3148{
0a44bf69 3149 const char *dname;
f4416af6 3150 asection *sreloc;
0a44bf69 3151 bfd *dynobj;
f4416af6 3152
0a44bf69
RS
3153 dname = MIPS_ELF_REL_DYN_NAME (info);
3154 dynobj = elf_hash_table (info)->dynobj;
3d4d4302 3155 sreloc = bfd_get_linker_section (dynobj, dname);
f4416af6
AO
3156 if (sreloc == NULL && create_p)
3157 {
3d4d4302
AM
3158 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3159 (SEC_ALLOC
3160 | SEC_LOAD
3161 | SEC_HAS_CONTENTS
3162 | SEC_IN_MEMORY
3163 | SEC_LINKER_CREATED
3164 | SEC_READONLY));
f4416af6 3165 if (sreloc == NULL
f4416af6 3166 || ! bfd_set_section_alignment (dynobj, sreloc,
d80dcc6a 3167 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
f4416af6
AO
3168 return NULL;
3169 }
3170 return sreloc;
3171}
3172
e641e783
RS
3173/* Return the GOT_TLS_* type required by relocation type R_TYPE. */
3174
3175static int
3176mips_elf_reloc_tls_type (unsigned int r_type)
3177{
3178 if (tls_gd_reloc_p (r_type))
3179 return GOT_TLS_GD;
3180
3181 if (tls_ldm_reloc_p (r_type))
3182 return GOT_TLS_LDM;
3183
3184 if (tls_gottprel_reloc_p (r_type))
3185 return GOT_TLS_IE;
3186
9ab066b4 3187 return GOT_TLS_NONE;
e641e783
RS
3188}
3189
3190/* Return the number of GOT slots needed for GOT TLS type TYPE. */
3191
3192static int
3193mips_tls_got_entries (unsigned int type)
3194{
3195 switch (type)
3196 {
3197 case GOT_TLS_GD:
3198 case GOT_TLS_LDM:
3199 return 2;
3200
3201 case GOT_TLS_IE:
3202 return 1;
3203
9ab066b4 3204 case GOT_TLS_NONE:
e641e783
RS
3205 return 0;
3206 }
3207 abort ();
3208}
3209
0f20cc35
DJ
3210/* Count the number of relocations needed for a TLS GOT entry, with
3211 access types from TLS_TYPE, and symbol H (or a local symbol if H
3212 is NULL). */
3213
3214static int
3215mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3216 struct elf_link_hash_entry *h)
3217{
3218 int indx = 0;
0f20cc35
DJ
3219 bfd_boolean need_relocs = FALSE;
3220 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3221
0e1862bb
L
3222 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3223 && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
0f20cc35
DJ
3224 indx = h->dynindx;
3225
0e1862bb 3226 if ((bfd_link_pic (info) || indx != 0)
0f20cc35
DJ
3227 && (h == NULL
3228 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3229 || h->root.type != bfd_link_hash_undefweak))
3230 need_relocs = TRUE;
3231
3232 if (!need_relocs)
e641e783 3233 return 0;
0f20cc35 3234
9ab066b4 3235 switch (tls_type)
0f20cc35 3236 {
e641e783
RS
3237 case GOT_TLS_GD:
3238 return indx != 0 ? 2 : 1;
0f20cc35 3239
e641e783
RS
3240 case GOT_TLS_IE:
3241 return 1;
0f20cc35 3242
e641e783 3243 case GOT_TLS_LDM:
0e1862bb 3244 return bfd_link_pic (info) ? 1 : 0;
0f20cc35 3245
e641e783
RS
3246 default:
3247 return 0;
3248 }
0f20cc35
DJ
3249}
3250
ab361d49
RS
3251/* Add the number of GOT entries and TLS relocations required by ENTRY
3252 to G. */
0f20cc35 3253
ab361d49
RS
3254static void
3255mips_elf_count_got_entry (struct bfd_link_info *info,
3256 struct mips_got_info *g,
3257 struct mips_got_entry *entry)
0f20cc35 3258{
9ab066b4 3259 if (entry->tls_type)
ab361d49 3260 {
9ab066b4
RS
3261 g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3262 g->relocs += mips_tls_got_relocs (info, entry->tls_type,
ab361d49
RS
3263 entry->symndx < 0
3264 ? &entry->d.h->root : NULL);
3265 }
3266 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3267 g->local_gotno += 1;
3268 else
3269 g->global_gotno += 1;
0f20cc35
DJ
3270}
3271
0f20cc35
DJ
3272/* Output a simple dynamic relocation into SRELOC. */
3273
3274static void
3275mips_elf_output_dynamic_relocation (bfd *output_bfd,
3276 asection *sreloc,
861fb55a 3277 unsigned long reloc_index,
0f20cc35
DJ
3278 unsigned long indx,
3279 int r_type,
3280 bfd_vma offset)
3281{
3282 Elf_Internal_Rela rel[3];
3283
3284 memset (rel, 0, sizeof (rel));
3285
3286 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3287 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3288
3289 if (ABI_64_P (output_bfd))
3290 {
3291 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3292 (output_bfd, &rel[0],
3293 (sreloc->contents
861fb55a 3294 + reloc_index * sizeof (Elf64_Mips_External_Rel)));
0f20cc35
DJ
3295 }
3296 else
3297 bfd_elf32_swap_reloc_out
3298 (output_bfd, &rel[0],
3299 (sreloc->contents
861fb55a 3300 + reloc_index * sizeof (Elf32_External_Rel)));
0f20cc35
DJ
3301}
3302
3303/* Initialize a set of TLS GOT entries for one symbol. */
3304
3305static void
9ab066b4
RS
3306mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3307 struct mips_got_entry *entry,
0f20cc35
DJ
3308 struct mips_elf_link_hash_entry *h,
3309 bfd_vma value)
3310{
23cc69b6 3311 struct mips_elf_link_hash_table *htab;
0f20cc35
DJ
3312 int indx;
3313 asection *sreloc, *sgot;
9ab066b4 3314 bfd_vma got_offset, got_offset2;
0f20cc35
DJ
3315 bfd_boolean need_relocs = FALSE;
3316
23cc69b6 3317 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3318 if (htab == NULL)
3319 return;
3320
23cc69b6 3321 sgot = htab->sgot;
0f20cc35
DJ
3322
3323 indx = 0;
3324 if (h != NULL)
3325 {
3326 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3327
0e1862bb
L
3328 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3329 &h->root)
3330 && (!bfd_link_pic (info)
3331 || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
0f20cc35
DJ
3332 indx = h->root.dynindx;
3333 }
3334
9ab066b4 3335 if (entry->tls_initialized)
0f20cc35
DJ
3336 return;
3337
0e1862bb 3338 if ((bfd_link_pic (info) || indx != 0)
0f20cc35
DJ
3339 && (h == NULL
3340 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3341 || h->root.type != bfd_link_hash_undefweak))
3342 need_relocs = TRUE;
3343
3344 /* MINUS_ONE means the symbol is not defined in this object. It may not
3345 be defined at all; assume that the value doesn't matter in that
3346 case. Otherwise complain if we would use the value. */
3347 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3348 || h->root.root.type == bfd_link_hash_undefweak);
3349
3350 /* Emit necessary relocations. */
0a44bf69 3351 sreloc = mips_elf_rel_dyn_section (info, FALSE);
9ab066b4 3352 got_offset = entry->gotidx;
0f20cc35 3353
9ab066b4 3354 switch (entry->tls_type)
0f20cc35 3355 {
e641e783
RS
3356 case GOT_TLS_GD:
3357 /* General Dynamic. */
3358 got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
0f20cc35
DJ
3359
3360 if (need_relocs)
3361 {
3362 mips_elf_output_dynamic_relocation
861fb55a 3363 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35 3364 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
e641e783 3365 sgot->output_offset + sgot->output_section->vma + got_offset);
0f20cc35
DJ
3366
3367 if (indx)
3368 mips_elf_output_dynamic_relocation
861fb55a 3369 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35 3370 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
e641e783 3371 sgot->output_offset + sgot->output_section->vma + got_offset2);
0f20cc35
DJ
3372 else
3373 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
e641e783 3374 sgot->contents + got_offset2);
0f20cc35
DJ
3375 }
3376 else
3377 {
3378 MIPS_ELF_PUT_WORD (abfd, 1,
e641e783 3379 sgot->contents + got_offset);
0f20cc35 3380 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
e641e783 3381 sgot->contents + got_offset2);
0f20cc35 3382 }
e641e783 3383 break;
0f20cc35 3384
e641e783
RS
3385 case GOT_TLS_IE:
3386 /* Initial Exec model. */
0f20cc35
DJ
3387 if (need_relocs)
3388 {
3389 if (indx == 0)
3390 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
e641e783 3391 sgot->contents + got_offset);
0f20cc35
DJ
3392 else
3393 MIPS_ELF_PUT_WORD (abfd, 0,
e641e783 3394 sgot->contents + got_offset);
0f20cc35
DJ
3395
3396 mips_elf_output_dynamic_relocation
861fb55a 3397 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35 3398 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
e641e783 3399 sgot->output_offset + sgot->output_section->vma + got_offset);
0f20cc35
DJ
3400 }
3401 else
3402 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
e641e783
RS
3403 sgot->contents + got_offset);
3404 break;
0f20cc35 3405
e641e783 3406 case GOT_TLS_LDM:
0f20cc35
DJ
3407 /* The initial offset is zero, and the LD offsets will include the
3408 bias by DTP_OFFSET. */
3409 MIPS_ELF_PUT_WORD (abfd, 0,
3410 sgot->contents + got_offset
3411 + MIPS_ELF_GOT_SIZE (abfd));
3412
0e1862bb 3413 if (!bfd_link_pic (info))
0f20cc35
DJ
3414 MIPS_ELF_PUT_WORD (abfd, 1,
3415 sgot->contents + got_offset);
3416 else
3417 mips_elf_output_dynamic_relocation
861fb55a 3418 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35
DJ
3419 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3420 sgot->output_offset + sgot->output_section->vma + got_offset);
e641e783
RS
3421 break;
3422
3423 default:
3424 abort ();
0f20cc35
DJ
3425 }
3426
9ab066b4 3427 entry->tls_initialized = TRUE;
e641e783 3428}
0f20cc35 3429
0a44bf69
RS
3430/* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3431 for global symbol H. .got.plt comes before the GOT, so the offset
3432 will be negative. */
3433
3434static bfd_vma
3435mips_elf_gotplt_index (struct bfd_link_info *info,
3436 struct elf_link_hash_entry *h)
3437{
1bbce132 3438 bfd_vma got_address, got_value;
0a44bf69
RS
3439 struct mips_elf_link_hash_table *htab;
3440
3441 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3442 BFD_ASSERT (htab != NULL);
3443
1bbce132
MR
3444 BFD_ASSERT (h->plt.plist != NULL);
3445 BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
0a44bf69
RS
3446
3447 /* Calculate the address of the associated .got.plt entry. */
3448 got_address = (htab->sgotplt->output_section->vma
3449 + htab->sgotplt->output_offset
1bbce132
MR
3450 + (h->plt.plist->gotplt_index
3451 * MIPS_ELF_GOT_SIZE (info->output_bfd)));
0a44bf69
RS
3452
3453 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
3454 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3455 + htab->root.hgot->root.u.def.section->output_offset
3456 + htab->root.hgot->root.u.def.value);
3457
3458 return got_address - got_value;
3459}
3460
5c18022e 3461/* Return the GOT offset for address VALUE. If there is not yet a GOT
0a44bf69
RS
3462 entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
3463 create a TLS GOT entry instead. Return -1 if no satisfactory GOT
3464 offset can be found. */
b49e97c9
TS
3465
3466static bfd_vma
9719ad41 3467mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3468 bfd_vma value, unsigned long r_symndx,
0f20cc35 3469 struct mips_elf_link_hash_entry *h, int r_type)
b49e97c9 3470{
a8028dd0 3471 struct mips_elf_link_hash_table *htab;
b15e6682 3472 struct mips_got_entry *entry;
b49e97c9 3473
a8028dd0 3474 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3475 BFD_ASSERT (htab != NULL);
3476
a8028dd0
RS
3477 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3478 r_symndx, h, r_type);
0f20cc35 3479 if (!entry)
b15e6682 3480 return MINUS_ONE;
0f20cc35 3481
e641e783 3482 if (entry->tls_type)
9ab066b4
RS
3483 mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3484 return entry->gotidx;
b49e97c9
TS
3485}
3486
13fbec83 3487/* Return the GOT index of global symbol H in the primary GOT. */
b49e97c9
TS
3488
3489static bfd_vma
13fbec83
RS
3490mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3491 struct elf_link_hash_entry *h)
3492{
3493 struct mips_elf_link_hash_table *htab;
3494 long global_got_dynindx;
3495 struct mips_got_info *g;
3496 bfd_vma got_index;
3497
3498 htab = mips_elf_hash_table (info);
3499 BFD_ASSERT (htab != NULL);
3500
3501 global_got_dynindx = 0;
3502 if (htab->global_gotsym != NULL)
3503 global_got_dynindx = htab->global_gotsym->dynindx;
3504
3505 /* Once we determine the global GOT entry with the lowest dynamic
3506 symbol table index, we must put all dynamic symbols with greater
3507 indices into the primary GOT. That makes it easy to calculate the
3508 GOT offset. */
3509 BFD_ASSERT (h->dynindx >= global_got_dynindx);
3510 g = mips_elf_bfd_got (obfd, FALSE);
3511 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3512 * MIPS_ELF_GOT_SIZE (obfd));
3513 BFD_ASSERT (got_index < htab->sgot->size);
3514
3515 return got_index;
3516}
3517
3518/* Return the GOT index for the global symbol indicated by H, which is
3519 referenced by a relocation of type R_TYPE in IBFD. */
3520
3521static bfd_vma
3522mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3523 struct elf_link_hash_entry *h, int r_type)
b49e97c9 3524{
a8028dd0 3525 struct mips_elf_link_hash_table *htab;
6c42ddb9
RS
3526 struct mips_got_info *g;
3527 struct mips_got_entry lookup, *entry;
3528 bfd_vma gotidx;
b49e97c9 3529
a8028dd0 3530 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3531 BFD_ASSERT (htab != NULL);
3532
6c42ddb9
RS
3533 g = mips_elf_bfd_got (ibfd, FALSE);
3534 BFD_ASSERT (g);
f4416af6 3535
6c42ddb9
RS
3536 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3537 if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3538 return mips_elf_primary_global_got_index (obfd, info, h);
f4416af6 3539
6c42ddb9
RS
3540 lookup.abfd = ibfd;
3541 lookup.symndx = -1;
3542 lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3543 entry = htab_find (g->got_entries, &lookup);
3544 BFD_ASSERT (entry);
0f20cc35 3545
6c42ddb9
RS
3546 gotidx = entry->gotidx;
3547 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
f4416af6 3548
6c42ddb9 3549 if (lookup.tls_type)
0f20cc35 3550 {
0f20cc35
DJ
3551 bfd_vma value = MINUS_ONE;
3552
3553 if ((h->root.type == bfd_link_hash_defined
3554 || h->root.type == bfd_link_hash_defweak)
3555 && h->root.u.def.section->output_section)
3556 value = (h->root.u.def.value
3557 + h->root.u.def.section->output_offset
3558 + h->root.u.def.section->output_section->vma);
3559
9ab066b4 3560 mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
0f20cc35 3561 }
6c42ddb9 3562 return gotidx;
b49e97c9
TS
3563}
3564
5c18022e
RS
3565/* Find a GOT page entry that points to within 32KB of VALUE. These
3566 entries are supposed to be placed at small offsets in the GOT, i.e.,
3567 within 32KB of GP. Return the index of the GOT entry, or -1 if no
3568 entry could be created. If OFFSETP is nonnull, use it to return the
0a44bf69 3569 offset of the GOT entry from VALUE. */
b49e97c9
TS
3570
3571static bfd_vma
9719ad41 3572mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3573 bfd_vma value, bfd_vma *offsetp)
b49e97c9 3574{
91d6fa6a 3575 bfd_vma page, got_index;
b15e6682 3576 struct mips_got_entry *entry;
b49e97c9 3577
0a44bf69 3578 page = (value + 0x8000) & ~(bfd_vma) 0xffff;
a8028dd0
RS
3579 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3580 NULL, R_MIPS_GOT_PAGE);
b49e97c9 3581
b15e6682
AO
3582 if (!entry)
3583 return MINUS_ONE;
143d77c5 3584
91d6fa6a 3585 got_index = entry->gotidx;
b49e97c9
TS
3586
3587 if (offsetp)
f4416af6 3588 *offsetp = value - entry->d.address;
b49e97c9 3589
91d6fa6a 3590 return got_index;
b49e97c9
TS
3591}
3592
738e5348 3593/* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
020d7251
RS
3594 EXTERNAL is true if the relocation was originally against a global
3595 symbol that binds locally. */
b49e97c9
TS
3596
3597static bfd_vma
9719ad41 3598mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3599 bfd_vma value, bfd_boolean external)
b49e97c9 3600{
b15e6682 3601 struct mips_got_entry *entry;
b49e97c9 3602
0a44bf69
RS
3603 /* GOT16 relocations against local symbols are followed by a LO16
3604 relocation; those against global symbols are not. Thus if the
3605 symbol was originally local, the GOT16 relocation should load the
3606 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */
b49e97c9 3607 if (! external)
0a44bf69 3608 value = mips_elf_high (value) << 16;
b49e97c9 3609
738e5348
RS
3610 /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3611 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the
3612 same in all cases. */
a8028dd0
RS
3613 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3614 NULL, R_MIPS_GOT16);
b15e6682
AO
3615 if (entry)
3616 return entry->gotidx;
3617 else
3618 return MINUS_ONE;
b49e97c9
TS
3619}
3620
3621/* Returns the offset for the entry at the INDEXth position
3622 in the GOT. */
3623
3624static bfd_vma
a8028dd0 3625mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
91d6fa6a 3626 bfd *input_bfd, bfd_vma got_index)
b49e97c9 3627{
a8028dd0 3628 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
3629 asection *sgot;
3630 bfd_vma gp;
3631
a8028dd0 3632 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3633 BFD_ASSERT (htab != NULL);
3634
a8028dd0 3635 sgot = htab->sgot;
f4416af6 3636 gp = _bfd_get_gp_value (output_bfd)
a8028dd0 3637 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
143d77c5 3638
91d6fa6a 3639 return sgot->output_section->vma + sgot->output_offset + got_index - gp;
b49e97c9
TS
3640}
3641
0a44bf69
RS
3642/* Create and return a local GOT entry for VALUE, which was calculated
3643 from a symbol belonging to INPUT_SECTON. Return NULL if it could not
3644 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry
3645 instead. */
b49e97c9 3646
b15e6682 3647static struct mips_got_entry *
0a44bf69 3648mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
a8028dd0 3649 bfd *ibfd, bfd_vma value,
5c18022e 3650 unsigned long r_symndx,
0f20cc35
DJ
3651 struct mips_elf_link_hash_entry *h,
3652 int r_type)
b49e97c9 3653{
ebc53538
RS
3654 struct mips_got_entry lookup, *entry;
3655 void **loc;
f4416af6 3656 struct mips_got_info *g;
0a44bf69 3657 struct mips_elf_link_hash_table *htab;
6c42ddb9 3658 bfd_vma gotidx;
0a44bf69
RS
3659
3660 htab = mips_elf_hash_table (info);
4dfe6ac6 3661 BFD_ASSERT (htab != NULL);
b15e6682 3662
d7206569 3663 g = mips_elf_bfd_got (ibfd, FALSE);
f4416af6
AO
3664 if (g == NULL)
3665 {
d7206569 3666 g = mips_elf_bfd_got (abfd, FALSE);
f4416af6
AO
3667 BFD_ASSERT (g != NULL);
3668 }
b15e6682 3669
020d7251
RS
3670 /* This function shouldn't be called for symbols that live in the global
3671 area of the GOT. */
3672 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
0f20cc35 3673
ebc53538
RS
3674 lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3675 if (lookup.tls_type)
3676 {
3677 lookup.abfd = ibfd;
df58fc94 3678 if (tls_ldm_reloc_p (r_type))
0f20cc35 3679 {
ebc53538
RS
3680 lookup.symndx = 0;
3681 lookup.d.addend = 0;
0f20cc35
DJ
3682 }
3683 else if (h == NULL)
3684 {
ebc53538
RS
3685 lookup.symndx = r_symndx;
3686 lookup.d.addend = 0;
0f20cc35
DJ
3687 }
3688 else
ebc53538
RS
3689 {
3690 lookup.symndx = -1;
3691 lookup.d.h = h;
3692 }
0f20cc35 3693
ebc53538
RS
3694 entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3695 BFD_ASSERT (entry);
0f20cc35 3696
6c42ddb9
RS
3697 gotidx = entry->gotidx;
3698 BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3699
ebc53538 3700 return entry;
0f20cc35
DJ
3701 }
3702
ebc53538
RS
3703 lookup.abfd = NULL;
3704 lookup.symndx = -1;
3705 lookup.d.address = value;
3706 loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3707 if (!loc)
b15e6682 3708 return NULL;
143d77c5 3709
ebc53538
RS
3710 entry = (struct mips_got_entry *) *loc;
3711 if (entry)
3712 return entry;
b15e6682 3713
cb22ccf4 3714 if (g->assigned_low_gotno > g->assigned_high_gotno)
b49e97c9
TS
3715 {
3716 /* We didn't allocate enough space in the GOT. */
3717 (*_bfd_error_handler)
3718 (_("not enough GOT space for local GOT entries"));
3719 bfd_set_error (bfd_error_bad_value);
b15e6682 3720 return NULL;
b49e97c9
TS
3721 }
3722
ebc53538
RS
3723 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3724 if (!entry)
3725 return NULL;
3726
cb22ccf4
KCY
3727 if (got16_reloc_p (r_type)
3728 || call16_reloc_p (r_type)
3729 || got_page_reloc_p (r_type)
3730 || got_disp_reloc_p (r_type))
3731 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3732 else
3733 lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3734
ebc53538
RS
3735 *entry = lookup;
3736 *loc = entry;
3737
3738 MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
b15e6682 3739
5c18022e 3740 /* These GOT entries need a dynamic relocation on VxWorks. */
0a44bf69
RS
3741 if (htab->is_vxworks)
3742 {
3743 Elf_Internal_Rela outrel;
5c18022e 3744 asection *s;
91d6fa6a 3745 bfd_byte *rloc;
0a44bf69 3746 bfd_vma got_address;
0a44bf69
RS
3747
3748 s = mips_elf_rel_dyn_section (info, FALSE);
a8028dd0
RS
3749 got_address = (htab->sgot->output_section->vma
3750 + htab->sgot->output_offset
ebc53538 3751 + entry->gotidx);
0a44bf69 3752
91d6fa6a 3753 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
0a44bf69 3754 outrel.r_offset = got_address;
5c18022e
RS
3755 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3756 outrel.r_addend = value;
91d6fa6a 3757 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
0a44bf69
RS
3758 }
3759
ebc53538 3760 return entry;
b49e97c9
TS
3761}
3762
d4596a51
RS
3763/* Return the number of dynamic section symbols required by OUTPUT_BFD.
3764 The number might be exact or a worst-case estimate, depending on how
3765 much information is available to elf_backend_omit_section_dynsym at
3766 the current linking stage. */
3767
3768static bfd_size_type
3769count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3770{
3771 bfd_size_type count;
3772
3773 count = 0;
0e1862bb
L
3774 if (bfd_link_pic (info)
3775 || elf_hash_table (info)->is_relocatable_executable)
d4596a51
RS
3776 {
3777 asection *p;
3778 const struct elf_backend_data *bed;
3779
3780 bed = get_elf_backend_data (output_bfd);
3781 for (p = output_bfd->sections; p ; p = p->next)
3782 if ((p->flags & SEC_EXCLUDE) == 0
3783 && (p->flags & SEC_ALLOC) != 0
3784 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3785 ++count;
3786 }
3787 return count;
3788}
3789
b49e97c9 3790/* Sort the dynamic symbol table so that symbols that need GOT entries
d4596a51 3791 appear towards the end. */
b49e97c9 3792
b34976b6 3793static bfd_boolean
d4596a51 3794mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
b49e97c9 3795{
a8028dd0 3796 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
3797 struct mips_elf_hash_sort_data hsd;
3798 struct mips_got_info *g;
b49e97c9 3799
d4596a51
RS
3800 if (elf_hash_table (info)->dynsymcount == 0)
3801 return TRUE;
3802
a8028dd0 3803 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3804 BFD_ASSERT (htab != NULL);
3805
a8028dd0 3806 g = htab->got_info;
d4596a51
RS
3807 if (g == NULL)
3808 return TRUE;
f4416af6 3809
b49e97c9 3810 hsd.low = NULL;
23cc69b6
RS
3811 hsd.max_unref_got_dynindx
3812 = hsd.min_got_dynindx
3813 = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
d4596a51 3814 hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
b49e97c9
TS
3815 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3816 elf_hash_table (info)),
3817 mips_elf_sort_hash_table_f,
3818 &hsd);
3819
3820 /* There should have been enough room in the symbol table to
44c410de 3821 accommodate both the GOT and non-GOT symbols. */
b49e97c9 3822 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
d4596a51
RS
3823 BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3824 == elf_hash_table (info)->dynsymcount);
3825 BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3826 == g->global_gotno);
b49e97c9
TS
3827
3828 /* Now we know which dynamic symbol has the lowest dynamic symbol
3829 table index in the GOT. */
d222d210 3830 htab->global_gotsym = hsd.low;
b49e97c9 3831
b34976b6 3832 return TRUE;
b49e97c9
TS
3833}
3834
3835/* If H needs a GOT entry, assign it the highest available dynamic
3836 index. Otherwise, assign it the lowest available dynamic
3837 index. */
3838
b34976b6 3839static bfd_boolean
9719ad41 3840mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
b49e97c9 3841{
9719ad41 3842 struct mips_elf_hash_sort_data *hsd = data;
b49e97c9 3843
b49e97c9
TS
3844 /* Symbols without dynamic symbol table entries aren't interesting
3845 at all. */
3846 if (h->root.dynindx == -1)
b34976b6 3847 return TRUE;
b49e97c9 3848
634835ae 3849 switch (h->global_got_area)
f4416af6 3850 {
634835ae
RS
3851 case GGA_NONE:
3852 h->root.dynindx = hsd->max_non_got_dynindx++;
3853 break;
0f20cc35 3854
634835ae 3855 case GGA_NORMAL:
b49e97c9
TS
3856 h->root.dynindx = --hsd->min_got_dynindx;
3857 hsd->low = (struct elf_link_hash_entry *) h;
634835ae
RS
3858 break;
3859
3860 case GGA_RELOC_ONLY:
634835ae
RS
3861 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3862 hsd->low = (struct elf_link_hash_entry *) h;
3863 h->root.dynindx = hsd->max_unref_got_dynindx++;
3864 break;
b49e97c9
TS
3865 }
3866
b34976b6 3867 return TRUE;
b49e97c9
TS
3868}
3869
ee227692
RS
3870/* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3871 (which is owned by the caller and shouldn't be added to the
3872 hash table directly). */
3873
3874static bfd_boolean
3875mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3876 struct mips_got_entry *lookup)
3877{
3878 struct mips_elf_link_hash_table *htab;
3879 struct mips_got_entry *entry;
3880 struct mips_got_info *g;
3881 void **loc, **bfd_loc;
3882
3883 /* Make sure there's a slot for this entry in the master GOT. */
3884 htab = mips_elf_hash_table (info);
3885 g = htab->got_info;
3886 loc = htab_find_slot (g->got_entries, lookup, INSERT);
3887 if (!loc)
3888 return FALSE;
3889
3890 /* Populate the entry if it isn't already. */
3891 entry = (struct mips_got_entry *) *loc;
3892 if (!entry)
3893 {
3894 entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3895 if (!entry)
3896 return FALSE;
3897
9ab066b4 3898 lookup->tls_initialized = FALSE;
ee227692
RS
3899 lookup->gotidx = -1;
3900 *entry = *lookup;
3901 *loc = entry;
3902 }
3903
3904 /* Reuse the same GOT entry for the BFD's GOT. */
3905 g = mips_elf_bfd_got (abfd, TRUE);
3906 if (!g)
3907 return FALSE;
3908
3909 bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3910 if (!bfd_loc)
3911 return FALSE;
3912
3913 if (!*bfd_loc)
3914 *bfd_loc = entry;
3915 return TRUE;
3916}
3917
e641e783
RS
3918/* ABFD has a GOT relocation of type R_TYPE against H. Reserve a GOT
3919 entry for it. FOR_CALL is true if the caller is only interested in
6ccf4795 3920 using the GOT entry for calls. */
b49e97c9 3921
b34976b6 3922static bfd_boolean
9719ad41
RS
3923mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3924 bfd *abfd, struct bfd_link_info *info,
e641e783 3925 bfd_boolean for_call, int r_type)
b49e97c9 3926{
a8028dd0 3927 struct mips_elf_link_hash_table *htab;
634835ae 3928 struct mips_elf_link_hash_entry *hmips;
ee227692
RS
3929 struct mips_got_entry entry;
3930 unsigned char tls_type;
a8028dd0
RS
3931
3932 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3933 BFD_ASSERT (htab != NULL);
3934
634835ae 3935 hmips = (struct mips_elf_link_hash_entry *) h;
6ccf4795
RS
3936 if (!for_call)
3937 hmips->got_only_for_calls = FALSE;
f4416af6 3938
b49e97c9
TS
3939 /* A global symbol in the GOT must also be in the dynamic symbol
3940 table. */
7c5fcef7
L
3941 if (h->dynindx == -1)
3942 {
3943 switch (ELF_ST_VISIBILITY (h->other))
3944 {
3945 case STV_INTERNAL:
3946 case STV_HIDDEN:
33bb52fb 3947 _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
7c5fcef7
L
3948 break;
3949 }
c152c796 3950 if (!bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 3951 return FALSE;
7c5fcef7 3952 }
b49e97c9 3953
ee227692 3954 tls_type = mips_elf_reloc_tls_type (r_type);
9ab066b4 3955 if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
ee227692 3956 hmips->global_got_area = GGA_NORMAL;
86324f90 3957
f4416af6
AO
3958 entry.abfd = abfd;
3959 entry.symndx = -1;
3960 entry.d.h = (struct mips_elf_link_hash_entry *) h;
ee227692
RS
3961 entry.tls_type = tls_type;
3962 return mips_elf_record_got_entry (info, abfd, &entry);
b49e97c9 3963}
f4416af6 3964
e641e783
RS
3965/* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3966 where SYMNDX is a local symbol. Reserve a GOT entry for it. */
f4416af6
AO
3967
3968static bfd_boolean
9719ad41 3969mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
e641e783 3970 struct bfd_link_info *info, int r_type)
f4416af6 3971{
a8028dd0
RS
3972 struct mips_elf_link_hash_table *htab;
3973 struct mips_got_info *g;
ee227692 3974 struct mips_got_entry entry;
f4416af6 3975
a8028dd0 3976 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3977 BFD_ASSERT (htab != NULL);
3978
a8028dd0
RS
3979 g = htab->got_info;
3980 BFD_ASSERT (g != NULL);
3981
f4416af6
AO
3982 entry.abfd = abfd;
3983 entry.symndx = symndx;
3984 entry.d.addend = addend;
e641e783 3985 entry.tls_type = mips_elf_reloc_tls_type (r_type);
ee227692 3986 return mips_elf_record_got_entry (info, abfd, &entry);
f4416af6 3987}
c224138d 3988
13db6b44
RS
3989/* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3990 H is the symbol's hash table entry, or null if SYMNDX is local
3991 to ABFD. */
c224138d
RS
3992
3993static bfd_boolean
13db6b44
RS
3994mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3995 long symndx, struct elf_link_hash_entry *h,
3996 bfd_signed_vma addend)
c224138d 3997{
a8028dd0 3998 struct mips_elf_link_hash_table *htab;
ee227692 3999 struct mips_got_info *g1, *g2;
13db6b44 4000 struct mips_got_page_ref lookup, *entry;
ee227692 4001 void **loc, **bfd_loc;
c224138d 4002
a8028dd0 4003 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4004 BFD_ASSERT (htab != NULL);
4005
ee227692
RS
4006 g1 = htab->got_info;
4007 BFD_ASSERT (g1 != NULL);
a8028dd0 4008
13db6b44
RS
4009 if (h)
4010 {
4011 lookup.symndx = -1;
4012 lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4013 }
4014 else
4015 {
4016 lookup.symndx = symndx;
4017 lookup.u.abfd = abfd;
4018 }
4019 lookup.addend = addend;
4020 loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
c224138d
RS
4021 if (loc == NULL)
4022 return FALSE;
4023
13db6b44 4024 entry = (struct mips_got_page_ref *) *loc;
c224138d
RS
4025 if (!entry)
4026 {
4027 entry = bfd_alloc (abfd, sizeof (*entry));
4028 if (!entry)
4029 return FALSE;
4030
13db6b44 4031 *entry = lookup;
c224138d
RS
4032 *loc = entry;
4033 }
4034
ee227692
RS
4035 /* Add the same entry to the BFD's GOT. */
4036 g2 = mips_elf_bfd_got (abfd, TRUE);
4037 if (!g2)
4038 return FALSE;
4039
13db6b44 4040 bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
ee227692
RS
4041 if (!bfd_loc)
4042 return FALSE;
4043
4044 if (!*bfd_loc)
4045 *bfd_loc = entry;
4046
c224138d
RS
4047 return TRUE;
4048}
33bb52fb
RS
4049
4050/* Add room for N relocations to the .rel(a).dyn section in ABFD. */
4051
4052static void
4053mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4054 unsigned int n)
4055{
4056 asection *s;
4057 struct mips_elf_link_hash_table *htab;
4058
4059 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4060 BFD_ASSERT (htab != NULL);
4061
33bb52fb
RS
4062 s = mips_elf_rel_dyn_section (info, FALSE);
4063 BFD_ASSERT (s != NULL);
4064
4065 if (htab->is_vxworks)
4066 s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4067 else
4068 {
4069 if (s->size == 0)
4070 {
4071 /* Make room for a null element. */
4072 s->size += MIPS_ELF_REL_SIZE (abfd);
4073 ++s->reloc_count;
4074 }
4075 s->size += n * MIPS_ELF_REL_SIZE (abfd);
4076 }
4077}
4078\f
476366af
RS
4079/* A htab_traverse callback for GOT entries, with DATA pointing to a
4080 mips_elf_traverse_got_arg structure. Count the number of GOT
4081 entries and TLS relocs. Set DATA->value to true if we need
4082 to resolve indirect or warning symbols and then recreate the GOT. */
33bb52fb
RS
4083
4084static int
4085mips_elf_check_recreate_got (void **entryp, void *data)
4086{
4087 struct mips_got_entry *entry;
476366af 4088 struct mips_elf_traverse_got_arg *arg;
33bb52fb
RS
4089
4090 entry = (struct mips_got_entry *) *entryp;
476366af 4091 arg = (struct mips_elf_traverse_got_arg *) data;
33bb52fb
RS
4092 if (entry->abfd != NULL && entry->symndx == -1)
4093 {
4094 struct mips_elf_link_hash_entry *h;
4095
4096 h = entry->d.h;
4097 if (h->root.root.type == bfd_link_hash_indirect
4098 || h->root.root.type == bfd_link_hash_warning)
4099 {
476366af 4100 arg->value = TRUE;
33bb52fb
RS
4101 return 0;
4102 }
4103 }
476366af 4104 mips_elf_count_got_entry (arg->info, arg->g, entry);
33bb52fb
RS
4105 return 1;
4106}
4107
476366af
RS
4108/* A htab_traverse callback for GOT entries, with DATA pointing to a
4109 mips_elf_traverse_got_arg structure. Add all entries to DATA->g,
4110 converting entries for indirect and warning symbols into entries
4111 for the target symbol. Set DATA->g to null on error. */
33bb52fb
RS
4112
4113static int
4114mips_elf_recreate_got (void **entryp, void *data)
4115{
72e7511a 4116 struct mips_got_entry new_entry, *entry;
476366af 4117 struct mips_elf_traverse_got_arg *arg;
33bb52fb
RS
4118 void **slot;
4119
33bb52fb 4120 entry = (struct mips_got_entry *) *entryp;
476366af 4121 arg = (struct mips_elf_traverse_got_arg *) data;
72e7511a
RS
4122 if (entry->abfd != NULL
4123 && entry->symndx == -1
4124 && (entry->d.h->root.root.type == bfd_link_hash_indirect
4125 || entry->d.h->root.root.type == bfd_link_hash_warning))
33bb52fb
RS
4126 {
4127 struct mips_elf_link_hash_entry *h;
4128
72e7511a
RS
4129 new_entry = *entry;
4130 entry = &new_entry;
33bb52fb 4131 h = entry->d.h;
72e7511a 4132 do
634835ae
RS
4133 {
4134 BFD_ASSERT (h->global_got_area == GGA_NONE);
4135 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4136 }
72e7511a
RS
4137 while (h->root.root.type == bfd_link_hash_indirect
4138 || h->root.root.type == bfd_link_hash_warning);
33bb52fb
RS
4139 entry->d.h = h;
4140 }
476366af 4141 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
33bb52fb
RS
4142 if (slot == NULL)
4143 {
476366af 4144 arg->g = NULL;
33bb52fb
RS
4145 return 0;
4146 }
4147 if (*slot == NULL)
72e7511a
RS
4148 {
4149 if (entry == &new_entry)
4150 {
4151 entry = bfd_alloc (entry->abfd, sizeof (*entry));
4152 if (!entry)
4153 {
476366af 4154 arg->g = NULL;
72e7511a
RS
4155 return 0;
4156 }
4157 *entry = new_entry;
4158 }
4159 *slot = entry;
476366af 4160 mips_elf_count_got_entry (arg->info, arg->g, entry);
72e7511a 4161 }
33bb52fb
RS
4162 return 1;
4163}
4164
13db6b44
RS
4165/* Return the maximum number of GOT page entries required for RANGE. */
4166
4167static bfd_vma
4168mips_elf_pages_for_range (const struct mips_got_page_range *range)
4169{
4170 return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4171}
4172
4173/* Record that G requires a page entry that can reach SEC + ADDEND. */
4174
4175static bfd_boolean
b75d42bc 4176mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
13db6b44
RS
4177 asection *sec, bfd_signed_vma addend)
4178{
b75d42bc 4179 struct mips_got_info *g = arg->g;
13db6b44
RS
4180 struct mips_got_page_entry lookup, *entry;
4181 struct mips_got_page_range **range_ptr, *range;
4182 bfd_vma old_pages, new_pages;
4183 void **loc;
4184
4185 /* Find the mips_got_page_entry hash table entry for this section. */
4186 lookup.sec = sec;
4187 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4188 if (loc == NULL)
4189 return FALSE;
4190
4191 /* Create a mips_got_page_entry if this is the first time we've
4192 seen the section. */
4193 entry = (struct mips_got_page_entry *) *loc;
4194 if (!entry)
4195 {
b75d42bc 4196 entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
13db6b44
RS
4197 if (!entry)
4198 return FALSE;
4199
4200 entry->sec = sec;
4201 *loc = entry;
4202 }
4203
4204 /* Skip over ranges whose maximum extent cannot share a page entry
4205 with ADDEND. */
4206 range_ptr = &entry->ranges;
4207 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4208 range_ptr = &(*range_ptr)->next;
4209
4210 /* If we scanned to the end of the list, or found a range whose
4211 minimum extent cannot share a page entry with ADDEND, create
4212 a new singleton range. */
4213 range = *range_ptr;
4214 if (!range || addend < range->min_addend - 0xffff)
4215 {
b75d42bc 4216 range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
13db6b44
RS
4217 if (!range)
4218 return FALSE;
4219
4220 range->next = *range_ptr;
4221 range->min_addend = addend;
4222 range->max_addend = addend;
4223
4224 *range_ptr = range;
4225 entry->num_pages++;
4226 g->page_gotno++;
4227 return TRUE;
4228 }
4229
4230 /* Remember how many pages the old range contributed. */
4231 old_pages = mips_elf_pages_for_range (range);
4232
4233 /* Update the ranges. */
4234 if (addend < range->min_addend)
4235 range->min_addend = addend;
4236 else if (addend > range->max_addend)
4237 {
4238 if (range->next && addend >= range->next->min_addend - 0xffff)
4239 {
4240 old_pages += mips_elf_pages_for_range (range->next);
4241 range->max_addend = range->next->max_addend;
4242 range->next = range->next->next;
4243 }
4244 else
4245 range->max_addend = addend;
4246 }
4247
4248 /* Record any change in the total estimate. */
4249 new_pages = mips_elf_pages_for_range (range);
4250 if (old_pages != new_pages)
4251 {
4252 entry->num_pages += new_pages - old_pages;
4253 g->page_gotno += new_pages - old_pages;
4254 }
4255
4256 return TRUE;
4257}
4258
4259/* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4260 and for which DATA points to a mips_elf_traverse_got_arg. Work out
4261 whether the page reference described by *REFP needs a GOT page entry,
4262 and record that entry in DATA->g if so. Set DATA->g to null on failure. */
4263
4264static bfd_boolean
4265mips_elf_resolve_got_page_ref (void **refp, void *data)
4266{
4267 struct mips_got_page_ref *ref;
4268 struct mips_elf_traverse_got_arg *arg;
4269 struct mips_elf_link_hash_table *htab;
4270 asection *sec;
4271 bfd_vma addend;
4272
4273 ref = (struct mips_got_page_ref *) *refp;
4274 arg = (struct mips_elf_traverse_got_arg *) data;
4275 htab = mips_elf_hash_table (arg->info);
4276
4277 if (ref->symndx < 0)
4278 {
4279 struct mips_elf_link_hash_entry *h;
4280
4281 /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries. */
4282 h = ref->u.h;
4283 if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4284 return 1;
4285
4286 /* Ignore undefined symbols; we'll issue an error later if
4287 appropriate. */
4288 if (!((h->root.root.type == bfd_link_hash_defined
4289 || h->root.root.type == bfd_link_hash_defweak)
4290 && h->root.root.u.def.section))
4291 return 1;
4292
4293 sec = h->root.root.u.def.section;
4294 addend = h->root.root.u.def.value + ref->addend;
4295 }
4296 else
4297 {
4298 Elf_Internal_Sym *isym;
4299
4300 /* Read in the symbol. */
4301 isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4302 ref->symndx);
4303 if (isym == NULL)
4304 {
4305 arg->g = NULL;
4306 return 0;
4307 }
4308
4309 /* Get the associated input section. */
4310 sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4311 if (sec == NULL)
4312 {
4313 arg->g = NULL;
4314 return 0;
4315 }
4316
4317 /* If this is a mergable section, work out the section and offset
4318 of the merged data. For section symbols, the addend specifies
4319 of the offset _of_ the first byte in the data, otherwise it
4320 specifies the offset _from_ the first byte. */
4321 if (sec->flags & SEC_MERGE)
4322 {
4323 void *secinfo;
4324
4325 secinfo = elf_section_data (sec)->sec_info;
4326 if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4327 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4328 isym->st_value + ref->addend);
4329 else
4330 addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4331 isym->st_value) + ref->addend;
4332 }
4333 else
4334 addend = isym->st_value + ref->addend;
4335 }
b75d42bc 4336 if (!mips_elf_record_got_page_entry (arg, sec, addend))
13db6b44
RS
4337 {
4338 arg->g = NULL;
4339 return 0;
4340 }
4341 return 1;
4342}
4343
33bb52fb 4344/* If any entries in G->got_entries are for indirect or warning symbols,
13db6b44
RS
4345 replace them with entries for the target symbol. Convert g->got_page_refs
4346 into got_page_entry structures and estimate the number of page entries
4347 that they require. */
33bb52fb
RS
4348
4349static bfd_boolean
476366af
RS
4350mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4351 struct mips_got_info *g)
33bb52fb 4352{
476366af
RS
4353 struct mips_elf_traverse_got_arg tga;
4354 struct mips_got_info oldg;
4355
4356 oldg = *g;
33bb52fb 4357
476366af
RS
4358 tga.info = info;
4359 tga.g = g;
4360 tga.value = FALSE;
4361 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4362 if (tga.value)
33bb52fb 4363 {
476366af
RS
4364 *g = oldg;
4365 g->got_entries = htab_create (htab_size (oldg.got_entries),
4366 mips_elf_got_entry_hash,
4367 mips_elf_got_entry_eq, NULL);
4368 if (!g->got_entries)
33bb52fb
RS
4369 return FALSE;
4370
476366af
RS
4371 htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4372 if (!tga.g)
4373 return FALSE;
4374
4375 htab_delete (oldg.got_entries);
33bb52fb 4376 }
13db6b44
RS
4377
4378 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4379 mips_got_page_entry_eq, NULL);
4380 if (g->got_page_entries == NULL)
4381 return FALSE;
4382
4383 tga.info = info;
4384 tga.g = g;
4385 htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4386
33bb52fb
RS
4387 return TRUE;
4388}
4389
c5d6fa44
RS
4390/* Return true if a GOT entry for H should live in the local rather than
4391 global GOT area. */
4392
4393static bfd_boolean
4394mips_use_local_got_p (struct bfd_link_info *info,
4395 struct mips_elf_link_hash_entry *h)
4396{
4397 /* Symbols that aren't in the dynamic symbol table must live in the
4398 local GOT. This includes symbols that are completely undefined
4399 and which therefore don't bind locally. We'll report undefined
4400 symbols later if appropriate. */
4401 if (h->root.dynindx == -1)
4402 return TRUE;
4403
4404 /* Symbols that bind locally can (and in the case of forced-local
4405 symbols, must) live in the local GOT. */
4406 if (h->got_only_for_calls
4407 ? SYMBOL_CALLS_LOCAL (info, &h->root)
4408 : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4409 return TRUE;
4410
4411 /* If this is an executable that must provide a definition of the symbol,
4412 either though PLTs or copy relocations, then that address should go in
4413 the local rather than global GOT. */
0e1862bb 4414 if (bfd_link_executable (info) && h->has_static_relocs)
c5d6fa44
RS
4415 return TRUE;
4416
4417 return FALSE;
4418}
4419
6c42ddb9
RS
4420/* A mips_elf_link_hash_traverse callback for which DATA points to the
4421 link_info structure. Decide whether the hash entry needs an entry in
4422 the global part of the primary GOT, setting global_got_area accordingly.
4423 Count the number of global symbols that are in the primary GOT only
4424 because they have relocations against them (reloc_only_gotno). */
33bb52fb
RS
4425
4426static int
d4596a51 4427mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
33bb52fb 4428{
020d7251 4429 struct bfd_link_info *info;
6ccf4795 4430 struct mips_elf_link_hash_table *htab;
33bb52fb
RS
4431 struct mips_got_info *g;
4432
020d7251 4433 info = (struct bfd_link_info *) data;
6ccf4795
RS
4434 htab = mips_elf_hash_table (info);
4435 g = htab->got_info;
d4596a51 4436 if (h->global_got_area != GGA_NONE)
33bb52fb 4437 {
020d7251 4438 /* Make a final decision about whether the symbol belongs in the
c5d6fa44
RS
4439 local or global GOT. */
4440 if (mips_use_local_got_p (info, h))
6c42ddb9
RS
4441 /* The symbol belongs in the local GOT. We no longer need this
4442 entry if it was only used for relocations; those relocations
4443 will be against the null or section symbol instead of H. */
4444 h->global_got_area = GGA_NONE;
6ccf4795
RS
4445 else if (htab->is_vxworks
4446 && h->got_only_for_calls
1bbce132 4447 && h->root.plt.plist->mips_offset != MINUS_ONE)
6ccf4795
RS
4448 /* On VxWorks, calls can refer directly to the .got.plt entry;
4449 they don't need entries in the regular GOT. .got.plt entries
4450 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */
4451 h->global_got_area = GGA_NONE;
6c42ddb9 4452 else if (h->global_got_area == GGA_RELOC_ONLY)
23cc69b6 4453 {
6c42ddb9 4454 g->reloc_only_gotno++;
23cc69b6 4455 g->global_gotno++;
23cc69b6 4456 }
33bb52fb
RS
4457 }
4458 return 1;
4459}
f4416af6 4460\f
d7206569
RS
4461/* A htab_traverse callback for GOT entries. Add each one to the GOT
4462 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
f4416af6
AO
4463
4464static int
d7206569 4465mips_elf_add_got_entry (void **entryp, void *data)
f4416af6 4466{
d7206569
RS
4467 struct mips_got_entry *entry;
4468 struct mips_elf_traverse_got_arg *arg;
4469 void **slot;
f4416af6 4470
d7206569
RS
4471 entry = (struct mips_got_entry *) *entryp;
4472 arg = (struct mips_elf_traverse_got_arg *) data;
4473 slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4474 if (!slot)
f4416af6 4475 {
d7206569
RS
4476 arg->g = NULL;
4477 return 0;
f4416af6 4478 }
d7206569 4479 if (!*slot)
c224138d 4480 {
d7206569
RS
4481 *slot = entry;
4482 mips_elf_count_got_entry (arg->info, arg->g, entry);
c224138d 4483 }
f4416af6
AO
4484 return 1;
4485}
4486
d7206569
RS
4487/* A htab_traverse callback for GOT page entries. Add each one to the GOT
4488 given in mips_elf_traverse_got_arg DATA. Clear DATA->G on error. */
c224138d
RS
4489
4490static int
d7206569 4491mips_elf_add_got_page_entry (void **entryp, void *data)
c224138d 4492{
d7206569
RS
4493 struct mips_got_page_entry *entry;
4494 struct mips_elf_traverse_got_arg *arg;
4495 void **slot;
c224138d 4496
d7206569
RS
4497 entry = (struct mips_got_page_entry *) *entryp;
4498 arg = (struct mips_elf_traverse_got_arg *) data;
4499 slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4500 if (!slot)
c224138d 4501 {
d7206569 4502 arg->g = NULL;
c224138d
RS
4503 return 0;
4504 }
d7206569
RS
4505 if (!*slot)
4506 {
4507 *slot = entry;
4508 arg->g->page_gotno += entry->num_pages;
4509 }
c224138d
RS
4510 return 1;
4511}
4512
d7206569
RS
4513/* Consider merging FROM, which is ABFD's GOT, into TO. Return -1 if
4514 this would lead to overflow, 1 if they were merged successfully,
4515 and 0 if a merge failed due to lack of memory. (These values are chosen
4516 so that nonnegative return values can be returned by a htab_traverse
4517 callback.) */
c224138d
RS
4518
4519static int
d7206569 4520mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
c224138d
RS
4521 struct mips_got_info *to,
4522 struct mips_elf_got_per_bfd_arg *arg)
4523{
d7206569 4524 struct mips_elf_traverse_got_arg tga;
c224138d
RS
4525 unsigned int estimate;
4526
4527 /* Work out how many page entries we would need for the combined GOT. */
4528 estimate = arg->max_pages;
4529 if (estimate >= from->page_gotno + to->page_gotno)
4530 estimate = from->page_gotno + to->page_gotno;
4531
e2ece73c 4532 /* And conservatively estimate how many local and TLS entries
c224138d 4533 would be needed. */
e2ece73c
RS
4534 estimate += from->local_gotno + to->local_gotno;
4535 estimate += from->tls_gotno + to->tls_gotno;
4536
17214937
RS
4537 /* If we're merging with the primary got, any TLS relocations will
4538 come after the full set of global entries. Otherwise estimate those
e2ece73c 4539 conservatively as well. */
17214937 4540 if (to == arg->primary && from->tls_gotno + to->tls_gotno)
e2ece73c
RS
4541 estimate += arg->global_count;
4542 else
4543 estimate += from->global_gotno + to->global_gotno;
c224138d
RS
4544
4545 /* Bail out if the combined GOT might be too big. */
4546 if (estimate > arg->max_count)
4547 return -1;
4548
c224138d 4549 /* Transfer the bfd's got information from FROM to TO. */
d7206569
RS
4550 tga.info = arg->info;
4551 tga.g = to;
4552 htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4553 if (!tga.g)
c224138d
RS
4554 return 0;
4555
d7206569
RS
4556 htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4557 if (!tga.g)
c224138d
RS
4558 return 0;
4559
d7206569 4560 mips_elf_replace_bfd_got (abfd, to);
c224138d
RS
4561 return 1;
4562}
4563
d7206569 4564/* Attempt to merge GOT G, which belongs to ABFD. Try to use as much
f4416af6
AO
4565 as possible of the primary got, since it doesn't require explicit
4566 dynamic relocations, but don't use bfds that would reference global
4567 symbols out of the addressable range. Failing the primary got,
4568 attempt to merge with the current got, or finish the current got
4569 and then make make the new got current. */
4570
d7206569
RS
4571static bfd_boolean
4572mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4573 struct mips_elf_got_per_bfd_arg *arg)
f4416af6 4574{
c224138d
RS
4575 unsigned int estimate;
4576 int result;
4577
476366af 4578 if (!mips_elf_resolve_final_got_entries (arg->info, g))
d7206569
RS
4579 return FALSE;
4580
c224138d
RS
4581 /* Work out the number of page, local and TLS entries. */
4582 estimate = arg->max_pages;
4583 if (estimate > g->page_gotno)
4584 estimate = g->page_gotno;
4585 estimate += g->local_gotno + g->tls_gotno;
0f20cc35
DJ
4586
4587 /* We place TLS GOT entries after both locals and globals. The globals
4588 for the primary GOT may overflow the normal GOT size limit, so be
4589 sure not to merge a GOT which requires TLS with the primary GOT in that
4590 case. This doesn't affect non-primary GOTs. */
c224138d 4591 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
143d77c5 4592
c224138d 4593 if (estimate <= arg->max_count)
f4416af6 4594 {
c224138d
RS
4595 /* If we don't have a primary GOT, use it as
4596 a starting point for the primary GOT. */
4597 if (!arg->primary)
4598 {
d7206569
RS
4599 arg->primary = g;
4600 return TRUE;
c224138d 4601 }
f4416af6 4602
c224138d 4603 /* Try merging with the primary GOT. */
d7206569 4604 result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
c224138d
RS
4605 if (result >= 0)
4606 return result;
f4416af6 4607 }
c224138d 4608
f4416af6 4609 /* If we can merge with the last-created got, do it. */
c224138d 4610 if (arg->current)
f4416af6 4611 {
d7206569 4612 result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
c224138d
RS
4613 if (result >= 0)
4614 return result;
f4416af6 4615 }
c224138d 4616
f4416af6
AO
4617 /* Well, we couldn't merge, so create a new GOT. Don't check if it
4618 fits; if it turns out that it doesn't, we'll get relocation
4619 overflows anyway. */
c224138d
RS
4620 g->next = arg->current;
4621 arg->current = g;
0f20cc35 4622
d7206569 4623 return TRUE;
0f20cc35
DJ
4624}
4625
72e7511a
RS
4626/* ENTRYP is a hash table entry for a mips_got_entry. Set its gotidx
4627 to GOTIDX, duplicating the entry if it has already been assigned
4628 an index in a different GOT. */
4629
4630static bfd_boolean
4631mips_elf_set_gotidx (void **entryp, long gotidx)
4632{
4633 struct mips_got_entry *entry;
4634
4635 entry = (struct mips_got_entry *) *entryp;
4636 if (entry->gotidx > 0)
4637 {
4638 struct mips_got_entry *new_entry;
4639
4640 new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4641 if (!new_entry)
4642 return FALSE;
4643
4644 *new_entry = *entry;
4645 *entryp = new_entry;
4646 entry = new_entry;
4647 }
4648 entry->gotidx = gotidx;
4649 return TRUE;
4650}
4651
4652/* Set the TLS GOT index for the GOT entry in ENTRYP. DATA points to a
4653 mips_elf_traverse_got_arg in which DATA->value is the size of one
4654 GOT entry. Set DATA->g to null on failure. */
0f20cc35
DJ
4655
4656static int
72e7511a 4657mips_elf_initialize_tls_index (void **entryp, void *data)
0f20cc35 4658{
72e7511a
RS
4659 struct mips_got_entry *entry;
4660 struct mips_elf_traverse_got_arg *arg;
0f20cc35
DJ
4661
4662 /* We're only interested in TLS symbols. */
72e7511a 4663 entry = (struct mips_got_entry *) *entryp;
9ab066b4 4664 if (entry->tls_type == GOT_TLS_NONE)
0f20cc35
DJ
4665 return 1;
4666
72e7511a 4667 arg = (struct mips_elf_traverse_got_arg *) data;
6c42ddb9 4668 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
ead49a57 4669 {
6c42ddb9
RS
4670 arg->g = NULL;
4671 return 0;
f4416af6
AO
4672 }
4673
ead49a57 4674 /* Account for the entries we've just allocated. */
9ab066b4 4675 arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
f4416af6
AO
4676 return 1;
4677}
4678
ab361d49
RS
4679/* A htab_traverse callback for GOT entries, where DATA points to a
4680 mips_elf_traverse_got_arg. Set the global_got_area of each global
4681 symbol to DATA->value. */
f4416af6 4682
f4416af6 4683static int
ab361d49 4684mips_elf_set_global_got_area (void **entryp, void *data)
f4416af6 4685{
ab361d49
RS
4686 struct mips_got_entry *entry;
4687 struct mips_elf_traverse_got_arg *arg;
f4416af6 4688
ab361d49
RS
4689 entry = (struct mips_got_entry *) *entryp;
4690 arg = (struct mips_elf_traverse_got_arg *) data;
4691 if (entry->abfd != NULL
4692 && entry->symndx == -1
4693 && entry->d.h->global_got_area != GGA_NONE)
4694 entry->d.h->global_got_area = arg->value;
4695 return 1;
4696}
4697
4698/* A htab_traverse callback for secondary GOT entries, where DATA points
4699 to a mips_elf_traverse_got_arg. Assign GOT indices to global entries
4700 and record the number of relocations they require. DATA->value is
72e7511a 4701 the size of one GOT entry. Set DATA->g to null on failure. */
ab361d49
RS
4702
4703static int
4704mips_elf_set_global_gotidx (void **entryp, void *data)
4705{
4706 struct mips_got_entry *entry;
4707 struct mips_elf_traverse_got_arg *arg;
0f20cc35 4708
ab361d49
RS
4709 entry = (struct mips_got_entry *) *entryp;
4710 arg = (struct mips_elf_traverse_got_arg *) data;
634835ae
RS
4711 if (entry->abfd != NULL
4712 && entry->symndx == -1
4713 && entry->d.h->global_got_area != GGA_NONE)
f4416af6 4714 {
cb22ccf4 4715 if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
72e7511a
RS
4716 {
4717 arg->g = NULL;
4718 return 0;
4719 }
cb22ccf4 4720 arg->g->assigned_low_gotno += 1;
72e7511a 4721
0e1862bb 4722 if (bfd_link_pic (arg->info)
ab361d49
RS
4723 || (elf_hash_table (arg->info)->dynamic_sections_created
4724 && entry->d.h->root.def_dynamic
4725 && !entry->d.h->root.def_regular))
4726 arg->g->relocs += 1;
f4416af6
AO
4727 }
4728
4729 return 1;
4730}
4731
33bb52fb
RS
4732/* A htab_traverse callback for GOT entries for which DATA is the
4733 bfd_link_info. Forbid any global symbols from having traditional
4734 lazy-binding stubs. */
4735
0626d451 4736static int
33bb52fb 4737mips_elf_forbid_lazy_stubs (void **entryp, void *data)
0626d451 4738{
33bb52fb
RS
4739 struct bfd_link_info *info;
4740 struct mips_elf_link_hash_table *htab;
4741 struct mips_got_entry *entry;
0626d451 4742
33bb52fb
RS
4743 entry = (struct mips_got_entry *) *entryp;
4744 info = (struct bfd_link_info *) data;
4745 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4746 BFD_ASSERT (htab != NULL);
4747
0626d451
RS
4748 if (entry->abfd != NULL
4749 && entry->symndx == -1
33bb52fb 4750 && entry->d.h->needs_lazy_stub)
f4416af6 4751 {
33bb52fb
RS
4752 entry->d.h->needs_lazy_stub = FALSE;
4753 htab->lazy_stub_count--;
f4416af6 4754 }
143d77c5 4755
f4416af6
AO
4756 return 1;
4757}
4758
f4416af6
AO
4759/* Return the offset of an input bfd IBFD's GOT from the beginning of
4760 the primary GOT. */
4761static bfd_vma
9719ad41 4762mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
f4416af6 4763{
d7206569 4764 if (!g->next)
f4416af6
AO
4765 return 0;
4766
d7206569 4767 g = mips_elf_bfd_got (ibfd, FALSE);
f4416af6
AO
4768 if (! g)
4769 return 0;
4770
4771 BFD_ASSERT (g->next);
4772
4773 g = g->next;
143d77c5 4774
0f20cc35
DJ
4775 return (g->local_gotno + g->global_gotno + g->tls_gotno)
4776 * MIPS_ELF_GOT_SIZE (abfd);
f4416af6
AO
4777}
4778
4779/* Turn a single GOT that is too big for 16-bit addressing into
4780 a sequence of GOTs, each one 16-bit addressable. */
4781
4782static bfd_boolean
9719ad41 4783mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
a8028dd0 4784 asection *got, bfd_size_type pages)
f4416af6 4785{
a8028dd0 4786 struct mips_elf_link_hash_table *htab;
f4416af6 4787 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
ab361d49 4788 struct mips_elf_traverse_got_arg tga;
a8028dd0 4789 struct mips_got_info *g, *gg;
33bb52fb 4790 unsigned int assign, needed_relocs;
d7206569 4791 bfd *dynobj, *ibfd;
f4416af6 4792
33bb52fb 4793 dynobj = elf_hash_table (info)->dynobj;
a8028dd0 4794 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4795 BFD_ASSERT (htab != NULL);
4796
a8028dd0 4797 g = htab->got_info;
f4416af6 4798
f4416af6
AO
4799 got_per_bfd_arg.obfd = abfd;
4800 got_per_bfd_arg.info = info;
f4416af6
AO
4801 got_per_bfd_arg.current = NULL;
4802 got_per_bfd_arg.primary = NULL;
0a44bf69 4803 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
f4416af6 4804 / MIPS_ELF_GOT_SIZE (abfd))
861fb55a 4805 - htab->reserved_gotno);
c224138d 4806 got_per_bfd_arg.max_pages = pages;
0f20cc35 4807 /* The number of globals that will be included in the primary GOT.
ab361d49 4808 See the calls to mips_elf_set_global_got_area below for more
0f20cc35
DJ
4809 information. */
4810 got_per_bfd_arg.global_count = g->global_gotno;
f4416af6
AO
4811
4812 /* Try to merge the GOTs of input bfds together, as long as they
4813 don't seem to exceed the maximum GOT size, choosing one of them
4814 to be the primary GOT. */
c72f2fb2 4815 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
d7206569
RS
4816 {
4817 gg = mips_elf_bfd_got (ibfd, FALSE);
4818 if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4819 return FALSE;
4820 }
f4416af6 4821
0f20cc35 4822 /* If we do not find any suitable primary GOT, create an empty one. */
f4416af6 4823 if (got_per_bfd_arg.primary == NULL)
3dff0dd1 4824 g->next = mips_elf_create_got_info (abfd);
f4416af6
AO
4825 else
4826 g->next = got_per_bfd_arg.primary;
4827 g->next->next = got_per_bfd_arg.current;
4828
4829 /* GG is now the master GOT, and G is the primary GOT. */
4830 gg = g;
4831 g = g->next;
4832
4833 /* Map the output bfd to the primary got. That's what we're going
4834 to use for bfds that use GOT16 or GOT_PAGE relocations that we
4835 didn't mark in check_relocs, and we want a quick way to find it.
4836 We can't just use gg->next because we're going to reverse the
4837 list. */
d7206569 4838 mips_elf_replace_bfd_got (abfd, g);
f4416af6 4839
634835ae
RS
4840 /* Every symbol that is referenced in a dynamic relocation must be
4841 present in the primary GOT, so arrange for them to appear after
4842 those that are actually referenced. */
23cc69b6 4843 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
634835ae 4844 g->global_gotno = gg->global_gotno;
f4416af6 4845
ab361d49
RS
4846 tga.info = info;
4847 tga.value = GGA_RELOC_ONLY;
4848 htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4849 tga.value = GGA_NORMAL;
4850 htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
f4416af6
AO
4851
4852 /* Now go through the GOTs assigning them offset ranges.
cb22ccf4 4853 [assigned_low_gotno, local_gotno[ will be set to the range of local
f4416af6
AO
4854 entries in each GOT. We can then compute the end of a GOT by
4855 adding local_gotno to global_gotno. We reverse the list and make
4856 it circular since then we'll be able to quickly compute the
4857 beginning of a GOT, by computing the end of its predecessor. To
4858 avoid special cases for the primary GOT, while still preserving
4859 assertions that are valid for both single- and multi-got links,
4860 we arrange for the main got struct to have the right number of
4861 global entries, but set its local_gotno such that the initial
4862 offset of the primary GOT is zero. Remember that the primary GOT
4863 will become the last item in the circular linked list, so it
4864 points back to the master GOT. */
4865 gg->local_gotno = -g->global_gotno;
4866 gg->global_gotno = g->global_gotno;
0f20cc35 4867 gg->tls_gotno = 0;
f4416af6
AO
4868 assign = 0;
4869 gg->next = gg;
4870
4871 do
4872 {
4873 struct mips_got_info *gn;
4874
861fb55a 4875 assign += htab->reserved_gotno;
cb22ccf4 4876 g->assigned_low_gotno = assign;
c224138d
RS
4877 g->local_gotno += assign;
4878 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
cb22ccf4 4879 g->assigned_high_gotno = g->local_gotno - 1;
0f20cc35
DJ
4880 assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4881
ead49a57
RS
4882 /* Take g out of the direct list, and push it onto the reversed
4883 list that gg points to. g->next is guaranteed to be nonnull after
4884 this operation, as required by mips_elf_initialize_tls_index. */
4885 gn = g->next;
4886 g->next = gg->next;
4887 gg->next = g;
4888
0f20cc35
DJ
4889 /* Set up any TLS entries. We always place the TLS entries after
4890 all non-TLS entries. */
4891 g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
72e7511a
RS
4892 tga.g = g;
4893 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4894 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4895 if (!tga.g)
4896 return FALSE;
1fd20d70 4897 BFD_ASSERT (g->tls_assigned_gotno == assign);
f4416af6 4898
ead49a57 4899 /* Move onto the next GOT. It will be a secondary GOT if nonull. */
f4416af6 4900 g = gn;
0626d451 4901
33bb52fb
RS
4902 /* Forbid global symbols in every non-primary GOT from having
4903 lazy-binding stubs. */
0626d451 4904 if (g)
33bb52fb 4905 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
f4416af6
AO
4906 }
4907 while (g);
4908
59b08994 4909 got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
33bb52fb
RS
4910
4911 needed_relocs = 0;
33bb52fb
RS
4912 for (g = gg->next; g && g->next != gg; g = g->next)
4913 {
4914 unsigned int save_assign;
4915
ab361d49
RS
4916 /* Assign offsets to global GOT entries and count how many
4917 relocations they need. */
cb22ccf4
KCY
4918 save_assign = g->assigned_low_gotno;
4919 g->assigned_low_gotno = g->local_gotno;
ab361d49
RS
4920 tga.info = info;
4921 tga.value = MIPS_ELF_GOT_SIZE (abfd);
4922 tga.g = g;
4923 htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
72e7511a
RS
4924 if (!tga.g)
4925 return FALSE;
cb22ccf4
KCY
4926 BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4927 g->assigned_low_gotno = save_assign;
72e7511a 4928
0e1862bb 4929 if (bfd_link_pic (info))
33bb52fb 4930 {
cb22ccf4
KCY
4931 g->relocs += g->local_gotno - g->assigned_low_gotno;
4932 BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
33bb52fb
RS
4933 + g->next->global_gotno
4934 + g->next->tls_gotno
861fb55a 4935 + htab->reserved_gotno);
33bb52fb 4936 }
ab361d49 4937 needed_relocs += g->relocs;
33bb52fb 4938 }
ab361d49 4939 needed_relocs += g->relocs;
33bb52fb
RS
4940
4941 if (needed_relocs)
4942 mips_elf_allocate_dynamic_relocations (dynobj, info,
4943 needed_relocs);
143d77c5 4944
f4416af6
AO
4945 return TRUE;
4946}
143d77c5 4947
b49e97c9
TS
4948\f
4949/* Returns the first relocation of type r_type found, beginning with
4950 RELOCATION. RELEND is one-past-the-end of the relocation table. */
4951
4952static const Elf_Internal_Rela *
9719ad41
RS
4953mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4954 const Elf_Internal_Rela *relocation,
4955 const Elf_Internal_Rela *relend)
b49e97c9 4956{
c000e262
TS
4957 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4958
b49e97c9
TS
4959 while (relocation < relend)
4960 {
c000e262
TS
4961 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4962 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
b49e97c9
TS
4963 return relocation;
4964
4965 ++relocation;
4966 }
4967
4968 /* We didn't find it. */
b49e97c9
TS
4969 return NULL;
4970}
4971
020d7251 4972/* Return whether an input relocation is against a local symbol. */
b49e97c9 4973
b34976b6 4974static bfd_boolean
9719ad41
RS
4975mips_elf_local_relocation_p (bfd *input_bfd,
4976 const Elf_Internal_Rela *relocation,
020d7251 4977 asection **local_sections)
b49e97c9
TS
4978{
4979 unsigned long r_symndx;
4980 Elf_Internal_Shdr *symtab_hdr;
b49e97c9
TS
4981 size_t extsymoff;
4982
4983 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4984 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4985 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4986
4987 if (r_symndx < extsymoff)
b34976b6 4988 return TRUE;
b49e97c9 4989 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
b34976b6 4990 return TRUE;
b49e97c9 4991
b34976b6 4992 return FALSE;
b49e97c9
TS
4993}
4994\f
4995/* Sign-extend VALUE, which has the indicated number of BITS. */
4996
a7ebbfdf 4997bfd_vma
9719ad41 4998_bfd_mips_elf_sign_extend (bfd_vma value, int bits)
b49e97c9
TS
4999{
5000 if (value & ((bfd_vma) 1 << (bits - 1)))
5001 /* VALUE is negative. */
5002 value |= ((bfd_vma) - 1) << bits;
5003
5004 return value;
5005}
5006
5007/* Return non-zero if the indicated VALUE has overflowed the maximum
4cc11e76 5008 range expressible by a signed number with the indicated number of
b49e97c9
TS
5009 BITS. */
5010
b34976b6 5011static bfd_boolean
9719ad41 5012mips_elf_overflow_p (bfd_vma value, int bits)
b49e97c9
TS
5013{
5014 bfd_signed_vma svalue = (bfd_signed_vma) value;
5015
5016 if (svalue > (1 << (bits - 1)) - 1)
5017 /* The value is too big. */
b34976b6 5018 return TRUE;
b49e97c9
TS
5019 else if (svalue < -(1 << (bits - 1)))
5020 /* The value is too small. */
b34976b6 5021 return TRUE;
b49e97c9
TS
5022
5023 /* All is well. */
b34976b6 5024 return FALSE;
b49e97c9
TS
5025}
5026
5027/* Calculate the %high function. */
5028
5029static bfd_vma
9719ad41 5030mips_elf_high (bfd_vma value)
b49e97c9
TS
5031{
5032 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5033}
5034
5035/* Calculate the %higher function. */
5036
5037static bfd_vma
9719ad41 5038mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
b49e97c9
TS
5039{
5040#ifdef BFD64
5041 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5042#else
5043 abort ();
c5ae1840 5044 return MINUS_ONE;
b49e97c9
TS
5045#endif
5046}
5047
5048/* Calculate the %highest function. */
5049
5050static bfd_vma
9719ad41 5051mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
b49e97c9
TS
5052{
5053#ifdef BFD64
b15e6682 5054 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
b49e97c9
TS
5055#else
5056 abort ();
c5ae1840 5057 return MINUS_ONE;
b49e97c9
TS
5058#endif
5059}
5060\f
5061/* Create the .compact_rel section. */
5062
b34976b6 5063static bfd_boolean
9719ad41
RS
5064mips_elf_create_compact_rel_section
5065 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
b49e97c9
TS
5066{
5067 flagword flags;
5068 register asection *s;
5069
3d4d4302 5070 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
b49e97c9
TS
5071 {
5072 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5073 | SEC_READONLY);
5074
3d4d4302 5075 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
b49e97c9 5076 if (s == NULL
b49e97c9
TS
5077 || ! bfd_set_section_alignment (abfd, s,
5078 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 5079 return FALSE;
b49e97c9 5080
eea6121a 5081 s->size = sizeof (Elf32_External_compact_rel);
b49e97c9
TS
5082 }
5083
b34976b6 5084 return TRUE;
b49e97c9
TS
5085}
5086
5087/* Create the .got section to hold the global offset table. */
5088
b34976b6 5089static bfd_boolean
23cc69b6 5090mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
b49e97c9
TS
5091{
5092 flagword flags;
5093 register asection *s;
5094 struct elf_link_hash_entry *h;
14a793b2 5095 struct bfd_link_hash_entry *bh;
0a44bf69
RS
5096 struct mips_elf_link_hash_table *htab;
5097
5098 htab = mips_elf_hash_table (info);
4dfe6ac6 5099 BFD_ASSERT (htab != NULL);
b49e97c9
TS
5100
5101 /* This function may be called more than once. */
23cc69b6
RS
5102 if (htab->sgot)
5103 return TRUE;
b49e97c9
TS
5104
5105 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5106 | SEC_LINKER_CREATED);
5107
72b4917c
TS
5108 /* We have to use an alignment of 2**4 here because this is hardcoded
5109 in the function stub generation and in the linker script. */
87e0a731 5110 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
b49e97c9 5111 if (s == NULL
72b4917c 5112 || ! bfd_set_section_alignment (abfd, s, 4))
b34976b6 5113 return FALSE;
a8028dd0 5114 htab->sgot = s;
b49e97c9
TS
5115
5116 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
5117 linker script because we don't want to define the symbol if we
5118 are not creating a global offset table. */
14a793b2 5119 bh = NULL;
b49e97c9
TS
5120 if (! (_bfd_generic_link_add_one_symbol
5121 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
9719ad41 5122 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 5123 return FALSE;
14a793b2
AM
5124
5125 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
5126 h->non_elf = 0;
5127 h->def_regular = 1;
b49e97c9 5128 h->type = STT_OBJECT;
2f9efdfc 5129 h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
d329bcd1 5130 elf_hash_table (info)->hgot = h;
b49e97c9 5131
0e1862bb 5132 if (bfd_link_pic (info)
c152c796 5133 && ! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 5134 return FALSE;
b49e97c9 5135
3dff0dd1 5136 htab->got_info = mips_elf_create_got_info (abfd);
f0abc2a1 5137 mips_elf_section_data (s)->elf.this_hdr.sh_flags
b49e97c9
TS
5138 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5139
861fb55a 5140 /* We also need a .got.plt section when generating PLTs. */
87e0a731
AM
5141 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5142 SEC_ALLOC | SEC_LOAD
5143 | SEC_HAS_CONTENTS
5144 | SEC_IN_MEMORY
5145 | SEC_LINKER_CREATED);
861fb55a
DJ
5146 if (s == NULL)
5147 return FALSE;
5148 htab->sgotplt = s;
0a44bf69 5149
b34976b6 5150 return TRUE;
b49e97c9 5151}
b49e97c9 5152\f
0a44bf69
RS
5153/* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5154 __GOTT_INDEX__ symbols. These symbols are only special for
5155 shared objects; they are not used in executables. */
5156
5157static bfd_boolean
5158is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5159{
5160 return (mips_elf_hash_table (info)->is_vxworks
0e1862bb 5161 && bfd_link_pic (info)
0a44bf69
RS
5162 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5163 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5164}
861fb55a
DJ
5165
5166/* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5167 require an la25 stub. See also mips_elf_local_pic_function_p,
5168 which determines whether the destination function ever requires a
5169 stub. */
5170
5171static bfd_boolean
8f0c309a
CLT
5172mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5173 bfd_boolean target_is_16_bit_code_p)
861fb55a
DJ
5174{
5175 /* We specifically ignore branches and jumps from EF_PIC objects,
5176 where the onus is on the compiler or programmer to perform any
5177 necessary initialization of $25. Sometimes such initialization
5178 is unnecessary; for example, -mno-shared functions do not use
5179 the incoming value of $25, and may therefore be called directly. */
5180 if (PIC_OBJECT_P (input_bfd))
5181 return FALSE;
5182
5183 switch (r_type)
5184 {
5185 case R_MIPS_26:
5186 case R_MIPS_PC16:
7361da2c
AB
5187 case R_MIPS_PC21_S2:
5188 case R_MIPS_PC26_S2:
df58fc94
RS
5189 case R_MICROMIPS_26_S1:
5190 case R_MICROMIPS_PC7_S1:
5191 case R_MICROMIPS_PC10_S1:
5192 case R_MICROMIPS_PC16_S1:
5193 case R_MICROMIPS_PC23_S2:
861fb55a
DJ
5194 return TRUE;
5195
8f0c309a
CLT
5196 case R_MIPS16_26:
5197 return !target_is_16_bit_code_p;
5198
861fb55a
DJ
5199 default:
5200 return FALSE;
5201 }
5202}
0a44bf69 5203\f
b49e97c9
TS
5204/* Calculate the value produced by the RELOCATION (which comes from
5205 the INPUT_BFD). The ADDEND is the addend to use for this
5206 RELOCATION; RELOCATION->R_ADDEND is ignored.
5207
5208 The result of the relocation calculation is stored in VALUEP.
38a7df63 5209 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
df58fc94 5210 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
b49e97c9
TS
5211
5212 This function returns bfd_reloc_continue if the caller need take no
5213 further action regarding this relocation, bfd_reloc_notsupported if
5214 something goes dramatically wrong, bfd_reloc_overflow if an
5215 overflow occurs, and bfd_reloc_ok to indicate success. */
5216
5217static bfd_reloc_status_type
9719ad41
RS
5218mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5219 asection *input_section,
5220 struct bfd_link_info *info,
5221 const Elf_Internal_Rela *relocation,
5222 bfd_vma addend, reloc_howto_type *howto,
5223 Elf_Internal_Sym *local_syms,
5224 asection **local_sections, bfd_vma *valuep,
38a7df63
CF
5225 const char **namep,
5226 bfd_boolean *cross_mode_jump_p,
9719ad41 5227 bfd_boolean save_addend)
b49e97c9
TS
5228{
5229 /* The eventual value we will return. */
5230 bfd_vma value;
5231 /* The address of the symbol against which the relocation is
5232 occurring. */
5233 bfd_vma symbol = 0;
5234 /* The final GP value to be used for the relocatable, executable, or
5235 shared object file being produced. */
0a61c8c2 5236 bfd_vma gp;
b49e97c9
TS
5237 /* The place (section offset or address) of the storage unit being
5238 relocated. */
5239 bfd_vma p;
5240 /* The value of GP used to create the relocatable object. */
0a61c8c2 5241 bfd_vma gp0;
b49e97c9
TS
5242 /* The offset into the global offset table at which the address of
5243 the relocation entry symbol, adjusted by the addend, resides
5244 during execution. */
5245 bfd_vma g = MINUS_ONE;
5246 /* The section in which the symbol referenced by the relocation is
5247 located. */
5248 asection *sec = NULL;
5249 struct mips_elf_link_hash_entry *h = NULL;
b34976b6 5250 /* TRUE if the symbol referred to by this relocation is a local
b49e97c9 5251 symbol. */
b34976b6
AM
5252 bfd_boolean local_p, was_local_p;
5253 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
5254 bfd_boolean gp_disp_p = FALSE;
bbe506e8
TS
5255 /* TRUE if the symbol referred to by this relocation is
5256 "__gnu_local_gp". */
5257 bfd_boolean gnu_local_gp_p = FALSE;
b49e97c9
TS
5258 Elf_Internal_Shdr *symtab_hdr;
5259 size_t extsymoff;
5260 unsigned long r_symndx;
5261 int r_type;
b34976b6 5262 /* TRUE if overflow occurred during the calculation of the
b49e97c9 5263 relocation value. */
b34976b6
AM
5264 bfd_boolean overflowed_p;
5265 /* TRUE if this relocation refers to a MIPS16 function. */
5266 bfd_boolean target_is_16_bit_code_p = FALSE;
df58fc94 5267 bfd_boolean target_is_micromips_code_p = FALSE;
0a44bf69
RS
5268 struct mips_elf_link_hash_table *htab;
5269 bfd *dynobj;
5270
5271 dynobj = elf_hash_table (info)->dynobj;
5272 htab = mips_elf_hash_table (info);
4dfe6ac6 5273 BFD_ASSERT (htab != NULL);
b49e97c9
TS
5274
5275 /* Parse the relocation. */
5276 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5277 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5278 p = (input_section->output_section->vma
5279 + input_section->output_offset
5280 + relocation->r_offset);
5281
5282 /* Assume that there will be no overflow. */
b34976b6 5283 overflowed_p = FALSE;
b49e97c9
TS
5284
5285 /* Figure out whether or not the symbol is local, and get the offset
5286 used in the array of hash table entries. */
5287 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5288 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
020d7251 5289 local_sections);
bce03d3d 5290 was_local_p = local_p;
b49e97c9
TS
5291 if (! elf_bad_symtab (input_bfd))
5292 extsymoff = symtab_hdr->sh_info;
5293 else
5294 {
5295 /* The symbol table does not follow the rule that local symbols
5296 must come before globals. */
5297 extsymoff = 0;
5298 }
5299
5300 /* Figure out the value of the symbol. */
5301 if (local_p)
5302 {
5303 Elf_Internal_Sym *sym;
5304
5305 sym = local_syms + r_symndx;
5306 sec = local_sections[r_symndx];
5307
5308 symbol = sec->output_section->vma + sec->output_offset;
d4df96e6
L
5309 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5310 || (sec->flags & SEC_MERGE))
b49e97c9 5311 symbol += sym->st_value;
d4df96e6
L
5312 if ((sec->flags & SEC_MERGE)
5313 && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5314 {
5315 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5316 addend -= symbol;
5317 addend += sec->output_section->vma + sec->output_offset;
5318 }
b49e97c9 5319
df58fc94
RS
5320 /* MIPS16/microMIPS text labels should be treated as odd. */
5321 if (ELF_ST_IS_COMPRESSED (sym->st_other))
b49e97c9
TS
5322 ++symbol;
5323
5324 /* Record the name of this symbol, for our caller. */
5325 *namep = bfd_elf_string_from_elf_section (input_bfd,
5326 symtab_hdr->sh_link,
5327 sym->st_name);
5328 if (*namep == '\0')
5329 *namep = bfd_section_name (input_bfd, sec);
5330
30c09090 5331 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
df58fc94 5332 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
b49e97c9
TS
5333 }
5334 else
5335 {
560e09e9
NC
5336 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
5337
b49e97c9
TS
5338 /* For global symbols we look up the symbol in the hash-table. */
5339 h = ((struct mips_elf_link_hash_entry *)
5340 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5341 /* Find the real hash-table entry for this symbol. */
5342 while (h->root.root.type == bfd_link_hash_indirect
5343 || h->root.root.type == bfd_link_hash_warning)
5344 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5345
5346 /* Record the name of this symbol, for our caller. */
5347 *namep = h->root.root.root.string;
5348
5349 /* See if this is the special _gp_disp symbol. Note that such a
5350 symbol must always be a global symbol. */
560e09e9 5351 if (strcmp (*namep, "_gp_disp") == 0
b49e97c9
TS
5352 && ! NEWABI_P (input_bfd))
5353 {
5354 /* Relocations against _gp_disp are permitted only with
5355 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
738e5348 5356 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
b49e97c9
TS
5357 return bfd_reloc_notsupported;
5358
b34976b6 5359 gp_disp_p = TRUE;
b49e97c9 5360 }
bbe506e8
TS
5361 /* See if this is the special _gp symbol. Note that such a
5362 symbol must always be a global symbol. */
5363 else if (strcmp (*namep, "__gnu_local_gp") == 0)
5364 gnu_local_gp_p = TRUE;
5365
5366
b49e97c9
TS
5367 /* If this symbol is defined, calculate its address. Note that
5368 _gp_disp is a magic symbol, always implicitly defined by the
5369 linker, so it's inappropriate to check to see whether or not
5370 its defined. */
5371 else if ((h->root.root.type == bfd_link_hash_defined
5372 || h->root.root.type == bfd_link_hash_defweak)
5373 && h->root.root.u.def.section)
5374 {
5375 sec = h->root.root.u.def.section;
5376 if (sec->output_section)
5377 symbol = (h->root.root.u.def.value
5378 + sec->output_section->vma
5379 + sec->output_offset);
5380 else
5381 symbol = h->root.root.u.def.value;
5382 }
5383 else if (h->root.root.type == bfd_link_hash_undefweak)
5384 /* We allow relocations against undefined weak symbols, giving
5385 it the value zero, so that you can undefined weak functions
5386 and check to see if they exist by looking at their
5387 addresses. */
5388 symbol = 0;
59c2e50f 5389 else if (info->unresolved_syms_in_objects == RM_IGNORE
b49e97c9
TS
5390 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5391 symbol = 0;
a4d0f181
TS
5392 else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5393 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
b49e97c9
TS
5394 {
5395 /* If this is a dynamic link, we should have created a
5396 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5397 in in _bfd_mips_elf_create_dynamic_sections.
5398 Otherwise, we should define the symbol with a value of 0.
5399 FIXME: It should probably get into the symbol table
5400 somehow as well. */
0e1862bb 5401 BFD_ASSERT (! bfd_link_pic (info));
b49e97c9
TS
5402 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5403 symbol = 0;
5404 }
5e2b0d47
NC
5405 else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5406 {
5407 /* This is an optional symbol - an Irix specific extension to the
5408 ELF spec. Ignore it for now.
5409 XXX - FIXME - there is more to the spec for OPTIONAL symbols
5410 than simply ignoring them, but we do not handle this for now.
5411 For information see the "64-bit ELF Object File Specification"
5412 which is available from here:
5413 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
5414 symbol = 0;
5415 }
e7e2196d
MR
5416 else if ((*info->callbacks->undefined_symbol)
5417 (info, h->root.root.root.string, input_bfd,
5418 input_section, relocation->r_offset,
5419 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5420 || ELF_ST_VISIBILITY (h->root.other)))
5421 {
5422 return bfd_reloc_undefined;
5423 }
b49e97c9
TS
5424 else
5425 {
e7e2196d 5426 return bfd_reloc_notsupported;
b49e97c9
TS
5427 }
5428
30c09090 5429 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
1bbce132 5430 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
b49e97c9
TS
5431 }
5432
738e5348
RS
5433 /* If this is a reference to a 16-bit function with a stub, we need
5434 to redirect the relocation to the stub unless:
5435
5436 (a) the relocation is for a MIPS16 JAL;
5437
5438 (b) the relocation is for a MIPS16 PIC call, and there are no
5439 non-MIPS16 uses of the GOT slot; or
5440
5441 (c) the section allows direct references to MIPS16 functions. */
5442 if (r_type != R_MIPS16_26
0e1862bb 5443 && !bfd_link_relocatable (info)
738e5348
RS
5444 && ((h != NULL
5445 && h->fn_stub != NULL
5446 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
b9d58d71 5447 || (local_p
698600e4
AM
5448 && mips_elf_tdata (input_bfd)->local_stubs != NULL
5449 && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
738e5348 5450 && !section_allows_mips16_refs_p (input_section))
b49e97c9
TS
5451 {
5452 /* This is a 32- or 64-bit call to a 16-bit function. We should
5453 have already noticed that we were going to need the
5454 stub. */
5455 if (local_p)
8f0c309a 5456 {
698600e4 5457 sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
8f0c309a
CLT
5458 value = 0;
5459 }
b49e97c9
TS
5460 else
5461 {
5462 BFD_ASSERT (h->need_fn_stub);
8f0c309a
CLT
5463 if (h->la25_stub)
5464 {
5465 /* If a LA25 header for the stub itself exists, point to the
5466 prepended LUI/ADDIU sequence. */
5467 sec = h->la25_stub->stub_section;
5468 value = h->la25_stub->offset;
5469 }
5470 else
5471 {
5472 sec = h->fn_stub;
5473 value = 0;
5474 }
b49e97c9
TS
5475 }
5476
8f0c309a 5477 symbol = sec->output_section->vma + sec->output_offset + value;
f38c2df5
TS
5478 /* The target is 16-bit, but the stub isn't. */
5479 target_is_16_bit_code_p = FALSE;
b49e97c9 5480 }
1bbce132
MR
5481 /* If this is a MIPS16 call with a stub, that is made through the PLT or
5482 to a standard MIPS function, we need to redirect the call to the stub.
5483 Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5484 indirect calls should use an indirect stub instead. */
0e1862bb 5485 else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
b314ec0e 5486 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
b9d58d71 5487 || (local_p
698600e4
AM
5488 && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5489 && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
1bbce132 5490 && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
b49e97c9 5491 {
b9d58d71 5492 if (local_p)
698600e4 5493 sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
b9d58d71 5494 else
b49e97c9 5495 {
b9d58d71
TS
5496 /* If both call_stub and call_fp_stub are defined, we can figure
5497 out which one to use by checking which one appears in the input
5498 file. */
5499 if (h->call_stub != NULL && h->call_fp_stub != NULL)
b49e97c9 5500 {
b9d58d71 5501 asection *o;
68ffbac6 5502
b9d58d71
TS
5503 sec = NULL;
5504 for (o = input_bfd->sections; o != NULL; o = o->next)
b49e97c9 5505 {
b9d58d71
TS
5506 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5507 {
5508 sec = h->call_fp_stub;
5509 break;
5510 }
b49e97c9 5511 }
b9d58d71
TS
5512 if (sec == NULL)
5513 sec = h->call_stub;
b49e97c9 5514 }
b9d58d71 5515 else if (h->call_stub != NULL)
b49e97c9 5516 sec = h->call_stub;
b9d58d71
TS
5517 else
5518 sec = h->call_fp_stub;
5519 }
b49e97c9 5520
eea6121a 5521 BFD_ASSERT (sec->size > 0);
b49e97c9
TS
5522 symbol = sec->output_section->vma + sec->output_offset;
5523 }
861fb55a
DJ
5524 /* If this is a direct call to a PIC function, redirect to the
5525 non-PIC stub. */
5526 else if (h != NULL && h->la25_stub
8f0c309a
CLT
5527 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5528 target_is_16_bit_code_p))
861fb55a
DJ
5529 symbol = (h->la25_stub->stub_section->output_section->vma
5530 + h->la25_stub->stub_section->output_offset
5531 + h->la25_stub->offset);
1bbce132
MR
5532 /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5533 entry is used if a standard PLT entry has also been made. In this
5534 case the symbol will have been set by mips_elf_set_plt_sym_value
5535 to point to the standard PLT entry, so redirect to the compressed
5536 one. */
5537 else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
0e1862bb 5538 && !bfd_link_relocatable (info)
1bbce132
MR
5539 && h != NULL
5540 && h->use_plt_entry
5541 && h->root.plt.plist->comp_offset != MINUS_ONE
5542 && h->root.plt.plist->mips_offset != MINUS_ONE)
5543 {
5544 bfd_boolean micromips_p = MICROMIPS_P (abfd);
5545
5546 sec = htab->splt;
5547 symbol = (sec->output_section->vma
5548 + sec->output_offset
5549 + htab->plt_header_size
5550 + htab->plt_mips_offset
5551 + h->root.plt.plist->comp_offset
5552 + 1);
5553
5554 target_is_16_bit_code_p = !micromips_p;
5555 target_is_micromips_code_p = micromips_p;
5556 }
b49e97c9 5557
df58fc94
RS
5558 /* Make sure MIPS16 and microMIPS are not used together. */
5559 if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5560 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5561 {
5562 (*_bfd_error_handler)
5563 (_("MIPS16 and microMIPS functions cannot call each other"));
5564 return bfd_reloc_notsupported;
5565 }
5566
b49e97c9 5567 /* Calls from 16-bit code to 32-bit code and vice versa require the
df58fc94
RS
5568 mode change. However, we can ignore calls to undefined weak symbols,
5569 which should never be executed at runtime. This exception is important
5570 because the assembly writer may have "known" that any definition of the
5571 symbol would be 16-bit code, and that direct jumps were therefore
5572 acceptable. */
0e1862bb 5573 *cross_mode_jump_p = (!bfd_link_relocatable (info)
df58fc94
RS
5574 && !(h && h->root.root.type == bfd_link_hash_undefweak)
5575 && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5576 || (r_type == R_MICROMIPS_26_S1
5577 && !target_is_micromips_code_p)
5578 || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5579 && (target_is_16_bit_code_p
5580 || target_is_micromips_code_p))));
b49e97c9 5581
c5d6fa44 5582 local_p = (h == NULL || mips_use_local_got_p (info, h));
b49e97c9 5583
0a61c8c2
RS
5584 gp0 = _bfd_get_gp_value (input_bfd);
5585 gp = _bfd_get_gp_value (abfd);
23cc69b6 5586 if (htab->got_info)
a8028dd0 5587 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
0a61c8c2
RS
5588
5589 if (gnu_local_gp_p)
5590 symbol = gp;
5591
df58fc94
RS
5592 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5593 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the
5594 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */
5595 if (got_page_reloc_p (r_type) && !local_p)
020d7251 5596 {
df58fc94
RS
5597 r_type = (micromips_reloc_p (r_type)
5598 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
020d7251
RS
5599 addend = 0;
5600 }
5601
e77760d2 5602 /* If we haven't already determined the GOT offset, and we're going
0a61c8c2 5603 to need it, get it now. */
b49e97c9
TS
5604 switch (r_type)
5605 {
738e5348
RS
5606 case R_MIPS16_CALL16:
5607 case R_MIPS16_GOT16:
b49e97c9
TS
5608 case R_MIPS_CALL16:
5609 case R_MIPS_GOT16:
5610 case R_MIPS_GOT_DISP:
5611 case R_MIPS_GOT_HI16:
5612 case R_MIPS_CALL_HI16:
5613 case R_MIPS_GOT_LO16:
5614 case R_MIPS_CALL_LO16:
df58fc94
RS
5615 case R_MICROMIPS_CALL16:
5616 case R_MICROMIPS_GOT16:
5617 case R_MICROMIPS_GOT_DISP:
5618 case R_MICROMIPS_GOT_HI16:
5619 case R_MICROMIPS_CALL_HI16:
5620 case R_MICROMIPS_GOT_LO16:
5621 case R_MICROMIPS_CALL_LO16:
0f20cc35
DJ
5622 case R_MIPS_TLS_GD:
5623 case R_MIPS_TLS_GOTTPREL:
5624 case R_MIPS_TLS_LDM:
d0f13682
CLT
5625 case R_MIPS16_TLS_GD:
5626 case R_MIPS16_TLS_GOTTPREL:
5627 case R_MIPS16_TLS_LDM:
df58fc94
RS
5628 case R_MICROMIPS_TLS_GD:
5629 case R_MICROMIPS_TLS_GOTTPREL:
5630 case R_MICROMIPS_TLS_LDM:
b49e97c9 5631 /* Find the index into the GOT where this value is located. */
df58fc94 5632 if (tls_ldm_reloc_p (r_type))
0f20cc35 5633 {
0a44bf69 5634 g = mips_elf_local_got_index (abfd, input_bfd, info,
5c18022e 5635 0, 0, NULL, r_type);
0f20cc35
DJ
5636 if (g == MINUS_ONE)
5637 return bfd_reloc_outofrange;
5638 }
5639 else if (!local_p)
b49e97c9 5640 {
0a44bf69
RS
5641 /* On VxWorks, CALL relocations should refer to the .got.plt
5642 entry, which is initialized to point at the PLT stub. */
5643 if (htab->is_vxworks
df58fc94
RS
5644 && (call_hi16_reloc_p (r_type)
5645 || call_lo16_reloc_p (r_type)
738e5348 5646 || call16_reloc_p (r_type)))
0a44bf69
RS
5647 {
5648 BFD_ASSERT (addend == 0);
5649 BFD_ASSERT (h->root.needs_plt);
5650 g = mips_elf_gotplt_index (info, &h->root);
5651 }
5652 else
b49e97c9 5653 {
020d7251 5654 BFD_ASSERT (addend == 0);
13fbec83
RS
5655 g = mips_elf_global_got_index (abfd, info, input_bfd,
5656 &h->root, r_type);
e641e783 5657 if (!TLS_RELOC_P (r_type)
020d7251
RS
5658 && !elf_hash_table (info)->dynamic_sections_created)
5659 /* This is a static link. We must initialize the GOT entry. */
a8028dd0 5660 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
b49e97c9
TS
5661 }
5662 }
0a44bf69 5663 else if (!htab->is_vxworks
738e5348 5664 && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
0a44bf69 5665 /* The calculation below does not involve "g". */
b49e97c9
TS
5666 break;
5667 else
5668 {
5c18022e 5669 g = mips_elf_local_got_index (abfd, input_bfd, info,
0a44bf69 5670 symbol + addend, r_symndx, h, r_type);
b49e97c9
TS
5671 if (g == MINUS_ONE)
5672 return bfd_reloc_outofrange;
5673 }
5674
5675 /* Convert GOT indices to actual offsets. */
a8028dd0 5676 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
b49e97c9 5677 break;
b49e97c9
TS
5678 }
5679
0a44bf69
RS
5680 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5681 symbols are resolved by the loader. Add them to .rela.dyn. */
5682 if (h != NULL && is_gott_symbol (info, &h->root))
5683 {
5684 Elf_Internal_Rela outrel;
5685 bfd_byte *loc;
5686 asection *s;
5687
5688 s = mips_elf_rel_dyn_section (info, FALSE);
5689 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5690
5691 outrel.r_offset = (input_section->output_section->vma
5692 + input_section->output_offset
5693 + relocation->r_offset);
5694 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5695 outrel.r_addend = addend;
5696 bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
9e3313ae
RS
5697
5698 /* If we've written this relocation for a readonly section,
5699 we need to set DF_TEXTREL again, so that we do not delete the
5700 DT_TEXTREL tag. */
5701 if (MIPS_ELF_READONLY_SECTION (input_section))
5702 info->flags |= DF_TEXTREL;
5703
0a44bf69
RS
5704 *valuep = 0;
5705 return bfd_reloc_ok;
5706 }
5707
b49e97c9
TS
5708 /* Figure out what kind of relocation is being performed. */
5709 switch (r_type)
5710 {
5711 case R_MIPS_NONE:
5712 return bfd_reloc_continue;
5713
5714 case R_MIPS_16:
c3eb94b4
MF
5715 if (howto->partial_inplace)
5716 addend = _bfd_mips_elf_sign_extend (addend, 16);
5717 value = symbol + addend;
b49e97c9
TS
5718 overflowed_p = mips_elf_overflow_p (value, 16);
5719 break;
5720
5721 case R_MIPS_32:
5722 case R_MIPS_REL32:
5723 case R_MIPS_64:
0e1862bb 5724 if ((bfd_link_pic (info)
861fb55a 5725 || (htab->root.dynamic_sections_created
b49e97c9 5726 && h != NULL
f5385ebf 5727 && h->root.def_dynamic
861fb55a
DJ
5728 && !h->root.def_regular
5729 && !h->has_static_relocs))
cf35638d 5730 && r_symndx != STN_UNDEF
9a59ad6b
DJ
5731 && (h == NULL
5732 || h->root.root.type != bfd_link_hash_undefweak
5733 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
b49e97c9
TS
5734 && (input_section->flags & SEC_ALLOC) != 0)
5735 {
861fb55a 5736 /* If we're creating a shared library, then we can't know
b49e97c9
TS
5737 where the symbol will end up. So, we create a relocation
5738 record in the output, and leave the job up to the dynamic
861fb55a
DJ
5739 linker. We must do the same for executable references to
5740 shared library symbols, unless we've decided to use copy
5741 relocs or PLTs instead. */
b49e97c9
TS
5742 value = addend;
5743 if (!mips_elf_create_dynamic_relocation (abfd,
5744 info,
5745 relocation,
5746 h,
5747 sec,
5748 symbol,
5749 &value,
5750 input_section))
5751 return bfd_reloc_undefined;
5752 }
5753 else
5754 {
5755 if (r_type != R_MIPS_REL32)
5756 value = symbol + addend;
5757 else
5758 value = addend;
5759 }
5760 value &= howto->dst_mask;
092dcd75
CD
5761 break;
5762
5763 case R_MIPS_PC32:
5764 value = symbol + addend - p;
5765 value &= howto->dst_mask;
b49e97c9
TS
5766 break;
5767
b49e97c9
TS
5768 case R_MIPS16_26:
5769 /* The calculation for R_MIPS16_26 is just the same as for an
5770 R_MIPS_26. It's only the storage of the relocated field into
5771 the output file that's different. That's handled in
5772 mips_elf_perform_relocation. So, we just fall through to the
5773 R_MIPS_26 case here. */
5774 case R_MIPS_26:
df58fc94
RS
5775 case R_MICROMIPS_26_S1:
5776 {
5777 unsigned int shift;
5778
5779 /* Make sure the target of JALX is word-aligned. Bit 0 must be
5780 the correct ISA mode selector and bit 1 must be 0. */
5781 if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5782 return bfd_reloc_outofrange;
5783
5784 /* Shift is 2, unusually, for microMIPS JALX. */
5785 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5786
5787 if (was_local_p)
5788 value = addend | ((p + 4) & (0xfc000000 << shift));
c3eb94b4 5789 else if (howto->partial_inplace)
df58fc94 5790 value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
c3eb94b4
MF
5791 else
5792 value = addend;
df58fc94
RS
5793 value = (value + symbol) >> shift;
5794 if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5795 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5796 value &= howto->dst_mask;
5797 }
b49e97c9
TS
5798 break;
5799
0f20cc35 5800 case R_MIPS_TLS_DTPREL_HI16:
d0f13682 5801 case R_MIPS16_TLS_DTPREL_HI16:
df58fc94 5802 case R_MICROMIPS_TLS_DTPREL_HI16:
0f20cc35
DJ
5803 value = (mips_elf_high (addend + symbol - dtprel_base (info))
5804 & howto->dst_mask);
5805 break;
5806
5807 case R_MIPS_TLS_DTPREL_LO16:
741d6ea8
JM
5808 case R_MIPS_TLS_DTPREL32:
5809 case R_MIPS_TLS_DTPREL64:
d0f13682 5810 case R_MIPS16_TLS_DTPREL_LO16:
df58fc94 5811 case R_MICROMIPS_TLS_DTPREL_LO16:
0f20cc35
DJ
5812 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5813 break;
5814
5815 case R_MIPS_TLS_TPREL_HI16:
d0f13682 5816 case R_MIPS16_TLS_TPREL_HI16:
df58fc94 5817 case R_MICROMIPS_TLS_TPREL_HI16:
0f20cc35
DJ
5818 value = (mips_elf_high (addend + symbol - tprel_base (info))
5819 & howto->dst_mask);
5820 break;
5821
5822 case R_MIPS_TLS_TPREL_LO16:
d0f13682
CLT
5823 case R_MIPS_TLS_TPREL32:
5824 case R_MIPS_TLS_TPREL64:
5825 case R_MIPS16_TLS_TPREL_LO16:
df58fc94 5826 case R_MICROMIPS_TLS_TPREL_LO16:
0f20cc35
DJ
5827 value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5828 break;
5829
b49e97c9 5830 case R_MIPS_HI16:
d6f16593 5831 case R_MIPS16_HI16:
df58fc94 5832 case R_MICROMIPS_HI16:
b49e97c9
TS
5833 if (!gp_disp_p)
5834 {
5835 value = mips_elf_high (addend + symbol);
5836 value &= howto->dst_mask;
5837 }
5838 else
5839 {
d6f16593
MR
5840 /* For MIPS16 ABI code we generate this sequence
5841 0: li $v0,%hi(_gp_disp)
5842 4: addiupc $v1,%lo(_gp_disp)
5843 8: sll $v0,16
5844 12: addu $v0,$v1
5845 14: move $gp,$v0
5846 So the offsets of hi and lo relocs are the same, but the
888b9c01
CLT
5847 base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5848 ADDIUPC clears the low two bits of the instruction address,
5849 so the base is ($t9 + 4) & ~3. */
d6f16593 5850 if (r_type == R_MIPS16_HI16)
888b9c01 5851 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
df58fc94
RS
5852 /* The microMIPS .cpload sequence uses the same assembly
5853 instructions as the traditional psABI version, but the
5854 incoming $t9 has the low bit set. */
5855 else if (r_type == R_MICROMIPS_HI16)
5856 value = mips_elf_high (addend + gp - p - 1);
d6f16593
MR
5857 else
5858 value = mips_elf_high (addend + gp - p);
b49e97c9
TS
5859 overflowed_p = mips_elf_overflow_p (value, 16);
5860 }
5861 break;
5862
5863 case R_MIPS_LO16:
d6f16593 5864 case R_MIPS16_LO16:
df58fc94
RS
5865 case R_MICROMIPS_LO16:
5866 case R_MICROMIPS_HI0_LO16:
b49e97c9
TS
5867 if (!gp_disp_p)
5868 value = (symbol + addend) & howto->dst_mask;
5869 else
5870 {
d6f16593
MR
5871 /* See the comment for R_MIPS16_HI16 above for the reason
5872 for this conditional. */
5873 if (r_type == R_MIPS16_LO16)
888b9c01 5874 value = addend + gp - (p & ~(bfd_vma) 0x3);
df58fc94
RS
5875 else if (r_type == R_MICROMIPS_LO16
5876 || r_type == R_MICROMIPS_HI0_LO16)
5877 value = addend + gp - p + 3;
d6f16593
MR
5878 else
5879 value = addend + gp - p + 4;
b49e97c9 5880 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
8dc1a139 5881 for overflow. But, on, say, IRIX5, relocations against
b49e97c9
TS
5882 _gp_disp are normally generated from the .cpload
5883 pseudo-op. It generates code that normally looks like
5884 this:
5885
5886 lui $gp,%hi(_gp_disp)
5887 addiu $gp,$gp,%lo(_gp_disp)
5888 addu $gp,$gp,$t9
5889
5890 Here $t9 holds the address of the function being called,
5891 as required by the MIPS ELF ABI. The R_MIPS_LO16
5892 relocation can easily overflow in this situation, but the
5893 R_MIPS_HI16 relocation will handle the overflow.
5894 Therefore, we consider this a bug in the MIPS ABI, and do
5895 not check for overflow here. */
5896 }
5897 break;
5898
5899 case R_MIPS_LITERAL:
df58fc94 5900 case R_MICROMIPS_LITERAL:
b49e97c9
TS
5901 /* Because we don't merge literal sections, we can handle this
5902 just like R_MIPS_GPREL16. In the long run, we should merge
5903 shared literals, and then we will need to additional work
5904 here. */
5905
5906 /* Fall through. */
5907
5908 case R_MIPS16_GPREL:
5909 /* The R_MIPS16_GPREL performs the same calculation as
5910 R_MIPS_GPREL16, but stores the relocated bits in a different
5911 order. We don't need to do anything special here; the
5912 differences are handled in mips_elf_perform_relocation. */
5913 case R_MIPS_GPREL16:
df58fc94
RS
5914 case R_MICROMIPS_GPREL7_S2:
5915 case R_MICROMIPS_GPREL16:
bce03d3d
AO
5916 /* Only sign-extend the addend if it was extracted from the
5917 instruction. If the addend was separate, leave it alone,
5918 otherwise we may lose significant bits. */
5919 if (howto->partial_inplace)
a7ebbfdf 5920 addend = _bfd_mips_elf_sign_extend (addend, 16);
bce03d3d
AO
5921 value = symbol + addend - gp;
5922 /* If the symbol was local, any earlier relocatable links will
5923 have adjusted its addend with the gp offset, so compensate
5924 for that now. Don't do it for symbols forced local in this
5925 link, though, since they won't have had the gp offset applied
5926 to them before. */
5927 if (was_local_p)
5928 value += gp0;
538baf8b
AB
5929 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5930 overflowed_p = mips_elf_overflow_p (value, 16);
b49e97c9
TS
5931 break;
5932
738e5348
RS
5933 case R_MIPS16_GOT16:
5934 case R_MIPS16_CALL16:
b49e97c9
TS
5935 case R_MIPS_GOT16:
5936 case R_MIPS_CALL16:
df58fc94
RS
5937 case R_MICROMIPS_GOT16:
5938 case R_MICROMIPS_CALL16:
0a44bf69 5939 /* VxWorks does not have separate local and global semantics for
738e5348 5940 R_MIPS*_GOT16; every relocation evaluates to "G". */
0a44bf69 5941 if (!htab->is_vxworks && local_p)
b49e97c9 5942 {
5c18022e 5943 value = mips_elf_got16_entry (abfd, input_bfd, info,
020d7251 5944 symbol + addend, !was_local_p);
b49e97c9
TS
5945 if (value == MINUS_ONE)
5946 return bfd_reloc_outofrange;
5947 value
a8028dd0 5948 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
b49e97c9
TS
5949 overflowed_p = mips_elf_overflow_p (value, 16);
5950 break;
5951 }
5952
5953 /* Fall through. */
5954
0f20cc35
DJ
5955 case R_MIPS_TLS_GD:
5956 case R_MIPS_TLS_GOTTPREL:
5957 case R_MIPS_TLS_LDM:
b49e97c9 5958 case R_MIPS_GOT_DISP:
d0f13682
CLT
5959 case R_MIPS16_TLS_GD:
5960 case R_MIPS16_TLS_GOTTPREL:
5961 case R_MIPS16_TLS_LDM:
df58fc94
RS
5962 case R_MICROMIPS_TLS_GD:
5963 case R_MICROMIPS_TLS_GOTTPREL:
5964 case R_MICROMIPS_TLS_LDM:
5965 case R_MICROMIPS_GOT_DISP:
b49e97c9
TS
5966 value = g;
5967 overflowed_p = mips_elf_overflow_p (value, 16);
5968 break;
5969
5970 case R_MIPS_GPREL32:
bce03d3d
AO
5971 value = (addend + symbol + gp0 - gp);
5972 if (!save_addend)
5973 value &= howto->dst_mask;
b49e97c9
TS
5974 break;
5975
5976 case R_MIPS_PC16:
bad36eac 5977 case R_MIPS_GNU_REL16_S2:
c3eb94b4
MF
5978 if (howto->partial_inplace)
5979 addend = _bfd_mips_elf_sign_extend (addend, 18);
5980
5981 if ((symbol + addend) & 3)
5982 return bfd_reloc_outofrange;
5983
5984 value = symbol + addend - p;
538baf8b
AB
5985 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5986 overflowed_p = mips_elf_overflow_p (value, 18);
37caec6b
TS
5987 value >>= howto->rightshift;
5988 value &= howto->dst_mask;
b49e97c9
TS
5989 break;
5990
7361da2c
AB
5991 case R_MIPS_PC21_S2:
5992 if (howto->partial_inplace)
5993 addend = _bfd_mips_elf_sign_extend (addend, 23);
5994
5995 if ((symbol + addend) & 3)
5996 return bfd_reloc_outofrange;
5997
5998 value = symbol + addend - p;
538baf8b
AB
5999 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6000 overflowed_p = mips_elf_overflow_p (value, 23);
7361da2c
AB
6001 value >>= howto->rightshift;
6002 value &= howto->dst_mask;
6003 break;
6004
6005 case R_MIPS_PC26_S2:
6006 if (howto->partial_inplace)
6007 addend = _bfd_mips_elf_sign_extend (addend, 28);
6008
6009 if ((symbol + addend) & 3)
6010 return bfd_reloc_outofrange;
6011
6012 value = symbol + addend - p;
538baf8b
AB
6013 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6014 overflowed_p = mips_elf_overflow_p (value, 28);
7361da2c
AB
6015 value >>= howto->rightshift;
6016 value &= howto->dst_mask;
6017 break;
6018
6019 case R_MIPS_PC18_S3:
6020 if (howto->partial_inplace)
6021 addend = _bfd_mips_elf_sign_extend (addend, 21);
6022
6023 if ((symbol + addend) & 7)
6024 return bfd_reloc_outofrange;
6025
6026 value = symbol + addend - ((p | 7) ^ 7);
538baf8b
AB
6027 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6028 overflowed_p = mips_elf_overflow_p (value, 21);
7361da2c
AB
6029 value >>= howto->rightshift;
6030 value &= howto->dst_mask;
6031 break;
6032
6033 case R_MIPS_PC19_S2:
6034 if (howto->partial_inplace)
6035 addend = _bfd_mips_elf_sign_extend (addend, 21);
6036
6037 if ((symbol + addend) & 3)
6038 return bfd_reloc_outofrange;
6039
6040 value = symbol + addend - p;
538baf8b
AB
6041 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6042 overflowed_p = mips_elf_overflow_p (value, 21);
7361da2c
AB
6043 value >>= howto->rightshift;
6044 value &= howto->dst_mask;
6045 break;
6046
6047 case R_MIPS_PCHI16:
6048 value = mips_elf_high (symbol + addend - p);
538baf8b
AB
6049 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6050 overflowed_p = mips_elf_overflow_p (value, 16);
7361da2c
AB
6051 value &= howto->dst_mask;
6052 break;
6053
6054 case R_MIPS_PCLO16:
6055 if (howto->partial_inplace)
6056 addend = _bfd_mips_elf_sign_extend (addend, 16);
6057 value = symbol + addend - p;
6058 value &= howto->dst_mask;
6059 break;
6060
df58fc94 6061 case R_MICROMIPS_PC7_S1:
c3eb94b4
MF
6062 if (howto->partial_inplace)
6063 addend = _bfd_mips_elf_sign_extend (addend, 8);
6064 value = symbol + addend - p;
538baf8b
AB
6065 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6066 overflowed_p = mips_elf_overflow_p (value, 8);
df58fc94
RS
6067 value >>= howto->rightshift;
6068 value &= howto->dst_mask;
6069 break;
6070
6071 case R_MICROMIPS_PC10_S1:
c3eb94b4
MF
6072 if (howto->partial_inplace)
6073 addend = _bfd_mips_elf_sign_extend (addend, 11);
6074 value = symbol + addend - p;
538baf8b
AB
6075 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6076 overflowed_p = mips_elf_overflow_p (value, 11);
df58fc94
RS
6077 value >>= howto->rightshift;
6078 value &= howto->dst_mask;
6079 break;
6080
6081 case R_MICROMIPS_PC16_S1:
c3eb94b4
MF
6082 if (howto->partial_inplace)
6083 addend = _bfd_mips_elf_sign_extend (addend, 17);
6084 value = symbol + addend - p;
538baf8b
AB
6085 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6086 overflowed_p = mips_elf_overflow_p (value, 17);
df58fc94
RS
6087 value >>= howto->rightshift;
6088 value &= howto->dst_mask;
6089 break;
6090
6091 case R_MICROMIPS_PC23_S2:
c3eb94b4
MF
6092 if (howto->partial_inplace)
6093 addend = _bfd_mips_elf_sign_extend (addend, 25);
6094 value = symbol + addend - ((p | 3) ^ 3);
538baf8b
AB
6095 if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6096 overflowed_p = mips_elf_overflow_p (value, 25);
df58fc94
RS
6097 value >>= howto->rightshift;
6098 value &= howto->dst_mask;
6099 break;
6100
b49e97c9
TS
6101 case R_MIPS_GOT_HI16:
6102 case R_MIPS_CALL_HI16:
df58fc94
RS
6103 case R_MICROMIPS_GOT_HI16:
6104 case R_MICROMIPS_CALL_HI16:
b49e97c9
TS
6105 /* We're allowed to handle these two relocations identically.
6106 The dynamic linker is allowed to handle the CALL relocations
6107 differently by creating a lazy evaluation stub. */
6108 value = g;
6109 value = mips_elf_high (value);
6110 value &= howto->dst_mask;
6111 break;
6112
6113 case R_MIPS_GOT_LO16:
6114 case R_MIPS_CALL_LO16:
df58fc94
RS
6115 case R_MICROMIPS_GOT_LO16:
6116 case R_MICROMIPS_CALL_LO16:
b49e97c9
TS
6117 value = g & howto->dst_mask;
6118 break;
6119
6120 case R_MIPS_GOT_PAGE:
df58fc94 6121 case R_MICROMIPS_GOT_PAGE:
5c18022e 6122 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
b49e97c9
TS
6123 if (value == MINUS_ONE)
6124 return bfd_reloc_outofrange;
a8028dd0 6125 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
b49e97c9
TS
6126 overflowed_p = mips_elf_overflow_p (value, 16);
6127 break;
6128
6129 case R_MIPS_GOT_OFST:
df58fc94 6130 case R_MICROMIPS_GOT_OFST:
93a2b7ae 6131 if (local_p)
5c18022e 6132 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
0fdc1bf1
AO
6133 else
6134 value = addend;
b49e97c9
TS
6135 overflowed_p = mips_elf_overflow_p (value, 16);
6136 break;
6137
6138 case R_MIPS_SUB:
df58fc94 6139 case R_MICROMIPS_SUB:
b49e97c9
TS
6140 value = symbol - addend;
6141 value &= howto->dst_mask;
6142 break;
6143
6144 case R_MIPS_HIGHER:
df58fc94 6145 case R_MICROMIPS_HIGHER:
b49e97c9
TS
6146 value = mips_elf_higher (addend + symbol);
6147 value &= howto->dst_mask;
6148 break;
6149
6150 case R_MIPS_HIGHEST:
df58fc94 6151 case R_MICROMIPS_HIGHEST:
b49e97c9
TS
6152 value = mips_elf_highest (addend + symbol);
6153 value &= howto->dst_mask;
6154 break;
6155
6156 case R_MIPS_SCN_DISP:
df58fc94 6157 case R_MICROMIPS_SCN_DISP:
b49e97c9
TS
6158 value = symbol + addend - sec->output_offset;
6159 value &= howto->dst_mask;
6160 break;
6161
b49e97c9 6162 case R_MIPS_JALR:
df58fc94 6163 case R_MICROMIPS_JALR:
1367d393
ILT
6164 /* This relocation is only a hint. In some cases, we optimize
6165 it into a bal instruction. But we don't try to optimize
5bbc5ae7
AN
6166 when the symbol does not resolve locally. */
6167 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
1367d393
ILT
6168 return bfd_reloc_continue;
6169 value = symbol + addend;
6170 break;
b49e97c9 6171
1367d393 6172 case R_MIPS_PJUMP:
b49e97c9
TS
6173 case R_MIPS_GNU_VTINHERIT:
6174 case R_MIPS_GNU_VTENTRY:
6175 /* We don't do anything with these at present. */
6176 return bfd_reloc_continue;
6177
6178 default:
6179 /* An unrecognized relocation type. */
6180 return bfd_reloc_notsupported;
6181 }
6182
6183 /* Store the VALUE for our caller. */
6184 *valuep = value;
6185 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6186}
6187
6188/* Obtain the field relocated by RELOCATION. */
6189
6190static bfd_vma
9719ad41
RS
6191mips_elf_obtain_contents (reloc_howto_type *howto,
6192 const Elf_Internal_Rela *relocation,
6193 bfd *input_bfd, bfd_byte *contents)
b49e97c9 6194{
6346d5ca 6195 bfd_vma x = 0;
b49e97c9 6196 bfd_byte *location = contents + relocation->r_offset;
6346d5ca 6197 unsigned int size = bfd_get_reloc_size (howto);
b49e97c9
TS
6198
6199 /* Obtain the bytes. */
6346d5ca
AM
6200 if (size != 0)
6201 x = bfd_get (8 * size, input_bfd, location);
b49e97c9 6202
b49e97c9
TS
6203 return x;
6204}
6205
6206/* It has been determined that the result of the RELOCATION is the
6207 VALUE. Use HOWTO to place VALUE into the output file at the
6208 appropriate position. The SECTION is the section to which the
68ffbac6 6209 relocation applies.
38a7df63 6210 CROSS_MODE_JUMP_P is true if the relocation field
df58fc94 6211 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
b49e97c9 6212
b34976b6 6213 Returns FALSE if anything goes wrong. */
b49e97c9 6214
b34976b6 6215static bfd_boolean
9719ad41
RS
6216mips_elf_perform_relocation (struct bfd_link_info *info,
6217 reloc_howto_type *howto,
6218 const Elf_Internal_Rela *relocation,
6219 bfd_vma value, bfd *input_bfd,
6220 asection *input_section, bfd_byte *contents,
38a7df63 6221 bfd_boolean cross_mode_jump_p)
b49e97c9
TS
6222{
6223 bfd_vma x;
6224 bfd_byte *location;
6225 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6346d5ca 6226 unsigned int size;
b49e97c9
TS
6227
6228 /* Figure out where the relocation is occurring. */
6229 location = contents + relocation->r_offset;
6230
df58fc94 6231 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
d6f16593 6232
b49e97c9
TS
6233 /* Obtain the current value. */
6234 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6235
6236 /* Clear the field we are setting. */
6237 x &= ~howto->dst_mask;
6238
b49e97c9
TS
6239 /* Set the field. */
6240 x |= (value & howto->dst_mask);
6241
6242 /* If required, turn JAL into JALX. */
38a7df63 6243 if (cross_mode_jump_p && jal_reloc_p (r_type))
b49e97c9 6244 {
b34976b6 6245 bfd_boolean ok;
b49e97c9
TS
6246 bfd_vma opcode = x >> 26;
6247 bfd_vma jalx_opcode;
6248
6249 /* Check to see if the opcode is already JAL or JALX. */
6250 if (r_type == R_MIPS16_26)
6251 {
6252 ok = ((opcode == 0x6) || (opcode == 0x7));
6253 jalx_opcode = 0x7;
6254 }
df58fc94
RS
6255 else if (r_type == R_MICROMIPS_26_S1)
6256 {
6257 ok = ((opcode == 0x3d) || (opcode == 0x3c));
6258 jalx_opcode = 0x3c;
6259 }
b49e97c9
TS
6260 else
6261 {
6262 ok = ((opcode == 0x3) || (opcode == 0x1d));
6263 jalx_opcode = 0x1d;
6264 }
6265
3bdf9505
MR
6266 /* If the opcode is not JAL or JALX, there's a problem. We cannot
6267 convert J or JALS to JALX. */
b49e97c9
TS
6268 if (!ok)
6269 {
6270 (*_bfd_error_handler)
3bdf9505 6271 (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
d003868e
AM
6272 input_bfd,
6273 input_section,
b49e97c9
TS
6274 (unsigned long) relocation->r_offset);
6275 bfd_set_error (bfd_error_bad_value);
b34976b6 6276 return FALSE;
b49e97c9
TS
6277 }
6278
6279 /* Make this the JALX opcode. */
6280 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6281 }
6282
38a7df63
CF
6283 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6284 range. */
0e1862bb 6285 if (!bfd_link_relocatable (info)
38a7df63 6286 && !cross_mode_jump_p
cd8d5a82
CF
6287 && ((JAL_TO_BAL_P (input_bfd)
6288 && r_type == R_MIPS_26
6289 && (x >> 26) == 0x3) /* jal addr */
6290 || (JALR_TO_BAL_P (input_bfd)
6291 && r_type == R_MIPS_JALR
38a7df63
CF
6292 && x == 0x0320f809) /* jalr t9 */
6293 || (JR_TO_B_P (input_bfd)
6294 && r_type == R_MIPS_JALR
6295 && x == 0x03200008))) /* jr t9 */
1367d393
ILT
6296 {
6297 bfd_vma addr;
6298 bfd_vma dest;
6299 bfd_signed_vma off;
6300
6301 addr = (input_section->output_section->vma
6302 + input_section->output_offset
6303 + relocation->r_offset
6304 + 4);
6305 if (r_type == R_MIPS_26)
6306 dest = (value << 2) | ((addr >> 28) << 28);
6307 else
6308 dest = value;
6309 off = dest - addr;
6310 if (off <= 0x1ffff && off >= -0x20000)
38a7df63
CF
6311 {
6312 if (x == 0x03200008) /* jr t9 */
6313 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */
6314 else
6315 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */
6316 }
1367d393
ILT
6317 }
6318
b49e97c9 6319 /* Put the value into the output. */
6346d5ca
AM
6320 size = bfd_get_reloc_size (howto);
6321 if (size != 0)
6322 bfd_put (8 * size, input_bfd, x, location);
d6f16593 6323
0e1862bb 6324 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
df58fc94 6325 location);
d6f16593 6326
b34976b6 6327 return TRUE;
b49e97c9 6328}
b49e97c9 6329\f
b49e97c9
TS
6330/* Create a rel.dyn relocation for the dynamic linker to resolve. REL
6331 is the original relocation, which is now being transformed into a
6332 dynamic relocation. The ADDENDP is adjusted if necessary; the
6333 caller should store the result in place of the original addend. */
6334
b34976b6 6335static bfd_boolean
9719ad41
RS
6336mips_elf_create_dynamic_relocation (bfd *output_bfd,
6337 struct bfd_link_info *info,
6338 const Elf_Internal_Rela *rel,
6339 struct mips_elf_link_hash_entry *h,
6340 asection *sec, bfd_vma symbol,
6341 bfd_vma *addendp, asection *input_section)
b49e97c9 6342{
947216bf 6343 Elf_Internal_Rela outrel[3];
b49e97c9
TS
6344 asection *sreloc;
6345 bfd *dynobj;
6346 int r_type;
5d41f0b6
RS
6347 long indx;
6348 bfd_boolean defined_p;
0a44bf69 6349 struct mips_elf_link_hash_table *htab;
b49e97c9 6350
0a44bf69 6351 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
6352 BFD_ASSERT (htab != NULL);
6353
b49e97c9
TS
6354 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6355 dynobj = elf_hash_table (info)->dynobj;
0a44bf69 6356 sreloc = mips_elf_rel_dyn_section (info, FALSE);
b49e97c9
TS
6357 BFD_ASSERT (sreloc != NULL);
6358 BFD_ASSERT (sreloc->contents != NULL);
6359 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
eea6121a 6360 < sreloc->size);
b49e97c9 6361
b49e97c9
TS
6362 outrel[0].r_offset =
6363 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
9ddf8309
TS
6364 if (ABI_64_P (output_bfd))
6365 {
6366 outrel[1].r_offset =
6367 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6368 outrel[2].r_offset =
6369 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6370 }
b49e97c9 6371
c5ae1840 6372 if (outrel[0].r_offset == MINUS_ONE)
0d591ff7 6373 /* The relocation field has been deleted. */
5d41f0b6
RS
6374 return TRUE;
6375
6376 if (outrel[0].r_offset == MINUS_TWO)
0d591ff7
RS
6377 {
6378 /* The relocation field has been converted into a relative value of
6379 some sort. Functions like _bfd_elf_write_section_eh_frame expect
6380 the field to be fully relocated, so add in the symbol's value. */
0d591ff7 6381 *addendp += symbol;
5d41f0b6 6382 return TRUE;
0d591ff7 6383 }
b49e97c9 6384
5d41f0b6
RS
6385 /* We must now calculate the dynamic symbol table index to use
6386 in the relocation. */
d4a77f3f 6387 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
5d41f0b6 6388 {
020d7251 6389 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
5d41f0b6
RS
6390 indx = h->root.dynindx;
6391 if (SGI_COMPAT (output_bfd))
6392 defined_p = h->root.def_regular;
6393 else
6394 /* ??? glibc's ld.so just adds the final GOT entry to the
6395 relocation field. It therefore treats relocs against
6396 defined symbols in the same way as relocs against
6397 undefined symbols. */
6398 defined_p = FALSE;
6399 }
b49e97c9
TS
6400 else
6401 {
5d41f0b6
RS
6402 if (sec != NULL && bfd_is_abs_section (sec))
6403 indx = 0;
6404 else if (sec == NULL || sec->owner == NULL)
fdd07405 6405 {
5d41f0b6
RS
6406 bfd_set_error (bfd_error_bad_value);
6407 return FALSE;
b49e97c9
TS
6408 }
6409 else
6410 {
5d41f0b6 6411 indx = elf_section_data (sec->output_section)->dynindx;
74541ad4
AM
6412 if (indx == 0)
6413 {
6414 asection *osec = htab->root.text_index_section;
6415 indx = elf_section_data (osec)->dynindx;
6416 }
5d41f0b6
RS
6417 if (indx == 0)
6418 abort ();
b49e97c9
TS
6419 }
6420
5d41f0b6
RS
6421 /* Instead of generating a relocation using the section
6422 symbol, we may as well make it a fully relative
6423 relocation. We want to avoid generating relocations to
6424 local symbols because we used to generate them
6425 incorrectly, without adding the original symbol value,
6426 which is mandated by the ABI for section symbols. In
6427 order to give dynamic loaders and applications time to
6428 phase out the incorrect use, we refrain from emitting
6429 section-relative relocations. It's not like they're
6430 useful, after all. This should be a bit more efficient
6431 as well. */
6432 /* ??? Although this behavior is compatible with glibc's ld.so,
6433 the ABI says that relocations against STN_UNDEF should have
6434 a symbol value of 0. Irix rld honors this, so relocations
6435 against STN_UNDEF have no effect. */
6436 if (!SGI_COMPAT (output_bfd))
6437 indx = 0;
6438 defined_p = TRUE;
b49e97c9
TS
6439 }
6440
5d41f0b6
RS
6441 /* If the relocation was previously an absolute relocation and
6442 this symbol will not be referred to by the relocation, we must
6443 adjust it by the value we give it in the dynamic symbol table.
6444 Otherwise leave the job up to the dynamic linker. */
6445 if (defined_p && r_type != R_MIPS_REL32)
6446 *addendp += symbol;
6447
0a44bf69
RS
6448 if (htab->is_vxworks)
6449 /* VxWorks uses non-relative relocations for this. */
6450 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6451 else
6452 /* The relocation is always an REL32 relocation because we don't
6453 know where the shared library will wind up at load-time. */
6454 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6455 R_MIPS_REL32);
6456
5d41f0b6
RS
6457 /* For strict adherence to the ABI specification, we should
6458 generate a R_MIPS_64 relocation record by itself before the
6459 _REL32/_64 record as well, such that the addend is read in as
6460 a 64-bit value (REL32 is a 32-bit relocation, after all).
6461 However, since none of the existing ELF64 MIPS dynamic
6462 loaders seems to care, we don't waste space with these
6463 artificial relocations. If this turns out to not be true,
6464 mips_elf_allocate_dynamic_relocation() should be tweaked so
6465 as to make room for a pair of dynamic relocations per
6466 invocation if ABI_64_P, and here we should generate an
6467 additional relocation record with R_MIPS_64 by itself for a
6468 NULL symbol before this relocation record. */
6469 outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6470 ABI_64_P (output_bfd)
6471 ? R_MIPS_64
6472 : R_MIPS_NONE);
6473 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6474
6475 /* Adjust the output offset of the relocation to reference the
6476 correct location in the output file. */
6477 outrel[0].r_offset += (input_section->output_section->vma
6478 + input_section->output_offset);
6479 outrel[1].r_offset += (input_section->output_section->vma
6480 + input_section->output_offset);
6481 outrel[2].r_offset += (input_section->output_section->vma
6482 + input_section->output_offset);
6483
b49e97c9
TS
6484 /* Put the relocation back out. We have to use the special
6485 relocation outputter in the 64-bit case since the 64-bit
6486 relocation format is non-standard. */
6487 if (ABI_64_P (output_bfd))
6488 {
6489 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6490 (output_bfd, &outrel[0],
6491 (sreloc->contents
6492 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6493 }
0a44bf69
RS
6494 else if (htab->is_vxworks)
6495 {
6496 /* VxWorks uses RELA rather than REL dynamic relocations. */
6497 outrel[0].r_addend = *addendp;
6498 bfd_elf32_swap_reloca_out
6499 (output_bfd, &outrel[0],
6500 (sreloc->contents
6501 + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6502 }
b49e97c9 6503 else
947216bf
AM
6504 bfd_elf32_swap_reloc_out
6505 (output_bfd, &outrel[0],
6506 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
b49e97c9 6507
b49e97c9
TS
6508 /* We've now added another relocation. */
6509 ++sreloc->reloc_count;
6510
6511 /* Make sure the output section is writable. The dynamic linker
6512 will be writing to it. */
6513 elf_section_data (input_section->output_section)->this_hdr.sh_flags
6514 |= SHF_WRITE;
6515
6516 /* On IRIX5, make an entry of compact relocation info. */
5d41f0b6 6517 if (IRIX_COMPAT (output_bfd) == ict_irix5)
b49e97c9 6518 {
3d4d4302 6519 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
b49e97c9
TS
6520 bfd_byte *cr;
6521
6522 if (scpt)
6523 {
6524 Elf32_crinfo cptrel;
6525
6526 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6527 cptrel.vaddr = (rel->r_offset
6528 + input_section->output_section->vma
6529 + input_section->output_offset);
6530 if (r_type == R_MIPS_REL32)
6531 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6532 else
6533 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6534 mips_elf_set_cr_dist2to (cptrel, 0);
6535 cptrel.konst = *addendp;
6536
6537 cr = (scpt->contents
6538 + sizeof (Elf32_External_compact_rel));
abc0f8d0 6539 mips_elf_set_cr_relvaddr (cptrel, 0);
b49e97c9
TS
6540 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6541 ((Elf32_External_crinfo *) cr
6542 + scpt->reloc_count));
6543 ++scpt->reloc_count;
6544 }
6545 }
6546
943284cc
DJ
6547 /* If we've written this relocation for a readonly section,
6548 we need to set DF_TEXTREL again, so that we do not delete the
6549 DT_TEXTREL tag. */
6550 if (MIPS_ELF_READONLY_SECTION (input_section))
6551 info->flags |= DF_TEXTREL;
6552
b34976b6 6553 return TRUE;
b49e97c9
TS
6554}
6555\f
b49e97c9
TS
6556/* Return the MACH for a MIPS e_flags value. */
6557
6558unsigned long
9719ad41 6559_bfd_elf_mips_mach (flagword flags)
b49e97c9
TS
6560{
6561 switch (flags & EF_MIPS_MACH)
6562 {
6563 case E_MIPS_MACH_3900:
6564 return bfd_mach_mips3900;
6565
6566 case E_MIPS_MACH_4010:
6567 return bfd_mach_mips4010;
6568
6569 case E_MIPS_MACH_4100:
6570 return bfd_mach_mips4100;
6571
6572 case E_MIPS_MACH_4111:
6573 return bfd_mach_mips4111;
6574
00707a0e
RS
6575 case E_MIPS_MACH_4120:
6576 return bfd_mach_mips4120;
6577
b49e97c9
TS
6578 case E_MIPS_MACH_4650:
6579 return bfd_mach_mips4650;
6580
00707a0e
RS
6581 case E_MIPS_MACH_5400:
6582 return bfd_mach_mips5400;
6583
6584 case E_MIPS_MACH_5500:
6585 return bfd_mach_mips5500;
6586
e407c74b
NC
6587 case E_MIPS_MACH_5900:
6588 return bfd_mach_mips5900;
6589
0d2e43ed
ILT
6590 case E_MIPS_MACH_9000:
6591 return bfd_mach_mips9000;
6592
b49e97c9
TS
6593 case E_MIPS_MACH_SB1:
6594 return bfd_mach_mips_sb1;
6595
350cc38d
MS
6596 case E_MIPS_MACH_LS2E:
6597 return bfd_mach_mips_loongson_2e;
6598
6599 case E_MIPS_MACH_LS2F:
6600 return bfd_mach_mips_loongson_2f;
6601
fd503541
NC
6602 case E_MIPS_MACH_LS3A:
6603 return bfd_mach_mips_loongson_3a;
6604
2c629856
N
6605 case E_MIPS_MACH_OCTEON3:
6606 return bfd_mach_mips_octeon3;
6607
432233b3
AP
6608 case E_MIPS_MACH_OCTEON2:
6609 return bfd_mach_mips_octeon2;
6610
6f179bd0
AN
6611 case E_MIPS_MACH_OCTEON:
6612 return bfd_mach_mips_octeon;
6613
52b6b6b9
JM
6614 case E_MIPS_MACH_XLR:
6615 return bfd_mach_mips_xlr;
6616
b49e97c9
TS
6617 default:
6618 switch (flags & EF_MIPS_ARCH)
6619 {
6620 default:
6621 case E_MIPS_ARCH_1:
6622 return bfd_mach_mips3000;
b49e97c9
TS
6623
6624 case E_MIPS_ARCH_2:
6625 return bfd_mach_mips6000;
b49e97c9
TS
6626
6627 case E_MIPS_ARCH_3:
6628 return bfd_mach_mips4000;
b49e97c9
TS
6629
6630 case E_MIPS_ARCH_4:
6631 return bfd_mach_mips8000;
b49e97c9
TS
6632
6633 case E_MIPS_ARCH_5:
6634 return bfd_mach_mips5;
b49e97c9
TS
6635
6636 case E_MIPS_ARCH_32:
6637 return bfd_mach_mipsisa32;
b49e97c9
TS
6638
6639 case E_MIPS_ARCH_64:
6640 return bfd_mach_mipsisa64;
af7ee8bf
CD
6641
6642 case E_MIPS_ARCH_32R2:
6643 return bfd_mach_mipsisa32r2;
5f74bc13
CD
6644
6645 case E_MIPS_ARCH_64R2:
6646 return bfd_mach_mipsisa64r2;
7361da2c
AB
6647
6648 case E_MIPS_ARCH_32R6:
6649 return bfd_mach_mipsisa32r6;
6650
6651 case E_MIPS_ARCH_64R6:
6652 return bfd_mach_mipsisa64r6;
b49e97c9
TS
6653 }
6654 }
6655
6656 return 0;
6657}
6658
6659/* Return printable name for ABI. */
6660
6661static INLINE char *
9719ad41 6662elf_mips_abi_name (bfd *abfd)
b49e97c9
TS
6663{
6664 flagword flags;
6665
6666 flags = elf_elfheader (abfd)->e_flags;
6667 switch (flags & EF_MIPS_ABI)
6668 {
6669 case 0:
6670 if (ABI_N32_P (abfd))
6671 return "N32";
6672 else if (ABI_64_P (abfd))
6673 return "64";
6674 else
6675 return "none";
6676 case E_MIPS_ABI_O32:
6677 return "O32";
6678 case E_MIPS_ABI_O64:
6679 return "O64";
6680 case E_MIPS_ABI_EABI32:
6681 return "EABI32";
6682 case E_MIPS_ABI_EABI64:
6683 return "EABI64";
6684 default:
6685 return "unknown abi";
6686 }
6687}
6688\f
6689/* MIPS ELF uses two common sections. One is the usual one, and the
6690 other is for small objects. All the small objects are kept
6691 together, and then referenced via the gp pointer, which yields
6692 faster assembler code. This is what we use for the small common
6693 section. This approach is copied from ecoff.c. */
6694static asection mips_elf_scom_section;
6695static asymbol mips_elf_scom_symbol;
6696static asymbol *mips_elf_scom_symbol_ptr;
6697
6698/* MIPS ELF also uses an acommon section, which represents an
6699 allocated common symbol which may be overridden by a
6700 definition in a shared library. */
6701static asection mips_elf_acom_section;
6702static asymbol mips_elf_acom_symbol;
6703static asymbol *mips_elf_acom_symbol_ptr;
6704
738e5348 6705/* This is used for both the 32-bit and the 64-bit ABI. */
b49e97c9
TS
6706
6707void
9719ad41 6708_bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
b49e97c9
TS
6709{
6710 elf_symbol_type *elfsym;
6711
738e5348 6712 /* Handle the special MIPS section numbers that a symbol may use. */
b49e97c9
TS
6713 elfsym = (elf_symbol_type *) asym;
6714 switch (elfsym->internal_elf_sym.st_shndx)
6715 {
6716 case SHN_MIPS_ACOMMON:
6717 /* This section is used in a dynamically linked executable file.
6718 It is an allocated common section. The dynamic linker can
6719 either resolve these symbols to something in a shared
6720 library, or it can just leave them here. For our purposes,
6721 we can consider these symbols to be in a new section. */
6722 if (mips_elf_acom_section.name == NULL)
6723 {
6724 /* Initialize the acommon section. */
6725 mips_elf_acom_section.name = ".acommon";
6726 mips_elf_acom_section.flags = SEC_ALLOC;
6727 mips_elf_acom_section.output_section = &mips_elf_acom_section;
6728 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6729 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6730 mips_elf_acom_symbol.name = ".acommon";
6731 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6732 mips_elf_acom_symbol.section = &mips_elf_acom_section;
6733 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6734 }
6735 asym->section = &mips_elf_acom_section;
6736 break;
6737
6738 case SHN_COMMON:
6739 /* Common symbols less than the GP size are automatically
6740 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
6741 if (asym->value > elf_gp_size (abfd)
b59eed79 6742 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
b49e97c9
TS
6743 || IRIX_COMPAT (abfd) == ict_irix6)
6744 break;
6745 /* Fall through. */
6746 case SHN_MIPS_SCOMMON:
6747 if (mips_elf_scom_section.name == NULL)
6748 {
6749 /* Initialize the small common section. */
6750 mips_elf_scom_section.name = ".scommon";
6751 mips_elf_scom_section.flags = SEC_IS_COMMON;
6752 mips_elf_scom_section.output_section = &mips_elf_scom_section;
6753 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6754 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6755 mips_elf_scom_symbol.name = ".scommon";
6756 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6757 mips_elf_scom_symbol.section = &mips_elf_scom_section;
6758 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6759 }
6760 asym->section = &mips_elf_scom_section;
6761 asym->value = elfsym->internal_elf_sym.st_size;
6762 break;
6763
6764 case SHN_MIPS_SUNDEFINED:
6765 asym->section = bfd_und_section_ptr;
6766 break;
6767
b49e97c9 6768 case SHN_MIPS_TEXT:
00b4930b
TS
6769 {
6770 asection *section = bfd_get_section_by_name (abfd, ".text");
6771
00b4930b
TS
6772 if (section != NULL)
6773 {
6774 asym->section = section;
6775 /* MIPS_TEXT is a bit special, the address is not an offset
6776 to the base of the .text section. So substract the section
6777 base address to make it an offset. */
6778 asym->value -= section->vma;
6779 }
6780 }
b49e97c9
TS
6781 break;
6782
6783 case SHN_MIPS_DATA:
00b4930b
TS
6784 {
6785 asection *section = bfd_get_section_by_name (abfd, ".data");
6786
00b4930b
TS
6787 if (section != NULL)
6788 {
6789 asym->section = section;
6790 /* MIPS_DATA is a bit special, the address is not an offset
6791 to the base of the .data section. So substract the section
6792 base address to make it an offset. */
6793 asym->value -= section->vma;
6794 }
6795 }
b49e97c9 6796 break;
b49e97c9 6797 }
738e5348 6798
df58fc94
RS
6799 /* If this is an odd-valued function symbol, assume it's a MIPS16
6800 or microMIPS one. */
738e5348
RS
6801 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6802 && (asym->value & 1) != 0)
6803 {
6804 asym->value--;
e8faf7d1 6805 if (MICROMIPS_P (abfd))
df58fc94
RS
6806 elfsym->internal_elf_sym.st_other
6807 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6808 else
6809 elfsym->internal_elf_sym.st_other
6810 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
738e5348 6811 }
b49e97c9
TS
6812}
6813\f
8c946ed5
RS
6814/* Implement elf_backend_eh_frame_address_size. This differs from
6815 the default in the way it handles EABI64.
6816
6817 EABI64 was originally specified as an LP64 ABI, and that is what
6818 -mabi=eabi normally gives on a 64-bit target. However, gcc has
6819 historically accepted the combination of -mabi=eabi and -mlong32,
6820 and this ILP32 variation has become semi-official over time.
6821 Both forms use elf32 and have pointer-sized FDE addresses.
6822
6823 If an EABI object was generated by GCC 4.0 or above, it will have
6824 an empty .gcc_compiled_longXX section, where XX is the size of longs
6825 in bits. Unfortunately, ILP32 objects generated by earlier compilers
6826 have no special marking to distinguish them from LP64 objects.
6827
6828 We don't want users of the official LP64 ABI to be punished for the
6829 existence of the ILP32 variant, but at the same time, we don't want
6830 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6831 We therefore take the following approach:
6832
6833 - If ABFD contains a .gcc_compiled_longXX section, use it to
6834 determine the pointer size.
6835
6836 - Otherwise check the type of the first relocation. Assume that
6837 the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6838
6839 - Otherwise punt.
6840
6841 The second check is enough to detect LP64 objects generated by pre-4.0
6842 compilers because, in the kind of output generated by those compilers,
6843 the first relocation will be associated with either a CIE personality
6844 routine or an FDE start address. Furthermore, the compilers never
6845 used a special (non-pointer) encoding for this ABI.
6846
6847 Checking the relocation type should also be safe because there is no
6848 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never
6849 did so. */
6850
6851unsigned int
6852_bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6853{
6854 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6855 return 8;
6856 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6857 {
6858 bfd_boolean long32_p, long64_p;
6859
6860 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6861 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6862 if (long32_p && long64_p)
6863 return 0;
6864 if (long32_p)
6865 return 4;
6866 if (long64_p)
6867 return 8;
6868
6869 if (sec->reloc_count > 0
6870 && elf_section_data (sec)->relocs != NULL
6871 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6872 == R_MIPS_64))
6873 return 8;
6874
6875 return 0;
6876 }
6877 return 4;
6878}
6879\f
174fd7f9
RS
6880/* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6881 relocations against two unnamed section symbols to resolve to the
6882 same address. For example, if we have code like:
6883
6884 lw $4,%got_disp(.data)($gp)
6885 lw $25,%got_disp(.text)($gp)
6886 jalr $25
6887
6888 then the linker will resolve both relocations to .data and the program
6889 will jump there rather than to .text.
6890
6891 We can work around this problem by giving names to local section symbols.
6892 This is also what the MIPSpro tools do. */
6893
6894bfd_boolean
6895_bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6896{
6897 return SGI_COMPAT (abfd);
6898}
6899\f
b49e97c9
TS
6900/* Work over a section just before writing it out. This routine is
6901 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
6902 sections that need the SHF_MIPS_GPREL flag by name; there has to be
6903 a better way. */
6904
b34976b6 6905bfd_boolean
9719ad41 6906_bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
b49e97c9
TS
6907{
6908 if (hdr->sh_type == SHT_MIPS_REGINFO
6909 && hdr->sh_size > 0)
6910 {
6911 bfd_byte buf[4];
6912
6913 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6914 BFD_ASSERT (hdr->contents == NULL);
6915
6916 if (bfd_seek (abfd,
6917 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6918 SEEK_SET) != 0)
b34976b6 6919 return FALSE;
b49e97c9 6920 H_PUT_32 (abfd, elf_gp (abfd), buf);
9719ad41 6921 if (bfd_bwrite (buf, 4, abfd) != 4)
b34976b6 6922 return FALSE;
b49e97c9
TS
6923 }
6924
6925 if (hdr->sh_type == SHT_MIPS_OPTIONS
6926 && hdr->bfd_section != NULL
f0abc2a1
AM
6927 && mips_elf_section_data (hdr->bfd_section) != NULL
6928 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
b49e97c9
TS
6929 {
6930 bfd_byte *contents, *l, *lend;
6931
f0abc2a1
AM
6932 /* We stored the section contents in the tdata field in the
6933 set_section_contents routine. We save the section contents
6934 so that we don't have to read them again.
b49e97c9
TS
6935 At this point we know that elf_gp is set, so we can look
6936 through the section contents to see if there is an
6937 ODK_REGINFO structure. */
6938
f0abc2a1 6939 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
b49e97c9
TS
6940 l = contents;
6941 lend = contents + hdr->sh_size;
6942 while (l + sizeof (Elf_External_Options) <= lend)
6943 {
6944 Elf_Internal_Options intopt;
6945
6946 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6947 &intopt);
1bc8074d
MR
6948 if (intopt.size < sizeof (Elf_External_Options))
6949 {
6950 (*_bfd_error_handler)
6951 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6952 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6953 break;
6954 }
b49e97c9
TS
6955 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6956 {
6957 bfd_byte buf[8];
6958
6959 if (bfd_seek (abfd,
6960 (hdr->sh_offset
6961 + (l - contents)
6962 + sizeof (Elf_External_Options)
6963 + (sizeof (Elf64_External_RegInfo) - 8)),
6964 SEEK_SET) != 0)
b34976b6 6965 return FALSE;
b49e97c9 6966 H_PUT_64 (abfd, elf_gp (abfd), buf);
9719ad41 6967 if (bfd_bwrite (buf, 8, abfd) != 8)
b34976b6 6968 return FALSE;
b49e97c9
TS
6969 }
6970 else if (intopt.kind == ODK_REGINFO)
6971 {
6972 bfd_byte buf[4];
6973
6974 if (bfd_seek (abfd,
6975 (hdr->sh_offset
6976 + (l - contents)
6977 + sizeof (Elf_External_Options)
6978 + (sizeof (Elf32_External_RegInfo) - 4)),
6979 SEEK_SET) != 0)
b34976b6 6980 return FALSE;
b49e97c9 6981 H_PUT_32 (abfd, elf_gp (abfd), buf);
9719ad41 6982 if (bfd_bwrite (buf, 4, abfd) != 4)
b34976b6 6983 return FALSE;
b49e97c9
TS
6984 }
6985 l += intopt.size;
6986 }
6987 }
6988
6989 if (hdr->bfd_section != NULL)
6990 {
6991 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6992
2d0f9ad9
JM
6993 /* .sbss is not handled specially here because the GNU/Linux
6994 prelinker can convert .sbss from NOBITS to PROGBITS and
6995 changing it back to NOBITS breaks the binary. The entry in
6996 _bfd_mips_elf_special_sections will ensure the correct flags
6997 are set on .sbss if BFD creates it without reading it from an
6998 input file, and without special handling here the flags set
6999 on it in an input file will be followed. */
b49e97c9
TS
7000 if (strcmp (name, ".sdata") == 0
7001 || strcmp (name, ".lit8") == 0
7002 || strcmp (name, ".lit4") == 0)
fd6f9d17 7003 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
b49e97c9 7004 else if (strcmp (name, ".srdata") == 0)
fd6f9d17 7005 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
b49e97c9 7006 else if (strcmp (name, ".compact_rel") == 0)
fd6f9d17 7007 hdr->sh_flags = 0;
b49e97c9
TS
7008 else if (strcmp (name, ".rtproc") == 0)
7009 {
7010 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7011 {
7012 unsigned int adjust;
7013
7014 adjust = hdr->sh_size % hdr->sh_addralign;
7015 if (adjust != 0)
7016 hdr->sh_size += hdr->sh_addralign - adjust;
7017 }
7018 }
7019 }
7020
b34976b6 7021 return TRUE;
b49e97c9
TS
7022}
7023
7024/* Handle a MIPS specific section when reading an object file. This
7025 is called when elfcode.h finds a section with an unknown type.
7026 This routine supports both the 32-bit and 64-bit ELF ABI.
7027
7028 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7029 how to. */
7030
b34976b6 7031bfd_boolean
6dc132d9
L
7032_bfd_mips_elf_section_from_shdr (bfd *abfd,
7033 Elf_Internal_Shdr *hdr,
7034 const char *name,
7035 int shindex)
b49e97c9
TS
7036{
7037 flagword flags = 0;
7038
7039 /* There ought to be a place to keep ELF backend specific flags, but
7040 at the moment there isn't one. We just keep track of the
7041 sections by their name, instead. Fortunately, the ABI gives
7042 suggested names for all the MIPS specific sections, so we will
7043 probably get away with this. */
7044 switch (hdr->sh_type)
7045 {
7046 case SHT_MIPS_LIBLIST:
7047 if (strcmp (name, ".liblist") != 0)
b34976b6 7048 return FALSE;
b49e97c9
TS
7049 break;
7050 case SHT_MIPS_MSYM:
7051 if (strcmp (name, ".msym") != 0)
b34976b6 7052 return FALSE;
b49e97c9
TS
7053 break;
7054 case SHT_MIPS_CONFLICT:
7055 if (strcmp (name, ".conflict") != 0)
b34976b6 7056 return FALSE;
b49e97c9
TS
7057 break;
7058 case SHT_MIPS_GPTAB:
0112cd26 7059 if (! CONST_STRNEQ (name, ".gptab."))
b34976b6 7060 return FALSE;
b49e97c9
TS
7061 break;
7062 case SHT_MIPS_UCODE:
7063 if (strcmp (name, ".ucode") != 0)
b34976b6 7064 return FALSE;
b49e97c9
TS
7065 break;
7066 case SHT_MIPS_DEBUG:
7067 if (strcmp (name, ".mdebug") != 0)
b34976b6 7068 return FALSE;
b49e97c9
TS
7069 flags = SEC_DEBUGGING;
7070 break;
7071 case SHT_MIPS_REGINFO:
7072 if (strcmp (name, ".reginfo") != 0
7073 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
b34976b6 7074 return FALSE;
b49e97c9
TS
7075 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7076 break;
7077 case SHT_MIPS_IFACE:
7078 if (strcmp (name, ".MIPS.interfaces") != 0)
b34976b6 7079 return FALSE;
b49e97c9
TS
7080 break;
7081 case SHT_MIPS_CONTENT:
0112cd26 7082 if (! CONST_STRNEQ (name, ".MIPS.content"))
b34976b6 7083 return FALSE;
b49e97c9
TS
7084 break;
7085 case SHT_MIPS_OPTIONS:
cc2e31b9 7086 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
b34976b6 7087 return FALSE;
b49e97c9 7088 break;
351cdf24
MF
7089 case SHT_MIPS_ABIFLAGS:
7090 if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7091 return FALSE;
7092 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7093 break;
b49e97c9 7094 case SHT_MIPS_DWARF:
1b315056 7095 if (! CONST_STRNEQ (name, ".debug_")
355d10dc 7096 && ! CONST_STRNEQ (name, ".zdebug_"))
b34976b6 7097 return FALSE;
b49e97c9
TS
7098 break;
7099 case SHT_MIPS_SYMBOL_LIB:
7100 if (strcmp (name, ".MIPS.symlib") != 0)
b34976b6 7101 return FALSE;
b49e97c9
TS
7102 break;
7103 case SHT_MIPS_EVENTS:
0112cd26
NC
7104 if (! CONST_STRNEQ (name, ".MIPS.events")
7105 && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
b34976b6 7106 return FALSE;
b49e97c9
TS
7107 break;
7108 default:
cc2e31b9 7109 break;
b49e97c9
TS
7110 }
7111
6dc132d9 7112 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
b34976b6 7113 return FALSE;
b49e97c9
TS
7114
7115 if (flags)
7116 {
7117 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7118 (bfd_get_section_flags (abfd,
7119 hdr->bfd_section)
7120 | flags)))
b34976b6 7121 return FALSE;
b49e97c9
TS
7122 }
7123
351cdf24
MF
7124 if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7125 {
7126 Elf_External_ABIFlags_v0 ext;
7127
7128 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7129 &ext, 0, sizeof ext))
7130 return FALSE;
7131 bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7132 &mips_elf_tdata (abfd)->abiflags);
7133 if (mips_elf_tdata (abfd)->abiflags.version != 0)
7134 return FALSE;
7135 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7136 }
7137
b49e97c9
TS
7138 /* FIXME: We should record sh_info for a .gptab section. */
7139
7140 /* For a .reginfo section, set the gp value in the tdata information
7141 from the contents of this section. We need the gp value while
7142 processing relocs, so we just get it now. The .reginfo section
7143 is not used in the 64-bit MIPS ELF ABI. */
7144 if (hdr->sh_type == SHT_MIPS_REGINFO)
7145 {
7146 Elf32_External_RegInfo ext;
7147 Elf32_RegInfo s;
7148
9719ad41
RS
7149 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7150 &ext, 0, sizeof ext))
b34976b6 7151 return FALSE;
b49e97c9
TS
7152 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7153 elf_gp (abfd) = s.ri_gp_value;
7154 }
7155
7156 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7157 set the gp value based on what we find. We may see both
7158 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7159 they should agree. */
7160 if (hdr->sh_type == SHT_MIPS_OPTIONS)
7161 {
7162 bfd_byte *contents, *l, *lend;
7163
9719ad41 7164 contents = bfd_malloc (hdr->sh_size);
b49e97c9 7165 if (contents == NULL)
b34976b6 7166 return FALSE;
b49e97c9 7167 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
9719ad41 7168 0, hdr->sh_size))
b49e97c9
TS
7169 {
7170 free (contents);
b34976b6 7171 return FALSE;
b49e97c9
TS
7172 }
7173 l = contents;
7174 lend = contents + hdr->sh_size;
7175 while (l + sizeof (Elf_External_Options) <= lend)
7176 {
7177 Elf_Internal_Options intopt;
7178
7179 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7180 &intopt);
1bc8074d
MR
7181 if (intopt.size < sizeof (Elf_External_Options))
7182 {
7183 (*_bfd_error_handler)
7184 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7185 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7186 break;
7187 }
b49e97c9
TS
7188 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7189 {
7190 Elf64_Internal_RegInfo intreg;
7191
7192 bfd_mips_elf64_swap_reginfo_in
7193 (abfd,
7194 ((Elf64_External_RegInfo *)
7195 (l + sizeof (Elf_External_Options))),
7196 &intreg);
7197 elf_gp (abfd) = intreg.ri_gp_value;
7198 }
7199 else if (intopt.kind == ODK_REGINFO)
7200 {
7201 Elf32_RegInfo intreg;
7202
7203 bfd_mips_elf32_swap_reginfo_in
7204 (abfd,
7205 ((Elf32_External_RegInfo *)
7206 (l + sizeof (Elf_External_Options))),
7207 &intreg);
7208 elf_gp (abfd) = intreg.ri_gp_value;
7209 }
7210 l += intopt.size;
7211 }
7212 free (contents);
7213 }
7214
b34976b6 7215 return TRUE;
b49e97c9
TS
7216}
7217
7218/* Set the correct type for a MIPS ELF section. We do this by the
7219 section name, which is a hack, but ought to work. This routine is
7220 used by both the 32-bit and the 64-bit ABI. */
7221
b34976b6 7222bfd_boolean
9719ad41 7223_bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
b49e97c9 7224{
0414f35b 7225 const char *name = bfd_get_section_name (abfd, sec);
b49e97c9
TS
7226
7227 if (strcmp (name, ".liblist") == 0)
7228 {
7229 hdr->sh_type = SHT_MIPS_LIBLIST;
eea6121a 7230 hdr->sh_info = sec->size / sizeof (Elf32_Lib);
b49e97c9
TS
7231 /* The sh_link field is set in final_write_processing. */
7232 }
7233 else if (strcmp (name, ".conflict") == 0)
7234 hdr->sh_type = SHT_MIPS_CONFLICT;
0112cd26 7235 else if (CONST_STRNEQ (name, ".gptab."))
b49e97c9
TS
7236 {
7237 hdr->sh_type = SHT_MIPS_GPTAB;
7238 hdr->sh_entsize = sizeof (Elf32_External_gptab);
7239 /* The sh_info field is set in final_write_processing. */
7240 }
7241 else if (strcmp (name, ".ucode") == 0)
7242 hdr->sh_type = SHT_MIPS_UCODE;
7243 else if (strcmp (name, ".mdebug") == 0)
7244 {
7245 hdr->sh_type = SHT_MIPS_DEBUG;
8dc1a139 7246 /* In a shared object on IRIX 5.3, the .mdebug section has an
b49e97c9
TS
7247 entsize of 0. FIXME: Does this matter? */
7248 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7249 hdr->sh_entsize = 0;
7250 else
7251 hdr->sh_entsize = 1;
7252 }
7253 else if (strcmp (name, ".reginfo") == 0)
7254 {
7255 hdr->sh_type = SHT_MIPS_REGINFO;
8dc1a139 7256 /* In a shared object on IRIX 5.3, the .reginfo section has an
b49e97c9
TS
7257 entsize of 0x18. FIXME: Does this matter? */
7258 if (SGI_COMPAT (abfd))
7259 {
7260 if ((abfd->flags & DYNAMIC) != 0)
7261 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7262 else
7263 hdr->sh_entsize = 1;
7264 }
7265 else
7266 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7267 }
7268 else if (SGI_COMPAT (abfd)
7269 && (strcmp (name, ".hash") == 0
7270 || strcmp (name, ".dynamic") == 0
7271 || strcmp (name, ".dynstr") == 0))
7272 {
7273 if (SGI_COMPAT (abfd))
7274 hdr->sh_entsize = 0;
7275#if 0
8dc1a139 7276 /* This isn't how the IRIX6 linker behaves. */
b49e97c9
TS
7277 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7278#endif
7279 }
7280 else if (strcmp (name, ".got") == 0
7281 || strcmp (name, ".srdata") == 0
7282 || strcmp (name, ".sdata") == 0
7283 || strcmp (name, ".sbss") == 0
7284 || strcmp (name, ".lit4") == 0
7285 || strcmp (name, ".lit8") == 0)
7286 hdr->sh_flags |= SHF_MIPS_GPREL;
7287 else if (strcmp (name, ".MIPS.interfaces") == 0)
7288 {
7289 hdr->sh_type = SHT_MIPS_IFACE;
7290 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7291 }
0112cd26 7292 else if (CONST_STRNEQ (name, ".MIPS.content"))
b49e97c9
TS
7293 {
7294 hdr->sh_type = SHT_MIPS_CONTENT;
7295 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7296 /* The sh_info field is set in final_write_processing. */
7297 }
cc2e31b9 7298 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
b49e97c9
TS
7299 {
7300 hdr->sh_type = SHT_MIPS_OPTIONS;
7301 hdr->sh_entsize = 1;
7302 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7303 }
351cdf24
MF
7304 else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7305 {
7306 hdr->sh_type = SHT_MIPS_ABIFLAGS;
7307 hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7308 }
1b315056
CS
7309 else if (CONST_STRNEQ (name, ".debug_")
7310 || CONST_STRNEQ (name, ".zdebug_"))
b5482f21
NC
7311 {
7312 hdr->sh_type = SHT_MIPS_DWARF;
7313
7314 /* Irix facilities such as libexc expect a single .debug_frame
7315 per executable, the system ones have NOSTRIP set and the linker
7316 doesn't merge sections with different flags so ... */
7317 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7318 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7319 }
b49e97c9
TS
7320 else if (strcmp (name, ".MIPS.symlib") == 0)
7321 {
7322 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7323 /* The sh_link and sh_info fields are set in
7324 final_write_processing. */
7325 }
0112cd26
NC
7326 else if (CONST_STRNEQ (name, ".MIPS.events")
7327 || CONST_STRNEQ (name, ".MIPS.post_rel"))
b49e97c9
TS
7328 {
7329 hdr->sh_type = SHT_MIPS_EVENTS;
7330 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7331 /* The sh_link field is set in final_write_processing. */
7332 }
7333 else if (strcmp (name, ".msym") == 0)
7334 {
7335 hdr->sh_type = SHT_MIPS_MSYM;
7336 hdr->sh_flags |= SHF_ALLOC;
7337 hdr->sh_entsize = 8;
7338 }
7339
7a79a000
TS
7340 /* The generic elf_fake_sections will set up REL_HDR using the default
7341 kind of relocations. We used to set up a second header for the
7342 non-default kind of relocations here, but only NewABI would use
7343 these, and the IRIX ld doesn't like resulting empty RELA sections.
7344 Thus we create those header only on demand now. */
b49e97c9 7345
b34976b6 7346 return TRUE;
b49e97c9
TS
7347}
7348
7349/* Given a BFD section, try to locate the corresponding ELF section
7350 index. This is used by both the 32-bit and the 64-bit ABI.
7351 Actually, it's not clear to me that the 64-bit ABI supports these,
7352 but for non-PIC objects we will certainly want support for at least
7353 the .scommon section. */
7354
b34976b6 7355bfd_boolean
9719ad41
RS
7356_bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7357 asection *sec, int *retval)
b49e97c9
TS
7358{
7359 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7360 {
7361 *retval = SHN_MIPS_SCOMMON;
b34976b6 7362 return TRUE;
b49e97c9
TS
7363 }
7364 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7365 {
7366 *retval = SHN_MIPS_ACOMMON;
b34976b6 7367 return TRUE;
b49e97c9 7368 }
b34976b6 7369 return FALSE;
b49e97c9
TS
7370}
7371\f
7372/* Hook called by the linker routine which adds symbols from an object
7373 file. We must handle the special MIPS section numbers here. */
7374
b34976b6 7375bfd_boolean
9719ad41 7376_bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
555cd476 7377 Elf_Internal_Sym *sym, const char **namep,
9719ad41
RS
7378 flagword *flagsp ATTRIBUTE_UNUSED,
7379 asection **secp, bfd_vma *valp)
b49e97c9
TS
7380{
7381 if (SGI_COMPAT (abfd)
7382 && (abfd->flags & DYNAMIC) != 0
7383 && strcmp (*namep, "_rld_new_interface") == 0)
7384 {
8dc1a139 7385 /* Skip IRIX5 rld entry name. */
b49e97c9 7386 *namep = NULL;
b34976b6 7387 return TRUE;
b49e97c9
TS
7388 }
7389
eedecc07
DD
7390 /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7391 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp
7392 by setting a DT_NEEDED for the shared object. Since _gp_disp is
7393 a magic symbol resolved by the linker, we ignore this bogus definition
7394 of _gp_disp. New ABI objects do not suffer from this problem so this
7395 is not done for them. */
7396 if (!NEWABI_P(abfd)
7397 && (sym->st_shndx == SHN_ABS)
7398 && (strcmp (*namep, "_gp_disp") == 0))
7399 {
7400 *namep = NULL;
7401 return TRUE;
7402 }
7403
b49e97c9
TS
7404 switch (sym->st_shndx)
7405 {
7406 case SHN_COMMON:
7407 /* Common symbols less than the GP size are automatically
7408 treated as SHN_MIPS_SCOMMON symbols. */
7409 if (sym->st_size > elf_gp_size (abfd)
b59eed79 7410 || ELF_ST_TYPE (sym->st_info) == STT_TLS
b49e97c9
TS
7411 || IRIX_COMPAT (abfd) == ict_irix6)
7412 break;
7413 /* Fall through. */
7414 case SHN_MIPS_SCOMMON:
7415 *secp = bfd_make_section_old_way (abfd, ".scommon");
7416 (*secp)->flags |= SEC_IS_COMMON;
7417 *valp = sym->st_size;
7418 break;
7419
7420 case SHN_MIPS_TEXT:
7421 /* This section is used in a shared object. */
698600e4 7422 if (mips_elf_tdata (abfd)->elf_text_section == NULL)
b49e97c9
TS
7423 {
7424 asymbol *elf_text_symbol;
7425 asection *elf_text_section;
7426 bfd_size_type amt = sizeof (asection);
7427
7428 elf_text_section = bfd_zalloc (abfd, amt);
7429 if (elf_text_section == NULL)
b34976b6 7430 return FALSE;
b49e97c9
TS
7431
7432 amt = sizeof (asymbol);
7433 elf_text_symbol = bfd_zalloc (abfd, amt);
7434 if (elf_text_symbol == NULL)
b34976b6 7435 return FALSE;
b49e97c9
TS
7436
7437 /* Initialize the section. */
7438
698600e4
AM
7439 mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7440 mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
b49e97c9
TS
7441
7442 elf_text_section->symbol = elf_text_symbol;
698600e4 7443 elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
b49e97c9
TS
7444
7445 elf_text_section->name = ".text";
7446 elf_text_section->flags = SEC_NO_FLAGS;
7447 elf_text_section->output_section = NULL;
7448 elf_text_section->owner = abfd;
7449 elf_text_symbol->name = ".text";
7450 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7451 elf_text_symbol->section = elf_text_section;
7452 }
7453 /* This code used to do *secp = bfd_und_section_ptr if
0e1862bb 7454 bfd_link_pic (info). I don't know why, and that doesn't make sense,
b49e97c9 7455 so I took it out. */
698600e4 7456 *secp = mips_elf_tdata (abfd)->elf_text_section;
b49e97c9
TS
7457 break;
7458
7459 case SHN_MIPS_ACOMMON:
7460 /* Fall through. XXX Can we treat this as allocated data? */
7461 case SHN_MIPS_DATA:
7462 /* This section is used in a shared object. */
698600e4 7463 if (mips_elf_tdata (abfd)->elf_data_section == NULL)
b49e97c9
TS
7464 {
7465 asymbol *elf_data_symbol;
7466 asection *elf_data_section;
7467 bfd_size_type amt = sizeof (asection);
7468
7469 elf_data_section = bfd_zalloc (abfd, amt);
7470 if (elf_data_section == NULL)
b34976b6 7471 return FALSE;
b49e97c9
TS
7472
7473 amt = sizeof (asymbol);
7474 elf_data_symbol = bfd_zalloc (abfd, amt);
7475 if (elf_data_symbol == NULL)
b34976b6 7476 return FALSE;
b49e97c9
TS
7477
7478 /* Initialize the section. */
7479
698600e4
AM
7480 mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7481 mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
b49e97c9
TS
7482
7483 elf_data_section->symbol = elf_data_symbol;
698600e4 7484 elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
b49e97c9
TS
7485
7486 elf_data_section->name = ".data";
7487 elf_data_section->flags = SEC_NO_FLAGS;
7488 elf_data_section->output_section = NULL;
7489 elf_data_section->owner = abfd;
7490 elf_data_symbol->name = ".data";
7491 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7492 elf_data_symbol->section = elf_data_section;
7493 }
7494 /* This code used to do *secp = bfd_und_section_ptr if
0e1862bb 7495 bfd_link_pic (info). I don't know why, and that doesn't make sense,
b49e97c9 7496 so I took it out. */
698600e4 7497 *secp = mips_elf_tdata (abfd)->elf_data_section;
b49e97c9
TS
7498 break;
7499
7500 case SHN_MIPS_SUNDEFINED:
7501 *secp = bfd_und_section_ptr;
7502 break;
7503 }
7504
7505 if (SGI_COMPAT (abfd)
0e1862bb 7506 && ! bfd_link_pic (info)
f13a99db 7507 && info->output_bfd->xvec == abfd->xvec
b49e97c9
TS
7508 && strcmp (*namep, "__rld_obj_head") == 0)
7509 {
7510 struct elf_link_hash_entry *h;
14a793b2 7511 struct bfd_link_hash_entry *bh;
b49e97c9
TS
7512
7513 /* Mark __rld_obj_head as dynamic. */
14a793b2 7514 bh = NULL;
b49e97c9 7515 if (! (_bfd_generic_link_add_one_symbol
9719ad41 7516 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
14a793b2 7517 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7518 return FALSE;
14a793b2
AM
7519
7520 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7521 h->non_elf = 0;
7522 h->def_regular = 1;
b49e97c9
TS
7523 h->type = STT_OBJECT;
7524
c152c796 7525 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7526 return FALSE;
b49e97c9 7527
b34976b6 7528 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
b4082c70 7529 mips_elf_hash_table (info)->rld_symbol = h;
b49e97c9
TS
7530 }
7531
7532 /* If this is a mips16 text symbol, add 1 to the value to make it
7533 odd. This will cause something like .word SYM to come up with
7534 the right value when it is loaded into the PC. */
df58fc94 7535 if (ELF_ST_IS_COMPRESSED (sym->st_other))
b49e97c9
TS
7536 ++*valp;
7537
b34976b6 7538 return TRUE;
b49e97c9
TS
7539}
7540
7541/* This hook function is called before the linker writes out a global
7542 symbol. We mark symbols as small common if appropriate. This is
7543 also where we undo the increment of the value for a mips16 symbol. */
7544
6e0b88f1 7545int
9719ad41
RS
7546_bfd_mips_elf_link_output_symbol_hook
7547 (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7548 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7549 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
b49e97c9
TS
7550{
7551 /* If we see a common symbol, which implies a relocatable link, then
7552 if a symbol was small common in an input file, mark it as small
7553 common in the output file. */
7554 if (sym->st_shndx == SHN_COMMON
7555 && strcmp (input_sec->name, ".scommon") == 0)
7556 sym->st_shndx = SHN_MIPS_SCOMMON;
7557
df58fc94 7558 if (ELF_ST_IS_COMPRESSED (sym->st_other))
79cda7cf 7559 sym->st_value &= ~1;
b49e97c9 7560
6e0b88f1 7561 return 1;
b49e97c9
TS
7562}
7563\f
7564/* Functions for the dynamic linker. */
7565
7566/* Create dynamic sections when linking against a dynamic object. */
7567
b34976b6 7568bfd_boolean
9719ad41 7569_bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
b49e97c9
TS
7570{
7571 struct elf_link_hash_entry *h;
14a793b2 7572 struct bfd_link_hash_entry *bh;
b49e97c9
TS
7573 flagword flags;
7574 register asection *s;
7575 const char * const *namep;
0a44bf69 7576 struct mips_elf_link_hash_table *htab;
b49e97c9 7577
0a44bf69 7578 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
7579 BFD_ASSERT (htab != NULL);
7580
b49e97c9
TS
7581 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7582 | SEC_LINKER_CREATED | SEC_READONLY);
7583
0a44bf69
RS
7584 /* The psABI requires a read-only .dynamic section, but the VxWorks
7585 EABI doesn't. */
7586 if (!htab->is_vxworks)
b49e97c9 7587 {
3d4d4302 7588 s = bfd_get_linker_section (abfd, ".dynamic");
0a44bf69
RS
7589 if (s != NULL)
7590 {
7591 if (! bfd_set_section_flags (abfd, s, flags))
7592 return FALSE;
7593 }
b49e97c9
TS
7594 }
7595
7596 /* We need to create .got section. */
23cc69b6 7597 if (!mips_elf_create_got_section (abfd, info))
f4416af6
AO
7598 return FALSE;
7599
0a44bf69 7600 if (! mips_elf_rel_dyn_section (info, TRUE))
b34976b6 7601 return FALSE;
b49e97c9 7602
b49e97c9 7603 /* Create .stub section. */
3d4d4302
AM
7604 s = bfd_make_section_anyway_with_flags (abfd,
7605 MIPS_ELF_STUB_SECTION_NAME (abfd),
7606 flags | SEC_CODE);
4e41d0d7
RS
7607 if (s == NULL
7608 || ! bfd_set_section_alignment (abfd, s,
7609 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7610 return FALSE;
7611 htab->sstubs = s;
b49e97c9 7612
e6aea42d 7613 if (!mips_elf_hash_table (info)->use_rld_obj_head
0e1862bb 7614 && bfd_link_executable (info)
3d4d4302 7615 && bfd_get_linker_section (abfd, ".rld_map") == NULL)
b49e97c9 7616 {
3d4d4302
AM
7617 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7618 flags &~ (flagword) SEC_READONLY);
b49e97c9 7619 if (s == NULL
b49e97c9
TS
7620 || ! bfd_set_section_alignment (abfd, s,
7621 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 7622 return FALSE;
b49e97c9
TS
7623 }
7624
7625 /* On IRIX5, we adjust add some additional symbols and change the
7626 alignments of several sections. There is no ABI documentation
7627 indicating that this is necessary on IRIX6, nor any evidence that
7628 the linker takes such action. */
7629 if (IRIX_COMPAT (abfd) == ict_irix5)
7630 {
7631 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7632 {
14a793b2 7633 bh = NULL;
b49e97c9 7634 if (! (_bfd_generic_link_add_one_symbol
9719ad41
RS
7635 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7636 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7637 return FALSE;
14a793b2
AM
7638
7639 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7640 h->non_elf = 0;
7641 h->def_regular = 1;
b49e97c9
TS
7642 h->type = STT_SECTION;
7643
c152c796 7644 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7645 return FALSE;
b49e97c9
TS
7646 }
7647
7648 /* We need to create a .compact_rel section. */
7649 if (SGI_COMPAT (abfd))
7650 {
7651 if (!mips_elf_create_compact_rel_section (abfd, info))
b34976b6 7652 return FALSE;
b49e97c9
TS
7653 }
7654
44c410de 7655 /* Change alignments of some sections. */
3d4d4302 7656 s = bfd_get_linker_section (abfd, ".hash");
b49e97c9 7657 if (s != NULL)
a253d456
NC
7658 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7659
3d4d4302 7660 s = bfd_get_linker_section (abfd, ".dynsym");
b49e97c9 7661 if (s != NULL)
a253d456
NC
7662 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7663
3d4d4302 7664 s = bfd_get_linker_section (abfd, ".dynstr");
b49e97c9 7665 if (s != NULL)
a253d456
NC
7666 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7667
3d4d4302 7668 /* ??? */
b49e97c9
TS
7669 s = bfd_get_section_by_name (abfd, ".reginfo");
7670 if (s != NULL)
a253d456
NC
7671 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7672
3d4d4302 7673 s = bfd_get_linker_section (abfd, ".dynamic");
b49e97c9 7674 if (s != NULL)
a253d456 7675 (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
b49e97c9
TS
7676 }
7677
0e1862bb 7678 if (bfd_link_executable (info))
b49e97c9 7679 {
14a793b2
AM
7680 const char *name;
7681
7682 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7683 bh = NULL;
7684 if (!(_bfd_generic_link_add_one_symbol
9719ad41
RS
7685 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7686 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7687 return FALSE;
14a793b2
AM
7688
7689 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7690 h->non_elf = 0;
7691 h->def_regular = 1;
b49e97c9
TS
7692 h->type = STT_SECTION;
7693
c152c796 7694 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7695 return FALSE;
b49e97c9
TS
7696
7697 if (! mips_elf_hash_table (info)->use_rld_obj_head)
7698 {
7699 /* __rld_map is a four byte word located in the .data section
7700 and is filled in by the rtld to contain a pointer to
7701 the _r_debug structure. Its symbol value will be set in
7702 _bfd_mips_elf_finish_dynamic_symbol. */
3d4d4302 7703 s = bfd_get_linker_section (abfd, ".rld_map");
0abfb97a 7704 BFD_ASSERT (s != NULL);
14a793b2 7705
0abfb97a
L
7706 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7707 bh = NULL;
7708 if (!(_bfd_generic_link_add_one_symbol
7709 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7710 get_elf_backend_data (abfd)->collect, &bh)))
7711 return FALSE;
b49e97c9 7712
0abfb97a
L
7713 h = (struct elf_link_hash_entry *) bh;
7714 h->non_elf = 0;
7715 h->def_regular = 1;
7716 h->type = STT_OBJECT;
7717
7718 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7719 return FALSE;
b4082c70 7720 mips_elf_hash_table (info)->rld_symbol = h;
b49e97c9
TS
7721 }
7722 }
7723
861fb55a 7724 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
c164a95d 7725 Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol. */
861fb55a
DJ
7726 if (!_bfd_elf_create_dynamic_sections (abfd, info))
7727 return FALSE;
7728
7729 /* Cache the sections created above. */
3d4d4302
AM
7730 htab->splt = bfd_get_linker_section (abfd, ".plt");
7731 htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
0a44bf69
RS
7732 if (htab->is_vxworks)
7733 {
3d4d4302
AM
7734 htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7735 htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
861fb55a
DJ
7736 }
7737 else
3d4d4302 7738 htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
861fb55a 7739 if (!htab->sdynbss
0e1862bb 7740 || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
861fb55a
DJ
7741 || !htab->srelplt
7742 || !htab->splt)
7743 abort ();
0a44bf69 7744
1bbce132
MR
7745 /* Do the usual VxWorks handling. */
7746 if (htab->is_vxworks
7747 && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7748 return FALSE;
0a44bf69 7749
b34976b6 7750 return TRUE;
b49e97c9
TS
7751}
7752\f
c224138d
RS
7753/* Return true if relocation REL against section SEC is a REL rather than
7754 RELA relocation. RELOCS is the first relocation in the section and
7755 ABFD is the bfd that contains SEC. */
7756
7757static bfd_boolean
7758mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7759 const Elf_Internal_Rela *relocs,
7760 const Elf_Internal_Rela *rel)
7761{
7762 Elf_Internal_Shdr *rel_hdr;
7763 const struct elf_backend_data *bed;
7764
d4730f92
BS
7765 /* To determine which flavor of relocation this is, we depend on the
7766 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */
7767 rel_hdr = elf_section_data (sec)->rel.hdr;
7768 if (rel_hdr == NULL)
7769 return FALSE;
c224138d 7770 bed = get_elf_backend_data (abfd);
d4730f92
BS
7771 return ((size_t) (rel - relocs)
7772 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
c224138d
RS
7773}
7774
7775/* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7776 HOWTO is the relocation's howto and CONTENTS points to the contents
7777 of the section that REL is against. */
7778
7779static bfd_vma
7780mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7781 reloc_howto_type *howto, bfd_byte *contents)
7782{
7783 bfd_byte *location;
7784 unsigned int r_type;
7785 bfd_vma addend;
7786
7787 r_type = ELF_R_TYPE (abfd, rel->r_info);
7788 location = contents + rel->r_offset;
7789
7790 /* Get the addend, which is stored in the input file. */
df58fc94 7791 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
c224138d 7792 addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
df58fc94 7793 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
c224138d
RS
7794
7795 return addend & howto->src_mask;
7796}
7797
7798/* REL is a relocation in ABFD that needs a partnering LO16 relocation
7799 and *ADDEND is the addend for REL itself. Look for the LO16 relocation
7800 and update *ADDEND with the final addend. Return true on success
7801 or false if the LO16 could not be found. RELEND is the exclusive
7802 upper bound on the relocations for REL's section. */
7803
7804static bfd_boolean
7805mips_elf_add_lo16_rel_addend (bfd *abfd,
7806 const Elf_Internal_Rela *rel,
7807 const Elf_Internal_Rela *relend,
7808 bfd_byte *contents, bfd_vma *addend)
7809{
7810 unsigned int r_type, lo16_type;
7811 const Elf_Internal_Rela *lo16_relocation;
7812 reloc_howto_type *lo16_howto;
7813 bfd_vma l;
7814
7815 r_type = ELF_R_TYPE (abfd, rel->r_info);
738e5348 7816 if (mips16_reloc_p (r_type))
c224138d 7817 lo16_type = R_MIPS16_LO16;
df58fc94
RS
7818 else if (micromips_reloc_p (r_type))
7819 lo16_type = R_MICROMIPS_LO16;
7361da2c
AB
7820 else if (r_type == R_MIPS_PCHI16)
7821 lo16_type = R_MIPS_PCLO16;
c224138d
RS
7822 else
7823 lo16_type = R_MIPS_LO16;
7824
7825 /* The combined value is the sum of the HI16 addend, left-shifted by
7826 sixteen bits, and the LO16 addend, sign extended. (Usually, the
7827 code does a `lui' of the HI16 value, and then an `addiu' of the
7828 LO16 value.)
7829
7830 Scan ahead to find a matching LO16 relocation.
7831
7832 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7833 be immediately following. However, for the IRIX6 ABI, the next
7834 relocation may be a composed relocation consisting of several
7835 relocations for the same address. In that case, the R_MIPS_LO16
7836 relocation may occur as one of these. We permit a similar
7837 extension in general, as that is useful for GCC.
7838
7839 In some cases GCC dead code elimination removes the LO16 but keeps
7840 the corresponding HI16. This is strictly speaking a violation of
7841 the ABI but not immediately harmful. */
7842 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7843 if (lo16_relocation == NULL)
7844 return FALSE;
7845
7846 /* Obtain the addend kept there. */
7847 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7848 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7849
7850 l <<= lo16_howto->rightshift;
7851 l = _bfd_mips_elf_sign_extend (l, 16);
7852
7853 *addend <<= 16;
7854 *addend += l;
7855 return TRUE;
7856}
7857
7858/* Try to read the contents of section SEC in bfd ABFD. Return true and
7859 store the contents in *CONTENTS on success. Assume that *CONTENTS
7860 already holds the contents if it is nonull on entry. */
7861
7862static bfd_boolean
7863mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7864{
7865 if (*contents)
7866 return TRUE;
7867
7868 /* Get cached copy if it exists. */
7869 if (elf_section_data (sec)->this_hdr.contents != NULL)
7870 {
7871 *contents = elf_section_data (sec)->this_hdr.contents;
7872 return TRUE;
7873 }
7874
7875 return bfd_malloc_and_get_section (abfd, sec, contents);
7876}
7877
1bbce132
MR
7878/* Make a new PLT record to keep internal data. */
7879
7880static struct plt_entry *
7881mips_elf_make_plt_record (bfd *abfd)
7882{
7883 struct plt_entry *entry;
7884
7885 entry = bfd_zalloc (abfd, sizeof (*entry));
7886 if (entry == NULL)
7887 return NULL;
7888
7889 entry->stub_offset = MINUS_ONE;
7890 entry->mips_offset = MINUS_ONE;
7891 entry->comp_offset = MINUS_ONE;
7892 entry->gotplt_index = MINUS_ONE;
7893 return entry;
7894}
7895
b49e97c9 7896/* Look through the relocs for a section during the first phase, and
1bbce132
MR
7897 allocate space in the global offset table and record the need for
7898 standard MIPS and compressed procedure linkage table entries. */
b49e97c9 7899
b34976b6 7900bfd_boolean
9719ad41
RS
7901_bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7902 asection *sec, const Elf_Internal_Rela *relocs)
b49e97c9
TS
7903{
7904 const char *name;
7905 bfd *dynobj;
7906 Elf_Internal_Shdr *symtab_hdr;
7907 struct elf_link_hash_entry **sym_hashes;
b49e97c9
TS
7908 size_t extsymoff;
7909 const Elf_Internal_Rela *rel;
7910 const Elf_Internal_Rela *rel_end;
b49e97c9 7911 asection *sreloc;
9c5bfbb7 7912 const struct elf_backend_data *bed;
0a44bf69 7913 struct mips_elf_link_hash_table *htab;
c224138d
RS
7914 bfd_byte *contents;
7915 bfd_vma addend;
7916 reloc_howto_type *howto;
b49e97c9 7917
0e1862bb 7918 if (bfd_link_relocatable (info))
b34976b6 7919 return TRUE;
b49e97c9 7920
0a44bf69 7921 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
7922 BFD_ASSERT (htab != NULL);
7923
b49e97c9
TS
7924 dynobj = elf_hash_table (info)->dynobj;
7925 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7926 sym_hashes = elf_sym_hashes (abfd);
7927 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7928
738e5348
RS
7929 bed = get_elf_backend_data (abfd);
7930 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7931
b49e97c9
TS
7932 /* Check for the mips16 stub sections. */
7933
7934 name = bfd_get_section_name (abfd, sec);
b9d58d71 7935 if (FN_STUB_P (name))
b49e97c9
TS
7936 {
7937 unsigned long r_symndx;
7938
7939 /* Look at the relocation information to figure out which symbol
7940 this is for. */
7941
cb4437b8 7942 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
738e5348
RS
7943 if (r_symndx == 0)
7944 {
7945 (*_bfd_error_handler)
7946 (_("%B: Warning: cannot determine the target function for"
7947 " stub section `%s'"),
7948 abfd, name);
7949 bfd_set_error (bfd_error_bad_value);
7950 return FALSE;
7951 }
b49e97c9
TS
7952
7953 if (r_symndx < extsymoff
7954 || sym_hashes[r_symndx - extsymoff] == NULL)
7955 {
7956 asection *o;
7957
7958 /* This stub is for a local symbol. This stub will only be
7959 needed if there is some relocation in this BFD, other
7960 than a 16 bit function call, which refers to this symbol. */
7961 for (o = abfd->sections; o != NULL; o = o->next)
7962 {
7963 Elf_Internal_Rela *sec_relocs;
7964 const Elf_Internal_Rela *r, *rend;
7965
7966 /* We can ignore stub sections when looking for relocs. */
7967 if ((o->flags & SEC_RELOC) == 0
7968 || o->reloc_count == 0
738e5348 7969 || section_allows_mips16_refs_p (o))
b49e97c9
TS
7970 continue;
7971
45d6a902 7972 sec_relocs
9719ad41 7973 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
45d6a902 7974 info->keep_memory);
b49e97c9 7975 if (sec_relocs == NULL)
b34976b6 7976 return FALSE;
b49e97c9
TS
7977
7978 rend = sec_relocs + o->reloc_count;
7979 for (r = sec_relocs; r < rend; r++)
7980 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
738e5348 7981 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
b49e97c9
TS
7982 break;
7983
6cdc0ccc 7984 if (elf_section_data (o)->relocs != sec_relocs)
b49e97c9
TS
7985 free (sec_relocs);
7986
7987 if (r < rend)
7988 break;
7989 }
7990
7991 if (o == NULL)
7992 {
7993 /* There is no non-call reloc for this stub, so we do
7994 not need it. Since this function is called before
7995 the linker maps input sections to output sections, we
7996 can easily discard it by setting the SEC_EXCLUDE
7997 flag. */
7998 sec->flags |= SEC_EXCLUDE;
b34976b6 7999 return TRUE;
b49e97c9
TS
8000 }
8001
8002 /* Record this stub in an array of local symbol stubs for
8003 this BFD. */
698600e4 8004 if (mips_elf_tdata (abfd)->local_stubs == NULL)
b49e97c9
TS
8005 {
8006 unsigned long symcount;
8007 asection **n;
8008 bfd_size_type amt;
8009
8010 if (elf_bad_symtab (abfd))
8011 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8012 else
8013 symcount = symtab_hdr->sh_info;
8014 amt = symcount * sizeof (asection *);
9719ad41 8015 n = bfd_zalloc (abfd, amt);
b49e97c9 8016 if (n == NULL)
b34976b6 8017 return FALSE;
698600e4 8018 mips_elf_tdata (abfd)->local_stubs = n;
b49e97c9
TS
8019 }
8020
b9d58d71 8021 sec->flags |= SEC_KEEP;
698600e4 8022 mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
b49e97c9
TS
8023
8024 /* We don't need to set mips16_stubs_seen in this case.
8025 That flag is used to see whether we need to look through
8026 the global symbol table for stubs. We don't need to set
8027 it here, because we just have a local stub. */
8028 }
8029 else
8030 {
8031 struct mips_elf_link_hash_entry *h;
8032
8033 h = ((struct mips_elf_link_hash_entry *)
8034 sym_hashes[r_symndx - extsymoff]);
8035
973a3492
L
8036 while (h->root.root.type == bfd_link_hash_indirect
8037 || h->root.root.type == bfd_link_hash_warning)
8038 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8039
b49e97c9
TS
8040 /* H is the symbol this stub is for. */
8041
b9d58d71
TS
8042 /* If we already have an appropriate stub for this function, we
8043 don't need another one, so we can discard this one. Since
8044 this function is called before the linker maps input sections
8045 to output sections, we can easily discard it by setting the
8046 SEC_EXCLUDE flag. */
8047 if (h->fn_stub != NULL)
8048 {
8049 sec->flags |= SEC_EXCLUDE;
8050 return TRUE;
8051 }
8052
8053 sec->flags |= SEC_KEEP;
b49e97c9 8054 h->fn_stub = sec;
b34976b6 8055 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
b49e97c9
TS
8056 }
8057 }
b9d58d71 8058 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
b49e97c9
TS
8059 {
8060 unsigned long r_symndx;
8061 struct mips_elf_link_hash_entry *h;
8062 asection **loc;
8063
8064 /* Look at the relocation information to figure out which symbol
8065 this is for. */
8066
cb4437b8 8067 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
738e5348
RS
8068 if (r_symndx == 0)
8069 {
8070 (*_bfd_error_handler)
8071 (_("%B: Warning: cannot determine the target function for"
8072 " stub section `%s'"),
8073 abfd, name);
8074 bfd_set_error (bfd_error_bad_value);
8075 return FALSE;
8076 }
b49e97c9
TS
8077
8078 if (r_symndx < extsymoff
8079 || sym_hashes[r_symndx - extsymoff] == NULL)
8080 {
b9d58d71 8081 asection *o;
b49e97c9 8082
b9d58d71
TS
8083 /* This stub is for a local symbol. This stub will only be
8084 needed if there is some relocation (R_MIPS16_26) in this BFD
8085 that refers to this symbol. */
8086 for (o = abfd->sections; o != NULL; o = o->next)
8087 {
8088 Elf_Internal_Rela *sec_relocs;
8089 const Elf_Internal_Rela *r, *rend;
8090
8091 /* We can ignore stub sections when looking for relocs. */
8092 if ((o->flags & SEC_RELOC) == 0
8093 || o->reloc_count == 0
738e5348 8094 || section_allows_mips16_refs_p (o))
b9d58d71
TS
8095 continue;
8096
8097 sec_relocs
8098 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8099 info->keep_memory);
8100 if (sec_relocs == NULL)
8101 return FALSE;
8102
8103 rend = sec_relocs + o->reloc_count;
8104 for (r = sec_relocs; r < rend; r++)
8105 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8106 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8107 break;
8108
8109 if (elf_section_data (o)->relocs != sec_relocs)
8110 free (sec_relocs);
8111
8112 if (r < rend)
8113 break;
8114 }
8115
8116 if (o == NULL)
8117 {
8118 /* There is no non-call reloc for this stub, so we do
8119 not need it. Since this function is called before
8120 the linker maps input sections to output sections, we
8121 can easily discard it by setting the SEC_EXCLUDE
8122 flag. */
8123 sec->flags |= SEC_EXCLUDE;
8124 return TRUE;
8125 }
8126
8127 /* Record this stub in an array of local symbol call_stubs for
8128 this BFD. */
698600e4 8129 if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
b9d58d71
TS
8130 {
8131 unsigned long symcount;
8132 asection **n;
8133 bfd_size_type amt;
8134
8135 if (elf_bad_symtab (abfd))
8136 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8137 else
8138 symcount = symtab_hdr->sh_info;
8139 amt = symcount * sizeof (asection *);
8140 n = bfd_zalloc (abfd, amt);
8141 if (n == NULL)
8142 return FALSE;
698600e4 8143 mips_elf_tdata (abfd)->local_call_stubs = n;
b9d58d71 8144 }
b49e97c9 8145
b9d58d71 8146 sec->flags |= SEC_KEEP;
698600e4 8147 mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
b49e97c9 8148
b9d58d71
TS
8149 /* We don't need to set mips16_stubs_seen in this case.
8150 That flag is used to see whether we need to look through
8151 the global symbol table for stubs. We don't need to set
8152 it here, because we just have a local stub. */
8153 }
b49e97c9 8154 else
b49e97c9 8155 {
b9d58d71
TS
8156 h = ((struct mips_elf_link_hash_entry *)
8157 sym_hashes[r_symndx - extsymoff]);
68ffbac6 8158
b9d58d71 8159 /* H is the symbol this stub is for. */
68ffbac6 8160
b9d58d71
TS
8161 if (CALL_FP_STUB_P (name))
8162 loc = &h->call_fp_stub;
8163 else
8164 loc = &h->call_stub;
68ffbac6 8165
b9d58d71
TS
8166 /* If we already have an appropriate stub for this function, we
8167 don't need another one, so we can discard this one. Since
8168 this function is called before the linker maps input sections
8169 to output sections, we can easily discard it by setting the
8170 SEC_EXCLUDE flag. */
8171 if (*loc != NULL)
8172 {
8173 sec->flags |= SEC_EXCLUDE;
8174 return TRUE;
8175 }
b49e97c9 8176
b9d58d71
TS
8177 sec->flags |= SEC_KEEP;
8178 *loc = sec;
8179 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8180 }
b49e97c9
TS
8181 }
8182
b49e97c9 8183 sreloc = NULL;
c224138d 8184 contents = NULL;
b49e97c9
TS
8185 for (rel = relocs; rel < rel_end; ++rel)
8186 {
8187 unsigned long r_symndx;
8188 unsigned int r_type;
8189 struct elf_link_hash_entry *h;
861fb55a 8190 bfd_boolean can_make_dynamic_p;
c5d6fa44
RS
8191 bfd_boolean call_reloc_p;
8192 bfd_boolean constrain_symbol_p;
b49e97c9
TS
8193
8194 r_symndx = ELF_R_SYM (abfd, rel->r_info);
8195 r_type = ELF_R_TYPE (abfd, rel->r_info);
8196
8197 if (r_symndx < extsymoff)
8198 h = NULL;
8199 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8200 {
8201 (*_bfd_error_handler)
d003868e
AM
8202 (_("%B: Malformed reloc detected for section %s"),
8203 abfd, name);
b49e97c9 8204 bfd_set_error (bfd_error_bad_value);
b34976b6 8205 return FALSE;
b49e97c9
TS
8206 }
8207 else
8208 {
8209 h = sym_hashes[r_symndx - extsymoff];
81fbe831
AM
8210 if (h != NULL)
8211 {
8212 while (h->root.type == bfd_link_hash_indirect
8213 || h->root.type == bfd_link_hash_warning)
8214 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8215
8216 /* PR15323, ref flags aren't set for references in the
8217 same object. */
8218 h->root.non_ir_ref = 1;
8219 }
861fb55a 8220 }
b49e97c9 8221
861fb55a
DJ
8222 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8223 relocation into a dynamic one. */
8224 can_make_dynamic_p = FALSE;
c5d6fa44
RS
8225
8226 /* Set CALL_RELOC_P to true if the relocation is for a call,
8227 and if pointer equality therefore doesn't matter. */
8228 call_reloc_p = FALSE;
8229
8230 /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8231 into account when deciding how to define the symbol.
8232 Relocations in nonallocatable sections such as .pdr and
8233 .debug* should have no effect. */
8234 constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8235
861fb55a
DJ
8236 switch (r_type)
8237 {
861fb55a
DJ
8238 case R_MIPS_CALL16:
8239 case R_MIPS_CALL_HI16:
8240 case R_MIPS_CALL_LO16:
c5d6fa44
RS
8241 case R_MIPS16_CALL16:
8242 case R_MICROMIPS_CALL16:
8243 case R_MICROMIPS_CALL_HI16:
8244 case R_MICROMIPS_CALL_LO16:
8245 call_reloc_p = TRUE;
8246 /* Fall through. */
8247
8248 case R_MIPS_GOT16:
861fb55a
DJ
8249 case R_MIPS_GOT_HI16:
8250 case R_MIPS_GOT_LO16:
8251 case R_MIPS_GOT_PAGE:
8252 case R_MIPS_GOT_OFST:
8253 case R_MIPS_GOT_DISP:
8254 case R_MIPS_TLS_GOTTPREL:
8255 case R_MIPS_TLS_GD:
8256 case R_MIPS_TLS_LDM:
d0f13682 8257 case R_MIPS16_GOT16:
d0f13682
CLT
8258 case R_MIPS16_TLS_GOTTPREL:
8259 case R_MIPS16_TLS_GD:
8260 case R_MIPS16_TLS_LDM:
df58fc94 8261 case R_MICROMIPS_GOT16:
df58fc94
RS
8262 case R_MICROMIPS_GOT_HI16:
8263 case R_MICROMIPS_GOT_LO16:
8264 case R_MICROMIPS_GOT_PAGE:
8265 case R_MICROMIPS_GOT_OFST:
8266 case R_MICROMIPS_GOT_DISP:
8267 case R_MICROMIPS_TLS_GOTTPREL:
8268 case R_MICROMIPS_TLS_GD:
8269 case R_MICROMIPS_TLS_LDM:
861fb55a
DJ
8270 if (dynobj == NULL)
8271 elf_hash_table (info)->dynobj = dynobj = abfd;
8272 if (!mips_elf_create_got_section (dynobj, info))
8273 return FALSE;
0e1862bb 8274 if (htab->is_vxworks && !bfd_link_pic (info))
b49e97c9 8275 {
861fb55a
DJ
8276 (*_bfd_error_handler)
8277 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8278 abfd, (unsigned long) rel->r_offset);
8279 bfd_set_error (bfd_error_bad_value);
8280 return FALSE;
b49e97c9 8281 }
c5d6fa44 8282 can_make_dynamic_p = TRUE;
861fb55a 8283 break;
b49e97c9 8284
c5d6fa44 8285 case R_MIPS_NONE:
99da6b5f 8286 case R_MIPS_JALR:
df58fc94 8287 case R_MICROMIPS_JALR:
c5d6fa44
RS
8288 /* These relocations have empty fields and are purely there to
8289 provide link information. The symbol value doesn't matter. */
8290 constrain_symbol_p = FALSE;
8291 break;
8292
8293 case R_MIPS_GPREL16:
8294 case R_MIPS_GPREL32:
8295 case R_MIPS16_GPREL:
8296 case R_MICROMIPS_GPREL16:
8297 /* GP-relative relocations always resolve to a definition in a
8298 regular input file, ignoring the one-definition rule. This is
8299 important for the GP setup sequence in NewABI code, which
8300 always resolves to a local function even if other relocations
8301 against the symbol wouldn't. */
8302 constrain_symbol_p = FALSE;
99da6b5f
AN
8303 break;
8304
861fb55a
DJ
8305 case R_MIPS_32:
8306 case R_MIPS_REL32:
8307 case R_MIPS_64:
8308 /* In VxWorks executables, references to external symbols
8309 must be handled using copy relocs or PLT entries; it is not
8310 possible to convert this relocation into a dynamic one.
8311
8312 For executables that use PLTs and copy-relocs, we have a
8313 choice between converting the relocation into a dynamic
8314 one or using copy relocations or PLT entries. It is
8315 usually better to do the former, unless the relocation is
8316 against a read-only section. */
0e1862bb 8317 if ((bfd_link_pic (info)
861fb55a
DJ
8318 || (h != NULL
8319 && !htab->is_vxworks
8320 && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8321 && !(!info->nocopyreloc
8322 && !PIC_OBJECT_P (abfd)
8323 && MIPS_ELF_READONLY_SECTION (sec))))
8324 && (sec->flags & SEC_ALLOC) != 0)
b49e97c9 8325 {
861fb55a 8326 can_make_dynamic_p = TRUE;
b49e97c9
TS
8327 if (dynobj == NULL)
8328 elf_hash_table (info)->dynobj = dynobj = abfd;
861fb55a 8329 }
c5d6fa44 8330 break;
b49e97c9 8331
861fb55a
DJ
8332 case R_MIPS_26:
8333 case R_MIPS_PC16:
7361da2c
AB
8334 case R_MIPS_PC21_S2:
8335 case R_MIPS_PC26_S2:
861fb55a 8336 case R_MIPS16_26:
df58fc94
RS
8337 case R_MICROMIPS_26_S1:
8338 case R_MICROMIPS_PC7_S1:
8339 case R_MICROMIPS_PC10_S1:
8340 case R_MICROMIPS_PC16_S1:
8341 case R_MICROMIPS_PC23_S2:
c5d6fa44 8342 call_reloc_p = TRUE;
861fb55a 8343 break;
b49e97c9
TS
8344 }
8345
0a44bf69
RS
8346 if (h)
8347 {
c5d6fa44
RS
8348 if (constrain_symbol_p)
8349 {
8350 if (!can_make_dynamic_p)
8351 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8352
8353 if (!call_reloc_p)
8354 h->pointer_equality_needed = 1;
8355
8356 /* We must not create a stub for a symbol that has
8357 relocations related to taking the function's address.
8358 This doesn't apply to VxWorks, where CALL relocs refer
8359 to a .got.plt entry instead of a normal .got entry. */
8360 if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8361 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8362 }
8363
0a44bf69
RS
8364 /* Relocations against the special VxWorks __GOTT_BASE__ and
8365 __GOTT_INDEX__ symbols must be left to the loader. Allocate
8366 room for them in .rela.dyn. */
8367 if (is_gott_symbol (info, h))
8368 {
8369 if (sreloc == NULL)
8370 {
8371 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8372 if (sreloc == NULL)
8373 return FALSE;
8374 }
8375 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9e3313ae
RS
8376 if (MIPS_ELF_READONLY_SECTION (sec))
8377 /* We tell the dynamic linker that there are
8378 relocations against the text segment. */
8379 info->flags |= DF_TEXTREL;
0a44bf69
RS
8380 }
8381 }
df58fc94
RS
8382 else if (call_lo16_reloc_p (r_type)
8383 || got_lo16_reloc_p (r_type)
8384 || got_disp_reloc_p (r_type)
738e5348 8385 || (got16_reloc_p (r_type) && htab->is_vxworks))
b49e97c9
TS
8386 {
8387 /* We may need a local GOT entry for this relocation. We
8388 don't count R_MIPS_GOT_PAGE because we can estimate the
8389 maximum number of pages needed by looking at the size of
738e5348
RS
8390 the segment. Similar comments apply to R_MIPS*_GOT16 and
8391 R_MIPS*_CALL16, except on VxWorks, where GOT relocations
0a44bf69 8392 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or
b49e97c9 8393 R_MIPS_CALL_HI16 because these are always followed by an
b15e6682 8394 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
a8028dd0 8395 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
e641e783 8396 rel->r_addend, info, r_type))
f4416af6 8397 return FALSE;
b49e97c9
TS
8398 }
8399
8f0c309a
CLT
8400 if (h != NULL
8401 && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8402 ELF_ST_IS_MIPS16 (h->other)))
861fb55a
DJ
8403 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8404
b49e97c9
TS
8405 switch (r_type)
8406 {
8407 case R_MIPS_CALL16:
738e5348 8408 case R_MIPS16_CALL16:
df58fc94 8409 case R_MICROMIPS_CALL16:
b49e97c9
TS
8410 if (h == NULL)
8411 {
8412 (*_bfd_error_handler)
d003868e
AM
8413 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8414 abfd, (unsigned long) rel->r_offset);
b49e97c9 8415 bfd_set_error (bfd_error_bad_value);
b34976b6 8416 return FALSE;
b49e97c9
TS
8417 }
8418 /* Fall through. */
8419
8420 case R_MIPS_CALL_HI16:
8421 case R_MIPS_CALL_LO16:
df58fc94
RS
8422 case R_MICROMIPS_CALL_HI16:
8423 case R_MICROMIPS_CALL_LO16:
b49e97c9
TS
8424 if (h != NULL)
8425 {
6ccf4795
RS
8426 /* Make sure there is room in the regular GOT to hold the
8427 function's address. We may eliminate it in favour of
8428 a .got.plt entry later; see mips_elf_count_got_symbols. */
e641e783
RS
8429 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8430 r_type))
b34976b6 8431 return FALSE;
b49e97c9
TS
8432
8433 /* We need a stub, not a plt entry for the undefined
8434 function. But we record it as if it needs plt. See
c152c796 8435 _bfd_elf_adjust_dynamic_symbol. */
f5385ebf 8436 h->needs_plt = 1;
b49e97c9
TS
8437 h->type = STT_FUNC;
8438 }
8439 break;
8440
0fdc1bf1 8441 case R_MIPS_GOT_PAGE:
df58fc94 8442 case R_MICROMIPS_GOT_PAGE:
738e5348 8443 case R_MIPS16_GOT16:
b49e97c9
TS
8444 case R_MIPS_GOT16:
8445 case R_MIPS_GOT_HI16:
8446 case R_MIPS_GOT_LO16:
df58fc94
RS
8447 case R_MICROMIPS_GOT16:
8448 case R_MICROMIPS_GOT_HI16:
8449 case R_MICROMIPS_GOT_LO16:
8450 if (!h || got_page_reloc_p (r_type))
c224138d 8451 {
3a3b6725
DJ
8452 /* This relocation needs (or may need, if h != NULL) a
8453 page entry in the GOT. For R_MIPS_GOT_PAGE we do not
8454 know for sure until we know whether the symbol is
8455 preemptible. */
c224138d
RS
8456 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8457 {
8458 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8459 return FALSE;
8460 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8461 addend = mips_elf_read_rel_addend (abfd, rel,
8462 howto, contents);
9684f078 8463 if (got16_reloc_p (r_type))
c224138d
RS
8464 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8465 contents, &addend);
8466 else
8467 addend <<= howto->rightshift;
8468 }
8469 else
8470 addend = rel->r_addend;
13db6b44
RS
8471 if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8472 h, addend))
c224138d 8473 return FALSE;
13db6b44
RS
8474
8475 if (h)
8476 {
8477 struct mips_elf_link_hash_entry *hmips =
8478 (struct mips_elf_link_hash_entry *) h;
8479
8480 /* This symbol is definitely not overridable. */
8481 if (hmips->root.def_regular
0e1862bb 8482 && ! (bfd_link_pic (info) && ! info->symbolic
13db6b44
RS
8483 && ! hmips->root.forced_local))
8484 h = NULL;
8485 }
c224138d 8486 }
13db6b44
RS
8487 /* If this is a global, overridable symbol, GOT_PAGE will
8488 decay to GOT_DISP, so we'll need a GOT entry for it. */
c224138d
RS
8489 /* Fall through. */
8490
b49e97c9 8491 case R_MIPS_GOT_DISP:
df58fc94 8492 case R_MICROMIPS_GOT_DISP:
6ccf4795 8493 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
e641e783 8494 FALSE, r_type))
b34976b6 8495 return FALSE;
b49e97c9
TS
8496 break;
8497
0f20cc35 8498 case R_MIPS_TLS_GOTTPREL:
d0f13682 8499 case R_MIPS16_TLS_GOTTPREL:
df58fc94 8500 case R_MICROMIPS_TLS_GOTTPREL:
0e1862bb 8501 if (bfd_link_pic (info))
0f20cc35
DJ
8502 info->flags |= DF_STATIC_TLS;
8503 /* Fall through */
8504
8505 case R_MIPS_TLS_LDM:
d0f13682 8506 case R_MIPS16_TLS_LDM:
df58fc94
RS
8507 case R_MICROMIPS_TLS_LDM:
8508 if (tls_ldm_reloc_p (r_type))
0f20cc35 8509 {
cf35638d 8510 r_symndx = STN_UNDEF;
0f20cc35
DJ
8511 h = NULL;
8512 }
8513 /* Fall through */
8514
8515 case R_MIPS_TLS_GD:
d0f13682 8516 case R_MIPS16_TLS_GD:
df58fc94 8517 case R_MICROMIPS_TLS_GD:
0f20cc35
DJ
8518 /* This symbol requires a global offset table entry, or two
8519 for TLS GD relocations. */
e641e783
RS
8520 if (h != NULL)
8521 {
8522 if (!mips_elf_record_global_got_symbol (h, abfd, info,
8523 FALSE, r_type))
8524 return FALSE;
8525 }
8526 else
8527 {
8528 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8529 rel->r_addend,
8530 info, r_type))
8531 return FALSE;
8532 }
0f20cc35
DJ
8533 break;
8534
b49e97c9
TS
8535 case R_MIPS_32:
8536 case R_MIPS_REL32:
8537 case R_MIPS_64:
0a44bf69
RS
8538 /* In VxWorks executables, references to external symbols
8539 are handled using copy relocs or PLT stubs, so there's
8540 no need to add a .rela.dyn entry for this relocation. */
861fb55a 8541 if (can_make_dynamic_p)
b49e97c9
TS
8542 {
8543 if (sreloc == NULL)
8544 {
0a44bf69 8545 sreloc = mips_elf_rel_dyn_section (info, TRUE);
b49e97c9 8546 if (sreloc == NULL)
f4416af6 8547 return FALSE;
b49e97c9 8548 }
0e1862bb 8549 if (bfd_link_pic (info) && h == NULL)
82f0cfbd
EC
8550 {
8551 /* When creating a shared object, we must copy these
8552 reloc types into the output file as R_MIPS_REL32
0a44bf69
RS
8553 relocs. Make room for this reloc in .rel(a).dyn. */
8554 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
943284cc 8555 if (MIPS_ELF_READONLY_SECTION (sec))
82f0cfbd
EC
8556 /* We tell the dynamic linker that there are
8557 relocations against the text segment. */
8558 info->flags |= DF_TEXTREL;
8559 }
b49e97c9
TS
8560 else
8561 {
8562 struct mips_elf_link_hash_entry *hmips;
82f0cfbd 8563
9a59ad6b
DJ
8564 /* For a shared object, we must copy this relocation
8565 unless the symbol turns out to be undefined and
8566 weak with non-default visibility, in which case
8567 it will be left as zero.
8568
8569 We could elide R_MIPS_REL32 for locally binding symbols
8570 in shared libraries, but do not yet do so.
8571
8572 For an executable, we only need to copy this
8573 reloc if the symbol is defined in a dynamic
8574 object. */
b49e97c9
TS
8575 hmips = (struct mips_elf_link_hash_entry *) h;
8576 ++hmips->possibly_dynamic_relocs;
943284cc 8577 if (MIPS_ELF_READONLY_SECTION (sec))
82f0cfbd
EC
8578 /* We need it to tell the dynamic linker if there
8579 are relocations against the text segment. */
8580 hmips->readonly_reloc = TRUE;
b49e97c9 8581 }
b49e97c9
TS
8582 }
8583
8584 if (SGI_COMPAT (abfd))
8585 mips_elf_hash_table (info)->compact_rel_size +=
8586 sizeof (Elf32_External_crinfo);
8587 break;
8588
8589 case R_MIPS_26:
8590 case R_MIPS_GPREL16:
8591 case R_MIPS_LITERAL:
8592 case R_MIPS_GPREL32:
df58fc94
RS
8593 case R_MICROMIPS_26_S1:
8594 case R_MICROMIPS_GPREL16:
8595 case R_MICROMIPS_LITERAL:
8596 case R_MICROMIPS_GPREL7_S2:
b49e97c9
TS
8597 if (SGI_COMPAT (abfd))
8598 mips_elf_hash_table (info)->compact_rel_size +=
8599 sizeof (Elf32_External_crinfo);
8600 break;
8601
8602 /* This relocation describes the C++ object vtable hierarchy.
8603 Reconstruct it for later use during GC. */
8604 case R_MIPS_GNU_VTINHERIT:
c152c796 8605 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
b34976b6 8606 return FALSE;
b49e97c9
TS
8607 break;
8608
8609 /* This relocation describes which C++ vtable entries are actually
8610 used. Record for later use during GC. */
8611 case R_MIPS_GNU_VTENTRY:
d17e0c6e
JB
8612 BFD_ASSERT (h != NULL);
8613 if (h != NULL
8614 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
b34976b6 8615 return FALSE;
b49e97c9
TS
8616 break;
8617
8618 default:
8619 break;
8620 }
8621
1bbce132
MR
8622 /* Record the need for a PLT entry. At this point we don't know
8623 yet if we are going to create a PLT in the first place, but
8624 we only record whether the relocation requires a standard MIPS
8625 or a compressed code entry anyway. If we don't make a PLT after
8626 all, then we'll just ignore these arrangements. Likewise if
8627 a PLT entry is not created because the symbol is satisfied
8628 locally. */
8629 if (h != NULL
8630 && jal_reloc_p (r_type)
8631 && !SYMBOL_CALLS_LOCAL (info, h))
8632 {
8633 if (h->plt.plist == NULL)
8634 h->plt.plist = mips_elf_make_plt_record (abfd);
8635 if (h->plt.plist == NULL)
8636 return FALSE;
8637
8638 if (r_type == R_MIPS_26)
8639 h->plt.plist->need_mips = TRUE;
8640 else
8641 h->plt.plist->need_comp = TRUE;
8642 }
8643
738e5348
RS
8644 /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8645 if there is one. We only need to handle global symbols here;
8646 we decide whether to keep or delete stubs for local symbols
8647 when processing the stub's relocations. */
b49e97c9 8648 if (h != NULL
738e5348
RS
8649 && !mips16_call_reloc_p (r_type)
8650 && !section_allows_mips16_refs_p (sec))
b49e97c9
TS
8651 {
8652 struct mips_elf_link_hash_entry *mh;
8653
8654 mh = (struct mips_elf_link_hash_entry *) h;
b34976b6 8655 mh->need_fn_stub = TRUE;
b49e97c9 8656 }
861fb55a
DJ
8657
8658 /* Refuse some position-dependent relocations when creating a
8659 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're
8660 not PIC, but we can create dynamic relocations and the result
8661 will be fine. Also do not refuse R_MIPS_LO16, which can be
8662 combined with R_MIPS_GOT16. */
0e1862bb 8663 if (bfd_link_pic (info))
861fb55a
DJ
8664 {
8665 switch (r_type)
8666 {
8667 case R_MIPS16_HI16:
8668 case R_MIPS_HI16:
8669 case R_MIPS_HIGHER:
8670 case R_MIPS_HIGHEST:
df58fc94
RS
8671 case R_MICROMIPS_HI16:
8672 case R_MICROMIPS_HIGHER:
8673 case R_MICROMIPS_HIGHEST:
861fb55a
DJ
8674 /* Don't refuse a high part relocation if it's against
8675 no symbol (e.g. part of a compound relocation). */
cf35638d 8676 if (r_symndx == STN_UNDEF)
861fb55a
DJ
8677 break;
8678
8679 /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8680 and has a special meaning. */
8681 if (!NEWABI_P (abfd) && h != NULL
8682 && strcmp (h->root.root.string, "_gp_disp") == 0)
8683 break;
8684
0fc1eb3c
RS
8685 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */
8686 if (is_gott_symbol (info, h))
8687 break;
8688
861fb55a
DJ
8689 /* FALLTHROUGH */
8690
8691 case R_MIPS16_26:
8692 case R_MIPS_26:
df58fc94 8693 case R_MICROMIPS_26_S1:
861fb55a
DJ
8694 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8695 (*_bfd_error_handler)
8696 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8697 abfd, howto->name,
8698 (h) ? h->root.root.string : "a local symbol");
8699 bfd_set_error (bfd_error_bad_value);
8700 return FALSE;
8701 default:
8702 break;
8703 }
8704 }
b49e97c9
TS
8705 }
8706
b34976b6 8707 return TRUE;
b49e97c9
TS
8708}
8709\f
d0647110 8710bfd_boolean
9719ad41
RS
8711_bfd_mips_relax_section (bfd *abfd, asection *sec,
8712 struct bfd_link_info *link_info,
8713 bfd_boolean *again)
d0647110
AO
8714{
8715 Elf_Internal_Rela *internal_relocs;
8716 Elf_Internal_Rela *irel, *irelend;
8717 Elf_Internal_Shdr *symtab_hdr;
8718 bfd_byte *contents = NULL;
d0647110
AO
8719 size_t extsymoff;
8720 bfd_boolean changed_contents = FALSE;
8721 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8722 Elf_Internal_Sym *isymbuf = NULL;
8723
8724 /* We are not currently changing any sizes, so only one pass. */
8725 *again = FALSE;
8726
0e1862bb 8727 if (bfd_link_relocatable (link_info))
d0647110
AO
8728 return TRUE;
8729
9719ad41 8730 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
45d6a902 8731 link_info->keep_memory);
d0647110
AO
8732 if (internal_relocs == NULL)
8733 return TRUE;
8734
8735 irelend = internal_relocs + sec->reloc_count
8736 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8737 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8738 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8739
8740 for (irel = internal_relocs; irel < irelend; irel++)
8741 {
8742 bfd_vma symval;
8743 bfd_signed_vma sym_offset;
8744 unsigned int r_type;
8745 unsigned long r_symndx;
8746 asection *sym_sec;
8747 unsigned long instruction;
8748
8749 /* Turn jalr into bgezal, and jr into beq, if they're marked
8750 with a JALR relocation, that indicate where they jump to.
8751 This saves some pipeline bubbles. */
8752 r_type = ELF_R_TYPE (abfd, irel->r_info);
8753 if (r_type != R_MIPS_JALR)
8754 continue;
8755
8756 r_symndx = ELF_R_SYM (abfd, irel->r_info);
8757 /* Compute the address of the jump target. */
8758 if (r_symndx >= extsymoff)
8759 {
8760 struct mips_elf_link_hash_entry *h
8761 = ((struct mips_elf_link_hash_entry *)
8762 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8763
8764 while (h->root.root.type == bfd_link_hash_indirect
8765 || h->root.root.type == bfd_link_hash_warning)
8766 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
143d77c5 8767
d0647110
AO
8768 /* If a symbol is undefined, or if it may be overridden,
8769 skip it. */
8770 if (! ((h->root.root.type == bfd_link_hash_defined
8771 || h->root.root.type == bfd_link_hash_defweak)
8772 && h->root.root.u.def.section)
0e1862bb 8773 || (bfd_link_pic (link_info) && ! link_info->symbolic
f5385ebf 8774 && !h->root.forced_local))
d0647110
AO
8775 continue;
8776
8777 sym_sec = h->root.root.u.def.section;
8778 if (sym_sec->output_section)
8779 symval = (h->root.root.u.def.value
8780 + sym_sec->output_section->vma
8781 + sym_sec->output_offset);
8782 else
8783 symval = h->root.root.u.def.value;
8784 }
8785 else
8786 {
8787 Elf_Internal_Sym *isym;
8788
8789 /* Read this BFD's symbols if we haven't done so already. */
8790 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8791 {
8792 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8793 if (isymbuf == NULL)
8794 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8795 symtab_hdr->sh_info, 0,
8796 NULL, NULL, NULL);
8797 if (isymbuf == NULL)
8798 goto relax_return;
8799 }
8800
8801 isym = isymbuf + r_symndx;
8802 if (isym->st_shndx == SHN_UNDEF)
8803 continue;
8804 else if (isym->st_shndx == SHN_ABS)
8805 sym_sec = bfd_abs_section_ptr;
8806 else if (isym->st_shndx == SHN_COMMON)
8807 sym_sec = bfd_com_section_ptr;
8808 else
8809 sym_sec
8810 = bfd_section_from_elf_index (abfd, isym->st_shndx);
8811 symval = isym->st_value
8812 + sym_sec->output_section->vma
8813 + sym_sec->output_offset;
8814 }
8815
8816 /* Compute branch offset, from delay slot of the jump to the
8817 branch target. */
8818 sym_offset = (symval + irel->r_addend)
8819 - (sec_start + irel->r_offset + 4);
8820
8821 /* Branch offset must be properly aligned. */
8822 if ((sym_offset & 3) != 0)
8823 continue;
8824
8825 sym_offset >>= 2;
8826
8827 /* Check that it's in range. */
8828 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8829 continue;
143d77c5 8830
d0647110 8831 /* Get the section contents if we haven't done so already. */
c224138d
RS
8832 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8833 goto relax_return;
d0647110
AO
8834
8835 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8836
8837 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
8838 if ((instruction & 0xfc1fffff) == 0x0000f809)
8839 instruction = 0x04110000;
8840 /* If it was jr <reg>, turn it into b <target>. */
8841 else if ((instruction & 0xfc1fffff) == 0x00000008)
8842 instruction = 0x10000000;
8843 else
8844 continue;
8845
8846 instruction |= (sym_offset & 0xffff);
8847 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8848 changed_contents = TRUE;
8849 }
8850
8851 if (contents != NULL
8852 && elf_section_data (sec)->this_hdr.contents != contents)
8853 {
8854 if (!changed_contents && !link_info->keep_memory)
8855 free (contents);
8856 else
8857 {
8858 /* Cache the section contents for elf_link_input_bfd. */
8859 elf_section_data (sec)->this_hdr.contents = contents;
8860 }
8861 }
8862 return TRUE;
8863
143d77c5 8864 relax_return:
eea6121a
AM
8865 if (contents != NULL
8866 && elf_section_data (sec)->this_hdr.contents != contents)
8867 free (contents);
d0647110
AO
8868 return FALSE;
8869}
8870\f
9a59ad6b
DJ
8871/* Allocate space for global sym dynamic relocs. */
8872
8873static bfd_boolean
8874allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8875{
8876 struct bfd_link_info *info = inf;
8877 bfd *dynobj;
8878 struct mips_elf_link_hash_entry *hmips;
8879 struct mips_elf_link_hash_table *htab;
8880
8881 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8882 BFD_ASSERT (htab != NULL);
8883
9a59ad6b
DJ
8884 dynobj = elf_hash_table (info)->dynobj;
8885 hmips = (struct mips_elf_link_hash_entry *) h;
8886
8887 /* VxWorks executables are handled elsewhere; we only need to
8888 allocate relocations in shared objects. */
0e1862bb 8889 if (htab->is_vxworks && !bfd_link_pic (info))
9a59ad6b
DJ
8890 return TRUE;
8891
7686d77d
AM
8892 /* Ignore indirect symbols. All relocations against such symbols
8893 will be redirected to the target symbol. */
8894 if (h->root.type == bfd_link_hash_indirect)
63897e2c
RS
8895 return TRUE;
8896
9a59ad6b
DJ
8897 /* If this symbol is defined in a dynamic object, or we are creating
8898 a shared library, we will need to copy any R_MIPS_32 or
8899 R_MIPS_REL32 relocs against it into the output file. */
0e1862bb 8900 if (! bfd_link_relocatable (info)
9a59ad6b
DJ
8901 && hmips->possibly_dynamic_relocs != 0
8902 && (h->root.type == bfd_link_hash_defweak
625ef6dc 8903 || (!h->def_regular && !ELF_COMMON_DEF_P (h))
0e1862bb 8904 || bfd_link_pic (info)))
9a59ad6b
DJ
8905 {
8906 bfd_boolean do_copy = TRUE;
8907
8908 if (h->root.type == bfd_link_hash_undefweak)
8909 {
8910 /* Do not copy relocations for undefined weak symbols with
8911 non-default visibility. */
8912 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8913 do_copy = FALSE;
8914
8915 /* Make sure undefined weak symbols are output as a dynamic
8916 symbol in PIEs. */
8917 else if (h->dynindx == -1 && !h->forced_local)
8918 {
8919 if (! bfd_elf_link_record_dynamic_symbol (info, h))
8920 return FALSE;
8921 }
8922 }
8923
8924 if (do_copy)
8925 {
aff469fa 8926 /* Even though we don't directly need a GOT entry for this symbol,
f7ff1106
RS
8927 the SVR4 psABI requires it to have a dynamic symbol table
8928 index greater that DT_MIPS_GOTSYM if there are dynamic
8929 relocations against it.
8930
8931 VxWorks does not enforce the same mapping between the GOT
8932 and the symbol table, so the same requirement does not
8933 apply there. */
6ccf4795
RS
8934 if (!htab->is_vxworks)
8935 {
8936 if (hmips->global_got_area > GGA_RELOC_ONLY)
8937 hmips->global_got_area = GGA_RELOC_ONLY;
8938 hmips->got_only_for_calls = FALSE;
8939 }
aff469fa 8940
9a59ad6b
DJ
8941 mips_elf_allocate_dynamic_relocations
8942 (dynobj, info, hmips->possibly_dynamic_relocs);
8943 if (hmips->readonly_reloc)
8944 /* We tell the dynamic linker that there are relocations
8945 against the text segment. */
8946 info->flags |= DF_TEXTREL;
8947 }
8948 }
8949
8950 return TRUE;
8951}
8952
b49e97c9
TS
8953/* Adjust a symbol defined by a dynamic object and referenced by a
8954 regular object. The current definition is in some section of the
8955 dynamic object, but we're not including those sections. We have to
8956 change the definition to something the rest of the link can
8957 understand. */
8958
b34976b6 8959bfd_boolean
9719ad41
RS
8960_bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8961 struct elf_link_hash_entry *h)
b49e97c9
TS
8962{
8963 bfd *dynobj;
8964 struct mips_elf_link_hash_entry *hmips;
5108fc1b 8965 struct mips_elf_link_hash_table *htab;
b49e97c9 8966
5108fc1b 8967 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8968 BFD_ASSERT (htab != NULL);
8969
b49e97c9 8970 dynobj = elf_hash_table (info)->dynobj;
861fb55a 8971 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9
TS
8972
8973 /* Make sure we know what is going on here. */
8974 BFD_ASSERT (dynobj != NULL
f5385ebf 8975 && (h->needs_plt
f6e332e6 8976 || h->u.weakdef != NULL
f5385ebf
AM
8977 || (h->def_dynamic
8978 && h->ref_regular
8979 && !h->def_regular)));
b49e97c9 8980
b49e97c9 8981 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9 8982
861fb55a
DJ
8983 /* If there are call relocations against an externally-defined symbol,
8984 see whether we can create a MIPS lazy-binding stub for it. We can
8985 only do this if all references to the function are through call
8986 relocations, and in that case, the traditional lazy-binding stubs
8987 are much more efficient than PLT entries.
8988
8989 Traditional stubs are only available on SVR4 psABI-based systems;
8990 VxWorks always uses PLTs instead. */
8991 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
b49e97c9
TS
8992 {
8993 if (! elf_hash_table (info)->dynamic_sections_created)
b34976b6 8994 return TRUE;
b49e97c9
TS
8995
8996 /* If this symbol is not defined in a regular file, then set
8997 the symbol to the stub location. This is required to make
8998 function pointers compare as equal between the normal
8999 executable and the shared library. */
f5385ebf 9000 if (!h->def_regular)
b49e97c9 9001 {
33bb52fb
RS
9002 hmips->needs_lazy_stub = TRUE;
9003 htab->lazy_stub_count++;
b34976b6 9004 return TRUE;
b49e97c9
TS
9005 }
9006 }
861fb55a
DJ
9007 /* As above, VxWorks requires PLT entries for externally-defined
9008 functions that are only accessed through call relocations.
b49e97c9 9009
861fb55a
DJ
9010 Both VxWorks and non-VxWorks targets also need PLT entries if there
9011 are static-only relocations against an externally-defined function.
9012 This can technically occur for shared libraries if there are
9013 branches to the symbol, although it is unlikely that this will be
9014 used in practice due to the short ranges involved. It can occur
9015 for any relative or absolute relocation in executables; in that
9016 case, the PLT entry becomes the function's canonical address. */
9017 else if (((h->needs_plt && !hmips->no_fn_stub)
9018 || (h->type == STT_FUNC && hmips->has_static_relocs))
9019 && htab->use_plts_and_copy_relocs
9020 && !SYMBOL_CALLS_LOCAL (info, h)
9021 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9022 && h->root.type == bfd_link_hash_undefweak))
b49e97c9 9023 {
1bbce132
MR
9024 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9025 bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9026
9027 /* If this is the first symbol to need a PLT entry, then make some
9028 basic setup. Also work out PLT entry sizes. We'll need them
9029 for PLT offset calculations. */
9030 if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
861fb55a
DJ
9031 {
9032 BFD_ASSERT (htab->sgotplt->size == 0);
1bbce132 9033 BFD_ASSERT (htab->plt_got_index == 0);
0a44bf69 9034
861fb55a
DJ
9035 /* If we're using the PLT additions to the psABI, each PLT
9036 entry is 16 bytes and the PLT0 entry is 32 bytes.
9037 Encourage better cache usage by aligning. We do this
9038 lazily to avoid pessimizing traditional objects. */
9039 if (!htab->is_vxworks
9040 && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9041 return FALSE;
0a44bf69 9042
861fb55a
DJ
9043 /* Make sure that .got.plt is word-aligned. We do this lazily
9044 for the same reason as above. */
9045 if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9046 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9047 return FALSE;
0a44bf69 9048
861fb55a
DJ
9049 /* On non-VxWorks targets, the first two entries in .got.plt
9050 are reserved. */
9051 if (!htab->is_vxworks)
1bbce132
MR
9052 htab->plt_got_index
9053 += (get_elf_backend_data (dynobj)->got_header_size
9054 / MIPS_ELF_GOT_SIZE (dynobj));
0a44bf69 9055
861fb55a
DJ
9056 /* On VxWorks, also allocate room for the header's
9057 .rela.plt.unloaded entries. */
0e1862bb 9058 if (htab->is_vxworks && !bfd_link_pic (info))
0a44bf69 9059 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
1bbce132
MR
9060
9061 /* Now work out the sizes of individual PLT entries. */
0e1862bb 9062 if (htab->is_vxworks && bfd_link_pic (info))
1bbce132
MR
9063 htab->plt_mips_entry_size
9064 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9065 else if (htab->is_vxworks)
9066 htab->plt_mips_entry_size
9067 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9068 else if (newabi_p)
9069 htab->plt_mips_entry_size
9070 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
833794fc 9071 else if (!micromips_p)
1bbce132
MR
9072 {
9073 htab->plt_mips_entry_size
9074 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9075 htab->plt_comp_entry_size
833794fc
MR
9076 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9077 }
9078 else if (htab->insn32)
9079 {
9080 htab->plt_mips_entry_size
9081 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9082 htab->plt_comp_entry_size
9083 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
1bbce132
MR
9084 }
9085 else
9086 {
9087 htab->plt_mips_entry_size
9088 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9089 htab->plt_comp_entry_size
833794fc 9090 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
1bbce132 9091 }
0a44bf69
RS
9092 }
9093
1bbce132
MR
9094 if (h->plt.plist == NULL)
9095 h->plt.plist = mips_elf_make_plt_record (dynobj);
9096 if (h->plt.plist == NULL)
9097 return FALSE;
9098
9099 /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9100 n32 or n64, so always use a standard entry there.
9101
9102 If the symbol has a MIPS16 call stub and gets a PLT entry, then
9103 all MIPS16 calls will go via that stub, and there is no benefit
9104 to having a MIPS16 entry. And in the case of call_stub a
9105 standard entry actually has to be used as the stub ends with a J
9106 instruction. */
9107 if (newabi_p
9108 || htab->is_vxworks
9109 || hmips->call_stub
9110 || hmips->call_fp_stub)
9111 {
9112 h->plt.plist->need_mips = TRUE;
9113 h->plt.plist->need_comp = FALSE;
9114 }
9115
9116 /* Otherwise, if there are no direct calls to the function, we
9117 have a free choice of whether to use standard or compressed
9118 entries. Prefer microMIPS entries if the object is known to
9119 contain microMIPS code, so that it becomes possible to create
9120 pure microMIPS binaries. Prefer standard entries otherwise,
9121 because MIPS16 ones are no smaller and are usually slower. */
9122 if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9123 {
9124 if (micromips_p)
9125 h->plt.plist->need_comp = TRUE;
9126 else
9127 h->plt.plist->need_mips = TRUE;
9128 }
9129
9130 if (h->plt.plist->need_mips)
9131 {
9132 h->plt.plist->mips_offset = htab->plt_mips_offset;
9133 htab->plt_mips_offset += htab->plt_mips_entry_size;
9134 }
9135 if (h->plt.plist->need_comp)
9136 {
9137 h->plt.plist->comp_offset = htab->plt_comp_offset;
9138 htab->plt_comp_offset += htab->plt_comp_entry_size;
9139 }
9140
9141 /* Reserve the corresponding .got.plt entry now too. */
9142 h->plt.plist->gotplt_index = htab->plt_got_index++;
0a44bf69
RS
9143
9144 /* If the output file has no definition of the symbol, set the
861fb55a 9145 symbol's value to the address of the stub. */
0e1862bb 9146 if (!bfd_link_pic (info) && !h->def_regular)
1bbce132 9147 hmips->use_plt_entry = TRUE;
0a44bf69 9148
1bbce132 9149 /* Make room for the R_MIPS_JUMP_SLOT relocation. */
861fb55a
DJ
9150 htab->srelplt->size += (htab->is_vxworks
9151 ? MIPS_ELF_RELA_SIZE (dynobj)
9152 : MIPS_ELF_REL_SIZE (dynobj));
0a44bf69
RS
9153
9154 /* Make room for the .rela.plt.unloaded relocations. */
0e1862bb 9155 if (htab->is_vxworks && !bfd_link_pic (info))
0a44bf69
RS
9156 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9157
861fb55a
DJ
9158 /* All relocations against this symbol that could have been made
9159 dynamic will now refer to the PLT entry instead. */
9160 hmips->possibly_dynamic_relocs = 0;
0a44bf69 9161
0a44bf69
RS
9162 return TRUE;
9163 }
9164
9165 /* If this is a weak symbol, and there is a real definition, the
9166 processor independent code will have arranged for us to see the
9167 real definition first, and we can just use the same value. */
9168 if (h->u.weakdef != NULL)
9169 {
9170 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9171 || h->u.weakdef->root.type == bfd_link_hash_defweak);
9172 h->root.u.def.section = h->u.weakdef->root.u.def.section;
9173 h->root.u.def.value = h->u.weakdef->root.u.def.value;
9174 return TRUE;
9175 }
9176
861fb55a
DJ
9177 /* Otherwise, there is nothing further to do for symbols defined
9178 in regular objects. */
9179 if (h->def_regular)
0a44bf69
RS
9180 return TRUE;
9181
861fb55a
DJ
9182 /* There's also nothing more to do if we'll convert all relocations
9183 against this symbol into dynamic relocations. */
9184 if (!hmips->has_static_relocs)
9185 return TRUE;
9186
9187 /* We're now relying on copy relocations. Complain if we have
9188 some that we can't convert. */
0e1862bb 9189 if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
861fb55a
DJ
9190 {
9191 (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9192 "dynamic symbol %s"),
9193 h->root.root.string);
9194 bfd_set_error (bfd_error_bad_value);
9195 return FALSE;
9196 }
9197
0a44bf69
RS
9198 /* We must allocate the symbol in our .dynbss section, which will
9199 become part of the .bss section of the executable. There will be
9200 an entry for this symbol in the .dynsym section. The dynamic
9201 object will contain position independent code, so all references
9202 from the dynamic object to this symbol will go through the global
9203 offset table. The dynamic linker will use the .dynsym entry to
9204 determine the address it must put in the global offset table, so
9205 both the dynamic object and the regular object will refer to the
9206 same memory location for the variable. */
9207
9208 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9209 {
861fb55a
DJ
9210 if (htab->is_vxworks)
9211 htab->srelbss->size += sizeof (Elf32_External_Rela);
9212 else
9213 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
0a44bf69
RS
9214 h->needs_copy = 1;
9215 }
9216
861fb55a
DJ
9217 /* All relocations against this symbol that could have been made
9218 dynamic will now refer to the local copy instead. */
9219 hmips->possibly_dynamic_relocs = 0;
9220
6cabe1ea 9221 return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
0a44bf69 9222}
b49e97c9
TS
9223\f
9224/* This function is called after all the input files have been read,
9225 and the input sections have been assigned to output sections. We
9226 check for any mips16 stub sections that we can discard. */
9227
b34976b6 9228bfd_boolean
9719ad41
RS
9229_bfd_mips_elf_always_size_sections (bfd *output_bfd,
9230 struct bfd_link_info *info)
b49e97c9 9231{
351cdf24 9232 asection *sect;
0a44bf69 9233 struct mips_elf_link_hash_table *htab;
861fb55a 9234 struct mips_htab_traverse_info hti;
0a44bf69
RS
9235
9236 htab = mips_elf_hash_table (info);
4dfe6ac6 9237 BFD_ASSERT (htab != NULL);
f4416af6 9238
b49e97c9 9239 /* The .reginfo section has a fixed size. */
351cdf24
MF
9240 sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9241 if (sect != NULL)
9242 bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9243
9244 /* The .MIPS.abiflags section has a fixed size. */
9245 sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9246 if (sect != NULL)
9247 bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
b49e97c9 9248
861fb55a
DJ
9249 hti.info = info;
9250 hti.output_bfd = output_bfd;
9251 hti.error = FALSE;
9252 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9253 mips_elf_check_symbols, &hti);
9254 if (hti.error)
9255 return FALSE;
f4416af6 9256
33bb52fb
RS
9257 return TRUE;
9258}
9259
9260/* If the link uses a GOT, lay it out and work out its size. */
9261
9262static bfd_boolean
9263mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9264{
9265 bfd *dynobj;
9266 asection *s;
9267 struct mips_got_info *g;
33bb52fb
RS
9268 bfd_size_type loadable_size = 0;
9269 bfd_size_type page_gotno;
d7206569 9270 bfd *ibfd;
ab361d49 9271 struct mips_elf_traverse_got_arg tga;
33bb52fb
RS
9272 struct mips_elf_link_hash_table *htab;
9273
9274 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
9275 BFD_ASSERT (htab != NULL);
9276
a8028dd0 9277 s = htab->sgot;
f4416af6 9278 if (s == NULL)
b34976b6 9279 return TRUE;
b49e97c9 9280
33bb52fb 9281 dynobj = elf_hash_table (info)->dynobj;
a8028dd0
RS
9282 g = htab->got_info;
9283
861fb55a
DJ
9284 /* Allocate room for the reserved entries. VxWorks always reserves
9285 3 entries; other objects only reserve 2 entries. */
cb22ccf4 9286 BFD_ASSERT (g->assigned_low_gotno == 0);
861fb55a
DJ
9287 if (htab->is_vxworks)
9288 htab->reserved_gotno = 3;
9289 else
9290 htab->reserved_gotno = 2;
9291 g->local_gotno += htab->reserved_gotno;
cb22ccf4 9292 g->assigned_low_gotno = htab->reserved_gotno;
861fb55a 9293
6c42ddb9
RS
9294 /* Decide which symbols need to go in the global part of the GOT and
9295 count the number of reloc-only GOT symbols. */
020d7251 9296 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
f4416af6 9297
13db6b44
RS
9298 if (!mips_elf_resolve_final_got_entries (info, g))
9299 return FALSE;
9300
33bb52fb
RS
9301 /* Calculate the total loadable size of the output. That
9302 will give us the maximum number of GOT_PAGE entries
9303 required. */
c72f2fb2 9304 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
33bb52fb
RS
9305 {
9306 asection *subsection;
5108fc1b 9307
d7206569 9308 for (subsection = ibfd->sections;
33bb52fb
RS
9309 subsection;
9310 subsection = subsection->next)
9311 {
9312 if ((subsection->flags & SEC_ALLOC) == 0)
9313 continue;
9314 loadable_size += ((subsection->size + 0xf)
9315 &~ (bfd_size_type) 0xf);
9316 }
9317 }
f4416af6 9318
0a44bf69 9319 if (htab->is_vxworks)
738e5348 9320 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
0a44bf69
RS
9321 relocations against local symbols evaluate to "G", and the EABI does
9322 not include R_MIPS_GOT_PAGE. */
c224138d 9323 page_gotno = 0;
0a44bf69
RS
9324 else
9325 /* Assume there are two loadable segments consisting of contiguous
9326 sections. Is 5 enough? */
c224138d
RS
9327 page_gotno = (loadable_size >> 16) + 5;
9328
13db6b44 9329 /* Choose the smaller of the two page estimates; both are intended to be
c224138d
RS
9330 conservative. */
9331 if (page_gotno > g->page_gotno)
9332 page_gotno = g->page_gotno;
f4416af6 9333
c224138d 9334 g->local_gotno += page_gotno;
cb22ccf4 9335 g->assigned_high_gotno = g->local_gotno - 1;
ab361d49 9336
ab361d49
RS
9337 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9338 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
0f20cc35
DJ
9339 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9340
0a44bf69
RS
9341 /* VxWorks does not support multiple GOTs. It initializes $gp to
9342 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9343 dynamic loader. */
57093f5e 9344 if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
0f20cc35 9345 {
a8028dd0 9346 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
0f20cc35
DJ
9347 return FALSE;
9348 }
9349 else
9350 {
d7206569
RS
9351 /* Record that all bfds use G. This also has the effect of freeing
9352 the per-bfd GOTs, which we no longer need. */
c72f2fb2 9353 for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
d7206569
RS
9354 if (mips_elf_bfd_got (ibfd, FALSE))
9355 mips_elf_replace_bfd_got (ibfd, g);
9356 mips_elf_replace_bfd_got (output_bfd, g);
9357
33bb52fb 9358 /* Set up TLS entries. */
0f20cc35 9359 g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
72e7511a
RS
9360 tga.info = info;
9361 tga.g = g;
9362 tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9363 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9364 if (!tga.g)
9365 return FALSE;
1fd20d70
RS
9366 BFD_ASSERT (g->tls_assigned_gotno
9367 == g->global_gotno + g->local_gotno + g->tls_gotno);
33bb52fb 9368
57093f5e 9369 /* Each VxWorks GOT entry needs an explicit relocation. */
0e1862bb 9370 if (htab->is_vxworks && bfd_link_pic (info))
57093f5e
RS
9371 g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9372
33bb52fb 9373 /* Allocate room for the TLS relocations. */
ab361d49
RS
9374 if (g->relocs)
9375 mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
0f20cc35 9376 }
b49e97c9 9377
b34976b6 9378 return TRUE;
b49e97c9
TS
9379}
9380
33bb52fb
RS
9381/* Estimate the size of the .MIPS.stubs section. */
9382
9383static void
9384mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9385{
9386 struct mips_elf_link_hash_table *htab;
9387 bfd_size_type dynsymcount;
9388
9389 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
9390 BFD_ASSERT (htab != NULL);
9391
33bb52fb
RS
9392 if (htab->lazy_stub_count == 0)
9393 return;
9394
9395 /* IRIX rld assumes that a function stub isn't at the end of the .text
9396 section, so add a dummy entry to the end. */
9397 htab->lazy_stub_count++;
9398
9399 /* Get a worst-case estimate of the number of dynamic symbols needed.
9400 At this point, dynsymcount does not account for section symbols
9401 and count_section_dynsyms may overestimate the number that will
9402 be needed. */
9403 dynsymcount = (elf_hash_table (info)->dynsymcount
9404 + count_section_dynsyms (output_bfd, info));
9405
1bbce132
MR
9406 /* Determine the size of one stub entry. There's no disadvantage
9407 from using microMIPS code here, so for the sake of pure-microMIPS
9408 binaries we prefer it whenever there's any microMIPS code in
9409 output produced at all. This has a benefit of stubs being
833794fc
MR
9410 shorter by 4 bytes each too, unless in the insn32 mode. */
9411 if (!MICROMIPS_P (output_bfd))
1bbce132
MR
9412 htab->function_stub_size = (dynsymcount > 0x10000
9413 ? MIPS_FUNCTION_STUB_BIG_SIZE
9414 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
833794fc
MR
9415 else if (htab->insn32)
9416 htab->function_stub_size = (dynsymcount > 0x10000
9417 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9418 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9419 else
9420 htab->function_stub_size = (dynsymcount > 0x10000
9421 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9422 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
33bb52fb
RS
9423
9424 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9425}
9426
1bbce132
MR
9427/* A mips_elf_link_hash_traverse callback for which DATA points to a
9428 mips_htab_traverse_info. If H needs a traditional MIPS lazy-binding
9429 stub, allocate an entry in the stubs section. */
33bb52fb
RS
9430
9431static bfd_boolean
af924177 9432mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
33bb52fb 9433{
1bbce132 9434 struct mips_htab_traverse_info *hti = data;
33bb52fb 9435 struct mips_elf_link_hash_table *htab;
1bbce132
MR
9436 struct bfd_link_info *info;
9437 bfd *output_bfd;
9438
9439 info = hti->info;
9440 output_bfd = hti->output_bfd;
9441 htab = mips_elf_hash_table (info);
9442 BFD_ASSERT (htab != NULL);
33bb52fb 9443
33bb52fb
RS
9444 if (h->needs_lazy_stub)
9445 {
1bbce132
MR
9446 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9447 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9448 bfd_vma isa_bit = micromips_p;
9449
9450 BFD_ASSERT (htab->root.dynobj != NULL);
9451 if (h->root.plt.plist == NULL)
9452 h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9453 if (h->root.plt.plist == NULL)
9454 {
9455 hti->error = TRUE;
9456 return FALSE;
9457 }
33bb52fb 9458 h->root.root.u.def.section = htab->sstubs;
1bbce132
MR
9459 h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9460 h->root.plt.plist->stub_offset = htab->sstubs->size;
9461 h->root.other = other;
33bb52fb
RS
9462 htab->sstubs->size += htab->function_stub_size;
9463 }
9464 return TRUE;
9465}
9466
9467/* Allocate offsets in the stubs section to each symbol that needs one.
9468 Set the final size of the .MIPS.stub section. */
9469
1bbce132 9470static bfd_boolean
33bb52fb
RS
9471mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9472{
1bbce132
MR
9473 bfd *output_bfd = info->output_bfd;
9474 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9475 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9476 bfd_vma isa_bit = micromips_p;
33bb52fb 9477 struct mips_elf_link_hash_table *htab;
1bbce132
MR
9478 struct mips_htab_traverse_info hti;
9479 struct elf_link_hash_entry *h;
9480 bfd *dynobj;
33bb52fb
RS
9481
9482 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
9483 BFD_ASSERT (htab != NULL);
9484
33bb52fb 9485 if (htab->lazy_stub_count == 0)
1bbce132 9486 return TRUE;
33bb52fb
RS
9487
9488 htab->sstubs->size = 0;
1bbce132
MR
9489 hti.info = info;
9490 hti.output_bfd = output_bfd;
9491 hti.error = FALSE;
9492 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9493 if (hti.error)
9494 return FALSE;
33bb52fb
RS
9495 htab->sstubs->size += htab->function_stub_size;
9496 BFD_ASSERT (htab->sstubs->size
9497 == htab->lazy_stub_count * htab->function_stub_size);
1bbce132
MR
9498
9499 dynobj = elf_hash_table (info)->dynobj;
9500 BFD_ASSERT (dynobj != NULL);
9501 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9502 if (h == NULL)
9503 return FALSE;
9504 h->root.u.def.value = isa_bit;
9505 h->other = other;
9506 h->type = STT_FUNC;
9507
9508 return TRUE;
9509}
9510
9511/* A mips_elf_link_hash_traverse callback for which DATA points to a
9512 bfd_link_info. If H uses the address of a PLT entry as the value
9513 of the symbol, then set the entry in the symbol table now. Prefer
9514 a standard MIPS PLT entry. */
9515
9516static bfd_boolean
9517mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9518{
9519 struct bfd_link_info *info = data;
9520 bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9521 struct mips_elf_link_hash_table *htab;
9522 unsigned int other;
9523 bfd_vma isa_bit;
9524 bfd_vma val;
9525
9526 htab = mips_elf_hash_table (info);
9527 BFD_ASSERT (htab != NULL);
9528
9529 if (h->use_plt_entry)
9530 {
9531 BFD_ASSERT (h->root.plt.plist != NULL);
9532 BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9533 || h->root.plt.plist->comp_offset != MINUS_ONE);
9534
9535 val = htab->plt_header_size;
9536 if (h->root.plt.plist->mips_offset != MINUS_ONE)
9537 {
9538 isa_bit = 0;
9539 val += h->root.plt.plist->mips_offset;
9540 other = 0;
9541 }
9542 else
9543 {
9544 isa_bit = 1;
9545 val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9546 other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9547 }
9548 val += isa_bit;
9549 /* For VxWorks, point at the PLT load stub rather than the lazy
9550 resolution stub; this stub will become the canonical function
9551 address. */
9552 if (htab->is_vxworks)
9553 val += 8;
9554
9555 h->root.root.u.def.section = htab->splt;
9556 h->root.root.u.def.value = val;
9557 h->root.other = other;
9558 }
9559
9560 return TRUE;
33bb52fb
RS
9561}
9562
b49e97c9
TS
9563/* Set the sizes of the dynamic sections. */
9564
b34976b6 9565bfd_boolean
9719ad41
RS
9566_bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9567 struct bfd_link_info *info)
b49e97c9
TS
9568{
9569 bfd *dynobj;
861fb55a 9570 asection *s, *sreldyn;
b34976b6 9571 bfd_boolean reltext;
0a44bf69 9572 struct mips_elf_link_hash_table *htab;
b49e97c9 9573
0a44bf69 9574 htab = mips_elf_hash_table (info);
4dfe6ac6 9575 BFD_ASSERT (htab != NULL);
b49e97c9
TS
9576 dynobj = elf_hash_table (info)->dynobj;
9577 BFD_ASSERT (dynobj != NULL);
9578
9579 if (elf_hash_table (info)->dynamic_sections_created)
9580 {
9581 /* Set the contents of the .interp section to the interpreter. */
0e1862bb 9582 if (bfd_link_executable (info))
b49e97c9 9583 {
3d4d4302 9584 s = bfd_get_linker_section (dynobj, ".interp");
b49e97c9 9585 BFD_ASSERT (s != NULL);
eea6121a 9586 s->size
b49e97c9
TS
9587 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9588 s->contents
9589 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9590 }
861fb55a 9591
1bbce132
MR
9592 /* Figure out the size of the PLT header if we know that we
9593 are using it. For the sake of cache alignment always use
9594 a standard header whenever any standard entries are present
9595 even if microMIPS entries are present as well. This also
9596 lets the microMIPS header rely on the value of $v0 only set
9597 by microMIPS entries, for a small size reduction.
9598
9599 Set symbol table entry values for symbols that use the
9600 address of their PLT entry now that we can calculate it.
9601
9602 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9603 haven't already in _bfd_elf_create_dynamic_sections. */
9604 if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
861fb55a 9605 {
1bbce132
MR
9606 bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9607 && !htab->plt_mips_offset);
9608 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9609 bfd_vma isa_bit = micromips_p;
861fb55a 9610 struct elf_link_hash_entry *h;
1bbce132 9611 bfd_vma size;
861fb55a
DJ
9612
9613 BFD_ASSERT (htab->use_plts_and_copy_relocs);
1bbce132
MR
9614 BFD_ASSERT (htab->sgotplt->size == 0);
9615 BFD_ASSERT (htab->splt->size == 0);
9616
0e1862bb 9617 if (htab->is_vxworks && bfd_link_pic (info))
1bbce132
MR
9618 size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9619 else if (htab->is_vxworks)
9620 size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9621 else if (ABI_64_P (output_bfd))
9622 size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9623 else if (ABI_N32_P (output_bfd))
9624 size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9625 else if (!micromips_p)
9626 size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
833794fc
MR
9627 else if (htab->insn32)
9628 size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
1bbce132
MR
9629 else
9630 size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
861fb55a 9631
1bbce132
MR
9632 htab->plt_header_is_comp = micromips_p;
9633 htab->plt_header_size = size;
9634 htab->splt->size = (size
9635 + htab->plt_mips_offset
9636 + htab->plt_comp_offset);
9637 htab->sgotplt->size = (htab->plt_got_index
9638 * MIPS_ELF_GOT_SIZE (dynobj));
9639
9640 mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9641
9642 if (htab->root.hplt == NULL)
9643 {
9644 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9645 "_PROCEDURE_LINKAGE_TABLE_");
9646 htab->root.hplt = h;
9647 if (h == NULL)
9648 return FALSE;
9649 }
9650
9651 h = htab->root.hplt;
9652 h->root.u.def.value = isa_bit;
9653 h->other = other;
861fb55a
DJ
9654 h->type = STT_FUNC;
9655 }
9656 }
4e41d0d7 9657
9a59ad6b 9658 /* Allocate space for global sym dynamic relocs. */
2c3fc389 9659 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9a59ad6b 9660
33bb52fb
RS
9661 mips_elf_estimate_stub_size (output_bfd, info);
9662
9663 if (!mips_elf_lay_out_got (output_bfd, info))
9664 return FALSE;
9665
9666 mips_elf_lay_out_lazy_stubs (info);
9667
b49e97c9
TS
9668 /* The check_relocs and adjust_dynamic_symbol entry points have
9669 determined the sizes of the various dynamic sections. Allocate
9670 memory for them. */
b34976b6 9671 reltext = FALSE;
b49e97c9
TS
9672 for (s = dynobj->sections; s != NULL; s = s->next)
9673 {
9674 const char *name;
b49e97c9
TS
9675
9676 /* It's OK to base decisions on the section name, because none
9677 of the dynobj section names depend upon the input files. */
9678 name = bfd_get_section_name (dynobj, s);
9679
9680 if ((s->flags & SEC_LINKER_CREATED) == 0)
9681 continue;
9682
0112cd26 9683 if (CONST_STRNEQ (name, ".rel"))
b49e97c9 9684 {
c456f082 9685 if (s->size != 0)
b49e97c9
TS
9686 {
9687 const char *outname;
9688 asection *target;
9689
9690 /* If this relocation section applies to a read only
9691 section, then we probably need a DT_TEXTREL entry.
0a44bf69 9692 If the relocation section is .rel(a).dyn, we always
b49e97c9
TS
9693 assert a DT_TEXTREL entry rather than testing whether
9694 there exists a relocation to a read only section or
9695 not. */
9696 outname = bfd_get_section_name (output_bfd,
9697 s->output_section);
9698 target = bfd_get_section_by_name (output_bfd, outname + 4);
9699 if ((target != NULL
9700 && (target->flags & SEC_READONLY) != 0
9701 && (target->flags & SEC_ALLOC) != 0)
0a44bf69 9702 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
b34976b6 9703 reltext = TRUE;
b49e97c9
TS
9704
9705 /* We use the reloc_count field as a counter if we need
9706 to copy relocs into the output file. */
0a44bf69 9707 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
b49e97c9 9708 s->reloc_count = 0;
f4416af6
AO
9709
9710 /* If combreloc is enabled, elf_link_sort_relocs() will
9711 sort relocations, but in a different way than we do,
9712 and before we're done creating relocations. Also, it
9713 will move them around between input sections'
9714 relocation's contents, so our sorting would be
9715 broken, so don't let it run. */
9716 info->combreloc = 0;
b49e97c9
TS
9717 }
9718 }
0e1862bb 9719 else if (bfd_link_executable (info)
b49e97c9 9720 && ! mips_elf_hash_table (info)->use_rld_obj_head
0112cd26 9721 && CONST_STRNEQ (name, ".rld_map"))
b49e97c9 9722 {
5108fc1b 9723 /* We add a room for __rld_map. It will be filled in by the
b49e97c9 9724 rtld to contain a pointer to the _r_debug structure. */
b4082c70 9725 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
b49e97c9
TS
9726 }
9727 else if (SGI_COMPAT (output_bfd)
0112cd26 9728 && CONST_STRNEQ (name, ".compact_rel"))
eea6121a 9729 s->size += mips_elf_hash_table (info)->compact_rel_size;
861fb55a
DJ
9730 else if (s == htab->splt)
9731 {
9732 /* If the last PLT entry has a branch delay slot, allocate
6d30f5b2
NC
9733 room for an extra nop to fill the delay slot. This is
9734 for CPUs without load interlocking. */
9735 if (! LOAD_INTERLOCKS_P (output_bfd)
9736 && ! htab->is_vxworks && s->size > 0)
861fb55a
DJ
9737 s->size += 4;
9738 }
0112cd26 9739 else if (! CONST_STRNEQ (name, ".init")
33bb52fb 9740 && s != htab->sgot
0a44bf69 9741 && s != htab->sgotplt
861fb55a
DJ
9742 && s != htab->sstubs
9743 && s != htab->sdynbss)
b49e97c9
TS
9744 {
9745 /* It's not one of our sections, so don't allocate space. */
9746 continue;
9747 }
9748
c456f082 9749 if (s->size == 0)
b49e97c9 9750 {
8423293d 9751 s->flags |= SEC_EXCLUDE;
b49e97c9
TS
9752 continue;
9753 }
9754
c456f082
AM
9755 if ((s->flags & SEC_HAS_CONTENTS) == 0)
9756 continue;
9757
b49e97c9 9758 /* Allocate memory for the section contents. */
eea6121a 9759 s->contents = bfd_zalloc (dynobj, s->size);
c456f082 9760 if (s->contents == NULL)
b49e97c9
TS
9761 {
9762 bfd_set_error (bfd_error_no_memory);
b34976b6 9763 return FALSE;
b49e97c9
TS
9764 }
9765 }
9766
9767 if (elf_hash_table (info)->dynamic_sections_created)
9768 {
9769 /* Add some entries to the .dynamic section. We fill in the
9770 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9771 must add the entries now so that we get the correct size for
5750dcec 9772 the .dynamic section. */
af5978fb
RS
9773
9774 /* SGI object has the equivalence of DT_DEBUG in the
5750dcec 9775 DT_MIPS_RLD_MAP entry. This must come first because glibc
6e6be592
MR
9776 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9777 may only look at the first one they see. */
0e1862bb 9778 if (!bfd_link_pic (info)
af5978fb
RS
9779 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9780 return FALSE;
b49e97c9 9781
0e1862bb 9782 if (bfd_link_executable (info)
a5499fa4
MF
9783 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9784 return FALSE;
9785
5750dcec
DJ
9786 /* The DT_DEBUG entry may be filled in by the dynamic linker and
9787 used by the debugger. */
0e1862bb 9788 if (bfd_link_executable (info)
5750dcec
DJ
9789 && !SGI_COMPAT (output_bfd)
9790 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9791 return FALSE;
9792
0a44bf69 9793 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
b49e97c9
TS
9794 info->flags |= DF_TEXTREL;
9795
9796 if ((info->flags & DF_TEXTREL) != 0)
9797 {
9798 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
b34976b6 9799 return FALSE;
943284cc
DJ
9800
9801 /* Clear the DF_TEXTREL flag. It will be set again if we
9802 write out an actual text relocation; we may not, because
9803 at this point we do not know whether e.g. any .eh_frame
9804 absolute relocations have been converted to PC-relative. */
9805 info->flags &= ~DF_TEXTREL;
b49e97c9
TS
9806 }
9807
9808 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
b34976b6 9809 return FALSE;
b49e97c9 9810
861fb55a 9811 sreldyn = mips_elf_rel_dyn_section (info, FALSE);
0a44bf69 9812 if (htab->is_vxworks)
b49e97c9 9813 {
0a44bf69
RS
9814 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not
9815 use any of the DT_MIPS_* tags. */
861fb55a 9816 if (sreldyn && sreldyn->size > 0)
0a44bf69
RS
9817 {
9818 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9819 return FALSE;
b49e97c9 9820
0a44bf69
RS
9821 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9822 return FALSE;
b49e97c9 9823
0a44bf69
RS
9824 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9825 return FALSE;
9826 }
b49e97c9 9827 }
0a44bf69
RS
9828 else
9829 {
861fb55a 9830 if (sreldyn && sreldyn->size > 0)
0a44bf69
RS
9831 {
9832 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9833 return FALSE;
b49e97c9 9834
0a44bf69
RS
9835 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9836 return FALSE;
b49e97c9 9837
0a44bf69
RS
9838 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9839 return FALSE;
9840 }
b49e97c9 9841
0a44bf69
RS
9842 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9843 return FALSE;
b49e97c9 9844
0a44bf69
RS
9845 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9846 return FALSE;
b49e97c9 9847
0a44bf69
RS
9848 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9849 return FALSE;
b49e97c9 9850
0a44bf69
RS
9851 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9852 return FALSE;
b49e97c9 9853
0a44bf69
RS
9854 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9855 return FALSE;
b49e97c9 9856
0a44bf69
RS
9857 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9858 return FALSE;
b49e97c9 9859
0a44bf69
RS
9860 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9861 return FALSE;
9862
9863 if (IRIX_COMPAT (dynobj) == ict_irix5
9864 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9865 return FALSE;
9866
9867 if (IRIX_COMPAT (dynobj) == ict_irix6
9868 && (bfd_get_section_by_name
af0edeb8 9869 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
0a44bf69
RS
9870 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9871 return FALSE;
9872 }
861fb55a
DJ
9873 if (htab->splt->size > 0)
9874 {
9875 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9876 return FALSE;
9877
9878 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9879 return FALSE;
9880
9881 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9882 return FALSE;
9883
9884 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9885 return FALSE;
9886 }
7a2b07ff
NS
9887 if (htab->is_vxworks
9888 && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9889 return FALSE;
b49e97c9
TS
9890 }
9891
b34976b6 9892 return TRUE;
b49e97c9
TS
9893}
9894\f
81d43bff
RS
9895/* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9896 Adjust its R_ADDEND field so that it is correct for the output file.
9897 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9898 and sections respectively; both use symbol indexes. */
9899
9900static void
9901mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9902 bfd *input_bfd, Elf_Internal_Sym *local_syms,
9903 asection **local_sections, Elf_Internal_Rela *rel)
9904{
9905 unsigned int r_type, r_symndx;
9906 Elf_Internal_Sym *sym;
9907 asection *sec;
9908
020d7251 9909 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
81d43bff
RS
9910 {
9911 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
df58fc94 9912 if (gprel16_reloc_p (r_type)
81d43bff 9913 || r_type == R_MIPS_GPREL32
df58fc94 9914 || literal_reloc_p (r_type))
81d43bff
RS
9915 {
9916 rel->r_addend += _bfd_get_gp_value (input_bfd);
9917 rel->r_addend -= _bfd_get_gp_value (output_bfd);
9918 }
9919
9920 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9921 sym = local_syms + r_symndx;
9922
9923 /* Adjust REL's addend to account for section merging. */
0e1862bb 9924 if (!bfd_link_relocatable (info))
81d43bff
RS
9925 {
9926 sec = local_sections[r_symndx];
9927 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9928 }
9929
9930 /* This would normally be done by the rela_normal code in elflink.c. */
9931 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9932 rel->r_addend += local_sections[r_symndx]->output_offset;
9933 }
9934}
9935
545fd46b
MR
9936/* Handle relocations against symbols from removed linkonce sections,
9937 or sections discarded by a linker script. We use this wrapper around
9938 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9939 on 64-bit ELF targets. In this case for any relocation handled, which
9940 always be the first in a triplet, the remaining two have to be processed
9941 together with the first, even if they are R_MIPS_NONE. It is the symbol
9942 index referred by the first reloc that applies to all the three and the
9943 remaining two never refer to an object symbol. And it is the final
9944 relocation (the last non-null one) that determines the output field of
9945 the whole relocation so retrieve the corresponding howto structure for
9946 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9947
9948 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9949 and therefore requires to be pasted in a loop. It also defines a block
9950 and does not protect any of its arguments, hence the extra brackets. */
9951
9952static void
9953mips_reloc_against_discarded_section (bfd *output_bfd,
9954 struct bfd_link_info *info,
9955 bfd *input_bfd, asection *input_section,
9956 Elf_Internal_Rela **rel,
9957 const Elf_Internal_Rela **relend,
9958 bfd_boolean rel_reloc,
9959 reloc_howto_type *howto,
9960 bfd_byte *contents)
9961{
9962 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9963 int count = bed->s->int_rels_per_ext_rel;
9964 unsigned int r_type;
9965 int i;
9966
9967 for (i = count - 1; i > 0; i--)
9968 {
9969 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9970 if (r_type != R_MIPS_NONE)
9971 {
9972 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9973 break;
9974 }
9975 }
9976 do
9977 {
9978 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9979 (*rel), count, (*relend),
9980 howto, i, contents);
9981 }
9982 while (0);
9983}
9984
b49e97c9
TS
9985/* Relocate a MIPS ELF section. */
9986
b34976b6 9987bfd_boolean
9719ad41
RS
9988_bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9989 bfd *input_bfd, asection *input_section,
9990 bfd_byte *contents, Elf_Internal_Rela *relocs,
9991 Elf_Internal_Sym *local_syms,
9992 asection **local_sections)
b49e97c9
TS
9993{
9994 Elf_Internal_Rela *rel;
9995 const Elf_Internal_Rela *relend;
9996 bfd_vma addend = 0;
b34976b6 9997 bfd_boolean use_saved_addend_p = FALSE;
9c5bfbb7 9998 const struct elf_backend_data *bed;
b49e97c9
TS
9999
10000 bed = get_elf_backend_data (output_bfd);
10001 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10002 for (rel = relocs; rel < relend; ++rel)
10003 {
10004 const char *name;
c9adbffe 10005 bfd_vma value = 0;
b49e97c9 10006 reloc_howto_type *howto;
ad3d9127 10007 bfd_boolean cross_mode_jump_p = FALSE;
b34976b6 10008 /* TRUE if the relocation is a RELA relocation, rather than a
b49e97c9 10009 REL relocation. */
b34976b6 10010 bfd_boolean rela_relocation_p = TRUE;
b49e97c9 10011 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9719ad41 10012 const char *msg;
ab96bf03
AM
10013 unsigned long r_symndx;
10014 asection *sec;
749b8d9d
L
10015 Elf_Internal_Shdr *symtab_hdr;
10016 struct elf_link_hash_entry *h;
d4730f92 10017 bfd_boolean rel_reloc;
b49e97c9 10018
d4730f92
BS
10019 rel_reloc = (NEWABI_P (input_bfd)
10020 && mips_elf_rel_relocation_p (input_bfd, input_section,
10021 relocs, rel));
b49e97c9 10022 /* Find the relocation howto for this relocation. */
d4730f92 10023 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
ab96bf03
AM
10024
10025 r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
749b8d9d 10026 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
020d7251 10027 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
749b8d9d
L
10028 {
10029 sec = local_sections[r_symndx];
10030 h = NULL;
10031 }
ab96bf03
AM
10032 else
10033 {
ab96bf03 10034 unsigned long extsymoff;
ab96bf03 10035
ab96bf03
AM
10036 extsymoff = 0;
10037 if (!elf_bad_symtab (input_bfd))
10038 extsymoff = symtab_hdr->sh_info;
10039 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10040 while (h->root.type == bfd_link_hash_indirect
10041 || h->root.type == bfd_link_hash_warning)
10042 h = (struct elf_link_hash_entry *) h->root.u.i.link;
10043
10044 sec = NULL;
10045 if (h->root.type == bfd_link_hash_defined
10046 || h->root.type == bfd_link_hash_defweak)
10047 sec = h->root.u.def.section;
10048 }
10049
dbaa2011 10050 if (sec != NULL && discarded_section (sec))
545fd46b
MR
10051 {
10052 mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10053 input_section, &rel, &relend,
10054 rel_reloc, howto, contents);
10055 continue;
10056 }
ab96bf03 10057
4a14403c 10058 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
b49e97c9
TS
10059 {
10060 /* Some 32-bit code uses R_MIPS_64. In particular, people use
10061 64-bit code, but make sure all their addresses are in the
10062 lowermost or uppermost 32-bit section of the 64-bit address
10063 space. Thus, when they use an R_MIPS_64 they mean what is
10064 usually meant by R_MIPS_32, with the exception that the
10065 stored value is sign-extended to 64 bits. */
b34976b6 10066 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
b49e97c9
TS
10067
10068 /* On big-endian systems, we need to lie about the position
10069 of the reloc. */
10070 if (bfd_big_endian (input_bfd))
10071 rel->r_offset += 4;
10072 }
b49e97c9
TS
10073
10074 if (!use_saved_addend_p)
10075 {
b49e97c9
TS
10076 /* If these relocations were originally of the REL variety,
10077 we must pull the addend out of the field that will be
10078 relocated. Otherwise, we simply use the contents of the
c224138d
RS
10079 RELA relocation. */
10080 if (mips_elf_rel_relocation_p (input_bfd, input_section,
10081 relocs, rel))
b49e97c9 10082 {
b34976b6 10083 rela_relocation_p = FALSE;
c224138d
RS
10084 addend = mips_elf_read_rel_addend (input_bfd, rel,
10085 howto, contents);
738e5348
RS
10086 if (hi16_reloc_p (r_type)
10087 || (got16_reloc_p (r_type)
b49e97c9 10088 && mips_elf_local_relocation_p (input_bfd, rel,
020d7251 10089 local_sections)))
b49e97c9 10090 {
c224138d
RS
10091 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10092 contents, &addend))
749b8d9d 10093 {
749b8d9d
L
10094 if (h)
10095 name = h->root.root.string;
10096 else
10097 name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10098 local_syms + r_symndx,
10099 sec);
10100 (*_bfd_error_handler)
10101 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10102 input_bfd, input_section, name, howto->name,
10103 rel->r_offset);
749b8d9d 10104 }
b49e97c9 10105 }
30ac9238
RS
10106 else
10107 addend <<= howto->rightshift;
b49e97c9
TS
10108 }
10109 else
10110 addend = rel->r_addend;
81d43bff
RS
10111 mips_elf_adjust_addend (output_bfd, info, input_bfd,
10112 local_syms, local_sections, rel);
b49e97c9
TS
10113 }
10114
0e1862bb 10115 if (bfd_link_relocatable (info))
b49e97c9 10116 {
4a14403c 10117 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
b49e97c9
TS
10118 && bfd_big_endian (input_bfd))
10119 rel->r_offset -= 4;
10120
81d43bff 10121 if (!rela_relocation_p && rel->r_addend)
5a659663 10122 {
81d43bff 10123 addend += rel->r_addend;
738e5348 10124 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
5a659663
TS
10125 addend = mips_elf_high (addend);
10126 else if (r_type == R_MIPS_HIGHER)
10127 addend = mips_elf_higher (addend);
10128 else if (r_type == R_MIPS_HIGHEST)
10129 addend = mips_elf_highest (addend);
30ac9238
RS
10130 else
10131 addend >>= howto->rightshift;
b49e97c9 10132
30ac9238
RS
10133 /* We use the source mask, rather than the destination
10134 mask because the place to which we are writing will be
10135 source of the addend in the final link. */
b49e97c9
TS
10136 addend &= howto->src_mask;
10137
5a659663 10138 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
10139 /* See the comment above about using R_MIPS_64 in the 32-bit
10140 ABI. Here, we need to update the addend. It would be
10141 possible to get away with just using the R_MIPS_32 reloc
10142 but for endianness. */
10143 {
10144 bfd_vma sign_bits;
10145 bfd_vma low_bits;
10146 bfd_vma high_bits;
10147
10148 if (addend & ((bfd_vma) 1 << 31))
10149#ifdef BFD64
10150 sign_bits = ((bfd_vma) 1 << 32) - 1;
10151#else
10152 sign_bits = -1;
10153#endif
10154 else
10155 sign_bits = 0;
10156
10157 /* If we don't know that we have a 64-bit type,
10158 do two separate stores. */
10159 if (bfd_big_endian (input_bfd))
10160 {
10161 /* Store the sign-bits (which are most significant)
10162 first. */
10163 low_bits = sign_bits;
10164 high_bits = addend;
10165 }
10166 else
10167 {
10168 low_bits = addend;
10169 high_bits = sign_bits;
10170 }
10171 bfd_put_32 (input_bfd, low_bits,
10172 contents + rel->r_offset);
10173 bfd_put_32 (input_bfd, high_bits,
10174 contents + rel->r_offset + 4);
10175 continue;
10176 }
10177
10178 if (! mips_elf_perform_relocation (info, howto, rel, addend,
10179 input_bfd, input_section,
b34976b6
AM
10180 contents, FALSE))
10181 return FALSE;
b49e97c9
TS
10182 }
10183
10184 /* Go on to the next relocation. */
10185 continue;
10186 }
10187
10188 /* In the N32 and 64-bit ABIs there may be multiple consecutive
10189 relocations for the same offset. In that case we are
10190 supposed to treat the output of each relocation as the addend
10191 for the next. */
10192 if (rel + 1 < relend
10193 && rel->r_offset == rel[1].r_offset
10194 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
b34976b6 10195 use_saved_addend_p = TRUE;
b49e97c9 10196 else
b34976b6 10197 use_saved_addend_p = FALSE;
b49e97c9
TS
10198
10199 /* Figure out what value we are supposed to relocate. */
10200 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10201 input_section, info, rel,
10202 addend, howto, local_syms,
10203 local_sections, &value,
38a7df63 10204 &name, &cross_mode_jump_p,
bce03d3d 10205 use_saved_addend_p))
b49e97c9
TS
10206 {
10207 case bfd_reloc_continue:
10208 /* There's nothing to do. */
10209 continue;
10210
10211 case bfd_reloc_undefined:
10212 /* mips_elf_calculate_relocation already called the
10213 undefined_symbol callback. There's no real point in
10214 trying to perform the relocation at this point, so we
10215 just skip ahead to the next relocation. */
10216 continue;
10217
10218 case bfd_reloc_notsupported:
10219 msg = _("internal error: unsupported relocation error");
10220 info->callbacks->warning
10221 (info, msg, name, input_bfd, input_section, rel->r_offset);
b34976b6 10222 return FALSE;
b49e97c9
TS
10223
10224 case bfd_reloc_overflow:
10225 if (use_saved_addend_p)
10226 /* Ignore overflow until we reach the last relocation for
10227 a given location. */
10228 ;
10229 else
10230 {
0e53d9da
AN
10231 struct mips_elf_link_hash_table *htab;
10232
10233 htab = mips_elf_hash_table (info);
4dfe6ac6 10234 BFD_ASSERT (htab != NULL);
b49e97c9 10235 BFD_ASSERT (name != NULL);
0e53d9da 10236 if (!htab->small_data_overflow_reported
9684f078 10237 && (gprel16_reloc_p (howto->type)
df58fc94 10238 || literal_reloc_p (howto->type)))
0e53d9da 10239 {
91d6fa6a
NC
10240 msg = _("small-data section exceeds 64KB;"
10241 " lower small-data size limit (see option -G)");
0e53d9da
AN
10242
10243 htab->small_data_overflow_reported = TRUE;
10244 (*info->callbacks->einfo) ("%P: %s\n", msg);
10245 }
b49e97c9 10246 if (! ((*info->callbacks->reloc_overflow)
dfeffb9f 10247 (info, NULL, name, howto->name, (bfd_vma) 0,
b49e97c9 10248 input_bfd, input_section, rel->r_offset)))
b34976b6 10249 return FALSE;
b49e97c9
TS
10250 }
10251 break;
10252
10253 case bfd_reloc_ok:
10254 break;
10255
df58fc94
RS
10256 case bfd_reloc_outofrange:
10257 if (jal_reloc_p (howto->type))
10258 {
10259 msg = _("JALX to a non-word-aligned address");
10260 info->callbacks->warning
10261 (info, msg, name, input_bfd, input_section, rel->r_offset);
10262 return FALSE;
10263 }
7361da2c
AB
10264 if (aligned_pcrel_reloc_p (howto->type))
10265 {
10266 msg = _("PC-relative load from unaligned address");
10267 info->callbacks->warning
10268 (info, msg, name, input_bfd, input_section, rel->r_offset);
10269 return FALSE;
10270 }
df58fc94
RS
10271 /* Fall through. */
10272
b49e97c9
TS
10273 default:
10274 abort ();
10275 break;
10276 }
10277
10278 /* If we've got another relocation for the address, keep going
10279 until we reach the last one. */
10280 if (use_saved_addend_p)
10281 {
10282 addend = value;
10283 continue;
10284 }
10285
4a14403c 10286 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
10287 /* See the comment above about using R_MIPS_64 in the 32-bit
10288 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
10289 that calculated the right value. Now, however, we
10290 sign-extend the 32-bit result to 64-bits, and store it as a
10291 64-bit value. We are especially generous here in that we
10292 go to extreme lengths to support this usage on systems with
10293 only a 32-bit VMA. */
10294 {
10295 bfd_vma sign_bits;
10296 bfd_vma low_bits;
10297 bfd_vma high_bits;
10298
10299 if (value & ((bfd_vma) 1 << 31))
10300#ifdef BFD64
10301 sign_bits = ((bfd_vma) 1 << 32) - 1;
10302#else
10303 sign_bits = -1;
10304#endif
10305 else
10306 sign_bits = 0;
10307
10308 /* If we don't know that we have a 64-bit type,
10309 do two separate stores. */
10310 if (bfd_big_endian (input_bfd))
10311 {
10312 /* Undo what we did above. */
10313 rel->r_offset -= 4;
10314 /* Store the sign-bits (which are most significant)
10315 first. */
10316 low_bits = sign_bits;
10317 high_bits = value;
10318 }
10319 else
10320 {
10321 low_bits = value;
10322 high_bits = sign_bits;
10323 }
10324 bfd_put_32 (input_bfd, low_bits,
10325 contents + rel->r_offset);
10326 bfd_put_32 (input_bfd, high_bits,
10327 contents + rel->r_offset + 4);
10328 continue;
10329 }
10330
10331 /* Actually perform the relocation. */
10332 if (! mips_elf_perform_relocation (info, howto, rel, value,
10333 input_bfd, input_section,
38a7df63 10334 contents, cross_mode_jump_p))
b34976b6 10335 return FALSE;
b49e97c9
TS
10336 }
10337
b34976b6 10338 return TRUE;
b49e97c9
TS
10339}
10340\f
861fb55a
DJ
10341/* A function that iterates over each entry in la25_stubs and fills
10342 in the code for each one. DATA points to a mips_htab_traverse_info. */
10343
10344static int
10345mips_elf_create_la25_stub (void **slot, void *data)
10346{
10347 struct mips_htab_traverse_info *hti;
10348 struct mips_elf_link_hash_table *htab;
10349 struct mips_elf_la25_stub *stub;
10350 asection *s;
10351 bfd_byte *loc;
10352 bfd_vma offset, target, target_high, target_low;
10353
10354 stub = (struct mips_elf_la25_stub *) *slot;
10355 hti = (struct mips_htab_traverse_info *) data;
10356 htab = mips_elf_hash_table (hti->info);
4dfe6ac6 10357 BFD_ASSERT (htab != NULL);
861fb55a
DJ
10358
10359 /* Create the section contents, if we haven't already. */
10360 s = stub->stub_section;
10361 loc = s->contents;
10362 if (loc == NULL)
10363 {
10364 loc = bfd_malloc (s->size);
10365 if (loc == NULL)
10366 {
10367 hti->error = TRUE;
10368 return FALSE;
10369 }
10370 s->contents = loc;
10371 }
10372
10373 /* Work out where in the section this stub should go. */
10374 offset = stub->offset;
10375
10376 /* Work out the target address. */
8f0c309a
CLT
10377 target = mips_elf_get_la25_target (stub, &s);
10378 target += s->output_section->vma + s->output_offset;
10379
861fb55a
DJ
10380 target_high = ((target + 0x8000) >> 16) & 0xffff;
10381 target_low = (target & 0xffff);
10382
10383 if (stub->stub_section != htab->strampoline)
10384 {
df58fc94 10385 /* This is a simple LUI/ADDIU stub. Zero out the beginning
861fb55a
DJ
10386 of the section and write the two instructions at the end. */
10387 memset (loc, 0, offset);
10388 loc += offset;
df58fc94
RS
10389 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10390 {
d21911ea
MR
10391 bfd_put_micromips_32 (hti->output_bfd,
10392 LA25_LUI_MICROMIPS (target_high),
10393 loc);
10394 bfd_put_micromips_32 (hti->output_bfd,
10395 LA25_ADDIU_MICROMIPS (target_low),
10396 loc + 4);
df58fc94
RS
10397 }
10398 else
10399 {
10400 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10401 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10402 }
861fb55a
DJ
10403 }
10404 else
10405 {
10406 /* This is trampoline. */
10407 loc += offset;
df58fc94
RS
10408 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10409 {
d21911ea
MR
10410 bfd_put_micromips_32 (hti->output_bfd,
10411 LA25_LUI_MICROMIPS (target_high), loc);
10412 bfd_put_micromips_32 (hti->output_bfd,
10413 LA25_J_MICROMIPS (target), loc + 4);
10414 bfd_put_micromips_32 (hti->output_bfd,
10415 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
df58fc94
RS
10416 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10417 }
10418 else
10419 {
10420 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10421 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10422 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10423 bfd_put_32 (hti->output_bfd, 0, loc + 12);
10424 }
861fb55a
DJ
10425 }
10426 return TRUE;
10427}
10428
b49e97c9
TS
10429/* If NAME is one of the special IRIX6 symbols defined by the linker,
10430 adjust it appropriately now. */
10431
10432static void
9719ad41
RS
10433mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10434 const char *name, Elf_Internal_Sym *sym)
b49e97c9
TS
10435{
10436 /* The linker script takes care of providing names and values for
10437 these, but we must place them into the right sections. */
10438 static const char* const text_section_symbols[] = {
10439 "_ftext",
10440 "_etext",
10441 "__dso_displacement",
10442 "__elf_header",
10443 "__program_header_table",
10444 NULL
10445 };
10446
10447 static const char* const data_section_symbols[] = {
10448 "_fdata",
10449 "_edata",
10450 "_end",
10451 "_fbss",
10452 NULL
10453 };
10454
10455 const char* const *p;
10456 int i;
10457
10458 for (i = 0; i < 2; ++i)
10459 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10460 *p;
10461 ++p)
10462 if (strcmp (*p, name) == 0)
10463 {
10464 /* All of these symbols are given type STT_SECTION by the
10465 IRIX6 linker. */
10466 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
e10609d3 10467 sym->st_other = STO_PROTECTED;
b49e97c9
TS
10468
10469 /* The IRIX linker puts these symbols in special sections. */
10470 if (i == 0)
10471 sym->st_shndx = SHN_MIPS_TEXT;
10472 else
10473 sym->st_shndx = SHN_MIPS_DATA;
10474
10475 break;
10476 }
10477}
10478
10479/* Finish up dynamic symbol handling. We set the contents of various
10480 dynamic sections here. */
10481
b34976b6 10482bfd_boolean
9719ad41
RS
10483_bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10484 struct bfd_link_info *info,
10485 struct elf_link_hash_entry *h,
10486 Elf_Internal_Sym *sym)
b49e97c9
TS
10487{
10488 bfd *dynobj;
b49e97c9 10489 asection *sgot;
f4416af6 10490 struct mips_got_info *g, *gg;
b49e97c9 10491 const char *name;
3d6746ca 10492 int idx;
5108fc1b 10493 struct mips_elf_link_hash_table *htab;
738e5348 10494 struct mips_elf_link_hash_entry *hmips;
b49e97c9 10495
5108fc1b 10496 htab = mips_elf_hash_table (info);
4dfe6ac6 10497 BFD_ASSERT (htab != NULL);
b49e97c9 10498 dynobj = elf_hash_table (info)->dynobj;
738e5348 10499 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9 10500
861fb55a
DJ
10501 BFD_ASSERT (!htab->is_vxworks);
10502
1bbce132
MR
10503 if (h->plt.plist != NULL
10504 && (h->plt.plist->mips_offset != MINUS_ONE
10505 || h->plt.plist->comp_offset != MINUS_ONE))
861fb55a
DJ
10506 {
10507 /* We've decided to create a PLT entry for this symbol. */
10508 bfd_byte *loc;
1bbce132 10509 bfd_vma header_address, got_address;
861fb55a 10510 bfd_vma got_address_high, got_address_low, load;
1bbce132
MR
10511 bfd_vma got_index;
10512 bfd_vma isa_bit;
10513
10514 got_index = h->plt.plist->gotplt_index;
861fb55a
DJ
10515
10516 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10517 BFD_ASSERT (h->dynindx != -1);
10518 BFD_ASSERT (htab->splt != NULL);
1bbce132 10519 BFD_ASSERT (got_index != MINUS_ONE);
861fb55a
DJ
10520 BFD_ASSERT (!h->def_regular);
10521
10522 /* Calculate the address of the PLT header. */
1bbce132 10523 isa_bit = htab->plt_header_is_comp;
861fb55a 10524 header_address = (htab->splt->output_section->vma
1bbce132 10525 + htab->splt->output_offset + isa_bit);
861fb55a
DJ
10526
10527 /* Calculate the address of the .got.plt entry. */
10528 got_address = (htab->sgotplt->output_section->vma
10529 + htab->sgotplt->output_offset
1bbce132
MR
10530 + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10531
861fb55a
DJ
10532 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10533 got_address_low = got_address & 0xffff;
10534
10535 /* Initially point the .got.plt entry at the PLT header. */
1bbce132 10536 loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
861fb55a
DJ
10537 if (ABI_64_P (output_bfd))
10538 bfd_put_64 (output_bfd, header_address, loc);
10539 else
10540 bfd_put_32 (output_bfd, header_address, loc);
10541
1bbce132
MR
10542 /* Now handle the PLT itself. First the standard entry (the order
10543 does not matter, we just have to pick one). */
10544 if (h->plt.plist->mips_offset != MINUS_ONE)
10545 {
10546 const bfd_vma *plt_entry;
10547 bfd_vma plt_offset;
861fb55a 10548
1bbce132 10549 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
861fb55a 10550
1bbce132 10551 BFD_ASSERT (plt_offset <= htab->splt->size);
6d30f5b2 10552
1bbce132
MR
10553 /* Find out where the .plt entry should go. */
10554 loc = htab->splt->contents + plt_offset;
10555
10556 /* Pick the load opcode. */
10557 load = MIPS_ELF_LOAD_WORD (output_bfd);
10558
10559 /* Fill in the PLT entry itself. */
7361da2c
AB
10560
10561 if (MIPSR6_P (output_bfd))
10562 plt_entry = mipsr6_exec_plt_entry;
10563 else
10564 plt_entry = mips_exec_plt_entry;
1bbce132
MR
10565 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10566 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10567 loc + 4);
10568
10569 if (! LOAD_INTERLOCKS_P (output_bfd))
10570 {
10571 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10572 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10573 }
10574 else
10575 {
10576 bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10577 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10578 loc + 12);
10579 }
6d30f5b2 10580 }
1bbce132
MR
10581
10582 /* Now the compressed entry. They come after any standard ones. */
10583 if (h->plt.plist->comp_offset != MINUS_ONE)
6d30f5b2 10584 {
1bbce132
MR
10585 bfd_vma plt_offset;
10586
10587 plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10588 + h->plt.plist->comp_offset);
10589
10590 BFD_ASSERT (plt_offset <= htab->splt->size);
10591
10592 /* Find out where the .plt entry should go. */
10593 loc = htab->splt->contents + plt_offset;
10594
10595 /* Fill in the PLT entry itself. */
833794fc
MR
10596 if (!MICROMIPS_P (output_bfd))
10597 {
10598 const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10599
10600 bfd_put_16 (output_bfd, plt_entry[0], loc);
10601 bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10602 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10603 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10604 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10605 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10606 bfd_put_32 (output_bfd, got_address, loc + 12);
10607 }
10608 else if (htab->insn32)
10609 {
10610 const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10611
10612 bfd_put_16 (output_bfd, plt_entry[0], loc);
10613 bfd_put_16 (output_bfd, got_address_high, loc + 2);
10614 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10615 bfd_put_16 (output_bfd, got_address_low, loc + 6);
10616 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10617 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10618 bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10619 bfd_put_16 (output_bfd, got_address_low, loc + 14);
10620 }
10621 else
1bbce132
MR
10622 {
10623 const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10624 bfd_signed_vma gotpc_offset;
10625 bfd_vma loc_address;
10626
10627 BFD_ASSERT (got_address % 4 == 0);
10628
10629 loc_address = (htab->splt->output_section->vma
10630 + htab->splt->output_offset + plt_offset);
10631 gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10632
10633 /* ADDIUPC has a span of +/-16MB, check we're in range. */
10634 if (gotpc_offset + 0x1000000 >= 0x2000000)
10635 {
10636 (*_bfd_error_handler)
10637 (_("%B: `%A' offset of %ld from `%A' "
10638 "beyond the range of ADDIUPC"),
10639 output_bfd,
10640 htab->sgotplt->output_section,
10641 htab->splt->output_section,
10642 (long) gotpc_offset);
10643 bfd_set_error (bfd_error_no_error);
10644 return FALSE;
10645 }
10646 bfd_put_16 (output_bfd,
10647 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10648 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10649 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10650 bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10651 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10652 bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10653 }
6d30f5b2 10654 }
861fb55a
DJ
10655
10656 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
10657 mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
1bbce132 10658 got_index - 2, h->dynindx,
861fb55a
DJ
10659 R_MIPS_JUMP_SLOT, got_address);
10660
10661 /* We distinguish between PLT entries and lazy-binding stubs by
10662 giving the former an st_other value of STO_MIPS_PLT. Set the
10663 flag and leave the value if there are any relocations in the
10664 binary where pointer equality matters. */
10665 sym->st_shndx = SHN_UNDEF;
10666 if (h->pointer_equality_needed)
1bbce132 10667 sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
861fb55a 10668 else
1bbce132
MR
10669 {
10670 sym->st_value = 0;
10671 sym->st_other = 0;
10672 }
861fb55a 10673 }
1bbce132
MR
10674
10675 if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
b49e97c9 10676 {
861fb55a 10677 /* We've decided to create a lazy-binding stub. */
1bbce132
MR
10678 bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10679 unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10680 bfd_vma stub_size = htab->function_stub_size;
5108fc1b 10681 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
1bbce132
MR
10682 bfd_vma isa_bit = micromips_p;
10683 bfd_vma stub_big_size;
10684
833794fc 10685 if (!micromips_p)
1bbce132 10686 stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
833794fc
MR
10687 else if (htab->insn32)
10688 stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10689 else
10690 stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
b49e97c9
TS
10691
10692 /* This symbol has a stub. Set it up. */
10693
10694 BFD_ASSERT (h->dynindx != -1);
10695
1bbce132 10696 BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
3d6746ca
DD
10697
10698 /* Values up to 2^31 - 1 are allowed. Larger values would cause
5108fc1b
RS
10699 sign extension at runtime in the stub, resulting in a negative
10700 index value. */
10701 if (h->dynindx & ~0x7fffffff)
b34976b6 10702 return FALSE;
b49e97c9
TS
10703
10704 /* Fill the stub. */
1bbce132
MR
10705 if (micromips_p)
10706 {
10707 idx = 0;
10708 bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10709 stub + idx);
10710 idx += 4;
833794fc
MR
10711 if (htab->insn32)
10712 {
10713 bfd_put_micromips_32 (output_bfd,
40fc1451 10714 STUB_MOVE32_MICROMIPS, stub + idx);
833794fc
MR
10715 idx += 4;
10716 }
10717 else
10718 {
10719 bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10720 idx += 2;
10721 }
1bbce132
MR
10722 if (stub_size == stub_big_size)
10723 {
10724 long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10725
10726 bfd_put_micromips_32 (output_bfd,
10727 STUB_LUI_MICROMIPS (dynindx_hi),
10728 stub + idx);
10729 idx += 4;
10730 }
833794fc
MR
10731 if (htab->insn32)
10732 {
10733 bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10734 stub + idx);
10735 idx += 4;
10736 }
10737 else
10738 {
10739 bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10740 idx += 2;
10741 }
1bbce132
MR
10742
10743 /* If a large stub is not required and sign extension is not a
10744 problem, then use legacy code in the stub. */
10745 if (stub_size == stub_big_size)
10746 bfd_put_micromips_32 (output_bfd,
10747 STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10748 stub + idx);
10749 else if (h->dynindx & ~0x7fff)
10750 bfd_put_micromips_32 (output_bfd,
10751 STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10752 stub + idx);
10753 else
10754 bfd_put_micromips_32 (output_bfd,
10755 STUB_LI16S_MICROMIPS (output_bfd,
10756 h->dynindx),
10757 stub + idx);
10758 }
3d6746ca 10759 else
1bbce132
MR
10760 {
10761 idx = 0;
10762 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10763 idx += 4;
40fc1451 10764 bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
1bbce132
MR
10765 idx += 4;
10766 if (stub_size == stub_big_size)
10767 {
10768 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10769 stub + idx);
10770 idx += 4;
10771 }
10772 bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10773 idx += 4;
10774
10775 /* If a large stub is not required and sign extension is not a
10776 problem, then use legacy code in the stub. */
10777 if (stub_size == stub_big_size)
10778 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10779 stub + idx);
10780 else if (h->dynindx & ~0x7fff)
10781 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10782 stub + idx);
10783 else
10784 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10785 stub + idx);
10786 }
5108fc1b 10787
1bbce132
MR
10788 BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10789 memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10790 stub, stub_size);
b49e97c9 10791
1bbce132 10792 /* Mark the symbol as undefined. stub_offset != -1 occurs
b49e97c9
TS
10793 only for the referenced symbol. */
10794 sym->st_shndx = SHN_UNDEF;
10795
10796 /* The run-time linker uses the st_value field of the symbol
10797 to reset the global offset table entry for this external
10798 to its stub address when unlinking a shared object. */
4e41d0d7
RS
10799 sym->st_value = (htab->sstubs->output_section->vma
10800 + htab->sstubs->output_offset
1bbce132
MR
10801 + h->plt.plist->stub_offset
10802 + isa_bit);
10803 sym->st_other = other;
b49e97c9
TS
10804 }
10805
738e5348
RS
10806 /* If we have a MIPS16 function with a stub, the dynamic symbol must
10807 refer to the stub, since only the stub uses the standard calling
10808 conventions. */
10809 if (h->dynindx != -1 && hmips->fn_stub != NULL)
10810 {
10811 BFD_ASSERT (hmips->need_fn_stub);
10812 sym->st_value = (hmips->fn_stub->output_section->vma
10813 + hmips->fn_stub->output_offset);
10814 sym->st_size = hmips->fn_stub->size;
10815 sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10816 }
10817
b49e97c9 10818 BFD_ASSERT (h->dynindx != -1
f5385ebf 10819 || h->forced_local);
b49e97c9 10820
23cc69b6 10821 sgot = htab->sgot;
a8028dd0 10822 g = htab->got_info;
b49e97c9
TS
10823 BFD_ASSERT (g != NULL);
10824
10825 /* Run through the global symbol table, creating GOT entries for all
10826 the symbols that need them. */
020d7251 10827 if (hmips->global_got_area != GGA_NONE)
b49e97c9
TS
10828 {
10829 bfd_vma offset;
10830 bfd_vma value;
10831
6eaa6adc 10832 value = sym->st_value;
13fbec83 10833 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
b49e97c9
TS
10834 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10835 }
10836
e641e783 10837 if (hmips->global_got_area != GGA_NONE && g->next)
f4416af6
AO
10838 {
10839 struct mips_got_entry e, *p;
0626d451 10840 bfd_vma entry;
f4416af6 10841 bfd_vma offset;
f4416af6
AO
10842
10843 gg = g;
10844
10845 e.abfd = output_bfd;
10846 e.symndx = -1;
738e5348 10847 e.d.h = hmips;
9ab066b4 10848 e.tls_type = GOT_TLS_NONE;
143d77c5 10849
f4416af6
AO
10850 for (g = g->next; g->next != gg; g = g->next)
10851 {
10852 if (g->got_entries
10853 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10854 &e)))
10855 {
10856 offset = p->gotidx;
6c42ddb9 10857 BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
0e1862bb 10858 if (bfd_link_pic (info)
0626d451
RS
10859 || (elf_hash_table (info)->dynamic_sections_created
10860 && p->d.h != NULL
f5385ebf
AM
10861 && p->d.h->root.def_dynamic
10862 && !p->d.h->root.def_regular))
0626d451
RS
10863 {
10864 /* Create an R_MIPS_REL32 relocation for this entry. Due to
10865 the various compatibility problems, it's easier to mock
10866 up an R_MIPS_32 or R_MIPS_64 relocation and leave
10867 mips_elf_create_dynamic_relocation to calculate the
10868 appropriate addend. */
10869 Elf_Internal_Rela rel[3];
10870
10871 memset (rel, 0, sizeof (rel));
10872 if (ABI_64_P (output_bfd))
10873 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10874 else
10875 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10876 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10877
10878 entry = 0;
10879 if (! (mips_elf_create_dynamic_relocation
10880 (output_bfd, info, rel,
10881 e.d.h, NULL, sym->st_value, &entry, sgot)))
10882 return FALSE;
10883 }
10884 else
10885 entry = sym->st_value;
10886 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
f4416af6
AO
10887 }
10888 }
10889 }
10890
b49e97c9
TS
10891 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
10892 name = h->root.root.string;
9637f6ef 10893 if (h == elf_hash_table (info)->hdynamic
22edb2f1 10894 || h == elf_hash_table (info)->hgot)
b49e97c9
TS
10895 sym->st_shndx = SHN_ABS;
10896 else if (strcmp (name, "_DYNAMIC_LINK") == 0
10897 || strcmp (name, "_DYNAMIC_LINKING") == 0)
10898 {
10899 sym->st_shndx = SHN_ABS;
10900 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10901 sym->st_value = 1;
10902 }
4a14403c 10903 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
b49e97c9
TS
10904 {
10905 sym->st_shndx = SHN_ABS;
10906 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10907 sym->st_value = elf_gp (output_bfd);
10908 }
10909 else if (SGI_COMPAT (output_bfd))
10910 {
10911 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10912 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10913 {
10914 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10915 sym->st_other = STO_PROTECTED;
10916 sym->st_value = 0;
10917 sym->st_shndx = SHN_MIPS_DATA;
10918 }
10919 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10920 {
10921 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10922 sym->st_other = STO_PROTECTED;
10923 sym->st_value = mips_elf_hash_table (info)->procedure_count;
10924 sym->st_shndx = SHN_ABS;
10925 }
10926 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10927 {
10928 if (h->type == STT_FUNC)
10929 sym->st_shndx = SHN_MIPS_TEXT;
10930 else if (h->type == STT_OBJECT)
10931 sym->st_shndx = SHN_MIPS_DATA;
10932 }
10933 }
10934
861fb55a
DJ
10935 /* Emit a copy reloc, if needed. */
10936 if (h->needs_copy)
10937 {
10938 asection *s;
10939 bfd_vma symval;
10940
10941 BFD_ASSERT (h->dynindx != -1);
10942 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10943
10944 s = mips_elf_rel_dyn_section (info, FALSE);
10945 symval = (h->root.u.def.section->output_section->vma
10946 + h->root.u.def.section->output_offset
10947 + h->root.u.def.value);
10948 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10949 h->dynindx, R_MIPS_COPY, symval);
10950 }
10951
b49e97c9
TS
10952 /* Handle the IRIX6-specific symbols. */
10953 if (IRIX_COMPAT (output_bfd) == ict_irix6)
10954 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10955
cbf8d970
MR
10956 /* Keep dynamic compressed symbols odd. This allows the dynamic linker
10957 to treat compressed symbols like any other. */
30c09090 10958 if (ELF_ST_IS_MIPS16 (sym->st_other))
738e5348
RS
10959 {
10960 BFD_ASSERT (sym->st_value & 1);
10961 sym->st_other -= STO_MIPS16;
10962 }
cbf8d970
MR
10963 else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10964 {
10965 BFD_ASSERT (sym->st_value & 1);
10966 sym->st_other -= STO_MICROMIPS;
10967 }
b49e97c9 10968
b34976b6 10969 return TRUE;
b49e97c9
TS
10970}
10971
0a44bf69
RS
10972/* Likewise, for VxWorks. */
10973
10974bfd_boolean
10975_bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10976 struct bfd_link_info *info,
10977 struct elf_link_hash_entry *h,
10978 Elf_Internal_Sym *sym)
10979{
10980 bfd *dynobj;
10981 asection *sgot;
10982 struct mips_got_info *g;
10983 struct mips_elf_link_hash_table *htab;
020d7251 10984 struct mips_elf_link_hash_entry *hmips;
0a44bf69
RS
10985
10986 htab = mips_elf_hash_table (info);
4dfe6ac6 10987 BFD_ASSERT (htab != NULL);
0a44bf69 10988 dynobj = elf_hash_table (info)->dynobj;
020d7251 10989 hmips = (struct mips_elf_link_hash_entry *) h;
0a44bf69 10990
1bbce132 10991 if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
0a44bf69 10992 {
6d79d2ed 10993 bfd_byte *loc;
1bbce132 10994 bfd_vma plt_address, got_address, got_offset, branch_offset;
0a44bf69
RS
10995 Elf_Internal_Rela rel;
10996 static const bfd_vma *plt_entry;
1bbce132
MR
10997 bfd_vma gotplt_index;
10998 bfd_vma plt_offset;
10999
11000 plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11001 gotplt_index = h->plt.plist->gotplt_index;
0a44bf69
RS
11002
11003 BFD_ASSERT (h->dynindx != -1);
11004 BFD_ASSERT (htab->splt != NULL);
1bbce132
MR
11005 BFD_ASSERT (gotplt_index != MINUS_ONE);
11006 BFD_ASSERT (plt_offset <= htab->splt->size);
0a44bf69
RS
11007
11008 /* Calculate the address of the .plt entry. */
11009 plt_address = (htab->splt->output_section->vma
11010 + htab->splt->output_offset
1bbce132 11011 + plt_offset);
0a44bf69
RS
11012
11013 /* Calculate the address of the .got.plt entry. */
11014 got_address = (htab->sgotplt->output_section->vma
11015 + htab->sgotplt->output_offset
1bbce132 11016 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
0a44bf69
RS
11017
11018 /* Calculate the offset of the .got.plt entry from
11019 _GLOBAL_OFFSET_TABLE_. */
11020 got_offset = mips_elf_gotplt_index (info, h);
11021
11022 /* Calculate the offset for the branch at the start of the PLT
11023 entry. The branch jumps to the beginning of .plt. */
1bbce132 11024 branch_offset = -(plt_offset / 4 + 1) & 0xffff;
0a44bf69
RS
11025
11026 /* Fill in the initial value of the .got.plt entry. */
11027 bfd_put_32 (output_bfd, plt_address,
1bbce132
MR
11028 (htab->sgotplt->contents
11029 + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
0a44bf69
RS
11030
11031 /* Find out where the .plt entry should go. */
1bbce132 11032 loc = htab->splt->contents + plt_offset;
0a44bf69 11033
0e1862bb 11034 if (bfd_link_pic (info))
0a44bf69
RS
11035 {
11036 plt_entry = mips_vxworks_shared_plt_entry;
11037 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
1bbce132 11038 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
0a44bf69
RS
11039 }
11040 else
11041 {
11042 bfd_vma got_address_high, got_address_low;
11043
11044 plt_entry = mips_vxworks_exec_plt_entry;
11045 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11046 got_address_low = got_address & 0xffff;
11047
11048 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
1bbce132 11049 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
0a44bf69
RS
11050 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11051 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11052 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11053 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11054 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11055 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11056
11057 loc = (htab->srelplt2->contents
1bbce132 11058 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
0a44bf69
RS
11059
11060 /* Emit a relocation for the .got.plt entry. */
11061 rel.r_offset = got_address;
11062 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
1bbce132 11063 rel.r_addend = plt_offset;
0a44bf69
RS
11064 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11065
11066 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */
11067 loc += sizeof (Elf32_External_Rela);
11068 rel.r_offset = plt_address + 8;
11069 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11070 rel.r_addend = got_offset;
11071 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11072
11073 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */
11074 loc += sizeof (Elf32_External_Rela);
11075 rel.r_offset += 4;
11076 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11077 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11078 }
11079
11080 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
1bbce132
MR
11081 loc = (htab->srelplt->contents
11082 + gotplt_index * sizeof (Elf32_External_Rela));
0a44bf69
RS
11083 rel.r_offset = got_address;
11084 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11085 rel.r_addend = 0;
11086 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11087
11088 if (!h->def_regular)
11089 sym->st_shndx = SHN_UNDEF;
11090 }
11091
11092 BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11093
23cc69b6 11094 sgot = htab->sgot;
a8028dd0 11095 g = htab->got_info;
0a44bf69
RS
11096 BFD_ASSERT (g != NULL);
11097
11098 /* See if this symbol has an entry in the GOT. */
020d7251 11099 if (hmips->global_got_area != GGA_NONE)
0a44bf69
RS
11100 {
11101 bfd_vma offset;
11102 Elf_Internal_Rela outrel;
11103 bfd_byte *loc;
11104 asection *s;
11105
11106 /* Install the symbol value in the GOT. */
13fbec83 11107 offset = mips_elf_primary_global_got_index (output_bfd, info, h);
0a44bf69
RS
11108 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11109
11110 /* Add a dynamic relocation for it. */
11111 s = mips_elf_rel_dyn_section (info, FALSE);
11112 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11113 outrel.r_offset = (sgot->output_section->vma
11114 + sgot->output_offset
11115 + offset);
11116 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11117 outrel.r_addend = 0;
11118 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11119 }
11120
11121 /* Emit a copy reloc, if needed. */
11122 if (h->needs_copy)
11123 {
11124 Elf_Internal_Rela rel;
11125
11126 BFD_ASSERT (h->dynindx != -1);
11127
11128 rel.r_offset = (h->root.u.def.section->output_section->vma
11129 + h->root.u.def.section->output_offset
11130 + h->root.u.def.value);
11131 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11132 rel.r_addend = 0;
11133 bfd_elf32_swap_reloca_out (output_bfd, &rel,
11134 htab->srelbss->contents
11135 + (htab->srelbss->reloc_count
11136 * sizeof (Elf32_External_Rela)));
11137 ++htab->srelbss->reloc_count;
11138 }
11139
df58fc94
RS
11140 /* If this is a mips16/microMIPS symbol, force the value to be even. */
11141 if (ELF_ST_IS_COMPRESSED (sym->st_other))
0a44bf69
RS
11142 sym->st_value &= ~1;
11143
11144 return TRUE;
11145}
11146
861fb55a
DJ
11147/* Write out a plt0 entry to the beginning of .plt. */
11148
1bbce132 11149static bfd_boolean
861fb55a
DJ
11150mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11151{
11152 bfd_byte *loc;
11153 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11154 static const bfd_vma *plt_entry;
11155 struct mips_elf_link_hash_table *htab;
11156
11157 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
11158 BFD_ASSERT (htab != NULL);
11159
861fb55a
DJ
11160 if (ABI_64_P (output_bfd))
11161 plt_entry = mips_n64_exec_plt0_entry;
11162 else if (ABI_N32_P (output_bfd))
11163 plt_entry = mips_n32_exec_plt0_entry;
833794fc 11164 else if (!htab->plt_header_is_comp)
861fb55a 11165 plt_entry = mips_o32_exec_plt0_entry;
833794fc
MR
11166 else if (htab->insn32)
11167 plt_entry = micromips_insn32_o32_exec_plt0_entry;
11168 else
11169 plt_entry = micromips_o32_exec_plt0_entry;
861fb55a
DJ
11170
11171 /* Calculate the value of .got.plt. */
11172 gotplt_value = (htab->sgotplt->output_section->vma
11173 + htab->sgotplt->output_offset);
11174 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11175 gotplt_value_low = gotplt_value & 0xffff;
11176
11177 /* The PLT sequence is not safe for N64 if .got.plt's address can
11178 not be loaded in two instructions. */
11179 BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11180 || ~(gotplt_value | 0x7fffffff) == 0);
11181
11182 /* Install the PLT header. */
11183 loc = htab->splt->contents;
1bbce132
MR
11184 if (plt_entry == micromips_o32_exec_plt0_entry)
11185 {
11186 bfd_vma gotpc_offset;
11187 bfd_vma loc_address;
11188 size_t i;
11189
11190 BFD_ASSERT (gotplt_value % 4 == 0);
11191
11192 loc_address = (htab->splt->output_section->vma
11193 + htab->splt->output_offset);
11194 gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11195
11196 /* ADDIUPC has a span of +/-16MB, check we're in range. */
11197 if (gotpc_offset + 0x1000000 >= 0x2000000)
11198 {
11199 (*_bfd_error_handler)
11200 (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11201 output_bfd,
11202 htab->sgotplt->output_section,
11203 htab->splt->output_section,
11204 (long) gotpc_offset);
11205 bfd_set_error (bfd_error_no_error);
11206 return FALSE;
11207 }
11208 bfd_put_16 (output_bfd,
11209 plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11210 bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11211 for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11212 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11213 }
833794fc
MR
11214 else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11215 {
11216 size_t i;
11217
11218 bfd_put_16 (output_bfd, plt_entry[0], loc);
11219 bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11220 bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11221 bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11222 bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11223 bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11224 for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11225 bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11226 }
1bbce132
MR
11227 else
11228 {
11229 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11230 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11231 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11232 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11233 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11234 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11235 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11236 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11237 }
11238
11239 return TRUE;
861fb55a
DJ
11240}
11241
0a44bf69
RS
11242/* Install the PLT header for a VxWorks executable and finalize the
11243 contents of .rela.plt.unloaded. */
11244
11245static void
11246mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11247{
11248 Elf_Internal_Rela rela;
11249 bfd_byte *loc;
11250 bfd_vma got_value, got_value_high, got_value_low, plt_address;
11251 static const bfd_vma *plt_entry;
11252 struct mips_elf_link_hash_table *htab;
11253
11254 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
11255 BFD_ASSERT (htab != NULL);
11256
0a44bf69
RS
11257 plt_entry = mips_vxworks_exec_plt0_entry;
11258
11259 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
11260 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11261 + htab->root.hgot->root.u.def.section->output_offset
11262 + htab->root.hgot->root.u.def.value);
11263
11264 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11265 got_value_low = got_value & 0xffff;
11266
11267 /* Calculate the address of the PLT header. */
11268 plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11269
11270 /* Install the PLT header. */
11271 loc = htab->splt->contents;
11272 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11273 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11274 bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11275 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11276 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11277 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11278
11279 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */
11280 loc = htab->srelplt2->contents;
11281 rela.r_offset = plt_address;
11282 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11283 rela.r_addend = 0;
11284 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11285 loc += sizeof (Elf32_External_Rela);
11286
11287 /* Output the relocation for the following addiu of
11288 %lo(_GLOBAL_OFFSET_TABLE_). */
11289 rela.r_offset += 4;
11290 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11291 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11292 loc += sizeof (Elf32_External_Rela);
11293
11294 /* Fix up the remaining relocations. They may have the wrong
11295 symbol index for _G_O_T_ or _P_L_T_ depending on the order
11296 in which symbols were output. */
11297 while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11298 {
11299 Elf_Internal_Rela rel;
11300
11301 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11302 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11303 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11304 loc += sizeof (Elf32_External_Rela);
11305
11306 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11307 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11308 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11309 loc += sizeof (Elf32_External_Rela);
11310
11311 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11312 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11313 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11314 loc += sizeof (Elf32_External_Rela);
11315 }
11316}
11317
11318/* Install the PLT header for a VxWorks shared library. */
11319
11320static void
11321mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11322{
11323 unsigned int i;
11324 struct mips_elf_link_hash_table *htab;
11325
11326 htab = mips_elf_hash_table (info);
4dfe6ac6 11327 BFD_ASSERT (htab != NULL);
0a44bf69
RS
11328
11329 /* We just need to copy the entry byte-by-byte. */
11330 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11331 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11332 htab->splt->contents + i * 4);
11333}
11334
b49e97c9
TS
11335/* Finish up the dynamic sections. */
11336
b34976b6 11337bfd_boolean
9719ad41
RS
11338_bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11339 struct bfd_link_info *info)
b49e97c9
TS
11340{
11341 bfd *dynobj;
11342 asection *sdyn;
11343 asection *sgot;
f4416af6 11344 struct mips_got_info *gg, *g;
0a44bf69 11345 struct mips_elf_link_hash_table *htab;
b49e97c9 11346
0a44bf69 11347 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
11348 BFD_ASSERT (htab != NULL);
11349
b49e97c9
TS
11350 dynobj = elf_hash_table (info)->dynobj;
11351
3d4d4302 11352 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
b49e97c9 11353
23cc69b6
RS
11354 sgot = htab->sgot;
11355 gg = htab->got_info;
b49e97c9
TS
11356
11357 if (elf_hash_table (info)->dynamic_sections_created)
11358 {
11359 bfd_byte *b;
943284cc 11360 int dyn_to_skip = 0, dyn_skipped = 0;
b49e97c9
TS
11361
11362 BFD_ASSERT (sdyn != NULL);
23cc69b6
RS
11363 BFD_ASSERT (gg != NULL);
11364
d7206569 11365 g = mips_elf_bfd_got (output_bfd, FALSE);
b49e97c9
TS
11366 BFD_ASSERT (g != NULL);
11367
11368 for (b = sdyn->contents;
eea6121a 11369 b < sdyn->contents + sdyn->size;
b49e97c9
TS
11370 b += MIPS_ELF_DYN_SIZE (dynobj))
11371 {
11372 Elf_Internal_Dyn dyn;
11373 const char *name;
11374 size_t elemsize;
11375 asection *s;
b34976b6 11376 bfd_boolean swap_out_p;
b49e97c9
TS
11377
11378 /* Read in the current dynamic entry. */
11379 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11380
11381 /* Assume that we're going to modify it and write it out. */
b34976b6 11382 swap_out_p = TRUE;
b49e97c9
TS
11383
11384 switch (dyn.d_tag)
11385 {
11386 case DT_RELENT:
b49e97c9
TS
11387 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11388 break;
11389
0a44bf69
RS
11390 case DT_RELAENT:
11391 BFD_ASSERT (htab->is_vxworks);
11392 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11393 break;
11394
b49e97c9
TS
11395 case DT_STRSZ:
11396 /* Rewrite DT_STRSZ. */
11397 dyn.d_un.d_val =
11398 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11399 break;
11400
11401 case DT_PLTGOT:
861fb55a
DJ
11402 s = htab->sgot;
11403 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11404 break;
11405
11406 case DT_MIPS_PLTGOT:
11407 s = htab->sgotplt;
11408 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
b49e97c9
TS
11409 break;
11410
11411 case DT_MIPS_RLD_VERSION:
11412 dyn.d_un.d_val = 1; /* XXX */
11413 break;
11414
11415 case DT_MIPS_FLAGS:
11416 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11417 break;
11418
b49e97c9 11419 case DT_MIPS_TIME_STAMP:
6edfbbad
DJ
11420 {
11421 time_t t;
11422 time (&t);
11423 dyn.d_un.d_val = t;
11424 }
b49e97c9
TS
11425 break;
11426
11427 case DT_MIPS_ICHECKSUM:
11428 /* XXX FIXME: */
b34976b6 11429 swap_out_p = FALSE;
b49e97c9
TS
11430 break;
11431
11432 case DT_MIPS_IVERSION:
11433 /* XXX FIXME: */
b34976b6 11434 swap_out_p = FALSE;
b49e97c9
TS
11435 break;
11436
11437 case DT_MIPS_BASE_ADDRESS:
11438 s = output_bfd->sections;
11439 BFD_ASSERT (s != NULL);
11440 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11441 break;
11442
11443 case DT_MIPS_LOCAL_GOTNO:
11444 dyn.d_un.d_val = g->local_gotno;
11445 break;
11446
11447 case DT_MIPS_UNREFEXTNO:
11448 /* The index into the dynamic symbol table which is the
11449 entry of the first external symbol that is not
11450 referenced within the same object. */
11451 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11452 break;
11453
11454 case DT_MIPS_GOTSYM:
d222d210 11455 if (htab->global_gotsym)
b49e97c9 11456 {
d222d210 11457 dyn.d_un.d_val = htab->global_gotsym->dynindx;
b49e97c9
TS
11458 break;
11459 }
11460 /* In case if we don't have global got symbols we default
11461 to setting DT_MIPS_GOTSYM to the same value as
11462 DT_MIPS_SYMTABNO, so we just fall through. */
11463
11464 case DT_MIPS_SYMTABNO:
11465 name = ".dynsym";
11466 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11467 s = bfd_get_section_by_name (output_bfd, name);
b49e97c9 11468
131e2f8e
MF
11469 if (s != NULL)
11470 dyn.d_un.d_val = s->size / elemsize;
11471 else
11472 dyn.d_un.d_val = 0;
b49e97c9
TS
11473 break;
11474
11475 case DT_MIPS_HIPAGENO:
861fb55a 11476 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
b49e97c9
TS
11477 break;
11478
11479 case DT_MIPS_RLD_MAP:
b4082c70
DD
11480 {
11481 struct elf_link_hash_entry *h;
11482 h = mips_elf_hash_table (info)->rld_symbol;
11483 if (!h)
11484 {
11485 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11486 swap_out_p = FALSE;
11487 break;
11488 }
11489 s = h->root.u.def.section;
a5499fa4
MF
11490
11491 /* The MIPS_RLD_MAP tag stores the absolute address of the
11492 debug pointer. */
b4082c70
DD
11493 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11494 + h->root.u.def.value);
11495 }
b49e97c9
TS
11496 break;
11497
a5499fa4
MF
11498 case DT_MIPS_RLD_MAP_REL:
11499 {
11500 struct elf_link_hash_entry *h;
11501 bfd_vma dt_addr, rld_addr;
11502 h = mips_elf_hash_table (info)->rld_symbol;
11503 if (!h)
11504 {
11505 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11506 swap_out_p = FALSE;
11507 break;
11508 }
11509 s = h->root.u.def.section;
11510
11511 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11512 pointer, relative to the address of the tag. */
11513 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
d5cff5df 11514 + (b - sdyn->contents));
a5499fa4
MF
11515 rld_addr = (s->output_section->vma + s->output_offset
11516 + h->root.u.def.value);
11517 dyn.d_un.d_ptr = rld_addr - dt_addr;
11518 }
11519 break;
11520
b49e97c9
TS
11521 case DT_MIPS_OPTIONS:
11522 s = (bfd_get_section_by_name
11523 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11524 dyn.d_un.d_ptr = s->vma;
11525 break;
11526
0a44bf69
RS
11527 case DT_RELASZ:
11528 BFD_ASSERT (htab->is_vxworks);
11529 /* The count does not include the JUMP_SLOT relocations. */
11530 if (htab->srelplt)
11531 dyn.d_un.d_val -= htab->srelplt->size;
11532 break;
11533
11534 case DT_PLTREL:
861fb55a
DJ
11535 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11536 if (htab->is_vxworks)
11537 dyn.d_un.d_val = DT_RELA;
11538 else
11539 dyn.d_un.d_val = DT_REL;
0a44bf69
RS
11540 break;
11541
11542 case DT_PLTRELSZ:
861fb55a 11543 BFD_ASSERT (htab->use_plts_and_copy_relocs);
0a44bf69
RS
11544 dyn.d_un.d_val = htab->srelplt->size;
11545 break;
11546
11547 case DT_JMPREL:
861fb55a
DJ
11548 BFD_ASSERT (htab->use_plts_and_copy_relocs);
11549 dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
0a44bf69
RS
11550 + htab->srelplt->output_offset);
11551 break;
11552
943284cc
DJ
11553 case DT_TEXTREL:
11554 /* If we didn't need any text relocations after all, delete
11555 the dynamic tag. */
11556 if (!(info->flags & DF_TEXTREL))
11557 {
11558 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11559 swap_out_p = FALSE;
11560 }
11561 break;
11562
11563 case DT_FLAGS:
11564 /* If we didn't need any text relocations after all, clear
11565 DF_TEXTREL from DT_FLAGS. */
11566 if (!(info->flags & DF_TEXTREL))
11567 dyn.d_un.d_val &= ~DF_TEXTREL;
11568 else
11569 swap_out_p = FALSE;
11570 break;
11571
b49e97c9 11572 default:
b34976b6 11573 swap_out_p = FALSE;
7a2b07ff
NS
11574 if (htab->is_vxworks
11575 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11576 swap_out_p = TRUE;
b49e97c9
TS
11577 break;
11578 }
11579
943284cc 11580 if (swap_out_p || dyn_skipped)
b49e97c9 11581 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
943284cc
DJ
11582 (dynobj, &dyn, b - dyn_skipped);
11583
11584 if (dyn_to_skip)
11585 {
11586 dyn_skipped += dyn_to_skip;
11587 dyn_to_skip = 0;
11588 }
b49e97c9 11589 }
943284cc
DJ
11590
11591 /* Wipe out any trailing entries if we shifted down a dynamic tag. */
11592 if (dyn_skipped > 0)
11593 memset (b - dyn_skipped, 0, dyn_skipped);
b49e97c9
TS
11594 }
11595
b55fd4d4
DJ
11596 if (sgot != NULL && sgot->size > 0
11597 && !bfd_is_abs_section (sgot->output_section))
b49e97c9 11598 {
0a44bf69
RS
11599 if (htab->is_vxworks)
11600 {
11601 /* The first entry of the global offset table points to the
11602 ".dynamic" section. The second is initialized by the
11603 loader and contains the shared library identifier.
11604 The third is also initialized by the loader and points
11605 to the lazy resolution stub. */
11606 MIPS_ELF_PUT_WORD (output_bfd,
11607 sdyn->output_offset + sdyn->output_section->vma,
11608 sgot->contents);
11609 MIPS_ELF_PUT_WORD (output_bfd, 0,
11610 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11611 MIPS_ELF_PUT_WORD (output_bfd, 0,
11612 sgot->contents
11613 + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11614 }
11615 else
11616 {
11617 /* The first entry of the global offset table will be filled at
11618 runtime. The second entry will be used by some runtime loaders.
11619 This isn't the case of IRIX rld. */
11620 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
51e38d68 11621 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
0a44bf69
RS
11622 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11623 }
b49e97c9 11624
54938e2a
TS
11625 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11626 = MIPS_ELF_GOT_SIZE (output_bfd);
11627 }
b49e97c9 11628
f4416af6
AO
11629 /* Generate dynamic relocations for the non-primary gots. */
11630 if (gg != NULL && gg->next)
11631 {
11632 Elf_Internal_Rela rel[3];
11633 bfd_vma addend = 0;
11634
11635 memset (rel, 0, sizeof (rel));
11636 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11637
11638 for (g = gg->next; g->next != gg; g = g->next)
11639 {
91d6fa6a 11640 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
0f20cc35 11641 + g->next->tls_gotno;
f4416af6 11642
9719ad41 11643 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
91d6fa6a 11644 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
51e38d68
RS
11645 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11646 sgot->contents
91d6fa6a 11647 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
f4416af6 11648
0e1862bb 11649 if (! bfd_link_pic (info))
f4416af6
AO
11650 continue;
11651
cb22ccf4 11652 for (; got_index < g->local_gotno; got_index++)
f4416af6 11653 {
cb22ccf4
KCY
11654 if (got_index >= g->assigned_low_gotno
11655 && got_index <= g->assigned_high_gotno)
11656 continue;
11657
f4416af6 11658 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
cb22ccf4 11659 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
f4416af6
AO
11660 if (!(mips_elf_create_dynamic_relocation
11661 (output_bfd, info, rel, NULL,
11662 bfd_abs_section_ptr,
11663 0, &addend, sgot)))
11664 return FALSE;
11665 BFD_ASSERT (addend == 0);
11666 }
11667 }
11668 }
11669
3133ddbf
DJ
11670 /* The generation of dynamic relocations for the non-primary gots
11671 adds more dynamic relocations. We cannot count them until
11672 here. */
11673
11674 if (elf_hash_table (info)->dynamic_sections_created)
11675 {
11676 bfd_byte *b;
11677 bfd_boolean swap_out_p;
11678
11679 BFD_ASSERT (sdyn != NULL);
11680
11681 for (b = sdyn->contents;
11682 b < sdyn->contents + sdyn->size;
11683 b += MIPS_ELF_DYN_SIZE (dynobj))
11684 {
11685 Elf_Internal_Dyn dyn;
11686 asection *s;
11687
11688 /* Read in the current dynamic entry. */
11689 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11690
11691 /* Assume that we're going to modify it and write it out. */
11692 swap_out_p = TRUE;
11693
11694 switch (dyn.d_tag)
11695 {
11696 case DT_RELSZ:
11697 /* Reduce DT_RELSZ to account for any relocations we
11698 decided not to make. This is for the n64 irix rld,
11699 which doesn't seem to apply any relocations if there
11700 are trailing null entries. */
0a44bf69 11701 s = mips_elf_rel_dyn_section (info, FALSE);
3133ddbf
DJ
11702 dyn.d_un.d_val = (s->reloc_count
11703 * (ABI_64_P (output_bfd)
11704 ? sizeof (Elf64_Mips_External_Rel)
11705 : sizeof (Elf32_External_Rel)));
bcfdf036
RS
11706 /* Adjust the section size too. Tools like the prelinker
11707 can reasonably expect the values to the same. */
11708 elf_section_data (s->output_section)->this_hdr.sh_size
11709 = dyn.d_un.d_val;
3133ddbf
DJ
11710 break;
11711
11712 default:
11713 swap_out_p = FALSE;
11714 break;
11715 }
11716
11717 if (swap_out_p)
11718 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11719 (dynobj, &dyn, b);
11720 }
11721 }
11722
b49e97c9 11723 {
b49e97c9
TS
11724 asection *s;
11725 Elf32_compact_rel cpt;
11726
b49e97c9
TS
11727 if (SGI_COMPAT (output_bfd))
11728 {
11729 /* Write .compact_rel section out. */
3d4d4302 11730 s = bfd_get_linker_section (dynobj, ".compact_rel");
b49e97c9
TS
11731 if (s != NULL)
11732 {
11733 cpt.id1 = 1;
11734 cpt.num = s->reloc_count;
11735 cpt.id2 = 2;
11736 cpt.offset = (s->output_section->filepos
11737 + sizeof (Elf32_External_compact_rel));
11738 cpt.reserved0 = 0;
11739 cpt.reserved1 = 0;
11740 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11741 ((Elf32_External_compact_rel *)
11742 s->contents));
11743
11744 /* Clean up a dummy stub function entry in .text. */
4e41d0d7 11745 if (htab->sstubs != NULL)
b49e97c9
TS
11746 {
11747 file_ptr dummy_offset;
11748
4e41d0d7
RS
11749 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11750 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11751 memset (htab->sstubs->contents + dummy_offset, 0,
5108fc1b 11752 htab->function_stub_size);
b49e97c9
TS
11753 }
11754 }
11755 }
11756
0a44bf69
RS
11757 /* The psABI says that the dynamic relocations must be sorted in
11758 increasing order of r_symndx. The VxWorks EABI doesn't require
11759 this, and because the code below handles REL rather than RELA
11760 relocations, using it for VxWorks would be outright harmful. */
11761 if (!htab->is_vxworks)
b49e97c9 11762 {
0a44bf69
RS
11763 s = mips_elf_rel_dyn_section (info, FALSE);
11764 if (s != NULL
11765 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11766 {
11767 reldyn_sorting_bfd = output_bfd;
b49e97c9 11768
0a44bf69
RS
11769 if (ABI_64_P (output_bfd))
11770 qsort ((Elf64_External_Rel *) s->contents + 1,
11771 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11772 sort_dynamic_relocs_64);
11773 else
11774 qsort ((Elf32_External_Rel *) s->contents + 1,
11775 s->reloc_count - 1, sizeof (Elf32_External_Rel),
11776 sort_dynamic_relocs);
11777 }
b49e97c9 11778 }
b49e97c9
TS
11779 }
11780
861fb55a 11781 if (htab->splt && htab->splt->size > 0)
0a44bf69 11782 {
861fb55a
DJ
11783 if (htab->is_vxworks)
11784 {
0e1862bb 11785 if (bfd_link_pic (info))
861fb55a
DJ
11786 mips_vxworks_finish_shared_plt (output_bfd, info);
11787 else
11788 mips_vxworks_finish_exec_plt (output_bfd, info);
11789 }
0a44bf69 11790 else
861fb55a 11791 {
0e1862bb 11792 BFD_ASSERT (!bfd_link_pic (info));
1bbce132
MR
11793 if (!mips_finish_exec_plt (output_bfd, info))
11794 return FALSE;
861fb55a 11795 }
0a44bf69 11796 }
b34976b6 11797 return TRUE;
b49e97c9
TS
11798}
11799
b49e97c9 11800
64543e1a
RS
11801/* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
11802
11803static void
9719ad41 11804mips_set_isa_flags (bfd *abfd)
b49e97c9 11805{
64543e1a 11806 flagword val;
b49e97c9
TS
11807
11808 switch (bfd_get_mach (abfd))
11809 {
11810 default:
11811 case bfd_mach_mips3000:
11812 val = E_MIPS_ARCH_1;
11813 break;
11814
11815 case bfd_mach_mips3900:
11816 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11817 break;
11818
11819 case bfd_mach_mips6000:
11820 val = E_MIPS_ARCH_2;
11821 break;
11822
11823 case bfd_mach_mips4000:
11824 case bfd_mach_mips4300:
11825 case bfd_mach_mips4400:
11826 case bfd_mach_mips4600:
11827 val = E_MIPS_ARCH_3;
11828 break;
11829
11830 case bfd_mach_mips4010:
11831 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11832 break;
11833
11834 case bfd_mach_mips4100:
11835 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11836 break;
11837
11838 case bfd_mach_mips4111:
11839 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11840 break;
11841
00707a0e
RS
11842 case bfd_mach_mips4120:
11843 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11844 break;
11845
b49e97c9
TS
11846 case bfd_mach_mips4650:
11847 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11848 break;
11849
00707a0e
RS
11850 case bfd_mach_mips5400:
11851 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11852 break;
11853
11854 case bfd_mach_mips5500:
11855 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11856 break;
11857
e407c74b
NC
11858 case bfd_mach_mips5900:
11859 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11860 break;
11861
0d2e43ed
ILT
11862 case bfd_mach_mips9000:
11863 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11864 break;
11865
b49e97c9 11866 case bfd_mach_mips5000:
5a7ea749 11867 case bfd_mach_mips7000:
b49e97c9
TS
11868 case bfd_mach_mips8000:
11869 case bfd_mach_mips10000:
11870 case bfd_mach_mips12000:
3aa3176b
TS
11871 case bfd_mach_mips14000:
11872 case bfd_mach_mips16000:
b49e97c9
TS
11873 val = E_MIPS_ARCH_4;
11874 break;
11875
11876 case bfd_mach_mips5:
11877 val = E_MIPS_ARCH_5;
11878 break;
11879
350cc38d
MS
11880 case bfd_mach_mips_loongson_2e:
11881 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11882 break;
11883
11884 case bfd_mach_mips_loongson_2f:
11885 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11886 break;
11887
b49e97c9
TS
11888 case bfd_mach_mips_sb1:
11889 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11890 break;
11891
d051516a 11892 case bfd_mach_mips_loongson_3a:
4ba154f5 11893 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
d051516a
NC
11894 break;
11895
6f179bd0 11896 case bfd_mach_mips_octeon:
dd6a37e7 11897 case bfd_mach_mips_octeonp:
6f179bd0
AN
11898 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11899 break;
11900
2c629856
N
11901 case bfd_mach_mips_octeon3:
11902 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11903 break;
11904
52b6b6b9
JM
11905 case bfd_mach_mips_xlr:
11906 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11907 break;
11908
432233b3
AP
11909 case bfd_mach_mips_octeon2:
11910 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11911 break;
11912
b49e97c9
TS
11913 case bfd_mach_mipsisa32:
11914 val = E_MIPS_ARCH_32;
11915 break;
11916
11917 case bfd_mach_mipsisa64:
11918 val = E_MIPS_ARCH_64;
af7ee8bf
CD
11919 break;
11920
11921 case bfd_mach_mipsisa32r2:
ae52f483
AB
11922 case bfd_mach_mipsisa32r3:
11923 case bfd_mach_mipsisa32r5:
af7ee8bf
CD
11924 val = E_MIPS_ARCH_32R2;
11925 break;
5f74bc13
CD
11926
11927 case bfd_mach_mipsisa64r2:
ae52f483
AB
11928 case bfd_mach_mipsisa64r3:
11929 case bfd_mach_mipsisa64r5:
5f74bc13
CD
11930 val = E_MIPS_ARCH_64R2;
11931 break;
7361da2c
AB
11932
11933 case bfd_mach_mipsisa32r6:
11934 val = E_MIPS_ARCH_32R6;
11935 break;
11936
11937 case bfd_mach_mipsisa64r6:
11938 val = E_MIPS_ARCH_64R6;
11939 break;
b49e97c9 11940 }
b49e97c9
TS
11941 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11942 elf_elfheader (abfd)->e_flags |= val;
11943
64543e1a
RS
11944}
11945
11946
28dbcedc
AM
11947/* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11948 Don't do so for code sections. We want to keep ordering of HI16/LO16
11949 as is. On the other hand, elf-eh-frame.c processing requires .eh_frame
11950 relocs to be sorted. */
11951
11952bfd_boolean
11953_bfd_mips_elf_sort_relocs_p (asection *sec)
11954{
11955 return (sec->flags & SEC_CODE) == 0;
11956}
11957
11958
64543e1a
RS
11959/* The final processing done just before writing out a MIPS ELF object
11960 file. This gets the MIPS architecture right based on the machine
11961 number. This is used by both the 32-bit and the 64-bit ABI. */
11962
11963void
9719ad41
RS
11964_bfd_mips_elf_final_write_processing (bfd *abfd,
11965 bfd_boolean linker ATTRIBUTE_UNUSED)
64543e1a
RS
11966{
11967 unsigned int i;
11968 Elf_Internal_Shdr **hdrpp;
11969 const char *name;
11970 asection *sec;
11971
11972 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11973 is nonzero. This is for compatibility with old objects, which used
11974 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
11975 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11976 mips_set_isa_flags (abfd);
11977
b49e97c9
TS
11978 /* Set the sh_info field for .gptab sections and other appropriate
11979 info for each special section. */
11980 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11981 i < elf_numsections (abfd);
11982 i++, hdrpp++)
11983 {
11984 switch ((*hdrpp)->sh_type)
11985 {
11986 case SHT_MIPS_MSYM:
11987 case SHT_MIPS_LIBLIST:
11988 sec = bfd_get_section_by_name (abfd, ".dynstr");
11989 if (sec != NULL)
11990 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11991 break;
11992
11993 case SHT_MIPS_GPTAB:
11994 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11995 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11996 BFD_ASSERT (name != NULL
0112cd26 11997 && CONST_STRNEQ (name, ".gptab."));
b49e97c9
TS
11998 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11999 BFD_ASSERT (sec != NULL);
12000 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12001 break;
12002
12003 case SHT_MIPS_CONTENT:
12004 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12005 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12006 BFD_ASSERT (name != NULL
0112cd26 12007 && CONST_STRNEQ (name, ".MIPS.content"));
b49e97c9
TS
12008 sec = bfd_get_section_by_name (abfd,
12009 name + sizeof ".MIPS.content" - 1);
12010 BFD_ASSERT (sec != NULL);
12011 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12012 break;
12013
12014 case SHT_MIPS_SYMBOL_LIB:
12015 sec = bfd_get_section_by_name (abfd, ".dynsym");
12016 if (sec != NULL)
12017 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12018 sec = bfd_get_section_by_name (abfd, ".liblist");
12019 if (sec != NULL)
12020 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12021 break;
12022
12023 case SHT_MIPS_EVENTS:
12024 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12025 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12026 BFD_ASSERT (name != NULL);
0112cd26 12027 if (CONST_STRNEQ (name, ".MIPS.events"))
b49e97c9
TS
12028 sec = bfd_get_section_by_name (abfd,
12029 name + sizeof ".MIPS.events" - 1);
12030 else
12031 {
0112cd26 12032 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
b49e97c9
TS
12033 sec = bfd_get_section_by_name (abfd,
12034 (name
12035 + sizeof ".MIPS.post_rel" - 1));
12036 }
12037 BFD_ASSERT (sec != NULL);
12038 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12039 break;
12040
12041 }
12042 }
12043}
12044\f
8dc1a139 12045/* When creating an IRIX5 executable, we need REGINFO and RTPROC
b49e97c9
TS
12046 segments. */
12047
12048int
a6b96beb
AM
12049_bfd_mips_elf_additional_program_headers (bfd *abfd,
12050 struct bfd_link_info *info ATTRIBUTE_UNUSED)
b49e97c9
TS
12051{
12052 asection *s;
12053 int ret = 0;
12054
12055 /* See if we need a PT_MIPS_REGINFO segment. */
12056 s = bfd_get_section_by_name (abfd, ".reginfo");
12057 if (s && (s->flags & SEC_LOAD))
12058 ++ret;
12059
351cdf24
MF
12060 /* See if we need a PT_MIPS_ABIFLAGS segment. */
12061 if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12062 ++ret;
12063
b49e97c9
TS
12064 /* See if we need a PT_MIPS_OPTIONS segment. */
12065 if (IRIX_COMPAT (abfd) == ict_irix6
12066 && bfd_get_section_by_name (abfd,
12067 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12068 ++ret;
12069
12070 /* See if we need a PT_MIPS_RTPROC segment. */
12071 if (IRIX_COMPAT (abfd) == ict_irix5
12072 && bfd_get_section_by_name (abfd, ".dynamic")
12073 && bfd_get_section_by_name (abfd, ".mdebug"))
12074 ++ret;
12075
98c904a8
RS
12076 /* Allocate a PT_NULL header in dynamic objects. See
12077 _bfd_mips_elf_modify_segment_map for details. */
12078 if (!SGI_COMPAT (abfd)
12079 && bfd_get_section_by_name (abfd, ".dynamic"))
12080 ++ret;
12081
b49e97c9
TS
12082 return ret;
12083}
12084
8dc1a139 12085/* Modify the segment map for an IRIX5 executable. */
b49e97c9 12086
b34976b6 12087bfd_boolean
9719ad41 12088_bfd_mips_elf_modify_segment_map (bfd *abfd,
7c8b76cc 12089 struct bfd_link_info *info)
b49e97c9
TS
12090{
12091 asection *s;
12092 struct elf_segment_map *m, **pm;
12093 bfd_size_type amt;
12094
12095 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12096 segment. */
12097 s = bfd_get_section_by_name (abfd, ".reginfo");
12098 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12099 {
12bd6957 12100 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
b49e97c9
TS
12101 if (m->p_type == PT_MIPS_REGINFO)
12102 break;
12103 if (m == NULL)
12104 {
12105 amt = sizeof *m;
9719ad41 12106 m = bfd_zalloc (abfd, amt);
b49e97c9 12107 if (m == NULL)
b34976b6 12108 return FALSE;
b49e97c9
TS
12109
12110 m->p_type = PT_MIPS_REGINFO;
12111 m->count = 1;
12112 m->sections[0] = s;
12113
12114 /* We want to put it after the PHDR and INTERP segments. */
12bd6957 12115 pm = &elf_seg_map (abfd);
b49e97c9
TS
12116 while (*pm != NULL
12117 && ((*pm)->p_type == PT_PHDR
12118 || (*pm)->p_type == PT_INTERP))
12119 pm = &(*pm)->next;
12120
12121 m->next = *pm;
12122 *pm = m;
12123 }
12124 }
12125
351cdf24
MF
12126 /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12127 segment. */
12128 s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12129 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12130 {
12131 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12132 if (m->p_type == PT_MIPS_ABIFLAGS)
12133 break;
12134 if (m == NULL)
12135 {
12136 amt = sizeof *m;
12137 m = bfd_zalloc (abfd, amt);
12138 if (m == NULL)
12139 return FALSE;
12140
12141 m->p_type = PT_MIPS_ABIFLAGS;
12142 m->count = 1;
12143 m->sections[0] = s;
12144
12145 /* We want to put it after the PHDR and INTERP segments. */
12146 pm = &elf_seg_map (abfd);
12147 while (*pm != NULL
12148 && ((*pm)->p_type == PT_PHDR
12149 || (*pm)->p_type == PT_INTERP))
12150 pm = &(*pm)->next;
12151
12152 m->next = *pm;
12153 *pm = m;
12154 }
12155 }
12156
b49e97c9
TS
12157 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12158 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
98a8deaf 12159 PT_MIPS_OPTIONS segment immediately following the program header
b49e97c9 12160 table. */
c1fd6598
AO
12161 if (NEWABI_P (abfd)
12162 /* On non-IRIX6 new abi, we'll have already created a segment
12163 for this section, so don't create another. I'm not sure this
12164 is not also the case for IRIX 6, but I can't test it right
12165 now. */
12166 && IRIX_COMPAT (abfd) == ict_irix6)
b49e97c9
TS
12167 {
12168 for (s = abfd->sections; s; s = s->next)
12169 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12170 break;
12171
12172 if (s)
12173 {
12174 struct elf_segment_map *options_segment;
12175
12bd6957 12176 pm = &elf_seg_map (abfd);
98a8deaf
RS
12177 while (*pm != NULL
12178 && ((*pm)->p_type == PT_PHDR
12179 || (*pm)->p_type == PT_INTERP))
12180 pm = &(*pm)->next;
b49e97c9 12181
8ded5a0f
AM
12182 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12183 {
12184 amt = sizeof (struct elf_segment_map);
12185 options_segment = bfd_zalloc (abfd, amt);
12186 options_segment->next = *pm;
12187 options_segment->p_type = PT_MIPS_OPTIONS;
12188 options_segment->p_flags = PF_R;
12189 options_segment->p_flags_valid = TRUE;
12190 options_segment->count = 1;
12191 options_segment->sections[0] = s;
12192 *pm = options_segment;
12193 }
b49e97c9
TS
12194 }
12195 }
12196 else
12197 {
12198 if (IRIX_COMPAT (abfd) == ict_irix5)
12199 {
12200 /* If there are .dynamic and .mdebug sections, we make a room
12201 for the RTPROC header. FIXME: Rewrite without section names. */
12202 if (bfd_get_section_by_name (abfd, ".interp") == NULL
12203 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12204 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12205 {
12bd6957 12206 for (m = elf_seg_map (abfd); m != NULL; m = m->next)
b49e97c9
TS
12207 if (m->p_type == PT_MIPS_RTPROC)
12208 break;
12209 if (m == NULL)
12210 {
12211 amt = sizeof *m;
9719ad41 12212 m = bfd_zalloc (abfd, amt);
b49e97c9 12213 if (m == NULL)
b34976b6 12214 return FALSE;
b49e97c9
TS
12215
12216 m->p_type = PT_MIPS_RTPROC;
12217
12218 s = bfd_get_section_by_name (abfd, ".rtproc");
12219 if (s == NULL)
12220 {
12221 m->count = 0;
12222 m->p_flags = 0;
12223 m->p_flags_valid = 1;
12224 }
12225 else
12226 {
12227 m->count = 1;
12228 m->sections[0] = s;
12229 }
12230
12231 /* We want to put it after the DYNAMIC segment. */
12bd6957 12232 pm = &elf_seg_map (abfd);
b49e97c9
TS
12233 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12234 pm = &(*pm)->next;
12235 if (*pm != NULL)
12236 pm = &(*pm)->next;
12237
12238 m->next = *pm;
12239 *pm = m;
12240 }
12241 }
12242 }
8dc1a139 12243 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
b49e97c9
TS
12244 .dynstr, .dynsym, and .hash sections, and everything in
12245 between. */
12bd6957 12246 for (pm = &elf_seg_map (abfd); *pm != NULL;
b49e97c9
TS
12247 pm = &(*pm)->next)
12248 if ((*pm)->p_type == PT_DYNAMIC)
12249 break;
12250 m = *pm;
f6f62d6f
RS
12251 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12252 glibc's dynamic linker has traditionally derived the number of
12253 tags from the p_filesz field, and sometimes allocates stack
12254 arrays of that size. An overly-big PT_DYNAMIC segment can
12255 be actively harmful in such cases. Making PT_DYNAMIC contain
12256 other sections can also make life hard for the prelinker,
12257 which might move one of the other sections to a different
12258 PT_LOAD segment. */
12259 if (SGI_COMPAT (abfd)
12260 && m != NULL
12261 && m->count == 1
12262 && strcmp (m->sections[0]->name, ".dynamic") == 0)
b49e97c9
TS
12263 {
12264 static const char *sec_names[] =
12265 {
12266 ".dynamic", ".dynstr", ".dynsym", ".hash"
12267 };
12268 bfd_vma low, high;
12269 unsigned int i, c;
12270 struct elf_segment_map *n;
12271
792b4a53 12272 low = ~(bfd_vma) 0;
b49e97c9
TS
12273 high = 0;
12274 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12275 {
12276 s = bfd_get_section_by_name (abfd, sec_names[i]);
12277 if (s != NULL && (s->flags & SEC_LOAD) != 0)
12278 {
12279 bfd_size_type sz;
12280
12281 if (low > s->vma)
12282 low = s->vma;
eea6121a 12283 sz = s->size;
b49e97c9
TS
12284 if (high < s->vma + sz)
12285 high = s->vma + sz;
12286 }
12287 }
12288
12289 c = 0;
12290 for (s = abfd->sections; s != NULL; s = s->next)
12291 if ((s->flags & SEC_LOAD) != 0
12292 && s->vma >= low
eea6121a 12293 && s->vma + s->size <= high)
b49e97c9
TS
12294 ++c;
12295
12296 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
9719ad41 12297 n = bfd_zalloc (abfd, amt);
b49e97c9 12298 if (n == NULL)
b34976b6 12299 return FALSE;
b49e97c9
TS
12300 *n = *m;
12301 n->count = c;
12302
12303 i = 0;
12304 for (s = abfd->sections; s != NULL; s = s->next)
12305 {
12306 if ((s->flags & SEC_LOAD) != 0
12307 && s->vma >= low
eea6121a 12308 && s->vma + s->size <= high)
b49e97c9
TS
12309 {
12310 n->sections[i] = s;
12311 ++i;
12312 }
12313 }
12314
12315 *pm = n;
12316 }
12317 }
12318
98c904a8
RS
12319 /* Allocate a spare program header in dynamic objects so that tools
12320 like the prelinker can add an extra PT_LOAD entry.
12321
12322 If the prelinker needs to make room for a new PT_LOAD entry, its
12323 standard procedure is to move the first (read-only) sections into
12324 the new (writable) segment. However, the MIPS ABI requires
12325 .dynamic to be in a read-only segment, and the section will often
12326 start within sizeof (ElfNN_Phdr) bytes of the last program header.
12327
12328 Although the prelinker could in principle move .dynamic to a
12329 writable segment, it seems better to allocate a spare program
12330 header instead, and avoid the need to move any sections.
12331 There is a long tradition of allocating spare dynamic tags,
12332 so allocating a spare program header seems like a natural
7c8b76cc
JM
12333 extension.
12334
12335 If INFO is NULL, we may be copying an already prelinked binary
12336 with objcopy or strip, so do not add this header. */
12337 if (info != NULL
12338 && !SGI_COMPAT (abfd)
98c904a8
RS
12339 && bfd_get_section_by_name (abfd, ".dynamic"))
12340 {
12bd6957 12341 for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
98c904a8
RS
12342 if ((*pm)->p_type == PT_NULL)
12343 break;
12344 if (*pm == NULL)
12345 {
12346 m = bfd_zalloc (abfd, sizeof (*m));
12347 if (m == NULL)
12348 return FALSE;
12349
12350 m->p_type = PT_NULL;
12351 *pm = m;
12352 }
12353 }
12354
b34976b6 12355 return TRUE;
b49e97c9
TS
12356}
12357\f
12358/* Return the section that should be marked against GC for a given
12359 relocation. */
12360
12361asection *
9719ad41 12362_bfd_mips_elf_gc_mark_hook (asection *sec,
07adf181 12363 struct bfd_link_info *info,
9719ad41
RS
12364 Elf_Internal_Rela *rel,
12365 struct elf_link_hash_entry *h,
12366 Elf_Internal_Sym *sym)
b49e97c9
TS
12367{
12368 /* ??? Do mips16 stub sections need to be handled special? */
12369
12370 if (h != NULL)
07adf181
AM
12371 switch (ELF_R_TYPE (sec->owner, rel->r_info))
12372 {
12373 case R_MIPS_GNU_VTINHERIT:
12374 case R_MIPS_GNU_VTENTRY:
12375 return NULL;
12376 }
b49e97c9 12377
07adf181 12378 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
b49e97c9
TS
12379}
12380
12381/* Update the got entry reference counts for the section being removed. */
12382
b34976b6 12383bfd_boolean
9719ad41
RS
12384_bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12385 struct bfd_link_info *info ATTRIBUTE_UNUSED,
12386 asection *sec ATTRIBUTE_UNUSED,
12387 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
b49e97c9
TS
12388{
12389#if 0
12390 Elf_Internal_Shdr *symtab_hdr;
12391 struct elf_link_hash_entry **sym_hashes;
12392 bfd_signed_vma *local_got_refcounts;
12393 const Elf_Internal_Rela *rel, *relend;
12394 unsigned long r_symndx;
12395 struct elf_link_hash_entry *h;
12396
0e1862bb 12397 if (bfd_link_relocatable (info))
7dda2462
TG
12398 return TRUE;
12399
b49e97c9
TS
12400 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12401 sym_hashes = elf_sym_hashes (abfd);
12402 local_got_refcounts = elf_local_got_refcounts (abfd);
12403
12404 relend = relocs + sec->reloc_count;
12405 for (rel = relocs; rel < relend; rel++)
12406 switch (ELF_R_TYPE (abfd, rel->r_info))
12407 {
738e5348
RS
12408 case R_MIPS16_GOT16:
12409 case R_MIPS16_CALL16:
b49e97c9
TS
12410 case R_MIPS_GOT16:
12411 case R_MIPS_CALL16:
12412 case R_MIPS_CALL_HI16:
12413 case R_MIPS_CALL_LO16:
12414 case R_MIPS_GOT_HI16:
12415 case R_MIPS_GOT_LO16:
4a14403c
TS
12416 case R_MIPS_GOT_DISP:
12417 case R_MIPS_GOT_PAGE:
12418 case R_MIPS_GOT_OFST:
df58fc94
RS
12419 case R_MICROMIPS_GOT16:
12420 case R_MICROMIPS_CALL16:
12421 case R_MICROMIPS_CALL_HI16:
12422 case R_MICROMIPS_CALL_LO16:
12423 case R_MICROMIPS_GOT_HI16:
12424 case R_MICROMIPS_GOT_LO16:
12425 case R_MICROMIPS_GOT_DISP:
12426 case R_MICROMIPS_GOT_PAGE:
12427 case R_MICROMIPS_GOT_OFST:
b49e97c9
TS
12428 /* ??? It would seem that the existing MIPS code does no sort
12429 of reference counting or whatnot on its GOT and PLT entries,
12430 so it is not possible to garbage collect them at this time. */
12431 break;
12432
12433 default:
12434 break;
12435 }
12436#endif
12437
b34976b6 12438 return TRUE;
b49e97c9 12439}
351cdf24
MF
12440
12441/* Prevent .MIPS.abiflags from being discarded with --gc-sections. */
12442
12443bfd_boolean
12444_bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12445 elf_gc_mark_hook_fn gc_mark_hook)
12446{
12447 bfd *sub;
12448
12449 _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12450
12451 for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12452 {
12453 asection *o;
12454
12455 if (! is_mips_elf (sub))
12456 continue;
12457
12458 for (o = sub->sections; o != NULL; o = o->next)
12459 if (!o->gc_mark
12460 && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12461 (bfd_get_section_name (sub, o)))
12462 {
12463 if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12464 return FALSE;
12465 }
12466 }
12467
12468 return TRUE;
12469}
b49e97c9
TS
12470\f
12471/* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12472 hiding the old indirect symbol. Process additional relocation
12473 information. Also called for weakdefs, in which case we just let
12474 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
12475
12476void
fcfa13d2 12477_bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
9719ad41
RS
12478 struct elf_link_hash_entry *dir,
12479 struct elf_link_hash_entry *ind)
b49e97c9
TS
12480{
12481 struct mips_elf_link_hash_entry *dirmips, *indmips;
12482
fcfa13d2 12483 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
b49e97c9 12484
861fb55a
DJ
12485 dirmips = (struct mips_elf_link_hash_entry *) dir;
12486 indmips = (struct mips_elf_link_hash_entry *) ind;
12487 /* Any absolute non-dynamic relocations against an indirect or weak
12488 definition will be against the target symbol. */
12489 if (indmips->has_static_relocs)
12490 dirmips->has_static_relocs = TRUE;
12491
b49e97c9
TS
12492 if (ind->root.type != bfd_link_hash_indirect)
12493 return;
12494
b49e97c9
TS
12495 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12496 if (indmips->readonly_reloc)
b34976b6 12497 dirmips->readonly_reloc = TRUE;
b49e97c9 12498 if (indmips->no_fn_stub)
b34976b6 12499 dirmips->no_fn_stub = TRUE;
61b0a4af
RS
12500 if (indmips->fn_stub)
12501 {
12502 dirmips->fn_stub = indmips->fn_stub;
12503 indmips->fn_stub = NULL;
12504 }
12505 if (indmips->need_fn_stub)
12506 {
12507 dirmips->need_fn_stub = TRUE;
12508 indmips->need_fn_stub = FALSE;
12509 }
12510 if (indmips->call_stub)
12511 {
12512 dirmips->call_stub = indmips->call_stub;
12513 indmips->call_stub = NULL;
12514 }
12515 if (indmips->call_fp_stub)
12516 {
12517 dirmips->call_fp_stub = indmips->call_fp_stub;
12518 indmips->call_fp_stub = NULL;
12519 }
634835ae
RS
12520 if (indmips->global_got_area < dirmips->global_got_area)
12521 dirmips->global_got_area = indmips->global_got_area;
12522 if (indmips->global_got_area < GGA_NONE)
12523 indmips->global_got_area = GGA_NONE;
861fb55a
DJ
12524 if (indmips->has_nonpic_branches)
12525 dirmips->has_nonpic_branches = TRUE;
b49e97c9 12526}
b49e97c9 12527\f
d01414a5
TS
12528#define PDR_SIZE 32
12529
b34976b6 12530bfd_boolean
9719ad41
RS
12531_bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12532 struct bfd_link_info *info)
d01414a5
TS
12533{
12534 asection *o;
b34976b6 12535 bfd_boolean ret = FALSE;
d01414a5
TS
12536 unsigned char *tdata;
12537 size_t i, skip;
12538
12539 o = bfd_get_section_by_name (abfd, ".pdr");
12540 if (! o)
b34976b6 12541 return FALSE;
eea6121a 12542 if (o->size == 0)
b34976b6 12543 return FALSE;
eea6121a 12544 if (o->size % PDR_SIZE != 0)
b34976b6 12545 return FALSE;
d01414a5
TS
12546 if (o->output_section != NULL
12547 && bfd_is_abs_section (o->output_section))
b34976b6 12548 return FALSE;
d01414a5 12549
eea6121a 12550 tdata = bfd_zmalloc (o->size / PDR_SIZE);
d01414a5 12551 if (! tdata)
b34976b6 12552 return FALSE;
d01414a5 12553
9719ad41 12554 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
45d6a902 12555 info->keep_memory);
d01414a5
TS
12556 if (!cookie->rels)
12557 {
12558 free (tdata);
b34976b6 12559 return FALSE;
d01414a5
TS
12560 }
12561
12562 cookie->rel = cookie->rels;
12563 cookie->relend = cookie->rels + o->reloc_count;
12564
eea6121a 12565 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
d01414a5 12566 {
c152c796 12567 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
d01414a5
TS
12568 {
12569 tdata[i] = 1;
12570 skip ++;
12571 }
12572 }
12573
12574 if (skip != 0)
12575 {
f0abc2a1 12576 mips_elf_section_data (o)->u.tdata = tdata;
e034b2cc
MR
12577 if (o->rawsize == 0)
12578 o->rawsize = o->size;
eea6121a 12579 o->size -= skip * PDR_SIZE;
b34976b6 12580 ret = TRUE;
d01414a5
TS
12581 }
12582 else
12583 free (tdata);
12584
12585 if (! info->keep_memory)
12586 free (cookie->rels);
12587
12588 return ret;
12589}
12590
b34976b6 12591bfd_boolean
9719ad41 12592_bfd_mips_elf_ignore_discarded_relocs (asection *sec)
53bfd6b4
MR
12593{
12594 if (strcmp (sec->name, ".pdr") == 0)
b34976b6
AM
12595 return TRUE;
12596 return FALSE;
53bfd6b4 12597}
d01414a5 12598
b34976b6 12599bfd_boolean
c7b8f16e
JB
12600_bfd_mips_elf_write_section (bfd *output_bfd,
12601 struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12602 asection *sec, bfd_byte *contents)
d01414a5
TS
12603{
12604 bfd_byte *to, *from, *end;
12605 int i;
12606
12607 if (strcmp (sec->name, ".pdr") != 0)
b34976b6 12608 return FALSE;
d01414a5 12609
f0abc2a1 12610 if (mips_elf_section_data (sec)->u.tdata == NULL)
b34976b6 12611 return FALSE;
d01414a5
TS
12612
12613 to = contents;
eea6121a 12614 end = contents + sec->size;
d01414a5
TS
12615 for (from = contents, i = 0;
12616 from < end;
12617 from += PDR_SIZE, i++)
12618 {
f0abc2a1 12619 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
d01414a5
TS
12620 continue;
12621 if (to != from)
12622 memcpy (to, from, PDR_SIZE);
12623 to += PDR_SIZE;
12624 }
12625 bfd_set_section_contents (output_bfd, sec->output_section, contents,
eea6121a 12626 sec->output_offset, sec->size);
b34976b6 12627 return TRUE;
d01414a5 12628}
53bfd6b4 12629\f
df58fc94
RS
12630/* microMIPS code retains local labels for linker relaxation. Omit them
12631 from output by default for clarity. */
12632
12633bfd_boolean
12634_bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12635{
12636 return _bfd_elf_is_local_label_name (abfd, sym->name);
12637}
12638
b49e97c9
TS
12639/* MIPS ELF uses a special find_nearest_line routine in order the
12640 handle the ECOFF debugging information. */
12641
12642struct mips_elf_find_line
12643{
12644 struct ecoff_debug_info d;
12645 struct ecoff_find_line i;
12646};
12647
b34976b6 12648bfd_boolean
fb167eb2
AM
12649_bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12650 asection *section, bfd_vma offset,
9719ad41
RS
12651 const char **filename_ptr,
12652 const char **functionname_ptr,
fb167eb2
AM
12653 unsigned int *line_ptr,
12654 unsigned int *discriminator_ptr)
b49e97c9
TS
12655{
12656 asection *msec;
12657
fb167eb2 12658 if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
b49e97c9 12659 filename_ptr, functionname_ptr,
fb167eb2
AM
12660 line_ptr, discriminator_ptr,
12661 dwarf_debug_sections,
12662 ABI_64_P (abfd) ? 8 : 0,
12663 &elf_tdata (abfd)->dwarf2_find_line_info))
b34976b6 12664 return TRUE;
b49e97c9 12665
fb167eb2 12666 if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
b49e97c9 12667 filename_ptr, functionname_ptr,
fb167eb2 12668 line_ptr))
b34976b6 12669 return TRUE;
b49e97c9
TS
12670
12671 msec = bfd_get_section_by_name (abfd, ".mdebug");
12672 if (msec != NULL)
12673 {
12674 flagword origflags;
12675 struct mips_elf_find_line *fi;
12676 const struct ecoff_debug_swap * const swap =
12677 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12678
12679 /* If we are called during a link, mips_elf_final_link may have
12680 cleared the SEC_HAS_CONTENTS field. We force it back on here
12681 if appropriate (which it normally will be). */
12682 origflags = msec->flags;
12683 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12684 msec->flags |= SEC_HAS_CONTENTS;
12685
698600e4 12686 fi = mips_elf_tdata (abfd)->find_line_info;
b49e97c9
TS
12687 if (fi == NULL)
12688 {
12689 bfd_size_type external_fdr_size;
12690 char *fraw_src;
12691 char *fraw_end;
12692 struct fdr *fdr_ptr;
12693 bfd_size_type amt = sizeof (struct mips_elf_find_line);
12694
9719ad41 12695 fi = bfd_zalloc (abfd, amt);
b49e97c9
TS
12696 if (fi == NULL)
12697 {
12698 msec->flags = origflags;
b34976b6 12699 return FALSE;
b49e97c9
TS
12700 }
12701
12702 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12703 {
12704 msec->flags = origflags;
b34976b6 12705 return FALSE;
b49e97c9
TS
12706 }
12707
12708 /* Swap in the FDR information. */
12709 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
9719ad41 12710 fi->d.fdr = bfd_alloc (abfd, amt);
b49e97c9
TS
12711 if (fi->d.fdr == NULL)
12712 {
12713 msec->flags = origflags;
b34976b6 12714 return FALSE;
b49e97c9
TS
12715 }
12716 external_fdr_size = swap->external_fdr_size;
12717 fdr_ptr = fi->d.fdr;
12718 fraw_src = (char *) fi->d.external_fdr;
12719 fraw_end = (fraw_src
12720 + fi->d.symbolic_header.ifdMax * external_fdr_size);
12721 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
9719ad41 12722 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
b49e97c9 12723
698600e4 12724 mips_elf_tdata (abfd)->find_line_info = fi;
b49e97c9
TS
12725
12726 /* Note that we don't bother to ever free this information.
12727 find_nearest_line is either called all the time, as in
12728 objdump -l, so the information should be saved, or it is
12729 rarely called, as in ld error messages, so the memory
12730 wasted is unimportant. Still, it would probably be a
12731 good idea for free_cached_info to throw it away. */
12732 }
12733
12734 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12735 &fi->i, filename_ptr, functionname_ptr,
12736 line_ptr))
12737 {
12738 msec->flags = origflags;
b34976b6 12739 return TRUE;
b49e97c9
TS
12740 }
12741
12742 msec->flags = origflags;
12743 }
12744
12745 /* Fall back on the generic ELF find_nearest_line routine. */
12746
fb167eb2 12747 return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
b49e97c9 12748 filename_ptr, functionname_ptr,
fb167eb2 12749 line_ptr, discriminator_ptr);
b49e97c9 12750}
4ab527b0
FF
12751
12752bfd_boolean
12753_bfd_mips_elf_find_inliner_info (bfd *abfd,
12754 const char **filename_ptr,
12755 const char **functionname_ptr,
12756 unsigned int *line_ptr)
12757{
12758 bfd_boolean found;
12759 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12760 functionname_ptr, line_ptr,
12761 & elf_tdata (abfd)->dwarf2_find_line_info);
12762 return found;
12763}
12764
b49e97c9
TS
12765\f
12766/* When are writing out the .options or .MIPS.options section,
12767 remember the bytes we are writing out, so that we can install the
12768 GP value in the section_processing routine. */
12769
b34976b6 12770bfd_boolean
9719ad41
RS
12771_bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12772 const void *location,
12773 file_ptr offset, bfd_size_type count)
b49e97c9 12774{
cc2e31b9 12775 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
b49e97c9
TS
12776 {
12777 bfd_byte *c;
12778
12779 if (elf_section_data (section) == NULL)
12780 {
12781 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
9719ad41 12782 section->used_by_bfd = bfd_zalloc (abfd, amt);
b49e97c9 12783 if (elf_section_data (section) == NULL)
b34976b6 12784 return FALSE;
b49e97c9 12785 }
f0abc2a1 12786 c = mips_elf_section_data (section)->u.tdata;
b49e97c9
TS
12787 if (c == NULL)
12788 {
eea6121a 12789 c = bfd_zalloc (abfd, section->size);
b49e97c9 12790 if (c == NULL)
b34976b6 12791 return FALSE;
f0abc2a1 12792 mips_elf_section_data (section)->u.tdata = c;
b49e97c9
TS
12793 }
12794
9719ad41 12795 memcpy (c + offset, location, count);
b49e97c9
TS
12796 }
12797
12798 return _bfd_elf_set_section_contents (abfd, section, location, offset,
12799 count);
12800}
12801
12802/* This is almost identical to bfd_generic_get_... except that some
12803 MIPS relocations need to be handled specially. Sigh. */
12804
12805bfd_byte *
9719ad41
RS
12806_bfd_elf_mips_get_relocated_section_contents
12807 (bfd *abfd,
12808 struct bfd_link_info *link_info,
12809 struct bfd_link_order *link_order,
12810 bfd_byte *data,
12811 bfd_boolean relocatable,
12812 asymbol **symbols)
b49e97c9
TS
12813{
12814 /* Get enough memory to hold the stuff */
12815 bfd *input_bfd = link_order->u.indirect.section->owner;
12816 asection *input_section = link_order->u.indirect.section;
eea6121a 12817 bfd_size_type sz;
b49e97c9
TS
12818
12819 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12820 arelent **reloc_vector = NULL;
12821 long reloc_count;
12822
12823 if (reloc_size < 0)
12824 goto error_return;
12825
9719ad41 12826 reloc_vector = bfd_malloc (reloc_size);
b49e97c9
TS
12827 if (reloc_vector == NULL && reloc_size != 0)
12828 goto error_return;
12829
12830 /* read in the section */
eea6121a
AM
12831 sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12832 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
b49e97c9
TS
12833 goto error_return;
12834
b49e97c9
TS
12835 reloc_count = bfd_canonicalize_reloc (input_bfd,
12836 input_section,
12837 reloc_vector,
12838 symbols);
12839 if (reloc_count < 0)
12840 goto error_return;
12841
12842 if (reloc_count > 0)
12843 {
12844 arelent **parent;
12845 /* for mips */
12846 int gp_found;
12847 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
12848
12849 {
12850 struct bfd_hash_entry *h;
12851 struct bfd_link_hash_entry *lh;
12852 /* Skip all this stuff if we aren't mixing formats. */
12853 if (abfd && input_bfd
12854 && abfd->xvec == input_bfd->xvec)
12855 lh = 0;
12856 else
12857 {
b34976b6 12858 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
b49e97c9
TS
12859 lh = (struct bfd_link_hash_entry *) h;
12860 }
12861 lookup:
12862 if (lh)
12863 {
12864 switch (lh->type)
12865 {
12866 case bfd_link_hash_undefined:
12867 case bfd_link_hash_undefweak:
12868 case bfd_link_hash_common:
12869 gp_found = 0;
12870 break;
12871 case bfd_link_hash_defined:
12872 case bfd_link_hash_defweak:
12873 gp_found = 1;
12874 gp = lh->u.def.value;
12875 break;
12876 case bfd_link_hash_indirect:
12877 case bfd_link_hash_warning:
12878 lh = lh->u.i.link;
12879 /* @@FIXME ignoring warning for now */
12880 goto lookup;
12881 case bfd_link_hash_new:
12882 default:
12883 abort ();
12884 }
12885 }
12886 else
12887 gp_found = 0;
12888 }
12889 /* end mips */
9719ad41 12890 for (parent = reloc_vector; *parent != NULL; parent++)
b49e97c9 12891 {
9719ad41 12892 char *error_message = NULL;
b49e97c9
TS
12893 bfd_reloc_status_type r;
12894
12895 /* Specific to MIPS: Deal with relocation types that require
12896 knowing the gp of the output bfd. */
12897 asymbol *sym = *(*parent)->sym_ptr_ptr;
b49e97c9 12898
8236346f
EC
12899 /* If we've managed to find the gp and have a special
12900 function for the relocation then go ahead, else default
12901 to the generic handling. */
12902 if (gp_found
12903 && (*parent)->howto->special_function
12904 == _bfd_mips_elf32_gprel16_reloc)
12905 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12906 input_section, relocatable,
12907 data, gp);
12908 else
86324f90 12909 r = bfd_perform_relocation (input_bfd, *parent, data,
8236346f
EC
12910 input_section,
12911 relocatable ? abfd : NULL,
12912 &error_message);
b49e97c9 12913
1049f94e 12914 if (relocatable)
b49e97c9
TS
12915 {
12916 asection *os = input_section->output_section;
12917
12918 /* A partial link, so keep the relocs */
12919 os->orelocation[os->reloc_count] = *parent;
12920 os->reloc_count++;
12921 }
12922
12923 if (r != bfd_reloc_ok)
12924 {
12925 switch (r)
12926 {
12927 case bfd_reloc_undefined:
12928 if (!((*link_info->callbacks->undefined_symbol)
12929 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5e2b0d47 12930 input_bfd, input_section, (*parent)->address, TRUE)))
b49e97c9
TS
12931 goto error_return;
12932 break;
12933 case bfd_reloc_dangerous:
9719ad41 12934 BFD_ASSERT (error_message != NULL);
b49e97c9
TS
12935 if (!((*link_info->callbacks->reloc_dangerous)
12936 (link_info, error_message, input_bfd, input_section,
12937 (*parent)->address)))
12938 goto error_return;
12939 break;
12940 case bfd_reloc_overflow:
12941 if (!((*link_info->callbacks->reloc_overflow)
dfeffb9f
L
12942 (link_info, NULL,
12943 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
b49e97c9
TS
12944 (*parent)->howto->name, (*parent)->addend,
12945 input_bfd, input_section, (*parent)->address)))
12946 goto error_return;
12947 break;
12948 case bfd_reloc_outofrange:
12949 default:
12950 abort ();
12951 break;
12952 }
12953
12954 }
12955 }
12956 }
12957 if (reloc_vector != NULL)
12958 free (reloc_vector);
12959 return data;
12960
12961error_return:
12962 if (reloc_vector != NULL)
12963 free (reloc_vector);
12964 return NULL;
12965}
12966\f
df58fc94
RS
12967static bfd_boolean
12968mips_elf_relax_delete_bytes (bfd *abfd,
12969 asection *sec, bfd_vma addr, int count)
12970{
12971 Elf_Internal_Shdr *symtab_hdr;
12972 unsigned int sec_shndx;
12973 bfd_byte *contents;
12974 Elf_Internal_Rela *irel, *irelend;
12975 Elf_Internal_Sym *isym;
12976 Elf_Internal_Sym *isymend;
12977 struct elf_link_hash_entry **sym_hashes;
12978 struct elf_link_hash_entry **end_hashes;
12979 struct elf_link_hash_entry **start_hashes;
12980 unsigned int symcount;
12981
12982 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12983 contents = elf_section_data (sec)->this_hdr.contents;
12984
12985 irel = elf_section_data (sec)->relocs;
12986 irelend = irel + sec->reloc_count;
12987
12988 /* Actually delete the bytes. */
12989 memmove (contents + addr, contents + addr + count,
12990 (size_t) (sec->size - addr - count));
12991 sec->size -= count;
12992
12993 /* Adjust all the relocs. */
12994 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12995 {
12996 /* Get the new reloc address. */
12997 if (irel->r_offset > addr)
12998 irel->r_offset -= count;
12999 }
13000
13001 BFD_ASSERT (addr % 2 == 0);
13002 BFD_ASSERT (count % 2 == 0);
13003
13004 /* Adjust the local symbols defined in this section. */
13005 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13006 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13007 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2309ddf2 13008 if (isym->st_shndx == sec_shndx && isym->st_value > addr)
df58fc94
RS
13009 isym->st_value -= count;
13010
13011 /* Now adjust the global symbols defined in this section. */
13012 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13013 - symtab_hdr->sh_info);
13014 sym_hashes = start_hashes = elf_sym_hashes (abfd);
13015 end_hashes = sym_hashes + symcount;
13016
13017 for (; sym_hashes < end_hashes; sym_hashes++)
13018 {
13019 struct elf_link_hash_entry *sym_hash = *sym_hashes;
13020
13021 if ((sym_hash->root.type == bfd_link_hash_defined
13022 || sym_hash->root.type == bfd_link_hash_defweak)
13023 && sym_hash->root.u.def.section == sec)
13024 {
2309ddf2 13025 bfd_vma value = sym_hash->root.u.def.value;
df58fc94 13026
df58fc94
RS
13027 if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13028 value &= MINUS_TWO;
13029 if (value > addr)
13030 sym_hash->root.u.def.value -= count;
13031 }
13032 }
13033
13034 return TRUE;
13035}
13036
13037
13038/* Opcodes needed for microMIPS relaxation as found in
13039 opcodes/micromips-opc.c. */
13040
13041struct opcode_descriptor {
13042 unsigned long match;
13043 unsigned long mask;
13044};
13045
13046/* The $ra register aka $31. */
13047
13048#define RA 31
13049
13050/* 32-bit instruction format register fields. */
13051
13052#define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13053#define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13054
13055/* Check if a 5-bit register index can be abbreviated to 3 bits. */
13056
13057#define OP16_VALID_REG(r) \
13058 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13059
13060
13061/* 32-bit and 16-bit branches. */
13062
13063static const struct opcode_descriptor b_insns_32[] = {
13064 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13065 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13066 { 0, 0 } /* End marker for find_match(). */
13067};
13068
13069static const struct opcode_descriptor bc_insn_32 =
13070 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 };
13071
13072static const struct opcode_descriptor bz_insn_32 =
13073 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 };
13074
13075static const struct opcode_descriptor bzal_insn_32 =
13076 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 };
13077
13078static const struct opcode_descriptor beq_insn_32 =
13079 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 };
13080
13081static const struct opcode_descriptor b_insn_16 =
13082 { /* "b", "mD", */ 0xcc00, 0xfc00 };
13083
13084static const struct opcode_descriptor bz_insn_16 =
c088dedf 13085 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 };
df58fc94
RS
13086
13087
13088/* 32-bit and 16-bit branch EQ and NE zero. */
13089
13090/* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13091 eq and second the ne. This convention is used when replacing a
13092 32-bit BEQ/BNE with the 16-bit version. */
13093
13094#define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13095
13096static const struct opcode_descriptor bz_rs_insns_32[] = {
13097 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 },
13098 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 },
13099 { 0, 0 } /* End marker for find_match(). */
13100};
13101
13102static const struct opcode_descriptor bz_rt_insns_32[] = {
13103 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 },
13104 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 },
13105 { 0, 0 } /* End marker for find_match(). */
13106};
13107
13108static const struct opcode_descriptor bzc_insns_32[] = {
13109 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 },
13110 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 },
13111 { 0, 0 } /* End marker for find_match(). */
13112};
13113
13114static const struct opcode_descriptor bz_insns_16[] = {
13115 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 },
13116 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 },
13117 { 0, 0 } /* End marker for find_match(). */
13118};
13119
13120/* Switch between a 5-bit register index and its 3-bit shorthand. */
13121
13122#define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
13123#define BZ16_REG_FIELD(r) \
13124 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
13125
13126
13127/* 32-bit instructions with a delay slot. */
13128
13129static const struct opcode_descriptor jal_insn_32_bd16 =
13130 { /* "jals", "a", */ 0x74000000, 0xfc000000 };
13131
13132static const struct opcode_descriptor jal_insn_32_bd32 =
13133 { /* "jal", "a", */ 0xf4000000, 0xfc000000 };
13134
13135static const struct opcode_descriptor jal_x_insn_32_bd32 =
13136 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 };
13137
13138static const struct opcode_descriptor j_insn_32 =
13139 { /* "j", "a", */ 0xd4000000, 0xfc000000 };
13140
13141static const struct opcode_descriptor jalr_insn_32 =
13142 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff };
13143
13144/* This table can be compacted, because no opcode replacement is made. */
13145
13146static const struct opcode_descriptor ds_insns_32_bd16[] = {
13147 { /* "jals", "a", */ 0x74000000, 0xfc000000 },
13148
13149 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff },
13150 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 },
13151
13152 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 },
13153 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 },
13154 { /* "j", "a", */ 0xd4000000, 0xfc000000 },
13155 { 0, 0 } /* End marker for find_match(). */
13156};
13157
13158/* This table can be compacted, because no opcode replacement is made. */
13159
13160static const struct opcode_descriptor ds_insns_32_bd32[] = {
13161 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 },
13162
13163 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff },
13164 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 },
13165 { 0, 0 } /* End marker for find_match(). */
13166};
13167
13168
13169/* 16-bit instructions with a delay slot. */
13170
13171static const struct opcode_descriptor jalr_insn_16_bd16 =
13172 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 };
13173
13174static const struct opcode_descriptor jalr_insn_16_bd32 =
13175 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 };
13176
13177static const struct opcode_descriptor jr_insn_16 =
13178 { /* "jr", "mj", */ 0x4580, 0xffe0 };
13179
13180#define JR16_REG(opcode) ((opcode) & 0x1f)
13181
13182/* This table can be compacted, because no opcode replacement is made. */
13183
13184static const struct opcode_descriptor ds_insns_16_bd16[] = {
13185 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 },
13186
13187 { /* "b", "mD", */ 0xcc00, 0xfc00 },
13188 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 },
13189 { /* "jr", "mj", */ 0x4580, 0xffe0 },
13190 { 0, 0 } /* End marker for find_match(). */
13191};
13192
13193
13194/* LUI instruction. */
13195
13196static const struct opcode_descriptor lui_insn =
13197 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 };
13198
13199
13200/* ADDIU instruction. */
13201
13202static const struct opcode_descriptor addiu_insn =
13203 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 };
13204
13205static const struct opcode_descriptor addiupc_insn =
13206 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 };
13207
13208#define ADDIUPC_REG_FIELD(r) \
13209 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13210
13211
13212/* Relaxable instructions in a JAL delay slot: MOVE. */
13213
13214/* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves
13215 (ADDU, OR) have rd in 15:11 and rs in 10:16. */
13216#define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13217#define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13218
13219#define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13220#define MOVE16_RS_FIELD(r) (((r) & 0x1f) )
13221
13222static const struct opcode_descriptor move_insns_32[] = {
df58fc94 13223 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */
40fc1451 13224 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
df58fc94
RS
13225 { 0, 0 } /* End marker for find_match(). */
13226};
13227
13228static const struct opcode_descriptor move_insn_16 =
13229 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 };
13230
13231
13232/* NOP instructions. */
13233
13234static const struct opcode_descriptor nop_insn_32 =
13235 { /* "nop", "", */ 0x00000000, 0xffffffff };
13236
13237static const struct opcode_descriptor nop_insn_16 =
13238 { /* "nop", "", */ 0x0c00, 0xffff };
13239
13240
13241/* Instruction match support. */
13242
13243#define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13244
13245static int
13246find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13247{
13248 unsigned long indx;
13249
13250 for (indx = 0; insn[indx].mask != 0; indx++)
13251 if (MATCH (opcode, insn[indx]))
13252 return indx;
13253
13254 return -1;
13255}
13256
13257
13258/* Branch and delay slot decoding support. */
13259
13260/* If PTR points to what *might* be a 16-bit branch or jump, then
13261 return the minimum length of its delay slot, otherwise return 0.
13262 Non-zero results are not definitive as we might be checking against
13263 the second half of another instruction. */
13264
13265static int
13266check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13267{
13268 unsigned long opcode;
13269 int bdsize;
13270
13271 opcode = bfd_get_16 (abfd, ptr);
13272 if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13273 /* 16-bit branch/jump with a 32-bit delay slot. */
13274 bdsize = 4;
13275 else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13276 || find_match (opcode, ds_insns_16_bd16) >= 0)
13277 /* 16-bit branch/jump with a 16-bit delay slot. */
13278 bdsize = 2;
13279 else
13280 /* No delay slot. */
13281 bdsize = 0;
13282
13283 return bdsize;
13284}
13285
13286/* If PTR points to what *might* be a 32-bit branch or jump, then
13287 return the minimum length of its delay slot, otherwise return 0.
13288 Non-zero results are not definitive as we might be checking against
13289 the second half of another instruction. */
13290
13291static int
13292check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13293{
13294 unsigned long opcode;
13295 int bdsize;
13296
d21911ea 13297 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
13298 if (find_match (opcode, ds_insns_32_bd32) >= 0)
13299 /* 32-bit branch/jump with a 32-bit delay slot. */
13300 bdsize = 4;
13301 else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13302 /* 32-bit branch/jump with a 16-bit delay slot. */
13303 bdsize = 2;
13304 else
13305 /* No delay slot. */
13306 bdsize = 0;
13307
13308 return bdsize;
13309}
13310
13311/* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13312 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */
13313
13314static bfd_boolean
13315check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13316{
13317 unsigned long opcode;
13318
13319 opcode = bfd_get_16 (abfd, ptr);
13320 if (MATCH (opcode, b_insn_16)
13321 /* B16 */
13322 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13323 /* JR16 */
13324 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13325 /* BEQZ16, BNEZ16 */
13326 || (MATCH (opcode, jalr_insn_16_bd32)
13327 /* JALR16 */
13328 && reg != JR16_REG (opcode) && reg != RA))
13329 return TRUE;
13330
13331 return FALSE;
13332}
13333
13334/* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13335 then return TRUE, otherwise FALSE. */
13336
f41e5fcc 13337static bfd_boolean
df58fc94
RS
13338check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13339{
13340 unsigned long opcode;
13341
d21911ea 13342 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
13343 if (MATCH (opcode, j_insn_32)
13344 /* J */
13345 || MATCH (opcode, bc_insn_32)
13346 /* BC1F, BC1T, BC2F, BC2T */
13347 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13348 /* JAL, JALX */
13349 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13350 /* BGEZ, BGTZ, BLEZ, BLTZ */
13351 || (MATCH (opcode, bzal_insn_32)
13352 /* BGEZAL, BLTZAL */
13353 && reg != OP32_SREG (opcode) && reg != RA)
13354 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13355 /* JALR, JALR.HB, BEQ, BNE */
13356 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13357 return TRUE;
13358
13359 return FALSE;
13360}
13361
80cab405
MR
13362/* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13363 IRELEND) at OFFSET indicate that there must be a compact branch there,
13364 then return TRUE, otherwise FALSE. */
df58fc94
RS
13365
13366static bfd_boolean
80cab405
MR
13367check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13368 const Elf_Internal_Rela *internal_relocs,
13369 const Elf_Internal_Rela *irelend)
df58fc94 13370{
80cab405
MR
13371 const Elf_Internal_Rela *irel;
13372 unsigned long opcode;
13373
d21911ea 13374 opcode = bfd_get_micromips_32 (abfd, ptr);
80cab405
MR
13375 if (find_match (opcode, bzc_insns_32) < 0)
13376 return FALSE;
df58fc94
RS
13377
13378 for (irel = internal_relocs; irel < irelend; irel++)
80cab405
MR
13379 if (irel->r_offset == offset
13380 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13381 return TRUE;
13382
df58fc94
RS
13383 return FALSE;
13384}
80cab405
MR
13385
13386/* Bitsize checking. */
13387#define IS_BITSIZE(val, N) \
13388 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \
13389 - (1ULL << ((N) - 1))) == (val))
13390
df58fc94
RS
13391\f
13392bfd_boolean
13393_bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13394 struct bfd_link_info *link_info,
13395 bfd_boolean *again)
13396{
833794fc 13397 bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
df58fc94
RS
13398 Elf_Internal_Shdr *symtab_hdr;
13399 Elf_Internal_Rela *internal_relocs;
13400 Elf_Internal_Rela *irel, *irelend;
13401 bfd_byte *contents = NULL;
13402 Elf_Internal_Sym *isymbuf = NULL;
13403
13404 /* Assume nothing changes. */
13405 *again = FALSE;
13406
13407 /* We don't have to do anything for a relocatable link, if
13408 this section does not have relocs, or if this is not a
13409 code section. */
13410
0e1862bb 13411 if (bfd_link_relocatable (link_info)
df58fc94
RS
13412 || (sec->flags & SEC_RELOC) == 0
13413 || sec->reloc_count == 0
13414 || (sec->flags & SEC_CODE) == 0)
13415 return TRUE;
13416
13417 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13418
13419 /* Get a copy of the native relocations. */
13420 internal_relocs = (_bfd_elf_link_read_relocs
2c3fc389 13421 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
df58fc94
RS
13422 link_info->keep_memory));
13423 if (internal_relocs == NULL)
13424 goto error_return;
13425
13426 /* Walk through them looking for relaxing opportunities. */
13427 irelend = internal_relocs + sec->reloc_count;
13428 for (irel = internal_relocs; irel < irelend; irel++)
13429 {
13430 unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13431 unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13432 bfd_boolean target_is_micromips_code_p;
13433 unsigned long opcode;
13434 bfd_vma symval;
13435 bfd_vma pcrval;
2309ddf2 13436 bfd_byte *ptr;
df58fc94
RS
13437 int fndopc;
13438
13439 /* The number of bytes to delete for relaxation and from where
13440 to delete these bytes starting at irel->r_offset. */
13441 int delcnt = 0;
13442 int deloff = 0;
13443
13444 /* If this isn't something that can be relaxed, then ignore
13445 this reloc. */
13446 if (r_type != R_MICROMIPS_HI16
13447 && r_type != R_MICROMIPS_PC16_S1
2309ddf2 13448 && r_type != R_MICROMIPS_26_S1)
df58fc94
RS
13449 continue;
13450
13451 /* Get the section contents if we haven't done so already. */
13452 if (contents == NULL)
13453 {
13454 /* Get cached copy if it exists. */
13455 if (elf_section_data (sec)->this_hdr.contents != NULL)
13456 contents = elf_section_data (sec)->this_hdr.contents;
13457 /* Go get them off disk. */
13458 else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13459 goto error_return;
13460 }
2309ddf2 13461 ptr = contents + irel->r_offset;
df58fc94
RS
13462
13463 /* Read this BFD's local symbols if we haven't done so already. */
13464 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13465 {
13466 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13467 if (isymbuf == NULL)
13468 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13469 symtab_hdr->sh_info, 0,
13470 NULL, NULL, NULL);
13471 if (isymbuf == NULL)
13472 goto error_return;
13473 }
13474
13475 /* Get the value of the symbol referred to by the reloc. */
13476 if (r_symndx < symtab_hdr->sh_info)
13477 {
13478 /* A local symbol. */
13479 Elf_Internal_Sym *isym;
13480 asection *sym_sec;
13481
13482 isym = isymbuf + r_symndx;
13483 if (isym->st_shndx == SHN_UNDEF)
13484 sym_sec = bfd_und_section_ptr;
13485 else if (isym->st_shndx == SHN_ABS)
13486 sym_sec = bfd_abs_section_ptr;
13487 else if (isym->st_shndx == SHN_COMMON)
13488 sym_sec = bfd_com_section_ptr;
13489 else
13490 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13491 symval = (isym->st_value
13492 + sym_sec->output_section->vma
13493 + sym_sec->output_offset);
13494 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13495 }
13496 else
13497 {
13498 unsigned long indx;
13499 struct elf_link_hash_entry *h;
13500
13501 /* An external symbol. */
13502 indx = r_symndx - symtab_hdr->sh_info;
13503 h = elf_sym_hashes (abfd)[indx];
13504 BFD_ASSERT (h != NULL);
13505
13506 if (h->root.type != bfd_link_hash_defined
13507 && h->root.type != bfd_link_hash_defweak)
13508 /* This appears to be a reference to an undefined
13509 symbol. Just ignore it -- it will be caught by the
13510 regular reloc processing. */
13511 continue;
13512
13513 symval = (h->root.u.def.value
13514 + h->root.u.def.section->output_section->vma
13515 + h->root.u.def.section->output_offset);
13516 target_is_micromips_code_p = (!h->needs_plt
13517 && ELF_ST_IS_MICROMIPS (h->other));
13518 }
13519
13520
13521 /* For simplicity of coding, we are going to modify the
13522 section contents, the section relocs, and the BFD symbol
13523 table. We must tell the rest of the code not to free up this
13524 information. It would be possible to instead create a table
13525 of changes which have to be made, as is done in coff-mips.c;
13526 that would be more work, but would require less memory when
13527 the linker is run. */
13528
13529 /* Only 32-bit instructions relaxed. */
13530 if (irel->r_offset + 4 > sec->size)
13531 continue;
13532
d21911ea 13533 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
13534
13535 /* This is the pc-relative distance from the instruction the
13536 relocation is applied to, to the symbol referred. */
13537 pcrval = (symval
13538 - (sec->output_section->vma + sec->output_offset)
13539 - irel->r_offset);
13540
13541 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13542 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13543 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is
13544
13545 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13546
13547 where pcrval has first to be adjusted to apply against the LO16
13548 location (we make the adjustment later on, when we have figured
13549 out the offset). */
13550 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13551 {
80cab405 13552 bfd_boolean bzc = FALSE;
df58fc94
RS
13553 unsigned long nextopc;
13554 unsigned long reg;
13555 bfd_vma offset;
13556
13557 /* Give up if the previous reloc was a HI16 against this symbol
13558 too. */
13559 if (irel > internal_relocs
13560 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13561 && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13562 continue;
13563
13564 /* Or if the next reloc is not a LO16 against this symbol. */
13565 if (irel + 1 >= irelend
13566 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13567 || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13568 continue;
13569
13570 /* Or if the second next reloc is a LO16 against this symbol too. */
13571 if (irel + 2 >= irelend
13572 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13573 && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13574 continue;
13575
80cab405
MR
13576 /* See if the LUI instruction *might* be in a branch delay slot.
13577 We check whether what looks like a 16-bit branch or jump is
13578 actually an immediate argument to a compact branch, and let
13579 it through if so. */
df58fc94 13580 if (irel->r_offset >= 2
2309ddf2 13581 && check_br16_dslot (abfd, ptr - 2)
df58fc94 13582 && !(irel->r_offset >= 4
80cab405
MR
13583 && (bzc = check_relocated_bzc (abfd,
13584 ptr - 4, irel->r_offset - 4,
13585 internal_relocs, irelend))))
df58fc94
RS
13586 continue;
13587 if (irel->r_offset >= 4
80cab405 13588 && !bzc
2309ddf2 13589 && check_br32_dslot (abfd, ptr - 4))
df58fc94
RS
13590 continue;
13591
13592 reg = OP32_SREG (opcode);
13593
13594 /* We only relax adjacent instructions or ones separated with
13595 a branch or jump that has a delay slot. The branch or jump
13596 must not fiddle with the register used to hold the address.
13597 Subtract 4 for the LUI itself. */
13598 offset = irel[1].r_offset - irel[0].r_offset;
13599 switch (offset - 4)
13600 {
13601 case 0:
13602 break;
13603 case 2:
2309ddf2 13604 if (check_br16 (abfd, ptr + 4, reg))
df58fc94
RS
13605 break;
13606 continue;
13607 case 4:
2309ddf2 13608 if (check_br32 (abfd, ptr + 4, reg))
df58fc94
RS
13609 break;
13610 continue;
13611 default:
13612 continue;
13613 }
13614
d21911ea 13615 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
df58fc94
RS
13616
13617 /* Give up unless the same register is used with both
13618 relocations. */
13619 if (OP32_SREG (nextopc) != reg)
13620 continue;
13621
13622 /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13623 and rounding up to take masking of the two LSBs into account. */
13624 pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13625
13626 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */
13627 if (IS_BITSIZE (symval, 16))
13628 {
13629 /* Fix the relocation's type. */
13630 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13631
13632 /* Instructions using R_MICROMIPS_LO16 have the base or
13633 source register in bits 20:16. This register becomes $0
13634 (zero) as the result of the R_MICROMIPS_HI16 being 0. */
13635 nextopc &= ~0x001f0000;
13636 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13637 contents + irel[1].r_offset);
13638 }
13639
13640 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13641 We add 4 to take LUI deletion into account while checking
13642 the PC-relative distance. */
13643 else if (symval % 4 == 0
13644 && IS_BITSIZE (pcrval + 4, 25)
13645 && MATCH (nextopc, addiu_insn)
13646 && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13647 && OP16_VALID_REG (OP32_TREG (nextopc)))
13648 {
13649 /* Fix the relocation's type. */
13650 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13651
13652 /* Replace ADDIU with the ADDIUPC version. */
13653 nextopc = (addiupc_insn.match
13654 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13655
d21911ea
MR
13656 bfd_put_micromips_32 (abfd, nextopc,
13657 contents + irel[1].r_offset);
df58fc94
RS
13658 }
13659
13660 /* Can't do anything, give up, sigh... */
13661 else
13662 continue;
13663
13664 /* Fix the relocation's type. */
13665 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13666
13667 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */
13668 delcnt = 4;
13669 deloff = 0;
13670 }
13671
13672 /* Compact branch relaxation -- due to the multitude of macros
13673 employed by the compiler/assembler, compact branches are not
13674 always generated. Obviously, this can/will be fixed elsewhere,
13675 but there is no drawback in double checking it here. */
13676 else if (r_type == R_MICROMIPS_PC16_S1
13677 && irel->r_offset + 5 < sec->size
13678 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13679 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
833794fc
MR
13680 && ((!insn32
13681 && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13682 nop_insn_16) ? 2 : 0))
13683 || (irel->r_offset + 7 < sec->size
13684 && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13685 ptr + 4),
13686 nop_insn_32) ? 4 : 0))))
df58fc94
RS
13687 {
13688 unsigned long reg;
13689
13690 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13691
13692 /* Replace BEQZ/BNEZ with the compact version. */
13693 opcode = (bzc_insns_32[fndopc].match
13694 | BZC32_REG_FIELD (reg)
13695 | (opcode & 0xffff)); /* Addend value. */
13696
d21911ea 13697 bfd_put_micromips_32 (abfd, opcode, ptr);
df58fc94 13698
833794fc
MR
13699 /* Delete the delay slot NOP: two or four bytes from
13700 irel->offset + 4; delcnt has already been set above. */
df58fc94
RS
13701 deloff = 4;
13702 }
13703
13704 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need
13705 to check the distance from the next instruction, so subtract 2. */
833794fc
MR
13706 else if (!insn32
13707 && r_type == R_MICROMIPS_PC16_S1
df58fc94
RS
13708 && IS_BITSIZE (pcrval - 2, 11)
13709 && find_match (opcode, b_insns_32) >= 0)
13710 {
13711 /* Fix the relocation's type. */
13712 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13713
a8685210 13714 /* Replace the 32-bit opcode with a 16-bit opcode. */
df58fc94
RS
13715 bfd_put_16 (abfd,
13716 (b_insn_16.match
13717 | (opcode & 0x3ff)), /* Addend value. */
2309ddf2 13718 ptr);
df58fc94
RS
13719
13720 /* Delete 2 bytes from irel->r_offset + 2. */
13721 delcnt = 2;
13722 deloff = 2;
13723 }
13724
13725 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need
13726 to check the distance from the next instruction, so subtract 2. */
833794fc
MR
13727 else if (!insn32
13728 && r_type == R_MICROMIPS_PC16_S1
df58fc94
RS
13729 && IS_BITSIZE (pcrval - 2, 8)
13730 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13731 && OP16_VALID_REG (OP32_SREG (opcode)))
13732 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13733 && OP16_VALID_REG (OP32_TREG (opcode)))))
13734 {
13735 unsigned long reg;
13736
13737 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13738
13739 /* Fix the relocation's type. */
13740 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13741
a8685210 13742 /* Replace the 32-bit opcode with a 16-bit opcode. */
df58fc94
RS
13743 bfd_put_16 (abfd,
13744 (bz_insns_16[fndopc].match
13745 | BZ16_REG_FIELD (reg)
13746 | (opcode & 0x7f)), /* Addend value. */
2309ddf2 13747 ptr);
df58fc94
RS
13748
13749 /* Delete 2 bytes from irel->r_offset + 2. */
13750 delcnt = 2;
13751 deloff = 2;
13752 }
13753
13754 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */
833794fc
MR
13755 else if (!insn32
13756 && r_type == R_MICROMIPS_26_S1
df58fc94
RS
13757 && target_is_micromips_code_p
13758 && irel->r_offset + 7 < sec->size
13759 && MATCH (opcode, jal_insn_32_bd32))
13760 {
13761 unsigned long n32opc;
13762 bfd_boolean relaxed = FALSE;
13763
d21911ea 13764 n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
df58fc94
RS
13765
13766 if (MATCH (n32opc, nop_insn_32))
13767 {
13768 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */
2309ddf2 13769 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
df58fc94
RS
13770
13771 relaxed = TRUE;
13772 }
13773 else if (find_match (n32opc, move_insns_32) >= 0)
13774 {
13775 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */
13776 bfd_put_16 (abfd,
13777 (move_insn_16.match
13778 | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13779 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
2309ddf2 13780 ptr + 4);
df58fc94
RS
13781
13782 relaxed = TRUE;
13783 }
13784 /* Other 32-bit instructions relaxable to 16-bit
13785 instructions will be handled here later. */
13786
13787 if (relaxed)
13788 {
13789 /* JAL with 32-bit delay slot that is changed to a JALS
13790 with 16-bit delay slot. */
d21911ea 13791 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
df58fc94
RS
13792
13793 /* Delete 2 bytes from irel->r_offset + 6. */
13794 delcnt = 2;
13795 deloff = 6;
13796 }
13797 }
13798
13799 if (delcnt != 0)
13800 {
13801 /* Note that we've changed the relocs, section contents, etc. */
13802 elf_section_data (sec)->relocs = internal_relocs;
13803 elf_section_data (sec)->this_hdr.contents = contents;
13804 symtab_hdr->contents = (unsigned char *) isymbuf;
13805
13806 /* Delete bytes depending on the delcnt and deloff. */
13807 if (!mips_elf_relax_delete_bytes (abfd, sec,
13808 irel->r_offset + deloff, delcnt))
13809 goto error_return;
13810
13811 /* That will change things, so we should relax again.
13812 Note that this is not required, and it may be slow. */
13813 *again = TRUE;
13814 }
13815 }
13816
13817 if (isymbuf != NULL
13818 && symtab_hdr->contents != (unsigned char *) isymbuf)
13819 {
13820 if (! link_info->keep_memory)
13821 free (isymbuf);
13822 else
13823 {
13824 /* Cache the symbols for elf_link_input_bfd. */
13825 symtab_hdr->contents = (unsigned char *) isymbuf;
13826 }
13827 }
13828
13829 if (contents != NULL
13830 && elf_section_data (sec)->this_hdr.contents != contents)
13831 {
13832 if (! link_info->keep_memory)
13833 free (contents);
13834 else
13835 {
13836 /* Cache the section contents for elf_link_input_bfd. */
13837 elf_section_data (sec)->this_hdr.contents = contents;
13838 }
13839 }
13840
13841 if (internal_relocs != NULL
13842 && elf_section_data (sec)->relocs != internal_relocs)
13843 free (internal_relocs);
13844
13845 return TRUE;
13846
13847 error_return:
13848 if (isymbuf != NULL
13849 && symtab_hdr->contents != (unsigned char *) isymbuf)
13850 free (isymbuf);
13851 if (contents != NULL
13852 && elf_section_data (sec)->this_hdr.contents != contents)
13853 free (contents);
13854 if (internal_relocs != NULL
13855 && elf_section_data (sec)->relocs != internal_relocs)
13856 free (internal_relocs);
13857
13858 return FALSE;
13859}
13860\f
b49e97c9
TS
13861/* Create a MIPS ELF linker hash table. */
13862
13863struct bfd_link_hash_table *
9719ad41 13864_bfd_mips_elf_link_hash_table_create (bfd *abfd)
b49e97c9
TS
13865{
13866 struct mips_elf_link_hash_table *ret;
13867 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13868
7bf52ea2 13869 ret = bfd_zmalloc (amt);
9719ad41 13870 if (ret == NULL)
b49e97c9
TS
13871 return NULL;
13872
66eb6687
AM
13873 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13874 mips_elf_link_hash_newfunc,
4dfe6ac6
NC
13875 sizeof (struct mips_elf_link_hash_entry),
13876 MIPS_ELF_DATA))
b49e97c9 13877 {
e2d34d7d 13878 free (ret);
b49e97c9
TS
13879 return NULL;
13880 }
1bbce132
MR
13881 ret->root.init_plt_refcount.plist = NULL;
13882 ret->root.init_plt_offset.plist = NULL;
b49e97c9 13883
b49e97c9
TS
13884 return &ret->root.root;
13885}
0a44bf69
RS
13886
13887/* Likewise, but indicate that the target is VxWorks. */
13888
13889struct bfd_link_hash_table *
13890_bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13891{
13892 struct bfd_link_hash_table *ret;
13893
13894 ret = _bfd_mips_elf_link_hash_table_create (abfd);
13895 if (ret)
13896 {
13897 struct mips_elf_link_hash_table *htab;
13898
13899 htab = (struct mips_elf_link_hash_table *) ret;
861fb55a
DJ
13900 htab->use_plts_and_copy_relocs = TRUE;
13901 htab->is_vxworks = TRUE;
0a44bf69
RS
13902 }
13903 return ret;
13904}
861fb55a
DJ
13905
13906/* A function that the linker calls if we are allowed to use PLTs
13907 and copy relocs. */
13908
13909void
13910_bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13911{
13912 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13913}
833794fc
MR
13914
13915/* A function that the linker calls to select between all or only
13916 32-bit microMIPS instructions. */
13917
13918void
13919_bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13920{
13921 mips_elf_hash_table (info)->insn32 = on;
13922}
b49e97c9 13923\f
351cdf24
MF
13924/* Return the .MIPS.abiflags value representing each ISA Extension. */
13925
13926unsigned int
13927bfd_mips_isa_ext (bfd *abfd)
13928{
13929 switch (bfd_get_mach (abfd))
13930 {
13931 case bfd_mach_mips3900:
13932 return AFL_EXT_3900;
13933 case bfd_mach_mips4010:
13934 return AFL_EXT_4010;
13935 case bfd_mach_mips4100:
13936 return AFL_EXT_4100;
13937 case bfd_mach_mips4111:
13938 return AFL_EXT_4111;
13939 case bfd_mach_mips4120:
13940 return AFL_EXT_4120;
13941 case bfd_mach_mips4650:
13942 return AFL_EXT_4650;
13943 case bfd_mach_mips5400:
13944 return AFL_EXT_5400;
13945 case bfd_mach_mips5500:
13946 return AFL_EXT_5500;
13947 case bfd_mach_mips5900:
13948 return AFL_EXT_5900;
13949 case bfd_mach_mips10000:
13950 return AFL_EXT_10000;
13951 case bfd_mach_mips_loongson_2e:
13952 return AFL_EXT_LOONGSON_2E;
13953 case bfd_mach_mips_loongson_2f:
13954 return AFL_EXT_LOONGSON_2F;
13955 case bfd_mach_mips_loongson_3a:
13956 return AFL_EXT_LOONGSON_3A;
13957 case bfd_mach_mips_sb1:
13958 return AFL_EXT_SB1;
13959 case bfd_mach_mips_octeon:
13960 return AFL_EXT_OCTEON;
13961 case bfd_mach_mips_octeonp:
13962 return AFL_EXT_OCTEONP;
2c629856
N
13963 case bfd_mach_mips_octeon3:
13964 return AFL_EXT_OCTEON3;
351cdf24
MF
13965 case bfd_mach_mips_octeon2:
13966 return AFL_EXT_OCTEON2;
13967 case bfd_mach_mips_xlr:
13968 return AFL_EXT_XLR;
13969 }
13970 return 0;
13971}
13972
13973/* Update the isa_level, isa_rev, isa_ext fields of abiflags. */
13974
13975static void
13976update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
13977{
13978 switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
13979 {
13980 case E_MIPS_ARCH_1:
13981 abiflags->isa_level = 1;
13982 abiflags->isa_rev = 0;
13983 break;
13984 case E_MIPS_ARCH_2:
13985 abiflags->isa_level = 2;
13986 abiflags->isa_rev = 0;
13987 break;
13988 case E_MIPS_ARCH_3:
13989 abiflags->isa_level = 3;
13990 abiflags->isa_rev = 0;
13991 break;
13992 case E_MIPS_ARCH_4:
13993 abiflags->isa_level = 4;
13994 abiflags->isa_rev = 0;
13995 break;
13996 case E_MIPS_ARCH_5:
13997 abiflags->isa_level = 5;
13998 abiflags->isa_rev = 0;
13999 break;
14000 case E_MIPS_ARCH_32:
14001 abiflags->isa_level = 32;
14002 abiflags->isa_rev = 1;
14003 break;
14004 case E_MIPS_ARCH_32R2:
14005 abiflags->isa_level = 32;
14006 /* Handle MIPS32r3 and MIPS32r5 which do not have a header flag. */
14007 if (abiflags->isa_rev < 2)
14008 abiflags->isa_rev = 2;
14009 break;
09c14161
MF
14010 case E_MIPS_ARCH_32R6:
14011 abiflags->isa_level = 32;
14012 abiflags->isa_rev = 6;
14013 break;
351cdf24
MF
14014 case E_MIPS_ARCH_64:
14015 abiflags->isa_level = 64;
14016 abiflags->isa_rev = 1;
14017 break;
14018 case E_MIPS_ARCH_64R2:
14019 /* Handle MIPS64r3 and MIPS64r5 which do not have a header flag. */
14020 abiflags->isa_level = 64;
14021 if (abiflags->isa_rev < 2)
14022 abiflags->isa_rev = 2;
14023 break;
09c14161
MF
14024 case E_MIPS_ARCH_64R6:
14025 abiflags->isa_level = 64;
14026 abiflags->isa_rev = 6;
14027 break;
351cdf24
MF
14028 default:
14029 (*_bfd_error_handler)
14030 (_("%B: Unknown architecture %s"),
14031 abfd, bfd_printable_name (abfd));
14032 }
14033
14034 abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14035}
14036
14037/* Return true if the given ELF header flags describe a 32-bit binary. */
14038
14039static bfd_boolean
14040mips_32bit_flags_p (flagword flags)
14041{
14042 return ((flags & EF_MIPS_32BITMODE) != 0
14043 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14044 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14045 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14046 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14047 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
7361da2c
AB
14048 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14049 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
351cdf24
MF
14050}
14051
14052/* Infer the content of the ABI flags based on the elf header. */
14053
14054static void
14055infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14056{
14057 obj_attribute *in_attr;
14058
14059 memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14060 update_mips_abiflags_isa (abfd, abiflags);
14061
14062 if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14063 abiflags->gpr_size = AFL_REG_32;
14064 else
14065 abiflags->gpr_size = AFL_REG_64;
14066
14067 abiflags->cpr1_size = AFL_REG_NONE;
14068
14069 in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14070 abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14071
14072 if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14073 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14074 || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14075 && abiflags->gpr_size == AFL_REG_32))
14076 abiflags->cpr1_size = AFL_REG_32;
14077 else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14078 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14079 || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14080 abiflags->cpr1_size = AFL_REG_64;
14081
14082 abiflags->cpr2_size = AFL_REG_NONE;
14083
14084 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14085 abiflags->ases |= AFL_ASE_MDMX;
14086 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14087 abiflags->ases |= AFL_ASE_MIPS16;
14088 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14089 abiflags->ases |= AFL_ASE_MICROMIPS;
14090
14091 if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14092 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14093 && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14094 && abiflags->isa_level >= 32
14095 && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14096 abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14097}
14098
b49e97c9
TS
14099/* We need to use a special link routine to handle the .reginfo and
14100 the .mdebug sections. We need to merge all instances of these
14101 sections together, not write them all out sequentially. */
14102
b34976b6 14103bfd_boolean
9719ad41 14104_bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
b49e97c9 14105{
b49e97c9
TS
14106 asection *o;
14107 struct bfd_link_order *p;
14108 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
351cdf24 14109 asection *rtproc_sec, *abiflags_sec;
b49e97c9
TS
14110 Elf32_RegInfo reginfo;
14111 struct ecoff_debug_info debug;
861fb55a 14112 struct mips_htab_traverse_info hti;
7a2a6943
NC
14113 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14114 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
b49e97c9 14115 HDRR *symhdr = &debug.symbolic_header;
9719ad41 14116 void *mdebug_handle = NULL;
b49e97c9
TS
14117 asection *s;
14118 EXTR esym;
14119 unsigned int i;
14120 bfd_size_type amt;
0a44bf69 14121 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
14122
14123 static const char * const secname[] =
14124 {
14125 ".text", ".init", ".fini", ".data",
14126 ".rodata", ".sdata", ".sbss", ".bss"
14127 };
14128 static const int sc[] =
14129 {
14130 scText, scInit, scFini, scData,
14131 scRData, scSData, scSBss, scBss
14132 };
14133
d4596a51
RS
14134 /* Sort the dynamic symbols so that those with GOT entries come after
14135 those without. */
0a44bf69 14136 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
14137 BFD_ASSERT (htab != NULL);
14138
d4596a51
RS
14139 if (!mips_elf_sort_hash_table (abfd, info))
14140 return FALSE;
b49e97c9 14141
861fb55a
DJ
14142 /* Create any scheduled LA25 stubs. */
14143 hti.info = info;
14144 hti.output_bfd = abfd;
14145 hti.error = FALSE;
14146 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14147 if (hti.error)
14148 return FALSE;
14149
b49e97c9
TS
14150 /* Get a value for the GP register. */
14151 if (elf_gp (abfd) == 0)
14152 {
14153 struct bfd_link_hash_entry *h;
14154
b34976b6 14155 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
9719ad41 14156 if (h != NULL && h->type == bfd_link_hash_defined)
b49e97c9
TS
14157 elf_gp (abfd) = (h->u.def.value
14158 + h->u.def.section->output_section->vma
14159 + h->u.def.section->output_offset);
0a44bf69
RS
14160 else if (htab->is_vxworks
14161 && (h = bfd_link_hash_lookup (info->hash,
14162 "_GLOBAL_OFFSET_TABLE_",
14163 FALSE, FALSE, TRUE))
14164 && h->type == bfd_link_hash_defined)
14165 elf_gp (abfd) = (h->u.def.section->output_section->vma
14166 + h->u.def.section->output_offset
14167 + h->u.def.value);
0e1862bb 14168 else if (bfd_link_relocatable (info))
b49e97c9
TS
14169 {
14170 bfd_vma lo = MINUS_ONE;
14171
14172 /* Find the GP-relative section with the lowest offset. */
9719ad41 14173 for (o = abfd->sections; o != NULL; o = o->next)
b49e97c9
TS
14174 if (o->vma < lo
14175 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14176 lo = o->vma;
14177
14178 /* And calculate GP relative to that. */
0a44bf69 14179 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
b49e97c9
TS
14180 }
14181 else
14182 {
14183 /* If the relocate_section function needs to do a reloc
14184 involving the GP value, it should make a reloc_dangerous
14185 callback to warn that GP is not defined. */
14186 }
14187 }
14188
14189 /* Go through the sections and collect the .reginfo and .mdebug
14190 information. */
351cdf24 14191 abiflags_sec = NULL;
b49e97c9
TS
14192 reginfo_sec = NULL;
14193 mdebug_sec = NULL;
14194 gptab_data_sec = NULL;
14195 gptab_bss_sec = NULL;
9719ad41 14196 for (o = abfd->sections; o != NULL; o = o->next)
b49e97c9 14197 {
351cdf24
MF
14198 if (strcmp (o->name, ".MIPS.abiflags") == 0)
14199 {
14200 /* We have found the .MIPS.abiflags section in the output file.
14201 Look through all the link_orders comprising it and remove them.
14202 The data is merged in _bfd_mips_elf_merge_private_bfd_data. */
14203 for (p = o->map_head.link_order; p != NULL; p = p->next)
14204 {
14205 asection *input_section;
14206
14207 if (p->type != bfd_indirect_link_order)
14208 {
14209 if (p->type == bfd_data_link_order)
14210 continue;
14211 abort ();
14212 }
14213
14214 input_section = p->u.indirect.section;
14215
14216 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14217 elf_link_input_bfd ignores this section. */
14218 input_section->flags &= ~SEC_HAS_CONTENTS;
14219 }
14220
14221 /* Size has been set in _bfd_mips_elf_always_size_sections. */
14222 BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14223
14224 /* Skip this section later on (I don't think this currently
14225 matters, but someday it might). */
14226 o->map_head.link_order = NULL;
14227
14228 abiflags_sec = o;
14229 }
14230
b49e97c9
TS
14231 if (strcmp (o->name, ".reginfo") == 0)
14232 {
14233 memset (&reginfo, 0, sizeof reginfo);
14234
14235 /* We have found the .reginfo section in the output file.
14236 Look through all the link_orders comprising it and merge
14237 the information together. */
8423293d 14238 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
14239 {
14240 asection *input_section;
14241 bfd *input_bfd;
14242 Elf32_External_RegInfo ext;
14243 Elf32_RegInfo sub;
14244
14245 if (p->type != bfd_indirect_link_order)
14246 {
14247 if (p->type == bfd_data_link_order)
14248 continue;
14249 abort ();
14250 }
14251
14252 input_section = p->u.indirect.section;
14253 input_bfd = input_section->owner;
14254
b49e97c9 14255 if (! bfd_get_section_contents (input_bfd, input_section,
9719ad41 14256 &ext, 0, sizeof ext))
b34976b6 14257 return FALSE;
b49e97c9
TS
14258
14259 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14260
14261 reginfo.ri_gprmask |= sub.ri_gprmask;
14262 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14263 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14264 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14265 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14266
14267 /* ri_gp_value is set by the function
14268 mips_elf32_section_processing when the section is
14269 finally written out. */
14270
14271 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14272 elf_link_input_bfd ignores this section. */
14273 input_section->flags &= ~SEC_HAS_CONTENTS;
14274 }
14275
14276 /* Size has been set in _bfd_mips_elf_always_size_sections. */
eea6121a 14277 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
b49e97c9
TS
14278
14279 /* Skip this section later on (I don't think this currently
14280 matters, but someday it might). */
8423293d 14281 o->map_head.link_order = NULL;
b49e97c9
TS
14282
14283 reginfo_sec = o;
14284 }
14285
14286 if (strcmp (o->name, ".mdebug") == 0)
14287 {
14288 struct extsym_info einfo;
14289 bfd_vma last;
14290
14291 /* We have found the .mdebug section in the output file.
14292 Look through all the link_orders comprising it and merge
14293 the information together. */
14294 symhdr->magic = swap->sym_magic;
14295 /* FIXME: What should the version stamp be? */
14296 symhdr->vstamp = 0;
14297 symhdr->ilineMax = 0;
14298 symhdr->cbLine = 0;
14299 symhdr->idnMax = 0;
14300 symhdr->ipdMax = 0;
14301 symhdr->isymMax = 0;
14302 symhdr->ioptMax = 0;
14303 symhdr->iauxMax = 0;
14304 symhdr->issMax = 0;
14305 symhdr->issExtMax = 0;
14306 symhdr->ifdMax = 0;
14307 symhdr->crfd = 0;
14308 symhdr->iextMax = 0;
14309
14310 /* We accumulate the debugging information itself in the
14311 debug_info structure. */
14312 debug.line = NULL;
14313 debug.external_dnr = NULL;
14314 debug.external_pdr = NULL;
14315 debug.external_sym = NULL;
14316 debug.external_opt = NULL;
14317 debug.external_aux = NULL;
14318 debug.ss = NULL;
14319 debug.ssext = debug.ssext_end = NULL;
14320 debug.external_fdr = NULL;
14321 debug.external_rfd = NULL;
14322 debug.external_ext = debug.external_ext_end = NULL;
14323
14324 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
9719ad41 14325 if (mdebug_handle == NULL)
b34976b6 14326 return FALSE;
b49e97c9
TS
14327
14328 esym.jmptbl = 0;
14329 esym.cobol_main = 0;
14330 esym.weakext = 0;
14331 esym.reserved = 0;
14332 esym.ifd = ifdNil;
14333 esym.asym.iss = issNil;
14334 esym.asym.st = stLocal;
14335 esym.asym.reserved = 0;
14336 esym.asym.index = indexNil;
14337 last = 0;
14338 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14339 {
14340 esym.asym.sc = sc[i];
14341 s = bfd_get_section_by_name (abfd, secname[i]);
14342 if (s != NULL)
14343 {
14344 esym.asym.value = s->vma;
eea6121a 14345 last = s->vma + s->size;
b49e97c9
TS
14346 }
14347 else
14348 esym.asym.value = last;
14349 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14350 secname[i], &esym))
b34976b6 14351 return FALSE;
b49e97c9
TS
14352 }
14353
8423293d 14354 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
14355 {
14356 asection *input_section;
14357 bfd *input_bfd;
14358 const struct ecoff_debug_swap *input_swap;
14359 struct ecoff_debug_info input_debug;
14360 char *eraw_src;
14361 char *eraw_end;
14362
14363 if (p->type != bfd_indirect_link_order)
14364 {
14365 if (p->type == bfd_data_link_order)
14366 continue;
14367 abort ();
14368 }
14369
14370 input_section = p->u.indirect.section;
14371 input_bfd = input_section->owner;
14372
d5eaccd7 14373 if (!is_mips_elf (input_bfd))
b49e97c9
TS
14374 {
14375 /* I don't know what a non MIPS ELF bfd would be
14376 doing with a .mdebug section, but I don't really
14377 want to deal with it. */
14378 continue;
14379 }
14380
14381 input_swap = (get_elf_backend_data (input_bfd)
14382 ->elf_backend_ecoff_debug_swap);
14383
eea6121a 14384 BFD_ASSERT (p->size == input_section->size);
b49e97c9
TS
14385
14386 /* The ECOFF linking code expects that we have already
14387 read in the debugging information and set up an
14388 ecoff_debug_info structure, so we do that now. */
14389 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14390 &input_debug))
b34976b6 14391 return FALSE;
b49e97c9
TS
14392
14393 if (! (bfd_ecoff_debug_accumulate
14394 (mdebug_handle, abfd, &debug, swap, input_bfd,
14395 &input_debug, input_swap, info)))
b34976b6 14396 return FALSE;
b49e97c9
TS
14397
14398 /* Loop through the external symbols. For each one with
14399 interesting information, try to find the symbol in
14400 the linker global hash table and save the information
14401 for the output external symbols. */
14402 eraw_src = input_debug.external_ext;
14403 eraw_end = (eraw_src
14404 + (input_debug.symbolic_header.iextMax
14405 * input_swap->external_ext_size));
14406 for (;
14407 eraw_src < eraw_end;
14408 eraw_src += input_swap->external_ext_size)
14409 {
14410 EXTR ext;
14411 const char *name;
14412 struct mips_elf_link_hash_entry *h;
14413
9719ad41 14414 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
b49e97c9
TS
14415 if (ext.asym.sc == scNil
14416 || ext.asym.sc == scUndefined
14417 || ext.asym.sc == scSUndefined)
14418 continue;
14419
14420 name = input_debug.ssext + ext.asym.iss;
14421 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
b34976b6 14422 name, FALSE, FALSE, TRUE);
b49e97c9
TS
14423 if (h == NULL || h->esym.ifd != -2)
14424 continue;
14425
14426 if (ext.ifd != -1)
14427 {
14428 BFD_ASSERT (ext.ifd
14429 < input_debug.symbolic_header.ifdMax);
14430 ext.ifd = input_debug.ifdmap[ext.ifd];
14431 }
14432
14433 h->esym = ext;
14434 }
14435
14436 /* Free up the information we just read. */
14437 free (input_debug.line);
14438 free (input_debug.external_dnr);
14439 free (input_debug.external_pdr);
14440 free (input_debug.external_sym);
14441 free (input_debug.external_opt);
14442 free (input_debug.external_aux);
14443 free (input_debug.ss);
14444 free (input_debug.ssext);
14445 free (input_debug.external_fdr);
14446 free (input_debug.external_rfd);
14447 free (input_debug.external_ext);
14448
14449 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14450 elf_link_input_bfd ignores this section. */
14451 input_section->flags &= ~SEC_HAS_CONTENTS;
14452 }
14453
0e1862bb 14454 if (SGI_COMPAT (abfd) && bfd_link_pic (info))
b49e97c9
TS
14455 {
14456 /* Create .rtproc section. */
87e0a731 14457 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
b49e97c9
TS
14458 if (rtproc_sec == NULL)
14459 {
14460 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14461 | SEC_LINKER_CREATED | SEC_READONLY);
14462
87e0a731
AM
14463 rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14464 ".rtproc",
14465 flags);
b49e97c9 14466 if (rtproc_sec == NULL
b49e97c9 14467 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
b34976b6 14468 return FALSE;
b49e97c9
TS
14469 }
14470
14471 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14472 info, rtproc_sec,
14473 &debug))
b34976b6 14474 return FALSE;
b49e97c9
TS
14475 }
14476
14477 /* Build the external symbol information. */
14478 einfo.abfd = abfd;
14479 einfo.info = info;
14480 einfo.debug = &debug;
14481 einfo.swap = swap;
b34976b6 14482 einfo.failed = FALSE;
b49e97c9 14483 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9719ad41 14484 mips_elf_output_extsym, &einfo);
b49e97c9 14485 if (einfo.failed)
b34976b6 14486 return FALSE;
b49e97c9
TS
14487
14488 /* Set the size of the .mdebug section. */
eea6121a 14489 o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
b49e97c9
TS
14490
14491 /* Skip this section later on (I don't think this currently
14492 matters, but someday it might). */
8423293d 14493 o->map_head.link_order = NULL;
b49e97c9
TS
14494
14495 mdebug_sec = o;
14496 }
14497
0112cd26 14498 if (CONST_STRNEQ (o->name, ".gptab."))
b49e97c9
TS
14499 {
14500 const char *subname;
14501 unsigned int c;
14502 Elf32_gptab *tab;
14503 Elf32_External_gptab *ext_tab;
14504 unsigned int j;
14505
14506 /* The .gptab.sdata and .gptab.sbss sections hold
14507 information describing how the small data area would
14508 change depending upon the -G switch. These sections
14509 not used in executables files. */
0e1862bb 14510 if (! bfd_link_relocatable (info))
b49e97c9 14511 {
8423293d 14512 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
14513 {
14514 asection *input_section;
14515
14516 if (p->type != bfd_indirect_link_order)
14517 {
14518 if (p->type == bfd_data_link_order)
14519 continue;
14520 abort ();
14521 }
14522
14523 input_section = p->u.indirect.section;
14524
14525 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14526 elf_link_input_bfd ignores this section. */
14527 input_section->flags &= ~SEC_HAS_CONTENTS;
14528 }
14529
14530 /* Skip this section later on (I don't think this
14531 currently matters, but someday it might). */
8423293d 14532 o->map_head.link_order = NULL;
b49e97c9
TS
14533
14534 /* Really remove the section. */
5daa8fe7 14535 bfd_section_list_remove (abfd, o);
b49e97c9
TS
14536 --abfd->section_count;
14537
14538 continue;
14539 }
14540
14541 /* There is one gptab for initialized data, and one for
14542 uninitialized data. */
14543 if (strcmp (o->name, ".gptab.sdata") == 0)
14544 gptab_data_sec = o;
14545 else if (strcmp (o->name, ".gptab.sbss") == 0)
14546 gptab_bss_sec = o;
14547 else
14548 {
14549 (*_bfd_error_handler)
14550 (_("%s: illegal section name `%s'"),
14551 bfd_get_filename (abfd), o->name);
14552 bfd_set_error (bfd_error_nonrepresentable_section);
b34976b6 14553 return FALSE;
b49e97c9
TS
14554 }
14555
14556 /* The linker script always combines .gptab.data and
14557 .gptab.sdata into .gptab.sdata, and likewise for
14558 .gptab.bss and .gptab.sbss. It is possible that there is
14559 no .sdata or .sbss section in the output file, in which
14560 case we must change the name of the output section. */
14561 subname = o->name + sizeof ".gptab" - 1;
14562 if (bfd_get_section_by_name (abfd, subname) == NULL)
14563 {
14564 if (o == gptab_data_sec)
14565 o->name = ".gptab.data";
14566 else
14567 o->name = ".gptab.bss";
14568 subname = o->name + sizeof ".gptab" - 1;
14569 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14570 }
14571
14572 /* Set up the first entry. */
14573 c = 1;
14574 amt = c * sizeof (Elf32_gptab);
9719ad41 14575 tab = bfd_malloc (amt);
b49e97c9 14576 if (tab == NULL)
b34976b6 14577 return FALSE;
b49e97c9
TS
14578 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14579 tab[0].gt_header.gt_unused = 0;
14580
14581 /* Combine the input sections. */
8423293d 14582 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
14583 {
14584 asection *input_section;
14585 bfd *input_bfd;
14586 bfd_size_type size;
14587 unsigned long last;
14588 bfd_size_type gpentry;
14589
14590 if (p->type != bfd_indirect_link_order)
14591 {
14592 if (p->type == bfd_data_link_order)
14593 continue;
14594 abort ();
14595 }
14596
14597 input_section = p->u.indirect.section;
14598 input_bfd = input_section->owner;
14599
14600 /* Combine the gptab entries for this input section one
14601 by one. We know that the input gptab entries are
14602 sorted by ascending -G value. */
eea6121a 14603 size = input_section->size;
b49e97c9
TS
14604 last = 0;
14605 for (gpentry = sizeof (Elf32_External_gptab);
14606 gpentry < size;
14607 gpentry += sizeof (Elf32_External_gptab))
14608 {
14609 Elf32_External_gptab ext_gptab;
14610 Elf32_gptab int_gptab;
14611 unsigned long val;
14612 unsigned long add;
b34976b6 14613 bfd_boolean exact;
b49e97c9
TS
14614 unsigned int look;
14615
14616 if (! (bfd_get_section_contents
9719ad41
RS
14617 (input_bfd, input_section, &ext_gptab, gpentry,
14618 sizeof (Elf32_External_gptab))))
b49e97c9
TS
14619 {
14620 free (tab);
b34976b6 14621 return FALSE;
b49e97c9
TS
14622 }
14623
14624 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14625 &int_gptab);
14626 val = int_gptab.gt_entry.gt_g_value;
14627 add = int_gptab.gt_entry.gt_bytes - last;
14628
b34976b6 14629 exact = FALSE;
b49e97c9
TS
14630 for (look = 1; look < c; look++)
14631 {
14632 if (tab[look].gt_entry.gt_g_value >= val)
14633 tab[look].gt_entry.gt_bytes += add;
14634
14635 if (tab[look].gt_entry.gt_g_value == val)
b34976b6 14636 exact = TRUE;
b49e97c9
TS
14637 }
14638
14639 if (! exact)
14640 {
14641 Elf32_gptab *new_tab;
14642 unsigned int max;
14643
14644 /* We need a new table entry. */
14645 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
9719ad41 14646 new_tab = bfd_realloc (tab, amt);
b49e97c9
TS
14647 if (new_tab == NULL)
14648 {
14649 free (tab);
b34976b6 14650 return FALSE;
b49e97c9
TS
14651 }
14652 tab = new_tab;
14653 tab[c].gt_entry.gt_g_value = val;
14654 tab[c].gt_entry.gt_bytes = add;
14655
14656 /* Merge in the size for the next smallest -G
14657 value, since that will be implied by this new
14658 value. */
14659 max = 0;
14660 for (look = 1; look < c; look++)
14661 {
14662 if (tab[look].gt_entry.gt_g_value < val
14663 && (max == 0
14664 || (tab[look].gt_entry.gt_g_value
14665 > tab[max].gt_entry.gt_g_value)))
14666 max = look;
14667 }
14668 if (max != 0)
14669 tab[c].gt_entry.gt_bytes +=
14670 tab[max].gt_entry.gt_bytes;
14671
14672 ++c;
14673 }
14674
14675 last = int_gptab.gt_entry.gt_bytes;
14676 }
14677
14678 /* Hack: reset the SEC_HAS_CONTENTS flag so that
14679 elf_link_input_bfd ignores this section. */
14680 input_section->flags &= ~SEC_HAS_CONTENTS;
14681 }
14682
14683 /* The table must be sorted by -G value. */
14684 if (c > 2)
14685 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14686
14687 /* Swap out the table. */
14688 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
9719ad41 14689 ext_tab = bfd_alloc (abfd, amt);
b49e97c9
TS
14690 if (ext_tab == NULL)
14691 {
14692 free (tab);
b34976b6 14693 return FALSE;
b49e97c9
TS
14694 }
14695
14696 for (j = 0; j < c; j++)
14697 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14698 free (tab);
14699
eea6121a 14700 o->size = c * sizeof (Elf32_External_gptab);
b49e97c9
TS
14701 o->contents = (bfd_byte *) ext_tab;
14702
14703 /* Skip this section later on (I don't think this currently
14704 matters, but someday it might). */
8423293d 14705 o->map_head.link_order = NULL;
b49e97c9
TS
14706 }
14707 }
14708
14709 /* Invoke the regular ELF backend linker to do all the work. */
c152c796 14710 if (!bfd_elf_final_link (abfd, info))
b34976b6 14711 return FALSE;
b49e97c9
TS
14712
14713 /* Now write out the computed sections. */
14714
351cdf24
MF
14715 if (abiflags_sec != NULL)
14716 {
14717 Elf_External_ABIFlags_v0 ext;
14718 Elf_Internal_ABIFlags_v0 *abiflags;
14719
14720 abiflags = &mips_elf_tdata (abfd)->abiflags;
14721
14722 /* Set up the abiflags if no valid input sections were found. */
14723 if (!mips_elf_tdata (abfd)->abiflags_valid)
14724 {
14725 infer_mips_abiflags (abfd, abiflags);
14726 mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14727 }
14728 bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14729 if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14730 return FALSE;
14731 }
14732
9719ad41 14733 if (reginfo_sec != NULL)
b49e97c9
TS
14734 {
14735 Elf32_External_RegInfo ext;
14736
14737 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
9719ad41 14738 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
b34976b6 14739 return FALSE;
b49e97c9
TS
14740 }
14741
9719ad41 14742 if (mdebug_sec != NULL)
b49e97c9
TS
14743 {
14744 BFD_ASSERT (abfd->output_has_begun);
14745 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14746 swap, info,
14747 mdebug_sec->filepos))
b34976b6 14748 return FALSE;
b49e97c9
TS
14749
14750 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14751 }
14752
9719ad41 14753 if (gptab_data_sec != NULL)
b49e97c9
TS
14754 {
14755 if (! bfd_set_section_contents (abfd, gptab_data_sec,
14756 gptab_data_sec->contents,
eea6121a 14757 0, gptab_data_sec->size))
b34976b6 14758 return FALSE;
b49e97c9
TS
14759 }
14760
9719ad41 14761 if (gptab_bss_sec != NULL)
b49e97c9
TS
14762 {
14763 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14764 gptab_bss_sec->contents,
eea6121a 14765 0, gptab_bss_sec->size))
b34976b6 14766 return FALSE;
b49e97c9
TS
14767 }
14768
14769 if (SGI_COMPAT (abfd))
14770 {
14771 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14772 if (rtproc_sec != NULL)
14773 {
14774 if (! bfd_set_section_contents (abfd, rtproc_sec,
14775 rtproc_sec->contents,
eea6121a 14776 0, rtproc_sec->size))
b34976b6 14777 return FALSE;
b49e97c9
TS
14778 }
14779 }
14780
b34976b6 14781 return TRUE;
b49e97c9
TS
14782}
14783\f
64543e1a
RS
14784/* Structure for saying that BFD machine EXTENSION extends BASE. */
14785
a253d456
NC
14786struct mips_mach_extension
14787{
64543e1a
RS
14788 unsigned long extension, base;
14789};
14790
14791
14792/* An array describing how BFD machines relate to one another. The entries
14793 are ordered topologically with MIPS I extensions listed last. */
14794
a253d456
NC
14795static const struct mips_mach_extension mips_mach_extensions[] =
14796{
6f179bd0 14797 /* MIPS64r2 extensions. */
2c629856 14798 { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
432233b3 14799 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
dd6a37e7 14800 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
6f179bd0 14801 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
4ba154f5 14802 { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
6f179bd0 14803
64543e1a 14804 /* MIPS64 extensions. */
5f74bc13 14805 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
64543e1a 14806 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
52b6b6b9 14807 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
64543e1a
RS
14808
14809 /* MIPS V extensions. */
14810 { bfd_mach_mipsisa64, bfd_mach_mips5 },
14811
14812 /* R10000 extensions. */
14813 { bfd_mach_mips12000, bfd_mach_mips10000 },
3aa3176b
TS
14814 { bfd_mach_mips14000, bfd_mach_mips10000 },
14815 { bfd_mach_mips16000, bfd_mach_mips10000 },
64543e1a
RS
14816
14817 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
14818 vr5400 ISA, but doesn't include the multimedia stuff. It seems
14819 better to allow vr5400 and vr5500 code to be merged anyway, since
14820 many libraries will just use the core ISA. Perhaps we could add
14821 some sort of ASE flag if this ever proves a problem. */
14822 { bfd_mach_mips5500, bfd_mach_mips5400 },
14823 { bfd_mach_mips5400, bfd_mach_mips5000 },
14824
14825 /* MIPS IV extensions. */
14826 { bfd_mach_mips5, bfd_mach_mips8000 },
14827 { bfd_mach_mips10000, bfd_mach_mips8000 },
14828 { bfd_mach_mips5000, bfd_mach_mips8000 },
5a7ea749 14829 { bfd_mach_mips7000, bfd_mach_mips8000 },
0d2e43ed 14830 { bfd_mach_mips9000, bfd_mach_mips8000 },
64543e1a
RS
14831
14832 /* VR4100 extensions. */
14833 { bfd_mach_mips4120, bfd_mach_mips4100 },
14834 { bfd_mach_mips4111, bfd_mach_mips4100 },
14835
14836 /* MIPS III extensions. */
350cc38d
MS
14837 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14838 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
64543e1a
RS
14839 { bfd_mach_mips8000, bfd_mach_mips4000 },
14840 { bfd_mach_mips4650, bfd_mach_mips4000 },
14841 { bfd_mach_mips4600, bfd_mach_mips4000 },
14842 { bfd_mach_mips4400, bfd_mach_mips4000 },
14843 { bfd_mach_mips4300, bfd_mach_mips4000 },
14844 { bfd_mach_mips4100, bfd_mach_mips4000 },
14845 { bfd_mach_mips4010, bfd_mach_mips4000 },
e407c74b 14846 { bfd_mach_mips5900, bfd_mach_mips4000 },
64543e1a
RS
14847
14848 /* MIPS32 extensions. */
14849 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14850
14851 /* MIPS II extensions. */
14852 { bfd_mach_mips4000, bfd_mach_mips6000 },
14853 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14854
14855 /* MIPS I extensions. */
14856 { bfd_mach_mips6000, bfd_mach_mips3000 },
14857 { bfd_mach_mips3900, bfd_mach_mips3000 }
14858};
14859
14860
14861/* Return true if bfd machine EXTENSION is an extension of machine BASE. */
14862
14863static bfd_boolean
9719ad41 14864mips_mach_extends_p (unsigned long base, unsigned long extension)
64543e1a
RS
14865{
14866 size_t i;
14867
c5211a54
RS
14868 if (extension == base)
14869 return TRUE;
14870
14871 if (base == bfd_mach_mipsisa32
14872 && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14873 return TRUE;
14874
14875 if (base == bfd_mach_mipsisa32r2
14876 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14877 return TRUE;
14878
14879 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
64543e1a 14880 if (extension == mips_mach_extensions[i].extension)
c5211a54
RS
14881 {
14882 extension = mips_mach_extensions[i].base;
14883 if (extension == base)
14884 return TRUE;
14885 }
64543e1a 14886
c5211a54 14887 return FALSE;
64543e1a
RS
14888}
14889
14890
2cf19d5c
JM
14891/* Merge object attributes from IBFD into OBFD. Raise an error if
14892 there are conflicting attributes. */
14893static bfd_boolean
14894mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
14895{
14896 obj_attribute *in_attr;
14897 obj_attribute *out_attr;
6ae68ba3 14898 bfd *abi_fp_bfd;
b60bf9be 14899 bfd *abi_msa_bfd;
6ae68ba3
MR
14900
14901 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
14902 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
d929bc19 14903 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
6ae68ba3 14904 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
2cf19d5c 14905
b60bf9be
CF
14906 abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
14907 if (!abi_msa_bfd
14908 && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
14909 mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
14910
2cf19d5c
JM
14911 if (!elf_known_obj_attributes_proc (obfd)[0].i)
14912 {
14913 /* This is the first object. Copy the attributes. */
14914 _bfd_elf_copy_obj_attributes (ibfd, obfd);
14915
14916 /* Use the Tag_null value to indicate the attributes have been
14917 initialized. */
14918 elf_known_obj_attributes_proc (obfd)[0].i = 1;
14919
14920 return TRUE;
14921 }
14922
14923 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
14924 non-conflicting ones. */
2cf19d5c
JM
14925 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
14926 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
14927 {
757a636f 14928 int out_fp, in_fp;
6ae68ba3 14929
757a636f
RS
14930 out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
14931 in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14932 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
14933 if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
14934 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
351cdf24
MF
14935 else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
14936 && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
14937 || in_fp == Val_GNU_MIPS_ABI_FP_64
14938 || in_fp == Val_GNU_MIPS_ABI_FP_64A))
14939 {
14940 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
14941 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14942 }
14943 else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
14944 && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
14945 || out_fp == Val_GNU_MIPS_ABI_FP_64
14946 || out_fp == Val_GNU_MIPS_ABI_FP_64A))
14947 /* Keep the current setting. */;
14948 else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
14949 && in_fp == Val_GNU_MIPS_ABI_FP_64)
14950 {
14951 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
14952 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14953 }
14954 else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
14955 && out_fp == Val_GNU_MIPS_ABI_FP_64)
14956 /* Keep the current setting. */;
757a636f
RS
14957 else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
14958 {
14959 const char *out_string, *in_string;
6ae68ba3 14960
757a636f
RS
14961 out_string = _bfd_mips_fp_abi_string (out_fp);
14962 in_string = _bfd_mips_fp_abi_string (in_fp);
14963 /* First warn about cases involving unrecognised ABIs. */
14964 if (!out_string && !in_string)
14965 _bfd_error_handler
14966 (_("Warning: %B uses unknown floating point ABI %d "
14967 "(set by %B), %B uses unknown floating point ABI %d"),
14968 obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
14969 else if (!out_string)
14970 _bfd_error_handler
14971 (_("Warning: %B uses unknown floating point ABI %d "
14972 "(set by %B), %B uses %s"),
14973 obfd, abi_fp_bfd, ibfd, out_fp, in_string);
14974 else if (!in_string)
14975 _bfd_error_handler
14976 (_("Warning: %B uses %s (set by %B), "
14977 "%B uses unknown floating point ABI %d"),
14978 obfd, abi_fp_bfd, ibfd, out_string, in_fp);
14979 else
14980 {
14981 /* If one of the bfds is soft-float, the other must be
14982 hard-float. The exact choice of hard-float ABI isn't
14983 really relevant to the error message. */
14984 if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
14985 out_string = "-mhard-float";
14986 else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
14987 in_string = "-mhard-float";
14988 _bfd_error_handler
14989 (_("Warning: %B uses %s (set by %B), %B uses %s"),
14990 obfd, abi_fp_bfd, ibfd, out_string, in_string);
14991 }
14992 }
2cf19d5c
JM
14993 }
14994
b60bf9be
CF
14995 /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
14996 non-conflicting ones. */
14997 if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
14998 {
14999 out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15000 if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15001 out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15002 else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15003 switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15004 {
15005 case Val_GNU_MIPS_ABI_MSA_128:
15006 _bfd_error_handler
15007 (_("Warning: %B uses %s (set by %B), "
15008 "%B uses unknown MSA ABI %d"),
15009 obfd, abi_msa_bfd, ibfd,
15010 "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15011 break;
15012
15013 default:
15014 switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15015 {
15016 case Val_GNU_MIPS_ABI_MSA_128:
15017 _bfd_error_handler
15018 (_("Warning: %B uses unknown MSA ABI %d "
15019 "(set by %B), %B uses %s"),
15020 obfd, abi_msa_bfd, ibfd,
15021 out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15022 break;
15023
15024 default:
15025 _bfd_error_handler
15026 (_("Warning: %B uses unknown MSA ABI %d "
15027 "(set by %B), %B uses unknown MSA ABI %d"),
15028 obfd, abi_msa_bfd, ibfd,
15029 out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15030 in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15031 break;
15032 }
15033 }
15034 }
15035
2cf19d5c
JM
15036 /* Merge Tag_compatibility attributes and any common GNU ones. */
15037 _bfd_elf_merge_object_attributes (ibfd, obfd);
15038
15039 return TRUE;
15040}
15041
b49e97c9
TS
15042/* Merge backend specific data from an object file to the output
15043 object file when linking. */
15044
b34976b6 15045bfd_boolean
9719ad41 15046_bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
b49e97c9
TS
15047{
15048 flagword old_flags;
15049 flagword new_flags;
b34976b6
AM
15050 bfd_boolean ok;
15051 bfd_boolean null_input_bfd = TRUE;
b49e97c9 15052 asection *sec;
351cdf24 15053 obj_attribute *out_attr;
b49e97c9 15054
58238693 15055 /* Check if we have the same endianness. */
82e51918 15056 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
aa701218
AO
15057 {
15058 (*_bfd_error_handler)
d003868e
AM
15059 (_("%B: endianness incompatible with that of the selected emulation"),
15060 ibfd);
aa701218
AO
15061 return FALSE;
15062 }
b49e97c9 15063
d5eaccd7 15064 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
b34976b6 15065 return TRUE;
b49e97c9 15066
aa701218
AO
15067 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15068 {
15069 (*_bfd_error_handler)
d003868e
AM
15070 (_("%B: ABI is incompatible with that of the selected emulation"),
15071 ibfd);
aa701218
AO
15072 return FALSE;
15073 }
15074
351cdf24
MF
15075 /* Set up the FP ABI attribute from the abiflags if it is not already
15076 set. */
15077 if (mips_elf_tdata (ibfd)->abiflags_valid)
15078 {
15079 obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15080 if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15081 in_attr[Tag_GNU_MIPS_ABI_FP].i =
15082 mips_elf_tdata (ibfd)->abiflags.fp_abi;
15083 }
15084
2cf19d5c
JM
15085 if (!mips_elf_merge_obj_attributes (ibfd, obfd))
15086 return FALSE;
15087
351cdf24
MF
15088 /* Check to see if the input BFD actually contains any sections.
15089 If not, its flags may not have been initialised either, but it cannot
15090 actually cause any incompatibility. */
15091 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15092 {
15093 /* Ignore synthetic sections and empty .text, .data and .bss sections
15094 which are automatically generated by gas. Also ignore fake
15095 (s)common sections, since merely defining a common symbol does
15096 not affect compatibility. */
15097 if ((sec->flags & SEC_IS_COMMON) == 0
15098 && strcmp (sec->name, ".reginfo")
15099 && strcmp (sec->name, ".mdebug")
15100 && (sec->size != 0
15101 || (strcmp (sec->name, ".text")
15102 && strcmp (sec->name, ".data")
15103 && strcmp (sec->name, ".bss"))))
15104 {
15105 null_input_bfd = FALSE;
15106 break;
15107 }
15108 }
15109 if (null_input_bfd)
15110 return TRUE;
15111
15112 /* Populate abiflags using existing information. */
15113 if (!mips_elf_tdata (ibfd)->abiflags_valid)
15114 {
15115 infer_mips_abiflags (ibfd, &mips_elf_tdata (ibfd)->abiflags);
15116 mips_elf_tdata (ibfd)->abiflags_valid = TRUE;
15117 }
15118 else
15119 {
15120 Elf_Internal_ABIFlags_v0 abiflags;
15121 Elf_Internal_ABIFlags_v0 in_abiflags;
15122 infer_mips_abiflags (ibfd, &abiflags);
15123 in_abiflags = mips_elf_tdata (ibfd)->abiflags;
15124
15125 /* It is not possible to infer the correct ISA revision
15126 for R3 or R5 so drop down to R2 for the checks. */
15127 if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15128 in_abiflags.isa_rev = 2;
15129
15130 if (in_abiflags.isa_level != abiflags.isa_level
15131 || in_abiflags.isa_rev != abiflags.isa_rev
15132 || in_abiflags.isa_ext != abiflags.isa_ext)
15133 (*_bfd_error_handler)
15134 (_("%B: warning: Inconsistent ISA between e_flags and "
15135 ".MIPS.abiflags"), ibfd);
15136 if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15137 && in_abiflags.fp_abi != abiflags.fp_abi)
15138 (*_bfd_error_handler)
15139 (_("%B: warning: Inconsistent FP ABI between e_flags and "
15140 ".MIPS.abiflags"), ibfd);
15141 if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15142 (*_bfd_error_handler)
15143 (_("%B: warning: Inconsistent ASEs between e_flags and "
15144 ".MIPS.abiflags"), ibfd);
15145 if (in_abiflags.isa_ext != abiflags.isa_ext)
15146 (*_bfd_error_handler)
15147 (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15148 ".MIPS.abiflags"), ibfd);
15149 if (in_abiflags.flags2 != 0)
15150 (*_bfd_error_handler)
15151 (_("%B: warning: Unexpected flag in the flags2 field of "
15152 ".MIPS.abiflags (0x%lx)"), ibfd,
15153 (unsigned long) in_abiflags.flags2);
15154 }
15155
15156 if (!mips_elf_tdata (obfd)->abiflags_valid)
15157 {
15158 /* Copy input abiflags if output abiflags are not already valid. */
15159 mips_elf_tdata (obfd)->abiflags = mips_elf_tdata (ibfd)->abiflags;
15160 mips_elf_tdata (obfd)->abiflags_valid = TRUE;
15161 }
b49e97c9
TS
15162
15163 if (! elf_flags_init (obfd))
15164 {
b34976b6 15165 elf_flags_init (obfd) = TRUE;
351cdf24 15166 elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
b49e97c9
TS
15167 elf_elfheader (obfd)->e_ident[EI_CLASS]
15168 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15169
15170 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
2907b861 15171 && (bfd_get_arch_info (obfd)->the_default
68ffbac6 15172 || mips_mach_extends_p (bfd_get_mach (obfd),
2907b861 15173 bfd_get_mach (ibfd))))
b49e97c9
TS
15174 {
15175 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15176 bfd_get_mach (ibfd)))
b34976b6 15177 return FALSE;
351cdf24
MF
15178
15179 /* Update the ABI flags isa_level, isa_rev and isa_ext fields. */
15180 update_mips_abiflags_isa (obfd, &mips_elf_tdata (obfd)->abiflags);
b49e97c9
TS
15181 }
15182
b34976b6 15183 return TRUE;
b49e97c9
TS
15184 }
15185
351cdf24
MF
15186 /* Update the output abiflags fp_abi using the computed fp_abi. */
15187 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15188 mips_elf_tdata (obfd)->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15189
15190#define max(a,b) ((a) > (b) ? (a) : (b))
15191 /* Merge abiflags. */
15192 mips_elf_tdata (obfd)->abiflags.isa_rev
15193 = max (mips_elf_tdata (obfd)->abiflags.isa_rev,
15194 mips_elf_tdata (ibfd)->abiflags.isa_rev);
15195 mips_elf_tdata (obfd)->abiflags.gpr_size
15196 = max (mips_elf_tdata (obfd)->abiflags.gpr_size,
15197 mips_elf_tdata (ibfd)->abiflags.gpr_size);
15198 mips_elf_tdata (obfd)->abiflags.cpr1_size
15199 = max (mips_elf_tdata (obfd)->abiflags.cpr1_size,
15200 mips_elf_tdata (ibfd)->abiflags.cpr1_size);
15201 mips_elf_tdata (obfd)->abiflags.cpr2_size
15202 = max (mips_elf_tdata (obfd)->abiflags.cpr2_size,
15203 mips_elf_tdata (ibfd)->abiflags.cpr2_size);
15204#undef max
15205 mips_elf_tdata (obfd)->abiflags.ases
15206 |= mips_elf_tdata (ibfd)->abiflags.ases;
15207 mips_elf_tdata (obfd)->abiflags.flags1
15208 |= mips_elf_tdata (ibfd)->abiflags.flags1;
15209
15210 new_flags = elf_elfheader (ibfd)->e_flags;
15211 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15212 old_flags = elf_elfheader (obfd)->e_flags;
15213
b49e97c9
TS
15214 /* Check flag compatibility. */
15215
15216 new_flags &= ~EF_MIPS_NOREORDER;
15217 old_flags &= ~EF_MIPS_NOREORDER;
15218
f4416af6
AO
15219 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
15220 doesn't seem to matter. */
15221 new_flags &= ~EF_MIPS_XGOT;
15222 old_flags &= ~EF_MIPS_XGOT;
15223
98a8deaf
RS
15224 /* MIPSpro generates ucode info in n64 objects. Again, we should
15225 just be able to ignore this. */
15226 new_flags &= ~EF_MIPS_UCODE;
15227 old_flags &= ~EF_MIPS_UCODE;
15228
861fb55a
DJ
15229 /* DSOs should only be linked with CPIC code. */
15230 if ((ibfd->flags & DYNAMIC) != 0)
15231 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
0a44bf69 15232
b49e97c9 15233 if (new_flags == old_flags)
b34976b6 15234 return TRUE;
b49e97c9 15235
b34976b6 15236 ok = TRUE;
b49e97c9 15237
143d77c5
EC
15238 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15239 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
b49e97c9 15240 {
b49e97c9 15241 (*_bfd_error_handler)
861fb55a 15242 (_("%B: warning: linking abicalls files with non-abicalls files"),
d003868e 15243 ibfd);
143d77c5 15244 ok = TRUE;
b49e97c9
TS
15245 }
15246
143d77c5
EC
15247 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15248 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15249 if (! (new_flags & EF_MIPS_PIC))
15250 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15251
15252 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15253 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
b49e97c9 15254
64543e1a
RS
15255 /* Compare the ISAs. */
15256 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
b49e97c9 15257 {
64543e1a 15258 (*_bfd_error_handler)
d003868e
AM
15259 (_("%B: linking 32-bit code with 64-bit code"),
15260 ibfd);
64543e1a
RS
15261 ok = FALSE;
15262 }
15263 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15264 {
15265 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
15266 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
b49e97c9 15267 {
64543e1a
RS
15268 /* Copy the architecture info from IBFD to OBFD. Also copy
15269 the 32-bit flag (if set) so that we continue to recognise
15270 OBFD as a 32-bit binary. */
15271 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15272 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15273 elf_elfheader (obfd)->e_flags
15274 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15275
351cdf24
MF
15276 /* Update the ABI flags isa_level, isa_rev, isa_ext fields. */
15277 update_mips_abiflags_isa (obfd, &mips_elf_tdata (obfd)->abiflags);
15278
64543e1a
RS
15279 /* Copy across the ABI flags if OBFD doesn't use them
15280 and if that was what caused us to treat IBFD as 32-bit. */
15281 if ((old_flags & EF_MIPS_ABI) == 0
15282 && mips_32bit_flags_p (new_flags)
15283 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15284 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
b49e97c9
TS
15285 }
15286 else
15287 {
64543e1a 15288 /* The ISAs aren't compatible. */
b49e97c9 15289 (*_bfd_error_handler)
d003868e
AM
15290 (_("%B: linking %s module with previous %s modules"),
15291 ibfd,
64543e1a
RS
15292 bfd_printable_name (ibfd),
15293 bfd_printable_name (obfd));
b34976b6 15294 ok = FALSE;
b49e97c9 15295 }
b49e97c9
TS
15296 }
15297
64543e1a
RS
15298 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15299 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15300
15301 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
b49e97c9
TS
15302 does set EI_CLASS differently from any 32-bit ABI. */
15303 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15304 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15305 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15306 {
15307 /* Only error if both are set (to different values). */
15308 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15309 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15310 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15311 {
15312 (*_bfd_error_handler)
d003868e
AM
15313 (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15314 ibfd,
b49e97c9
TS
15315 elf_mips_abi_name (ibfd),
15316 elf_mips_abi_name (obfd));
b34976b6 15317 ok = FALSE;
b49e97c9
TS
15318 }
15319 new_flags &= ~EF_MIPS_ABI;
15320 old_flags &= ~EF_MIPS_ABI;
15321 }
15322
df58fc94
RS
15323 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together
15324 and allow arbitrary mixing of the remaining ASEs (retain the union). */
fb39dac1
RS
15325 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15326 {
df58fc94
RS
15327 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15328 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15329 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15330 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15331 int micro_mis = old_m16 && new_micro;
15332 int m16_mis = old_micro && new_m16;
15333
15334 if (m16_mis || micro_mis)
15335 {
15336 (*_bfd_error_handler)
15337 (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15338 ibfd,
15339 m16_mis ? "MIPS16" : "microMIPS",
15340 m16_mis ? "microMIPS" : "MIPS16");
15341 ok = FALSE;
15342 }
15343
fb39dac1
RS
15344 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15345
15346 new_flags &= ~ EF_MIPS_ARCH_ASE;
15347 old_flags &= ~ EF_MIPS_ARCH_ASE;
15348 }
15349
ba92f887
MR
15350 /* Compare NaN encodings. */
15351 if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15352 {
15353 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15354 ibfd,
15355 (new_flags & EF_MIPS_NAN2008
15356 ? "-mnan=2008" : "-mnan=legacy"),
15357 (old_flags & EF_MIPS_NAN2008
15358 ? "-mnan=2008" : "-mnan=legacy"));
15359 ok = FALSE;
15360 new_flags &= ~EF_MIPS_NAN2008;
15361 old_flags &= ~EF_MIPS_NAN2008;
15362 }
15363
351cdf24
MF
15364 /* Compare FP64 state. */
15365 if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15366 {
15367 _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15368 ibfd,
15369 (new_flags & EF_MIPS_FP64
15370 ? "-mfp64" : "-mfp32"),
15371 (old_flags & EF_MIPS_FP64
15372 ? "-mfp64" : "-mfp32"));
15373 ok = FALSE;
15374 new_flags &= ~EF_MIPS_FP64;
15375 old_flags &= ~EF_MIPS_FP64;
15376 }
15377
b49e97c9
TS
15378 /* Warn about any other mismatches */
15379 if (new_flags != old_flags)
15380 {
15381 (*_bfd_error_handler)
d003868e
AM
15382 (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
15383 ibfd, (unsigned long) new_flags,
b49e97c9 15384 (unsigned long) old_flags);
b34976b6 15385 ok = FALSE;
b49e97c9
TS
15386 }
15387
15388 if (! ok)
15389 {
15390 bfd_set_error (bfd_error_bad_value);
b34976b6 15391 return FALSE;
b49e97c9
TS
15392 }
15393
b34976b6 15394 return TRUE;
b49e97c9
TS
15395}
15396
15397/* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
15398
b34976b6 15399bfd_boolean
9719ad41 15400_bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
b49e97c9
TS
15401{
15402 BFD_ASSERT (!elf_flags_init (abfd)
15403 || elf_elfheader (abfd)->e_flags == flags);
15404
15405 elf_elfheader (abfd)->e_flags = flags;
b34976b6
AM
15406 elf_flags_init (abfd) = TRUE;
15407 return TRUE;
b49e97c9
TS
15408}
15409
ad9563d6
CM
15410char *
15411_bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15412{
15413 switch (dtag)
15414 {
15415 default: return "";
15416 case DT_MIPS_RLD_VERSION:
15417 return "MIPS_RLD_VERSION";
15418 case DT_MIPS_TIME_STAMP:
15419 return "MIPS_TIME_STAMP";
15420 case DT_MIPS_ICHECKSUM:
15421 return "MIPS_ICHECKSUM";
15422 case DT_MIPS_IVERSION:
15423 return "MIPS_IVERSION";
15424 case DT_MIPS_FLAGS:
15425 return "MIPS_FLAGS";
15426 case DT_MIPS_BASE_ADDRESS:
15427 return "MIPS_BASE_ADDRESS";
15428 case DT_MIPS_MSYM:
15429 return "MIPS_MSYM";
15430 case DT_MIPS_CONFLICT:
15431 return "MIPS_CONFLICT";
15432 case DT_MIPS_LIBLIST:
15433 return "MIPS_LIBLIST";
15434 case DT_MIPS_LOCAL_GOTNO:
15435 return "MIPS_LOCAL_GOTNO";
15436 case DT_MIPS_CONFLICTNO:
15437 return "MIPS_CONFLICTNO";
15438 case DT_MIPS_LIBLISTNO:
15439 return "MIPS_LIBLISTNO";
15440 case DT_MIPS_SYMTABNO:
15441 return "MIPS_SYMTABNO";
15442 case DT_MIPS_UNREFEXTNO:
15443 return "MIPS_UNREFEXTNO";
15444 case DT_MIPS_GOTSYM:
15445 return "MIPS_GOTSYM";
15446 case DT_MIPS_HIPAGENO:
15447 return "MIPS_HIPAGENO";
15448 case DT_MIPS_RLD_MAP:
15449 return "MIPS_RLD_MAP";
a5499fa4
MF
15450 case DT_MIPS_RLD_MAP_REL:
15451 return "MIPS_RLD_MAP_REL";
ad9563d6
CM
15452 case DT_MIPS_DELTA_CLASS:
15453 return "MIPS_DELTA_CLASS";
15454 case DT_MIPS_DELTA_CLASS_NO:
15455 return "MIPS_DELTA_CLASS_NO";
15456 case DT_MIPS_DELTA_INSTANCE:
15457 return "MIPS_DELTA_INSTANCE";
15458 case DT_MIPS_DELTA_INSTANCE_NO:
15459 return "MIPS_DELTA_INSTANCE_NO";
15460 case DT_MIPS_DELTA_RELOC:
15461 return "MIPS_DELTA_RELOC";
15462 case DT_MIPS_DELTA_RELOC_NO:
15463 return "MIPS_DELTA_RELOC_NO";
15464 case DT_MIPS_DELTA_SYM:
15465 return "MIPS_DELTA_SYM";
15466 case DT_MIPS_DELTA_SYM_NO:
15467 return "MIPS_DELTA_SYM_NO";
15468 case DT_MIPS_DELTA_CLASSSYM:
15469 return "MIPS_DELTA_CLASSSYM";
15470 case DT_MIPS_DELTA_CLASSSYM_NO:
15471 return "MIPS_DELTA_CLASSSYM_NO";
15472 case DT_MIPS_CXX_FLAGS:
15473 return "MIPS_CXX_FLAGS";
15474 case DT_MIPS_PIXIE_INIT:
15475 return "MIPS_PIXIE_INIT";
15476 case DT_MIPS_SYMBOL_LIB:
15477 return "MIPS_SYMBOL_LIB";
15478 case DT_MIPS_LOCALPAGE_GOTIDX:
15479 return "MIPS_LOCALPAGE_GOTIDX";
15480 case DT_MIPS_LOCAL_GOTIDX:
15481 return "MIPS_LOCAL_GOTIDX";
15482 case DT_MIPS_HIDDEN_GOTIDX:
15483 return "MIPS_HIDDEN_GOTIDX";
15484 case DT_MIPS_PROTECTED_GOTIDX:
15485 return "MIPS_PROTECTED_GOT_IDX";
15486 case DT_MIPS_OPTIONS:
15487 return "MIPS_OPTIONS";
15488 case DT_MIPS_INTERFACE:
15489 return "MIPS_INTERFACE";
15490 case DT_MIPS_DYNSTR_ALIGN:
15491 return "DT_MIPS_DYNSTR_ALIGN";
15492 case DT_MIPS_INTERFACE_SIZE:
15493 return "DT_MIPS_INTERFACE_SIZE";
15494 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15495 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15496 case DT_MIPS_PERF_SUFFIX:
15497 return "DT_MIPS_PERF_SUFFIX";
15498 case DT_MIPS_COMPACT_SIZE:
15499 return "DT_MIPS_COMPACT_SIZE";
15500 case DT_MIPS_GP_VALUE:
15501 return "DT_MIPS_GP_VALUE";
15502 case DT_MIPS_AUX_DYNAMIC:
15503 return "DT_MIPS_AUX_DYNAMIC";
861fb55a
DJ
15504 case DT_MIPS_PLTGOT:
15505 return "DT_MIPS_PLTGOT";
15506 case DT_MIPS_RWPLT:
15507 return "DT_MIPS_RWPLT";
ad9563d6
CM
15508 }
15509}
15510
757a636f
RS
15511/* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15512 not known. */
15513
15514const char *
15515_bfd_mips_fp_abi_string (int fp)
15516{
15517 switch (fp)
15518 {
15519 /* These strings aren't translated because they're simply
15520 option lists. */
15521 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15522 return "-mdouble-float";
15523
15524 case Val_GNU_MIPS_ABI_FP_SINGLE:
15525 return "-msingle-float";
15526
15527 case Val_GNU_MIPS_ABI_FP_SOFT:
15528 return "-msoft-float";
15529
351cdf24
MF
15530 case Val_GNU_MIPS_ABI_FP_OLD_64:
15531 return _("-mips32r2 -mfp64 (12 callee-saved)");
15532
15533 case Val_GNU_MIPS_ABI_FP_XX:
15534 return "-mfpxx";
15535
757a636f 15536 case Val_GNU_MIPS_ABI_FP_64:
351cdf24
MF
15537 return "-mgp32 -mfp64";
15538
15539 case Val_GNU_MIPS_ABI_FP_64A:
15540 return "-mgp32 -mfp64 -mno-odd-spreg";
757a636f
RS
15541
15542 default:
15543 return 0;
15544 }
15545}
15546
351cdf24
MF
15547static void
15548print_mips_ases (FILE *file, unsigned int mask)
15549{
15550 if (mask & AFL_ASE_DSP)
15551 fputs ("\n\tDSP ASE", file);
15552 if (mask & AFL_ASE_DSPR2)
15553 fputs ("\n\tDSP R2 ASE", file);
15554 if (mask & AFL_ASE_EVA)
15555 fputs ("\n\tEnhanced VA Scheme", file);
15556 if (mask & AFL_ASE_MCU)
15557 fputs ("\n\tMCU (MicroController) ASE", file);
15558 if (mask & AFL_ASE_MDMX)
15559 fputs ("\n\tMDMX ASE", file);
15560 if (mask & AFL_ASE_MIPS3D)
15561 fputs ("\n\tMIPS-3D ASE", file);
15562 if (mask & AFL_ASE_MT)
15563 fputs ("\n\tMT ASE", file);
15564 if (mask & AFL_ASE_SMARTMIPS)
15565 fputs ("\n\tSmartMIPS ASE", file);
15566 if (mask & AFL_ASE_VIRT)
15567 fputs ("\n\tVZ ASE", file);
15568 if (mask & AFL_ASE_MSA)
15569 fputs ("\n\tMSA ASE", file);
15570 if (mask & AFL_ASE_MIPS16)
15571 fputs ("\n\tMIPS16 ASE", file);
15572 if (mask & AFL_ASE_MICROMIPS)
15573 fputs ("\n\tMICROMIPS ASE", file);
15574 if (mask & AFL_ASE_XPA)
15575 fputs ("\n\tXPA ASE", file);
15576 if (mask == 0)
15577 fprintf (file, "\n\t%s", _("None"));
00ac7aa0
MF
15578 else if ((mask & ~AFL_ASE_MASK) != 0)
15579 fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
351cdf24
MF
15580}
15581
15582static void
15583print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15584{
15585 switch (isa_ext)
15586 {
15587 case 0:
15588 fputs (_("None"), file);
15589 break;
15590 case AFL_EXT_XLR:
15591 fputs ("RMI XLR", file);
15592 break;
2c629856
N
15593 case AFL_EXT_OCTEON3:
15594 fputs ("Cavium Networks Octeon3", file);
15595 break;
351cdf24
MF
15596 case AFL_EXT_OCTEON2:
15597 fputs ("Cavium Networks Octeon2", file);
15598 break;
15599 case AFL_EXT_OCTEONP:
15600 fputs ("Cavium Networks OcteonP", file);
15601 break;
15602 case AFL_EXT_LOONGSON_3A:
15603 fputs ("Loongson 3A", file);
15604 break;
15605 case AFL_EXT_OCTEON:
15606 fputs ("Cavium Networks Octeon", file);
15607 break;
15608 case AFL_EXT_5900:
15609 fputs ("Toshiba R5900", file);
15610 break;
15611 case AFL_EXT_4650:
15612 fputs ("MIPS R4650", file);
15613 break;
15614 case AFL_EXT_4010:
15615 fputs ("LSI R4010", file);
15616 break;
15617 case AFL_EXT_4100:
15618 fputs ("NEC VR4100", file);
15619 break;
15620 case AFL_EXT_3900:
15621 fputs ("Toshiba R3900", file);
15622 break;
15623 case AFL_EXT_10000:
15624 fputs ("MIPS R10000", file);
15625 break;
15626 case AFL_EXT_SB1:
15627 fputs ("Broadcom SB-1", file);
15628 break;
15629 case AFL_EXT_4111:
15630 fputs ("NEC VR4111/VR4181", file);
15631 break;
15632 case AFL_EXT_4120:
15633 fputs ("NEC VR4120", file);
15634 break;
15635 case AFL_EXT_5400:
15636 fputs ("NEC VR5400", file);
15637 break;
15638 case AFL_EXT_5500:
15639 fputs ("NEC VR5500", file);
15640 break;
15641 case AFL_EXT_LOONGSON_2E:
15642 fputs ("ST Microelectronics Loongson 2E", file);
15643 break;
15644 case AFL_EXT_LOONGSON_2F:
15645 fputs ("ST Microelectronics Loongson 2F", file);
15646 break;
15647 default:
00ac7aa0 15648 fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
351cdf24
MF
15649 break;
15650 }
15651}
15652
15653static void
15654print_mips_fp_abi_value (FILE *file, int val)
15655{
15656 switch (val)
15657 {
15658 case Val_GNU_MIPS_ABI_FP_ANY:
15659 fprintf (file, _("Hard or soft float\n"));
15660 break;
15661 case Val_GNU_MIPS_ABI_FP_DOUBLE:
15662 fprintf (file, _("Hard float (double precision)\n"));
15663 break;
15664 case Val_GNU_MIPS_ABI_FP_SINGLE:
15665 fprintf (file, _("Hard float (single precision)\n"));
15666 break;
15667 case Val_GNU_MIPS_ABI_FP_SOFT:
15668 fprintf (file, _("Soft float\n"));
15669 break;
15670 case Val_GNU_MIPS_ABI_FP_OLD_64:
15671 fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15672 break;
15673 case Val_GNU_MIPS_ABI_FP_XX:
15674 fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15675 break;
15676 case Val_GNU_MIPS_ABI_FP_64:
15677 fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15678 break;
15679 case Val_GNU_MIPS_ABI_FP_64A:
15680 fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15681 break;
15682 default:
15683 fprintf (file, "??? (%d)\n", val);
15684 break;
15685 }
15686}
15687
15688static int
15689get_mips_reg_size (int reg_size)
15690{
15691 return (reg_size == AFL_REG_NONE) ? 0
15692 : (reg_size == AFL_REG_32) ? 32
15693 : (reg_size == AFL_REG_64) ? 64
15694 : (reg_size == AFL_REG_128) ? 128
15695 : -1;
15696}
15697
b34976b6 15698bfd_boolean
9719ad41 15699_bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
b49e97c9 15700{
9719ad41 15701 FILE *file = ptr;
b49e97c9
TS
15702
15703 BFD_ASSERT (abfd != NULL && ptr != NULL);
15704
15705 /* Print normal ELF private data. */
15706 _bfd_elf_print_private_bfd_data (abfd, ptr);
15707
15708 /* xgettext:c-format */
15709 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15710
15711 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15712 fprintf (file, _(" [abi=O32]"));
15713 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15714 fprintf (file, _(" [abi=O64]"));
15715 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15716 fprintf (file, _(" [abi=EABI32]"));
15717 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15718 fprintf (file, _(" [abi=EABI64]"));
15719 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15720 fprintf (file, _(" [abi unknown]"));
15721 else if (ABI_N32_P (abfd))
15722 fprintf (file, _(" [abi=N32]"));
15723 else if (ABI_64_P (abfd))
15724 fprintf (file, _(" [abi=64]"));
15725 else
15726 fprintf (file, _(" [no abi set]"));
15727
15728 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
ae0d2616 15729 fprintf (file, " [mips1]");
b49e97c9 15730 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
ae0d2616 15731 fprintf (file, " [mips2]");
b49e97c9 15732 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
ae0d2616 15733 fprintf (file, " [mips3]");
b49e97c9 15734 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
ae0d2616 15735 fprintf (file, " [mips4]");
b49e97c9 15736 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
ae0d2616 15737 fprintf (file, " [mips5]");
b49e97c9 15738 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
ae0d2616 15739 fprintf (file, " [mips32]");
b49e97c9 15740 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
ae0d2616 15741 fprintf (file, " [mips64]");
af7ee8bf 15742 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
ae0d2616 15743 fprintf (file, " [mips32r2]");
5f74bc13 15744 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
ae0d2616 15745 fprintf (file, " [mips64r2]");
7361da2c
AB
15746 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15747 fprintf (file, " [mips32r6]");
15748 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15749 fprintf (file, " [mips64r6]");
b49e97c9
TS
15750 else
15751 fprintf (file, _(" [unknown ISA]"));
15752
40d32fc6 15753 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
ae0d2616 15754 fprintf (file, " [mdmx]");
40d32fc6
CD
15755
15756 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
ae0d2616 15757 fprintf (file, " [mips16]");
40d32fc6 15758
df58fc94
RS
15759 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15760 fprintf (file, " [micromips]");
15761
ba92f887
MR
15762 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15763 fprintf (file, " [nan2008]");
15764
5baf5e34 15765 if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
351cdf24 15766 fprintf (file, " [old fp64]");
5baf5e34 15767
b49e97c9 15768 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
ae0d2616 15769 fprintf (file, " [32bitmode]");
b49e97c9
TS
15770 else
15771 fprintf (file, _(" [not 32bitmode]"));
15772
c0e3f241 15773 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
ae0d2616 15774 fprintf (file, " [noreorder]");
c0e3f241
CD
15775
15776 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
ae0d2616 15777 fprintf (file, " [PIC]");
c0e3f241
CD
15778
15779 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
ae0d2616 15780 fprintf (file, " [CPIC]");
c0e3f241
CD
15781
15782 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
ae0d2616 15783 fprintf (file, " [XGOT]");
c0e3f241
CD
15784
15785 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
ae0d2616 15786 fprintf (file, " [UCODE]");
c0e3f241 15787
b49e97c9
TS
15788 fputc ('\n', file);
15789
351cdf24
MF
15790 if (mips_elf_tdata (abfd)->abiflags_valid)
15791 {
15792 Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15793 fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15794 fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15795 if (abiflags->isa_rev > 1)
15796 fprintf (file, "r%d", abiflags->isa_rev);
15797 fprintf (file, "\nGPR size: %d",
15798 get_mips_reg_size (abiflags->gpr_size));
15799 fprintf (file, "\nCPR1 size: %d",
15800 get_mips_reg_size (abiflags->cpr1_size));
15801 fprintf (file, "\nCPR2 size: %d",
15802 get_mips_reg_size (abiflags->cpr2_size));
15803 fputs ("\nFP ABI: ", file);
15804 print_mips_fp_abi_value (file, abiflags->fp_abi);
15805 fputs ("ISA Extension: ", file);
15806 print_mips_isa_ext (file, abiflags->isa_ext);
15807 fputs ("\nASEs:", file);
15808 print_mips_ases (file, abiflags->ases);
15809 fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15810 fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15811 fputc ('\n', file);
15812 }
15813
b34976b6 15814 return TRUE;
b49e97c9 15815}
2f89ff8d 15816
b35d266b 15817const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
2f89ff8d 15818{
0112cd26
NC
15819 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15820 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15821 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15822 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15823 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15824 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 },
15825 { NULL, 0, 0, 0, 0 }
2f89ff8d 15826};
5e2b0d47 15827
8992f0d7
TS
15828/* Merge non visibility st_other attributes. Ensure that the
15829 STO_OPTIONAL flag is copied into h->other, even if this is not a
15830 definiton of the symbol. */
5e2b0d47
NC
15831void
15832_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15833 const Elf_Internal_Sym *isym,
15834 bfd_boolean definition,
15835 bfd_boolean dynamic ATTRIBUTE_UNUSED)
15836{
8992f0d7
TS
15837 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15838 {
15839 unsigned char other;
15840
15841 other = (definition ? isym->st_other : h->other);
15842 other &= ~ELF_ST_VISIBILITY (-1);
15843 h->other = other | ELF_ST_VISIBILITY (h->other);
15844 }
15845
15846 if (!definition
5e2b0d47
NC
15847 && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15848 h->other |= STO_OPTIONAL;
15849}
12ac1cf5
NC
15850
15851/* Decide whether an undefined symbol is special and can be ignored.
15852 This is the case for OPTIONAL symbols on IRIX. */
15853bfd_boolean
15854_bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15855{
15856 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15857}
e0764319
NC
15858
15859bfd_boolean
15860_bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15861{
15862 return (sym->st_shndx == SHN_COMMON
15863 || sym->st_shndx == SHN_MIPS_ACOMMON
15864 || sym->st_shndx == SHN_MIPS_SCOMMON);
15865}
861fb55a
DJ
15866
15867/* Return address for Ith PLT stub in section PLT, for relocation REL
15868 or (bfd_vma) -1 if it should not be included. */
15869
15870bfd_vma
15871_bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15872 const arelent *rel ATTRIBUTE_UNUSED)
15873{
15874 return (plt->vma
15875 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15876 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15877}
15878
1bbce132
MR
15879/* Build a table of synthetic symbols to represent the PLT. As with MIPS16
15880 and microMIPS PLT slots we may have a many-to-one mapping between .plt
15881 and .got.plt and also the slots may be of a different size each we walk
15882 the PLT manually fetching instructions and matching them against known
15883 patterns. To make things easier standard MIPS slots, if any, always come
15884 first. As we don't create proper ELF symbols we use the UDATA.I member
15885 of ASYMBOL to carry ISA annotation. The encoding used is the same as
15886 with the ST_OTHER member of the ELF symbol. */
15887
15888long
15889_bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15890 long symcount ATTRIBUTE_UNUSED,
15891 asymbol **syms ATTRIBUTE_UNUSED,
15892 long dynsymcount, asymbol **dynsyms,
15893 asymbol **ret)
15894{
15895 static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15896 static const char microsuffix[] = "@micromipsplt";
15897 static const char m16suffix[] = "@mips16plt";
15898 static const char mipssuffix[] = "@plt";
15899
15900 bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15901 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15902 bfd_boolean micromips_p = MICROMIPS_P (abfd);
15903 Elf_Internal_Shdr *hdr;
15904 bfd_byte *plt_data;
15905 bfd_vma plt_offset;
15906 unsigned int other;
15907 bfd_vma entry_size;
15908 bfd_vma plt0_size;
15909 asection *relplt;
15910 bfd_vma opcode;
15911 asection *plt;
15912 asymbol *send;
15913 size_t size;
15914 char *names;
15915 long counti;
15916 arelent *p;
15917 asymbol *s;
15918 char *nend;
15919 long count;
15920 long pi;
15921 long i;
15922 long n;
15923
15924 *ret = NULL;
15925
15926 if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15927 return 0;
15928
15929 relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15930 if (relplt == NULL)
15931 return 0;
15932
15933 hdr = &elf_section_data (relplt)->this_hdr;
15934 if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15935 return 0;
15936
15937 plt = bfd_get_section_by_name (abfd, ".plt");
15938 if (plt == NULL)
15939 return 0;
15940
15941 slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15942 if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15943 return -1;
15944 p = relplt->relocation;
15945
15946 /* Calculating the exact amount of space required for symbols would
15947 require two passes over the PLT, so just pessimise assuming two
15948 PLT slots per relocation. */
15949 count = relplt->size / hdr->sh_entsize;
15950 counti = count * bed->s->int_rels_per_ext_rel;
15951 size = 2 * count * sizeof (asymbol);
15952 size += count * (sizeof (mipssuffix) +
15953 (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
15954 for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
15955 size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
15956
15957 /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too. */
15958 size += sizeof (asymbol) + sizeof (pltname);
15959
15960 if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
15961 return -1;
15962
15963 if (plt->size < 16)
15964 return -1;
15965
15966 s = *ret = bfd_malloc (size);
15967 if (s == NULL)
15968 return -1;
15969 send = s + 2 * count + 1;
15970
15971 names = (char *) send;
15972 nend = (char *) s + size;
15973 n = 0;
15974
15975 opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
15976 if (opcode == 0x3302fffe)
15977 {
15978 if (!micromips_p)
15979 return -1;
15980 plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
15981 other = STO_MICROMIPS;
15982 }
833794fc
MR
15983 else if (opcode == 0x0398c1d0)
15984 {
15985 if (!micromips_p)
15986 return -1;
15987 plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
15988 other = STO_MICROMIPS;
15989 }
1bbce132
MR
15990 else
15991 {
15992 plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
15993 other = 0;
15994 }
15995
15996 s->the_bfd = abfd;
15997 s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
15998 s->section = plt;
15999 s->value = 0;
16000 s->name = names;
16001 s->udata.i = other;
16002 memcpy (names, pltname, sizeof (pltname));
16003 names += sizeof (pltname);
16004 ++s, ++n;
16005
16006 pi = 0;
16007 for (plt_offset = plt0_size;
16008 plt_offset + 8 <= plt->size && s < send;
16009 plt_offset += entry_size)
16010 {
16011 bfd_vma gotplt_addr;
16012 const char *suffix;
16013 bfd_vma gotplt_hi;
16014 bfd_vma gotplt_lo;
16015 size_t suffixlen;
16016
16017 opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16018
16019 /* Check if the second word matches the expected MIPS16 instruction. */
16020 if (opcode == 0x651aeb00)
16021 {
16022 if (micromips_p)
16023 return -1;
16024 /* Truncated table??? */
16025 if (plt_offset + 16 > plt->size)
16026 break;
16027 gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16028 entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16029 suffixlen = sizeof (m16suffix);
16030 suffix = m16suffix;
16031 other = STO_MIPS16;
16032 }
833794fc 16033 /* Likewise the expected microMIPS instruction (no insn32 mode). */
1bbce132
MR
16034 else if (opcode == 0xff220000)
16035 {
16036 if (!micromips_p)
16037 return -1;
16038 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16039 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16040 gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16041 gotplt_lo <<= 2;
16042 gotplt_addr = gotplt_hi + gotplt_lo;
16043 gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16044 entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16045 suffixlen = sizeof (microsuffix);
16046 suffix = microsuffix;
16047 other = STO_MICROMIPS;
16048 }
833794fc
MR
16049 /* Likewise the expected microMIPS instruction (insn32 mode). */
16050 else if ((opcode & 0xffff0000) == 0xff2f0000)
16051 {
16052 gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16053 gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16054 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16055 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16056 gotplt_addr = gotplt_hi + gotplt_lo;
16057 entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16058 suffixlen = sizeof (microsuffix);
16059 suffix = microsuffix;
16060 other = STO_MICROMIPS;
16061 }
1bbce132
MR
16062 /* Otherwise assume standard MIPS code. */
16063 else
16064 {
16065 gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16066 gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16067 gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16068 gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16069 gotplt_addr = gotplt_hi + gotplt_lo;
16070 entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16071 suffixlen = sizeof (mipssuffix);
16072 suffix = mipssuffix;
16073 other = 0;
16074 }
16075 /* Truncated table??? */
16076 if (plt_offset + entry_size > plt->size)
16077 break;
16078
16079 for (i = 0;
16080 i < count && p[pi].address != gotplt_addr;
16081 i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16082
16083 if (i < count)
16084 {
16085 size_t namelen;
16086 size_t len;
16087
16088 *s = **p[pi].sym_ptr_ptr;
16089 /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set. Since
16090 we are defining a symbol, ensure one of them is set. */
16091 if ((s->flags & BSF_LOCAL) == 0)
16092 s->flags |= BSF_GLOBAL;
16093 s->flags |= BSF_SYNTHETIC;
16094 s->section = plt;
16095 s->value = plt_offset;
16096 s->name = names;
16097 s->udata.i = other;
16098
16099 len = strlen ((*p[pi].sym_ptr_ptr)->name);
16100 namelen = len + suffixlen;
16101 if (names + namelen > nend)
16102 break;
16103
16104 memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16105 names += len;
16106 memcpy (names, suffix, suffixlen);
16107 names += suffixlen;
16108
16109 ++s, ++n;
16110 pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16111 }
16112 }
16113
16114 free (plt_data);
16115
16116 return n;
16117}
16118
861fb55a
DJ
16119void
16120_bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16121{
16122 struct mips_elf_link_hash_table *htab;
16123 Elf_Internal_Ehdr *i_ehdrp;
16124
16125 i_ehdrp = elf_elfheader (abfd);
16126 if (link_info)
16127 {
16128 htab = mips_elf_hash_table (link_info);
4dfe6ac6
NC
16129 BFD_ASSERT (htab != NULL);
16130
861fb55a
DJ
16131 if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16132 i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16133 }
0af03126
L
16134
16135 _bfd_elf_post_process_headers (abfd, link_info);
351cdf24
MF
16136
16137 if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16138 || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16139 i_ehdrp->e_ident[EI_ABIVERSION] = 3;
861fb55a 16140}
2f0c68f2
CM
16141
16142int
16143_bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16144{
16145 return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16146}
16147
16148/* Return the opcode for can't unwind. */
16149
16150int
16151_bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16152{
16153 return COMPACT_EH_CANT_UNWIND_OPCODE;
16154}