bfd/
[deliverable/binutils-gdb.git] / bfd / elfxx-mips.c
CommitLineData
b49e97c9 1/* MIPS-specific support for ELF
64543e1a 2 Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
e407c74b 3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013
58238693 4 Free Software Foundation, Inc.
b49e97c9
TS
5
6 Most of the information added by Ian Lance Taylor, Cygnus Support,
7 <ian@cygnus.com>.
8 N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
9 <mark@codesourcery.com>
10 Traditional MIPS targets support added by Koundinya.K, Dansk Data
11 Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
12
ae9a127f 13 This file is part of BFD, the Binary File Descriptor library.
b49e97c9 14
ae9a127f
NC
15 This program is free software; you can redistribute it and/or modify
16 it under the terms of the GNU General Public License as published by
cd123cb7 17 the Free Software Foundation; either version 3 of the License, or
ae9a127f 18 (at your option) any later version.
b49e97c9 19
ae9a127f
NC
20 This program is distributed in the hope that it will be useful,
21 but WITHOUT ANY WARRANTY; without even the implied warranty of
22 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23 GNU General Public License for more details.
b49e97c9 24
ae9a127f
NC
25 You should have received a copy of the GNU General Public License
26 along with this program; if not, write to the Free Software
cd123cb7
NC
27 Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
28 MA 02110-1301, USA. */
29
b49e97c9
TS
30
31/* This file handles functionality common to the different MIPS ABI's. */
32
b49e97c9 33#include "sysdep.h"
3db64b00 34#include "bfd.h"
b49e97c9 35#include "libbfd.h"
64543e1a 36#include "libiberty.h"
b49e97c9
TS
37#include "elf-bfd.h"
38#include "elfxx-mips.h"
39#include "elf/mips.h"
0a44bf69 40#include "elf-vxworks.h"
b49e97c9
TS
41
42/* Get the ECOFF swapping routines. */
43#include "coff/sym.h"
44#include "coff/symconst.h"
45#include "coff/ecoff.h"
46#include "coff/mips.h"
47
b15e6682
AO
48#include "hashtab.h"
49
ead49a57
RS
50/* This structure is used to hold information about one GOT entry.
51 There are three types of entry:
52
53 (1) absolute addresses
54 (abfd == NULL)
55 (2) SYMBOL + OFFSET addresses, where SYMBOL is local to an input bfd
56 (abfd != NULL, symndx >= 0)
020d7251 57 (3) SYMBOL addresses, where SYMBOL is not local to an input bfd
ead49a57
RS
58 (abfd != NULL, symndx == -1)
59
60 Type (3) entries are treated differently for different types of GOT.
61 In the "master" GOT -- i.e. the one that describes every GOT
62 reference needed in the link -- the mips_got_entry is keyed on both
63 the symbol and the input bfd that references it. If it turns out
64 that we need multiple GOTs, we can then use this information to
65 create separate GOTs for each input bfd.
66
67 However, we want each of these separate GOTs to have at most one
68 entry for a given symbol, so their type (3) entries are keyed only
69 on the symbol. The input bfd given by the "abfd" field is somewhat
70 arbitrary in this case.
71
72 This means that when there are multiple GOTs, each GOT has a unique
73 mips_got_entry for every symbol within it. We can therefore use the
74 mips_got_entry fields (tls_type and gotidx) to track the symbol's
75 GOT index.
76
77 However, if it turns out that we need only a single GOT, we continue
78 to use the master GOT to describe it. There may therefore be several
79 mips_got_entries for the same symbol, each with a different input bfd.
80 We want to make sure that each symbol gets a unique GOT entry, so when
81 there's a single GOT, we use the symbol's hash entry, not the
82 mips_got_entry fields, to track a symbol's GOT index. */
b15e6682
AO
83struct mips_got_entry
84{
85 /* The input bfd in which the symbol is defined. */
86 bfd *abfd;
f4416af6
AO
87 /* The index of the symbol, as stored in the relocation r_info, if
88 we have a local symbol; -1 otherwise. */
89 long symndx;
90 union
91 {
92 /* If abfd == NULL, an address that must be stored in the got. */
93 bfd_vma address;
94 /* If abfd != NULL && symndx != -1, the addend of the relocation
95 that should be added to the symbol value. */
96 bfd_vma addend;
97 /* If abfd != NULL && symndx == -1, the hash table entry
020d7251
RS
98 corresponding to symbol in the GOT. The symbol's entry
99 is in the local area if h->global_got_area is GGA_NONE,
100 otherwise it is in the global area. */
f4416af6
AO
101 struct mips_elf_link_hash_entry *h;
102 } d;
0f20cc35
DJ
103
104 /* The TLS types included in this GOT entry (specifically, GD and
105 IE). The GD and IE flags can be added as we encounter new
106 relocations. LDM can also be set; it will always be alone, not
107 combined with any GD or IE flags. An LDM GOT entry will be
108 a local symbol entry with r_symndx == 0. */
109 unsigned char tls_type;
110
b15e6682 111 /* The offset from the beginning of the .got section to the entry
f4416af6
AO
112 corresponding to this symbol+addend. If it's a global symbol
113 whose offset is yet to be decided, it's going to be -1. */
114 long gotidx;
b15e6682
AO
115};
116
c224138d
RS
117/* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
118 The structures form a non-overlapping list that is sorted by increasing
119 MIN_ADDEND. */
120struct mips_got_page_range
121{
122 struct mips_got_page_range *next;
123 bfd_signed_vma min_addend;
124 bfd_signed_vma max_addend;
125};
126
127/* This structure describes the range of addends that are applied to page
128 relocations against a given symbol. */
129struct mips_got_page_entry
130{
131 /* The input bfd in which the symbol is defined. */
132 bfd *abfd;
133 /* The index of the symbol, as stored in the relocation r_info. */
134 long symndx;
135 /* The ranges for this page entry. */
136 struct mips_got_page_range *ranges;
137 /* The maximum number of page entries needed for RANGES. */
138 bfd_vma num_pages;
139};
140
f0abc2a1 141/* This structure is used to hold .got information when linking. */
b49e97c9
TS
142
143struct mips_got_info
144{
145 /* The global symbol in the GOT with the lowest index in the dynamic
146 symbol table. */
147 struct elf_link_hash_entry *global_gotsym;
148 /* The number of global .got entries. */
149 unsigned int global_gotno;
23cc69b6
RS
150 /* The number of global .got entries that are in the GGA_RELOC_ONLY area. */
151 unsigned int reloc_only_gotno;
0f20cc35
DJ
152 /* The number of .got slots used for TLS. */
153 unsigned int tls_gotno;
154 /* The first unused TLS .got entry. Used only during
155 mips_elf_initialize_tls_index. */
156 unsigned int tls_assigned_gotno;
c224138d 157 /* The number of local .got entries, eventually including page entries. */
b49e97c9 158 unsigned int local_gotno;
c224138d
RS
159 /* The maximum number of page entries needed. */
160 unsigned int page_gotno;
b49e97c9
TS
161 /* The number of local .got entries we have used. */
162 unsigned int assigned_gotno;
b15e6682
AO
163 /* A hash table holding members of the got. */
164 struct htab *got_entries;
c224138d
RS
165 /* A hash table of mips_got_page_entry structures. */
166 struct htab *got_page_entries;
f4416af6
AO
167 /* A hash table mapping input bfds to other mips_got_info. NULL
168 unless multi-got was necessary. */
169 struct htab *bfd2got;
170 /* In multi-got links, a pointer to the next got (err, rather, most
171 of the time, it points to the previous got). */
172 struct mips_got_info *next;
0f20cc35
DJ
173 /* This is the GOT index of the TLS LDM entry for the GOT, MINUS_ONE
174 for none, or MINUS_TWO for not yet assigned. This is needed
175 because a single-GOT link may have multiple hash table entries
176 for the LDM. It does not get initialized in multi-GOT mode. */
177 bfd_vma tls_ldm_offset;
f4416af6
AO
178};
179
180/* Map an input bfd to a got in a multi-got link. */
181
91d6fa6a
NC
182struct mips_elf_bfd2got_hash
183{
f4416af6
AO
184 bfd *bfd;
185 struct mips_got_info *g;
186};
187
188/* Structure passed when traversing the bfd2got hash table, used to
189 create and merge bfd's gots. */
190
191struct mips_elf_got_per_bfd_arg
192{
193 /* A hashtable that maps bfds to gots. */
194 htab_t bfd2got;
195 /* The output bfd. */
196 bfd *obfd;
197 /* The link information. */
198 struct bfd_link_info *info;
199 /* A pointer to the primary got, i.e., the one that's going to get
200 the implicit relocations from DT_MIPS_LOCAL_GOTNO and
201 DT_MIPS_GOTSYM. */
202 struct mips_got_info *primary;
203 /* A non-primary got we're trying to merge with other input bfd's
204 gots. */
205 struct mips_got_info *current;
206 /* The maximum number of got entries that can be addressed with a
207 16-bit offset. */
208 unsigned int max_count;
c224138d
RS
209 /* The maximum number of page entries needed by each got. */
210 unsigned int max_pages;
0f20cc35
DJ
211 /* The total number of global entries which will live in the
212 primary got and be automatically relocated. This includes
213 those not referenced by the primary GOT but included in
214 the "master" GOT. */
215 unsigned int global_count;
f4416af6
AO
216};
217
218/* Another structure used to pass arguments for got entries traversal. */
219
220struct mips_elf_set_global_got_offset_arg
221{
222 struct mips_got_info *g;
223 int value;
224 unsigned int needed_relocs;
225 struct bfd_link_info *info;
b49e97c9
TS
226};
227
0f20cc35
DJ
228/* A structure used to count TLS relocations or GOT entries, for GOT
229 entry or ELF symbol table traversal. */
230
231struct mips_elf_count_tls_arg
232{
233 struct bfd_link_info *info;
234 unsigned int needed;
235};
236
f0abc2a1
AM
237struct _mips_elf_section_data
238{
239 struct bfd_elf_section_data elf;
240 union
241 {
f0abc2a1
AM
242 bfd_byte *tdata;
243 } u;
244};
245
246#define mips_elf_section_data(sec) \
68bfbfcc 247 ((struct _mips_elf_section_data *) elf_section_data (sec))
f0abc2a1 248
d5eaccd7
RS
249#define is_mips_elf(bfd) \
250 (bfd_get_flavour (bfd) == bfd_target_elf_flavour \
251 && elf_tdata (bfd) != NULL \
4dfe6ac6 252 && elf_object_id (bfd) == MIPS_ELF_DATA)
d5eaccd7 253
634835ae
RS
254/* The ABI says that every symbol used by dynamic relocations must have
255 a global GOT entry. Among other things, this provides the dynamic
256 linker with a free, directly-indexed cache. The GOT can therefore
257 contain symbols that are not referenced by GOT relocations themselves
258 (in other words, it may have symbols that are not referenced by things
259 like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
260
261 GOT relocations are less likely to overflow if we put the associated
262 GOT entries towards the beginning. We therefore divide the global
263 GOT entries into two areas: "normal" and "reloc-only". Entries in
264 the first area can be used for both dynamic relocations and GP-relative
265 accesses, while those in the "reloc-only" area are for dynamic
266 relocations only.
267
268 These GGA_* ("Global GOT Area") values are organised so that lower
269 values are more general than higher values. Also, non-GGA_NONE
270 values are ordered by the position of the area in the GOT. */
271#define GGA_NORMAL 0
272#define GGA_RELOC_ONLY 1
273#define GGA_NONE 2
274
861fb55a
DJ
275/* Information about a non-PIC interface to a PIC function. There are
276 two ways of creating these interfaces. The first is to add:
277
278 lui $25,%hi(func)
279 addiu $25,$25,%lo(func)
280
281 immediately before a PIC function "func". The second is to add:
282
283 lui $25,%hi(func)
284 j func
285 addiu $25,$25,%lo(func)
286
287 to a separate trampoline section.
288
289 Stubs of the first kind go in a new section immediately before the
290 target function. Stubs of the second kind go in a single section
291 pointed to by the hash table's "strampoline" field. */
292struct mips_elf_la25_stub {
293 /* The generated section that contains this stub. */
294 asection *stub_section;
295
296 /* The offset of the stub from the start of STUB_SECTION. */
297 bfd_vma offset;
298
299 /* One symbol for the original function. Its location is available
300 in H->root.root.u.def. */
301 struct mips_elf_link_hash_entry *h;
302};
303
304/* Macros for populating a mips_elf_la25_stub. */
305
306#define LA25_LUI(VAL) (0x3c190000 | (VAL)) /* lui t9,VAL */
307#define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
308#define LA25_ADDIU(VAL) (0x27390000 | (VAL)) /* addiu t9,t9,VAL */
d21911ea
MR
309#define LA25_LUI_MICROMIPS(VAL) \
310 (0x41b90000 | (VAL)) /* lui t9,VAL */
311#define LA25_J_MICROMIPS(VAL) \
312 (0xd4000000 | (((VAL) >> 1) & 0x3ffffff)) /* j VAL */
313#define LA25_ADDIU_MICROMIPS(VAL) \
314 (0x33390000 | (VAL)) /* addiu t9,t9,VAL */
861fb55a 315
b49e97c9
TS
316/* This structure is passed to mips_elf_sort_hash_table_f when sorting
317 the dynamic symbols. */
318
319struct mips_elf_hash_sort_data
320{
321 /* The symbol in the global GOT with the lowest dynamic symbol table
322 index. */
323 struct elf_link_hash_entry *low;
0f20cc35
DJ
324 /* The least dynamic symbol table index corresponding to a non-TLS
325 symbol with a GOT entry. */
b49e97c9 326 long min_got_dynindx;
f4416af6
AO
327 /* The greatest dynamic symbol table index corresponding to a symbol
328 with a GOT entry that is not referenced (e.g., a dynamic symbol
9e4aeb93 329 with dynamic relocations pointing to it from non-primary GOTs). */
f4416af6 330 long max_unref_got_dynindx;
b49e97c9
TS
331 /* The greatest dynamic symbol table index not corresponding to a
332 symbol without a GOT entry. */
333 long max_non_got_dynindx;
334};
335
336/* The MIPS ELF linker needs additional information for each symbol in
337 the global hash table. */
338
339struct mips_elf_link_hash_entry
340{
341 struct elf_link_hash_entry root;
342
343 /* External symbol information. */
344 EXTR esym;
345
861fb55a
DJ
346 /* The la25 stub we have created for ths symbol, if any. */
347 struct mips_elf_la25_stub *la25_stub;
348
b49e97c9
TS
349 /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
350 this symbol. */
351 unsigned int possibly_dynamic_relocs;
352
b49e97c9
TS
353 /* If there is a stub that 32 bit functions should use to call this
354 16 bit function, this points to the section containing the stub. */
355 asection *fn_stub;
356
b49e97c9
TS
357 /* If there is a stub that 16 bit functions should use to call this
358 32 bit function, this points to the section containing the stub. */
359 asection *call_stub;
360
361 /* This is like the call_stub field, but it is used if the function
362 being called returns a floating point value. */
363 asection *call_fp_stub;
7c5fcef7 364
0f20cc35
DJ
365#define GOT_NORMAL 0
366#define GOT_TLS_GD 1
367#define GOT_TLS_LDM 2
368#define GOT_TLS_IE 4
369#define GOT_TLS_OFFSET_DONE 0x40
370#define GOT_TLS_DONE 0x80
371 unsigned char tls_type;
71782a75 372
0f20cc35
DJ
373 /* This is only used in single-GOT mode; in multi-GOT mode there
374 is one mips_got_entry per GOT entry, so the offset is stored
375 there. In single-GOT mode there may be many mips_got_entry
376 structures all referring to the same GOT slot. It might be
377 possible to use root.got.offset instead, but that field is
378 overloaded already. */
379 bfd_vma tls_got_offset;
71782a75 380
634835ae
RS
381 /* The highest GGA_* value that satisfies all references to this symbol. */
382 unsigned int global_got_area : 2;
383
6ccf4795
RS
384 /* True if all GOT relocations against this symbol are for calls. This is
385 a looser condition than no_fn_stub below, because there may be other
386 non-call non-GOT relocations against the symbol. */
387 unsigned int got_only_for_calls : 1;
388
71782a75
RS
389 /* True if one of the relocations described by possibly_dynamic_relocs
390 is against a readonly section. */
391 unsigned int readonly_reloc : 1;
392
861fb55a
DJ
393 /* True if there is a relocation against this symbol that must be
394 resolved by the static linker (in other words, if the relocation
395 cannot possibly be made dynamic). */
396 unsigned int has_static_relocs : 1;
397
71782a75
RS
398 /* True if we must not create a .MIPS.stubs entry for this symbol.
399 This is set, for example, if there are relocations related to
400 taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
401 See "MIPS ABI Supplement, 3rd Edition", p. 4-20. */
402 unsigned int no_fn_stub : 1;
403
404 /* Whether we need the fn_stub; this is true if this symbol appears
405 in any relocs other than a 16 bit call. */
406 unsigned int need_fn_stub : 1;
407
861fb55a
DJ
408 /* True if this symbol is referenced by branch relocations from
409 any non-PIC input file. This is used to determine whether an
410 la25 stub is required. */
411 unsigned int has_nonpic_branches : 1;
33bb52fb
RS
412
413 /* Does this symbol need a traditional MIPS lazy-binding stub
414 (as opposed to a PLT entry)? */
415 unsigned int needs_lazy_stub : 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
0a44bf69
RS
443 /* True if we're generating code for VxWorks. */
444 bfd_boolean is_vxworks;
861fb55a 445
0e53d9da
AN
446 /* True if we already reported the small-data section overflow. */
447 bfd_boolean small_data_overflow_reported;
861fb55a 448
0a44bf69
RS
449 /* Shortcuts to some dynamic sections, or NULL if they are not
450 being used. */
451 asection *srelbss;
452 asection *sdynbss;
453 asection *srelplt;
454 asection *srelplt2;
455 asection *sgotplt;
456 asection *splt;
4e41d0d7 457 asection *sstubs;
a8028dd0 458 asection *sgot;
861fb55a 459
a8028dd0
RS
460 /* The master GOT information. */
461 struct mips_got_info *got_info;
861fb55a
DJ
462
463 /* The size of the PLT header in bytes. */
0a44bf69 464 bfd_vma plt_header_size;
861fb55a
DJ
465
466 /* The size of a PLT entry in bytes. */
0a44bf69 467 bfd_vma plt_entry_size;
861fb55a 468
33bb52fb
RS
469 /* The number of functions that need a lazy-binding stub. */
470 bfd_vma lazy_stub_count;
861fb55a 471
5108fc1b
RS
472 /* The size of a function stub entry in bytes. */
473 bfd_vma function_stub_size;
861fb55a
DJ
474
475 /* The number of reserved entries at the beginning of the GOT. */
476 unsigned int reserved_gotno;
477
478 /* The section used for mips_elf_la25_stub trampolines.
479 See the comment above that structure for details. */
480 asection *strampoline;
481
482 /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
483 pairs. */
484 htab_t la25_stubs;
485
486 /* A function FN (NAME, IS, OS) that creates a new input section
487 called NAME and links it to output section OS. If IS is nonnull,
488 the new section should go immediately before it, otherwise it
489 should go at the (current) beginning of OS.
490
491 The function returns the new section on success, otherwise it
492 returns null. */
493 asection *(*add_stub_section) (const char *, asection *, asection *);
494};
495
4dfe6ac6
NC
496/* Get the MIPS ELF linker hash table from a link_info structure. */
497
498#define mips_elf_hash_table(p) \
499 (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
500 == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
501
861fb55a 502/* A structure used to communicate with htab_traverse callbacks. */
4dfe6ac6
NC
503struct mips_htab_traverse_info
504{
861fb55a
DJ
505 /* The usual link-wide information. */
506 struct bfd_link_info *info;
507 bfd *output_bfd;
508
509 /* Starts off FALSE and is set to TRUE if the link should be aborted. */
510 bfd_boolean error;
b49e97c9
TS
511};
512
6ae68ba3
MR
513/* MIPS ELF private object data. */
514
515struct mips_elf_obj_tdata
516{
517 /* Generic ELF private object data. */
518 struct elf_obj_tdata root;
519
520 /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output. */
521 bfd *abi_fp_bfd;
522};
523
524/* Get MIPS ELF private object data from BFD's tdata. */
525
526#define mips_elf_tdata(bfd) \
527 ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
528
0f20cc35
DJ
529#define TLS_RELOC_P(r_type) \
530 (r_type == R_MIPS_TLS_DTPMOD32 \
531 || r_type == R_MIPS_TLS_DTPMOD64 \
532 || r_type == R_MIPS_TLS_DTPREL32 \
533 || r_type == R_MIPS_TLS_DTPREL64 \
534 || r_type == R_MIPS_TLS_GD \
535 || r_type == R_MIPS_TLS_LDM \
536 || r_type == R_MIPS_TLS_DTPREL_HI16 \
537 || r_type == R_MIPS_TLS_DTPREL_LO16 \
538 || r_type == R_MIPS_TLS_GOTTPREL \
539 || r_type == R_MIPS_TLS_TPREL32 \
540 || r_type == R_MIPS_TLS_TPREL64 \
541 || r_type == R_MIPS_TLS_TPREL_HI16 \
df58fc94 542 || r_type == R_MIPS_TLS_TPREL_LO16 \
d0f13682
CLT
543 || r_type == R_MIPS16_TLS_GD \
544 || r_type == R_MIPS16_TLS_LDM \
545 || r_type == R_MIPS16_TLS_DTPREL_HI16 \
546 || r_type == R_MIPS16_TLS_DTPREL_LO16 \
547 || r_type == R_MIPS16_TLS_GOTTPREL \
548 || r_type == R_MIPS16_TLS_TPREL_HI16 \
549 || r_type == R_MIPS16_TLS_TPREL_LO16 \
df58fc94
RS
550 || r_type == R_MICROMIPS_TLS_GD \
551 || r_type == R_MICROMIPS_TLS_LDM \
552 || r_type == R_MICROMIPS_TLS_DTPREL_HI16 \
553 || r_type == R_MICROMIPS_TLS_DTPREL_LO16 \
554 || r_type == R_MICROMIPS_TLS_GOTTPREL \
555 || r_type == R_MICROMIPS_TLS_TPREL_HI16 \
556 || r_type == R_MICROMIPS_TLS_TPREL_LO16)
0f20cc35 557
b49e97c9
TS
558/* Structure used to pass information to mips_elf_output_extsym. */
559
560struct extsym_info
561{
9e4aeb93
RS
562 bfd *abfd;
563 struct bfd_link_info *info;
b49e97c9
TS
564 struct ecoff_debug_info *debug;
565 const struct ecoff_debug_swap *swap;
b34976b6 566 bfd_boolean failed;
b49e97c9
TS
567};
568
8dc1a139 569/* The names of the runtime procedure table symbols used on IRIX5. */
b49e97c9
TS
570
571static const char * const mips_elf_dynsym_rtproc_names[] =
572{
573 "_procedure_table",
574 "_procedure_string_table",
575 "_procedure_table_size",
576 NULL
577};
578
579/* These structures are used to generate the .compact_rel section on
8dc1a139 580 IRIX5. */
b49e97c9
TS
581
582typedef struct
583{
584 unsigned long id1; /* Always one? */
585 unsigned long num; /* Number of compact relocation entries. */
586 unsigned long id2; /* Always two? */
587 unsigned long offset; /* The file offset of the first relocation. */
588 unsigned long reserved0; /* Zero? */
589 unsigned long reserved1; /* Zero? */
590} Elf32_compact_rel;
591
592typedef struct
593{
594 bfd_byte id1[4];
595 bfd_byte num[4];
596 bfd_byte id2[4];
597 bfd_byte offset[4];
598 bfd_byte reserved0[4];
599 bfd_byte reserved1[4];
600} Elf32_External_compact_rel;
601
602typedef struct
603{
604 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
605 unsigned int rtype : 4; /* Relocation types. See below. */
606 unsigned int dist2to : 8;
607 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
608 unsigned long konst; /* KONST field. See below. */
609 unsigned long vaddr; /* VADDR to be relocated. */
610} Elf32_crinfo;
611
612typedef struct
613{
614 unsigned int ctype : 1; /* 1: long 0: short format. See below. */
615 unsigned int rtype : 4; /* Relocation types. See below. */
616 unsigned int dist2to : 8;
617 unsigned int relvaddr : 19; /* (VADDR - vaddr of the previous entry)/ 4 */
618 unsigned long konst; /* KONST field. See below. */
619} Elf32_crinfo2;
620
621typedef struct
622{
623 bfd_byte info[4];
624 bfd_byte konst[4];
625 bfd_byte vaddr[4];
626} Elf32_External_crinfo;
627
628typedef struct
629{
630 bfd_byte info[4];
631 bfd_byte konst[4];
632} Elf32_External_crinfo2;
633
634/* These are the constants used to swap the bitfields in a crinfo. */
635
636#define CRINFO_CTYPE (0x1)
637#define CRINFO_CTYPE_SH (31)
638#define CRINFO_RTYPE (0xf)
639#define CRINFO_RTYPE_SH (27)
640#define CRINFO_DIST2TO (0xff)
641#define CRINFO_DIST2TO_SH (19)
642#define CRINFO_RELVADDR (0x7ffff)
643#define CRINFO_RELVADDR_SH (0)
644
645/* A compact relocation info has long (3 words) or short (2 words)
646 formats. A short format doesn't have VADDR field and relvaddr
647 fields contains ((VADDR - vaddr of the previous entry) >> 2). */
648#define CRF_MIPS_LONG 1
649#define CRF_MIPS_SHORT 0
650
651/* There are 4 types of compact relocation at least. The value KONST
652 has different meaning for each type:
653
654 (type) (konst)
655 CT_MIPS_REL32 Address in data
656 CT_MIPS_WORD Address in word (XXX)
657 CT_MIPS_GPHI_LO GP - vaddr
658 CT_MIPS_JMPAD Address to jump
659 */
660
661#define CRT_MIPS_REL32 0xa
662#define CRT_MIPS_WORD 0xb
663#define CRT_MIPS_GPHI_LO 0xc
664#define CRT_MIPS_JMPAD 0xd
665
666#define mips_elf_set_cr_format(x,format) ((x).ctype = (format))
667#define mips_elf_set_cr_type(x,type) ((x).rtype = (type))
668#define mips_elf_set_cr_dist2to(x,v) ((x).dist2to = (v))
669#define mips_elf_set_cr_relvaddr(x,d) ((x).relvaddr = (d)<<2)
670\f
671/* The structure of the runtime procedure descriptor created by the
672 loader for use by the static exception system. */
673
674typedef struct runtime_pdr {
ae9a127f
NC
675 bfd_vma adr; /* Memory address of start of procedure. */
676 long regmask; /* Save register mask. */
677 long regoffset; /* Save register offset. */
678 long fregmask; /* Save floating point register mask. */
679 long fregoffset; /* Save floating point register offset. */
680 long frameoffset; /* Frame size. */
681 short framereg; /* Frame pointer register. */
682 short pcreg; /* Offset or reg of return pc. */
683 long irpss; /* Index into the runtime string table. */
b49e97c9 684 long reserved;
ae9a127f 685 struct exception_info *exception_info;/* Pointer to exception array. */
b49e97c9
TS
686} RPDR, *pRPDR;
687#define cbRPDR sizeof (RPDR)
688#define rpdNil ((pRPDR) 0)
689\f
b15e6682 690static struct mips_got_entry *mips_elf_create_local_got_entry
a8028dd0
RS
691 (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
692 struct mips_elf_link_hash_entry *, int);
b34976b6 693static bfd_boolean mips_elf_sort_hash_table_f
9719ad41 694 (struct mips_elf_link_hash_entry *, void *);
9719ad41
RS
695static bfd_vma mips_elf_high
696 (bfd_vma);
b34976b6 697static bfd_boolean mips_elf_create_dynamic_relocation
9719ad41
RS
698 (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
699 struct mips_elf_link_hash_entry *, asection *, bfd_vma,
700 bfd_vma *, asection *);
9719ad41
RS
701static hashval_t mips_elf_got_entry_hash
702 (const void *);
f4416af6 703static bfd_vma mips_elf_adjust_gp
9719ad41 704 (bfd *, struct mips_got_info *, bfd *);
f4416af6 705static struct mips_got_info *mips_elf_got_for_ibfd
9719ad41 706 (struct mips_got_info *, bfd *);
f4416af6 707
b49e97c9
TS
708/* This will be used when we sort the dynamic relocation records. */
709static bfd *reldyn_sorting_bfd;
710
6d30f5b2
NC
711/* True if ABFD is for CPUs with load interlocking that include
712 non-MIPS1 CPUs and R3900. */
713#define LOAD_INTERLOCKS_P(abfd) \
714 ( ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
715 || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
716
cd8d5a82
CF
717/* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
718 This should be safe for all architectures. We enable this predicate
719 for RM9000 for now. */
720#define JAL_TO_BAL_P(abfd) \
721 ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
722
723/* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
724 This should be safe for all architectures. We enable this predicate for
725 all CPUs. */
726#define JALR_TO_BAL_P(abfd) 1
727
38a7df63
CF
728/* True if ABFD is for CPUs that are faster if JR is converted to B.
729 This should be safe for all architectures. We enable this predicate for
730 all CPUs. */
731#define JR_TO_B_P(abfd) 1
732
861fb55a
DJ
733/* True if ABFD is a PIC object. */
734#define PIC_OBJECT_P(abfd) \
735 ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
736
b49e97c9 737/* Nonzero if ABFD is using the N32 ABI. */
b49e97c9
TS
738#define ABI_N32_P(abfd) \
739 ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
740
4a14403c 741/* Nonzero if ABFD is using the N64 ABI. */
b49e97c9 742#define ABI_64_P(abfd) \
141ff970 743 (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
b49e97c9 744
4a14403c
TS
745/* Nonzero if ABFD is using NewABI conventions. */
746#define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
747
748/* The IRIX compatibility level we are striving for. */
b49e97c9
TS
749#define IRIX_COMPAT(abfd) \
750 (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
751
b49e97c9
TS
752/* Whether we are trying to be compatible with IRIX at all. */
753#define SGI_COMPAT(abfd) \
754 (IRIX_COMPAT (abfd) != ict_none)
755
756/* The name of the options section. */
757#define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
d80dcc6a 758 (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
b49e97c9 759
cc2e31b9
RS
760/* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
761 Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME. */
762#define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
763 (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
764
943284cc
DJ
765/* Whether the section is readonly. */
766#define MIPS_ELF_READONLY_SECTION(sec) \
767 ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY)) \
768 == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
769
b49e97c9 770/* The name of the stub section. */
ca07892d 771#define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
b49e97c9
TS
772
773/* The size of an external REL relocation. */
774#define MIPS_ELF_REL_SIZE(abfd) \
775 (get_elf_backend_data (abfd)->s->sizeof_rel)
776
0a44bf69
RS
777/* The size of an external RELA relocation. */
778#define MIPS_ELF_RELA_SIZE(abfd) \
779 (get_elf_backend_data (abfd)->s->sizeof_rela)
780
b49e97c9
TS
781/* The size of an external dynamic table entry. */
782#define MIPS_ELF_DYN_SIZE(abfd) \
783 (get_elf_backend_data (abfd)->s->sizeof_dyn)
784
785/* The size of a GOT entry. */
786#define MIPS_ELF_GOT_SIZE(abfd) \
787 (get_elf_backend_data (abfd)->s->arch_size / 8)
788
b4082c70
DD
789/* The size of the .rld_map section. */
790#define MIPS_ELF_RLD_MAP_SIZE(abfd) \
791 (get_elf_backend_data (abfd)->s->arch_size / 8)
792
b49e97c9
TS
793/* The size of a symbol-table entry. */
794#define MIPS_ELF_SYM_SIZE(abfd) \
795 (get_elf_backend_data (abfd)->s->sizeof_sym)
796
797/* The default alignment for sections, as a power of two. */
798#define MIPS_ELF_LOG_FILE_ALIGN(abfd) \
45d6a902 799 (get_elf_backend_data (abfd)->s->log_file_align)
b49e97c9
TS
800
801/* Get word-sized data. */
802#define MIPS_ELF_GET_WORD(abfd, ptr) \
803 (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
804
805/* Put out word-sized data. */
806#define MIPS_ELF_PUT_WORD(abfd, val, ptr) \
807 (ABI_64_P (abfd) \
808 ? bfd_put_64 (abfd, val, ptr) \
809 : bfd_put_32 (abfd, val, ptr))
810
861fb55a
DJ
811/* The opcode for word-sized loads (LW or LD). */
812#define MIPS_ELF_LOAD_WORD(abfd) \
813 (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
814
b49e97c9 815/* Add a dynamic symbol table-entry. */
9719ad41 816#define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val) \
5a580b3a 817 _bfd_elf_add_dynamic_entry (info, tag, val)
b49e97c9
TS
818
819#define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela) \
820 (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
821
0a44bf69
RS
822/* The name of the dynamic relocation section. */
823#define MIPS_ELF_REL_DYN_NAME(INFO) \
824 (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
825
b49e97c9
TS
826/* In case we're on a 32-bit machine, construct a 64-bit "-1" value
827 from smaller values. Start with zero, widen, *then* decrement. */
828#define MINUS_ONE (((bfd_vma)0) - 1)
c5ae1840 829#define MINUS_TWO (((bfd_vma)0) - 2)
b49e97c9 830
51e38d68
RS
831/* The value to write into got[1] for SVR4 targets, to identify it is
832 a GNU object. The dynamic linker can then use got[1] to store the
833 module pointer. */
834#define MIPS_ELF_GNU_GOT1_MASK(abfd) \
835 ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
836
f4416af6 837/* The offset of $gp from the beginning of the .got section. */
0a44bf69
RS
838#define ELF_MIPS_GP_OFFSET(INFO) \
839 (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
f4416af6
AO
840
841/* The maximum size of the GOT for it to be addressable using 16-bit
842 offsets from $gp. */
0a44bf69 843#define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
f4416af6 844
6a691779 845/* Instructions which appear in a stub. */
3d6746ca
DD
846#define STUB_LW(abfd) \
847 ((ABI_64_P (abfd) \
848 ? 0xdf998010 /* ld t9,0x8010(gp) */ \
849 : 0x8f998010)) /* lw t9,0x8010(gp) */
850#define STUB_MOVE(abfd) \
851 ((ABI_64_P (abfd) \
852 ? 0x03e0782d /* daddu t7,ra */ \
853 : 0x03e07821)) /* addu t7,ra */
854#define STUB_LUI(VAL) (0x3c180000 + (VAL)) /* lui t8,VAL */
855#define STUB_JALR 0x0320f809 /* jalr t9,ra */
5108fc1b
RS
856#define STUB_ORI(VAL) (0x37180000 + (VAL)) /* ori t8,t8,VAL */
857#define STUB_LI16U(VAL) (0x34180000 + (VAL)) /* ori t8,zero,VAL unsigned */
3d6746ca
DD
858#define STUB_LI16S(abfd, VAL) \
859 ((ABI_64_P (abfd) \
860 ? (0x64180000 + (VAL)) /* daddiu t8,zero,VAL sign extended */ \
861 : (0x24180000 + (VAL)))) /* addiu t8,zero,VAL sign extended */
862
5108fc1b
RS
863#define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
864#define MIPS_FUNCTION_STUB_BIG_SIZE 20
b49e97c9
TS
865
866/* The name of the dynamic interpreter. This is put in the .interp
867 section. */
868
869#define ELF_DYNAMIC_INTERPRETER(abfd) \
870 (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" \
871 : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" \
872 : "/usr/lib/libc.so.1")
873
874#ifdef BFD64
ee6423ed
AO
875#define MNAME(bfd,pre,pos) \
876 (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
b49e97c9
TS
877#define ELF_R_SYM(bfd, i) \
878 (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
879#define ELF_R_TYPE(bfd, i) \
880 (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
881#define ELF_R_INFO(bfd, s, t) \
882 (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
883#else
ee6423ed 884#define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
b49e97c9
TS
885#define ELF_R_SYM(bfd, i) \
886 (ELF32_R_SYM (i))
887#define ELF_R_TYPE(bfd, i) \
888 (ELF32_R_TYPE (i))
889#define ELF_R_INFO(bfd, s, t) \
890 (ELF32_R_INFO (s, t))
891#endif
892\f
893 /* The mips16 compiler uses a couple of special sections to handle
894 floating point arguments.
895
896 Section names that look like .mips16.fn.FNNAME contain stubs that
897 copy floating point arguments from the fp regs to the gp regs and
898 then jump to FNNAME. If any 32 bit function calls FNNAME, the
899 call should be redirected to the stub instead. If no 32 bit
900 function calls FNNAME, the stub should be discarded. We need to
901 consider any reference to the function, not just a call, because
902 if the address of the function is taken we will need the stub,
903 since the address might be passed to a 32 bit function.
904
905 Section names that look like .mips16.call.FNNAME contain stubs
906 that copy floating point arguments from the gp regs to the fp
907 regs and then jump to FNNAME. If FNNAME is a 32 bit function,
908 then any 16 bit function that calls FNNAME should be redirected
909 to the stub instead. If FNNAME is not a 32 bit function, the
910 stub should be discarded.
911
912 .mips16.call.fp.FNNAME sections are similar, but contain stubs
913 which call FNNAME and then copy the return value from the fp regs
914 to the gp regs. These stubs store the return value in $18 while
915 calling FNNAME; any function which might call one of these stubs
916 must arrange to save $18 around the call. (This case is not
917 needed for 32 bit functions that call 16 bit functions, because
918 16 bit functions always return floating point values in both
919 $f0/$f1 and $2/$3.)
920
921 Note that in all cases FNNAME might be defined statically.
922 Therefore, FNNAME is not used literally. Instead, the relocation
923 information will indicate which symbol the section is for.
924
925 We record any stubs that we find in the symbol table. */
926
927#define FN_STUB ".mips16.fn."
928#define CALL_STUB ".mips16.call."
929#define CALL_FP_STUB ".mips16.call.fp."
b9d58d71
TS
930
931#define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
932#define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
933#define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
b49e97c9 934\f
861fb55a 935/* The format of the first PLT entry in an O32 executable. */
6d30f5b2
NC
936static const bfd_vma mips_o32_exec_plt0_entry[] =
937{
861fb55a
DJ
938 0x3c1c0000, /* lui $28, %hi(&GOTPLT[0]) */
939 0x8f990000, /* lw $25, %lo(&GOTPLT[0])($28) */
940 0x279c0000, /* addiu $28, $28, %lo(&GOTPLT[0]) */
941 0x031cc023, /* subu $24, $24, $28 */
81f5d455 942 0x03e07821, /* move $15, $31 # 32-bit move (addu) */
861fb55a
DJ
943 0x0018c082, /* srl $24, $24, 2 */
944 0x0320f809, /* jalr $25 */
945 0x2718fffe /* subu $24, $24, 2 */
946};
947
948/* The format of the first PLT entry in an N32 executable. Different
949 because gp ($28) is not available; we use t2 ($14) instead. */
6d30f5b2
NC
950static const bfd_vma mips_n32_exec_plt0_entry[] =
951{
861fb55a
DJ
952 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
953 0x8dd90000, /* lw $25, %lo(&GOTPLT[0])($14) */
954 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
955 0x030ec023, /* subu $24, $24, $14 */
81f5d455 956 0x03e07821, /* move $15, $31 # 32-bit move (addu) */
861fb55a
DJ
957 0x0018c082, /* srl $24, $24, 2 */
958 0x0320f809, /* jalr $25 */
959 0x2718fffe /* subu $24, $24, 2 */
960};
961
962/* The format of the first PLT entry in an N64 executable. Different
963 from N32 because of the increased size of GOT entries. */
6d30f5b2
NC
964static const bfd_vma mips_n64_exec_plt0_entry[] =
965{
861fb55a
DJ
966 0x3c0e0000, /* lui $14, %hi(&GOTPLT[0]) */
967 0xddd90000, /* ld $25, %lo(&GOTPLT[0])($14) */
968 0x25ce0000, /* addiu $14, $14, %lo(&GOTPLT[0]) */
969 0x030ec023, /* subu $24, $24, $14 */
81f5d455 970 0x03e0782d, /* move $15, $31 # 64-bit move (daddu) */
861fb55a
DJ
971 0x0018c0c2, /* srl $24, $24, 3 */
972 0x0320f809, /* jalr $25 */
973 0x2718fffe /* subu $24, $24, 2 */
974};
975
976/* The format of subsequent PLT entries. */
6d30f5b2
NC
977static const bfd_vma mips_exec_plt_entry[] =
978{
861fb55a
DJ
979 0x3c0f0000, /* lui $15, %hi(.got.plt entry) */
980 0x01f90000, /* l[wd] $25, %lo(.got.plt entry)($15) */
981 0x25f80000, /* addiu $24, $15, %lo(.got.plt entry) */
982 0x03200008 /* jr $25 */
983};
984
0a44bf69 985/* The format of the first PLT entry in a VxWorks executable. */
6d30f5b2
NC
986static const bfd_vma mips_vxworks_exec_plt0_entry[] =
987{
0a44bf69
RS
988 0x3c190000, /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_) */
989 0x27390000, /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_) */
990 0x8f390008, /* lw t9, 8(t9) */
991 0x00000000, /* nop */
992 0x03200008, /* jr t9 */
993 0x00000000 /* nop */
994};
995
996/* The format of subsequent PLT entries. */
6d30f5b2
NC
997static const bfd_vma mips_vxworks_exec_plt_entry[] =
998{
0a44bf69
RS
999 0x10000000, /* b .PLT_resolver */
1000 0x24180000, /* li t8, <pltindex> */
1001 0x3c190000, /* lui t9, %hi(<.got.plt slot>) */
1002 0x27390000, /* addiu t9, t9, %lo(<.got.plt slot>) */
1003 0x8f390000, /* lw t9, 0(t9) */
1004 0x00000000, /* nop */
1005 0x03200008, /* jr t9 */
1006 0x00000000 /* nop */
1007};
1008
1009/* The format of the first PLT entry in a VxWorks shared object. */
6d30f5b2
NC
1010static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1011{
0a44bf69
RS
1012 0x8f990008, /* lw t9, 8(gp) */
1013 0x00000000, /* nop */
1014 0x03200008, /* jr t9 */
1015 0x00000000, /* nop */
1016 0x00000000, /* nop */
1017 0x00000000 /* nop */
1018};
1019
1020/* The format of subsequent PLT entries. */
6d30f5b2
NC
1021static const bfd_vma mips_vxworks_shared_plt_entry[] =
1022{
0a44bf69
RS
1023 0x10000000, /* b .PLT_resolver */
1024 0x24180000 /* li t8, <pltindex> */
1025};
1026\f
d21911ea
MR
1027/* microMIPS 32-bit opcode helper installer. */
1028
1029static void
1030bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1031{
1032 bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1033 bfd_put_16 (abfd, opcode & 0xffff, ptr + 2);
1034}
1035
1036/* microMIPS 32-bit opcode helper retriever. */
1037
1038static bfd_vma
1039bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1040{
1041 return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1042}
1043\f
b49e97c9
TS
1044/* Look up an entry in a MIPS ELF linker hash table. */
1045
1046#define mips_elf_link_hash_lookup(table, string, create, copy, follow) \
1047 ((struct mips_elf_link_hash_entry *) \
1048 elf_link_hash_lookup (&(table)->root, (string), (create), \
1049 (copy), (follow)))
1050
1051/* Traverse a MIPS ELF linker hash table. */
1052
1053#define mips_elf_link_hash_traverse(table, func, info) \
1054 (elf_link_hash_traverse \
1055 (&(table)->root, \
9719ad41 1056 (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func), \
b49e97c9
TS
1057 (info)))
1058
0f20cc35
DJ
1059/* Find the base offsets for thread-local storage in this object,
1060 for GD/LD and IE/LE respectively. */
1061
1062#define TP_OFFSET 0x7000
1063#define DTP_OFFSET 0x8000
1064
1065static bfd_vma
1066dtprel_base (struct bfd_link_info *info)
1067{
1068 /* If tls_sec is NULL, we should have signalled an error already. */
1069 if (elf_hash_table (info)->tls_sec == NULL)
1070 return 0;
1071 return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1072}
1073
1074static bfd_vma
1075tprel_base (struct bfd_link_info *info)
1076{
1077 /* If tls_sec is NULL, we should have signalled an error already. */
1078 if (elf_hash_table (info)->tls_sec == NULL)
1079 return 0;
1080 return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1081}
1082
b49e97c9
TS
1083/* Create an entry in a MIPS ELF linker hash table. */
1084
1085static struct bfd_hash_entry *
9719ad41
RS
1086mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1087 struct bfd_hash_table *table, const char *string)
b49e97c9
TS
1088{
1089 struct mips_elf_link_hash_entry *ret =
1090 (struct mips_elf_link_hash_entry *) entry;
1091
1092 /* Allocate the structure if it has not already been allocated by a
1093 subclass. */
9719ad41
RS
1094 if (ret == NULL)
1095 ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1096 if (ret == NULL)
b49e97c9
TS
1097 return (struct bfd_hash_entry *) ret;
1098
1099 /* Call the allocation method of the superclass. */
1100 ret = ((struct mips_elf_link_hash_entry *)
1101 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1102 table, string));
9719ad41 1103 if (ret != NULL)
b49e97c9
TS
1104 {
1105 /* Set local fields. */
1106 memset (&ret->esym, 0, sizeof (EXTR));
1107 /* We use -2 as a marker to indicate that the information has
1108 not been set. -1 means there is no associated ifd. */
1109 ret->esym.ifd = -2;
861fb55a 1110 ret->la25_stub = 0;
b49e97c9 1111 ret->possibly_dynamic_relocs = 0;
b49e97c9 1112 ret->fn_stub = NULL;
b49e97c9
TS
1113 ret->call_stub = NULL;
1114 ret->call_fp_stub = NULL;
71782a75 1115 ret->tls_type = GOT_NORMAL;
634835ae 1116 ret->global_got_area = GGA_NONE;
6ccf4795 1117 ret->got_only_for_calls = TRUE;
71782a75 1118 ret->readonly_reloc = FALSE;
861fb55a 1119 ret->has_static_relocs = FALSE;
71782a75
RS
1120 ret->no_fn_stub = FALSE;
1121 ret->need_fn_stub = FALSE;
861fb55a 1122 ret->has_nonpic_branches = FALSE;
33bb52fb 1123 ret->needs_lazy_stub = FALSE;
b49e97c9
TS
1124 }
1125
1126 return (struct bfd_hash_entry *) ret;
1127}
f0abc2a1 1128
6ae68ba3
MR
1129/* Allocate MIPS ELF private object data. */
1130
1131bfd_boolean
1132_bfd_mips_elf_mkobject (bfd *abfd)
1133{
1134 return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1135 MIPS_ELF_DATA);
1136}
1137
f0abc2a1 1138bfd_boolean
9719ad41 1139_bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
f0abc2a1 1140{
f592407e
AM
1141 if (!sec->used_by_bfd)
1142 {
1143 struct _mips_elf_section_data *sdata;
1144 bfd_size_type amt = sizeof (*sdata);
f0abc2a1 1145
f592407e
AM
1146 sdata = bfd_zalloc (abfd, amt);
1147 if (sdata == NULL)
1148 return FALSE;
1149 sec->used_by_bfd = sdata;
1150 }
f0abc2a1
AM
1151
1152 return _bfd_elf_new_section_hook (abfd, sec);
1153}
b49e97c9
TS
1154\f
1155/* Read ECOFF debugging information from a .mdebug section into a
1156 ecoff_debug_info structure. */
1157
b34976b6 1158bfd_boolean
9719ad41
RS
1159_bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1160 struct ecoff_debug_info *debug)
b49e97c9
TS
1161{
1162 HDRR *symhdr;
1163 const struct ecoff_debug_swap *swap;
9719ad41 1164 char *ext_hdr;
b49e97c9
TS
1165
1166 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1167 memset (debug, 0, sizeof (*debug));
1168
9719ad41 1169 ext_hdr = bfd_malloc (swap->external_hdr_size);
b49e97c9
TS
1170 if (ext_hdr == NULL && swap->external_hdr_size != 0)
1171 goto error_return;
1172
9719ad41 1173 if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
82e51918 1174 swap->external_hdr_size))
b49e97c9
TS
1175 goto error_return;
1176
1177 symhdr = &debug->symbolic_header;
1178 (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1179
1180 /* The symbolic header contains absolute file offsets and sizes to
1181 read. */
1182#define READ(ptr, offset, count, size, type) \
1183 if (symhdr->count == 0) \
1184 debug->ptr = NULL; \
1185 else \
1186 { \
1187 bfd_size_type amt = (bfd_size_type) size * symhdr->count; \
9719ad41 1188 debug->ptr = bfd_malloc (amt); \
b49e97c9
TS
1189 if (debug->ptr == NULL) \
1190 goto error_return; \
9719ad41 1191 if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0 \
b49e97c9
TS
1192 || bfd_bread (debug->ptr, amt, abfd) != amt) \
1193 goto error_return; \
1194 }
1195
1196 READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
9719ad41
RS
1197 READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1198 READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1199 READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1200 READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
b49e97c9
TS
1201 READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1202 union aux_ext *);
1203 READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1204 READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
9719ad41
RS
1205 READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1206 READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1207 READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
b49e97c9
TS
1208#undef READ
1209
1210 debug->fdr = NULL;
b49e97c9 1211
b34976b6 1212 return TRUE;
b49e97c9
TS
1213
1214 error_return:
1215 if (ext_hdr != NULL)
1216 free (ext_hdr);
1217 if (debug->line != NULL)
1218 free (debug->line);
1219 if (debug->external_dnr != NULL)
1220 free (debug->external_dnr);
1221 if (debug->external_pdr != NULL)
1222 free (debug->external_pdr);
1223 if (debug->external_sym != NULL)
1224 free (debug->external_sym);
1225 if (debug->external_opt != NULL)
1226 free (debug->external_opt);
1227 if (debug->external_aux != NULL)
1228 free (debug->external_aux);
1229 if (debug->ss != NULL)
1230 free (debug->ss);
1231 if (debug->ssext != NULL)
1232 free (debug->ssext);
1233 if (debug->external_fdr != NULL)
1234 free (debug->external_fdr);
1235 if (debug->external_rfd != NULL)
1236 free (debug->external_rfd);
1237 if (debug->external_ext != NULL)
1238 free (debug->external_ext);
b34976b6 1239 return FALSE;
b49e97c9
TS
1240}
1241\f
1242/* Swap RPDR (runtime procedure table entry) for output. */
1243
1244static void
9719ad41 1245ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
b49e97c9
TS
1246{
1247 H_PUT_S32 (abfd, in->adr, ex->p_adr);
1248 H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1249 H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1250 H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1251 H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1252 H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1253
1254 H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1255 H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1256
1257 H_PUT_32 (abfd, in->irpss, ex->p_irpss);
b49e97c9
TS
1258}
1259
1260/* Create a runtime procedure table from the .mdebug section. */
1261
b34976b6 1262static bfd_boolean
9719ad41
RS
1263mips_elf_create_procedure_table (void *handle, bfd *abfd,
1264 struct bfd_link_info *info, asection *s,
1265 struct ecoff_debug_info *debug)
b49e97c9
TS
1266{
1267 const struct ecoff_debug_swap *swap;
1268 HDRR *hdr = &debug->symbolic_header;
1269 RPDR *rpdr, *rp;
1270 struct rpdr_ext *erp;
9719ad41 1271 void *rtproc;
b49e97c9
TS
1272 struct pdr_ext *epdr;
1273 struct sym_ext *esym;
1274 char *ss, **sv;
1275 char *str;
1276 bfd_size_type size;
1277 bfd_size_type count;
1278 unsigned long sindex;
1279 unsigned long i;
1280 PDR pdr;
1281 SYMR sym;
1282 const char *no_name_func = _("static procedure (no name)");
1283
1284 epdr = NULL;
1285 rpdr = NULL;
1286 esym = NULL;
1287 ss = NULL;
1288 sv = NULL;
1289
1290 swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1291
1292 sindex = strlen (no_name_func) + 1;
1293 count = hdr->ipdMax;
1294 if (count > 0)
1295 {
1296 size = swap->external_pdr_size;
1297
9719ad41 1298 epdr = bfd_malloc (size * count);
b49e97c9
TS
1299 if (epdr == NULL)
1300 goto error_return;
1301
9719ad41 1302 if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
b49e97c9
TS
1303 goto error_return;
1304
1305 size = sizeof (RPDR);
9719ad41 1306 rp = rpdr = bfd_malloc (size * count);
b49e97c9
TS
1307 if (rpdr == NULL)
1308 goto error_return;
1309
1310 size = sizeof (char *);
9719ad41 1311 sv = bfd_malloc (size * count);
b49e97c9
TS
1312 if (sv == NULL)
1313 goto error_return;
1314
1315 count = hdr->isymMax;
1316 size = swap->external_sym_size;
9719ad41 1317 esym = bfd_malloc (size * count);
b49e97c9
TS
1318 if (esym == NULL)
1319 goto error_return;
1320
9719ad41 1321 if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
b49e97c9
TS
1322 goto error_return;
1323
1324 count = hdr->issMax;
9719ad41 1325 ss = bfd_malloc (count);
b49e97c9
TS
1326 if (ss == NULL)
1327 goto error_return;
f075ee0c 1328 if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
b49e97c9
TS
1329 goto error_return;
1330
1331 count = hdr->ipdMax;
1332 for (i = 0; i < (unsigned long) count; i++, rp++)
1333 {
9719ad41
RS
1334 (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1335 (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
b49e97c9
TS
1336 rp->adr = sym.value;
1337 rp->regmask = pdr.regmask;
1338 rp->regoffset = pdr.regoffset;
1339 rp->fregmask = pdr.fregmask;
1340 rp->fregoffset = pdr.fregoffset;
1341 rp->frameoffset = pdr.frameoffset;
1342 rp->framereg = pdr.framereg;
1343 rp->pcreg = pdr.pcreg;
1344 rp->irpss = sindex;
1345 sv[i] = ss + sym.iss;
1346 sindex += strlen (sv[i]) + 1;
1347 }
1348 }
1349
1350 size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1351 size = BFD_ALIGN (size, 16);
9719ad41 1352 rtproc = bfd_alloc (abfd, size);
b49e97c9
TS
1353 if (rtproc == NULL)
1354 {
1355 mips_elf_hash_table (info)->procedure_count = 0;
1356 goto error_return;
1357 }
1358
1359 mips_elf_hash_table (info)->procedure_count = count + 2;
1360
9719ad41 1361 erp = rtproc;
b49e97c9
TS
1362 memset (erp, 0, sizeof (struct rpdr_ext));
1363 erp++;
1364 str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1365 strcpy (str, no_name_func);
1366 str += strlen (no_name_func) + 1;
1367 for (i = 0; i < count; i++)
1368 {
1369 ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1370 strcpy (str, sv[i]);
1371 str += strlen (sv[i]) + 1;
1372 }
1373 H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1374
1375 /* Set the size and contents of .rtproc section. */
eea6121a 1376 s->size = size;
9719ad41 1377 s->contents = rtproc;
b49e97c9
TS
1378
1379 /* Skip this section later on (I don't think this currently
1380 matters, but someday it might). */
8423293d 1381 s->map_head.link_order = NULL;
b49e97c9
TS
1382
1383 if (epdr != NULL)
1384 free (epdr);
1385 if (rpdr != NULL)
1386 free (rpdr);
1387 if (esym != NULL)
1388 free (esym);
1389 if (ss != NULL)
1390 free (ss);
1391 if (sv != NULL)
1392 free (sv);
1393
b34976b6 1394 return TRUE;
b49e97c9
TS
1395
1396 error_return:
1397 if (epdr != NULL)
1398 free (epdr);
1399 if (rpdr != NULL)
1400 free (rpdr);
1401 if (esym != NULL)
1402 free (esym);
1403 if (ss != NULL)
1404 free (ss);
1405 if (sv != NULL)
1406 free (sv);
b34976b6 1407 return FALSE;
b49e97c9 1408}
738e5348 1409\f
861fb55a
DJ
1410/* We're going to create a stub for H. Create a symbol for the stub's
1411 value and size, to help make the disassembly easier to read. */
1412
1413static bfd_boolean
1414mips_elf_create_stub_symbol (struct bfd_link_info *info,
1415 struct mips_elf_link_hash_entry *h,
1416 const char *prefix, asection *s, bfd_vma value,
1417 bfd_vma size)
1418{
1419 struct bfd_link_hash_entry *bh;
1420 struct elf_link_hash_entry *elfh;
1421 const char *name;
1422
df58fc94
RS
1423 if (ELF_ST_IS_MICROMIPS (h->root.other))
1424 value |= 1;
1425
861fb55a
DJ
1426 /* Create a new symbol. */
1427 name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1428 bh = NULL;
1429 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1430 BSF_LOCAL, s, value, NULL,
1431 TRUE, FALSE, &bh))
1432 return FALSE;
1433
1434 /* Make it a local function. */
1435 elfh = (struct elf_link_hash_entry *) bh;
1436 elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1437 elfh->size = size;
1438 elfh->forced_local = 1;
1439 return TRUE;
1440}
1441
738e5348
RS
1442/* We're about to redefine H. Create a symbol to represent H's
1443 current value and size, to help make the disassembly easier
1444 to read. */
1445
1446static bfd_boolean
1447mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1448 struct mips_elf_link_hash_entry *h,
1449 const char *prefix)
1450{
1451 struct bfd_link_hash_entry *bh;
1452 struct elf_link_hash_entry *elfh;
1453 const char *name;
1454 asection *s;
1455 bfd_vma value;
1456
1457 /* Read the symbol's value. */
1458 BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1459 || h->root.root.type == bfd_link_hash_defweak);
1460 s = h->root.root.u.def.section;
1461 value = h->root.root.u.def.value;
1462
1463 /* Create a new symbol. */
1464 name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1465 bh = NULL;
1466 if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1467 BSF_LOCAL, s, value, NULL,
1468 TRUE, FALSE, &bh))
1469 return FALSE;
1470
1471 /* Make it local and copy the other attributes from H. */
1472 elfh = (struct elf_link_hash_entry *) bh;
1473 elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1474 elfh->other = h->root.other;
1475 elfh->size = h->root.size;
1476 elfh->forced_local = 1;
1477 return TRUE;
1478}
1479
1480/* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1481 function rather than to a hard-float stub. */
1482
1483static bfd_boolean
1484section_allows_mips16_refs_p (asection *section)
1485{
1486 const char *name;
1487
1488 name = bfd_get_section_name (section->owner, section);
1489 return (FN_STUB_P (name)
1490 || CALL_STUB_P (name)
1491 || CALL_FP_STUB_P (name)
1492 || strcmp (name, ".pdr") == 0);
1493}
1494
1495/* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1496 stub section of some kind. Return the R_SYMNDX of the target
1497 function, or 0 if we can't decide which function that is. */
1498
1499static unsigned long
cb4437b8
MR
1500mips16_stub_symndx (const struct elf_backend_data *bed,
1501 asection *sec ATTRIBUTE_UNUSED,
502e814e 1502 const Elf_Internal_Rela *relocs,
738e5348
RS
1503 const Elf_Internal_Rela *relend)
1504{
cb4437b8 1505 int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
738e5348
RS
1506 const Elf_Internal_Rela *rel;
1507
cb4437b8
MR
1508 /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1509 one in a compound relocation. */
1510 for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
738e5348
RS
1511 if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1512 return ELF_R_SYM (sec->owner, rel->r_info);
1513
1514 /* Otherwise trust the first relocation, whatever its kind. This is
1515 the traditional behavior. */
1516 if (relocs < relend)
1517 return ELF_R_SYM (sec->owner, relocs->r_info);
1518
1519 return 0;
1520}
b49e97c9
TS
1521
1522/* Check the mips16 stubs for a particular symbol, and see if we can
1523 discard them. */
1524
861fb55a
DJ
1525static void
1526mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1527 struct mips_elf_link_hash_entry *h)
b49e97c9 1528{
738e5348
RS
1529 /* Dynamic symbols must use the standard call interface, in case other
1530 objects try to call them. */
1531 if (h->fn_stub != NULL
1532 && h->root.dynindx != -1)
1533 {
1534 mips_elf_create_shadow_symbol (info, h, ".mips16.");
1535 h->need_fn_stub = TRUE;
1536 }
1537
b49e97c9
TS
1538 if (h->fn_stub != NULL
1539 && ! h->need_fn_stub)
1540 {
1541 /* We don't need the fn_stub; the only references to this symbol
1542 are 16 bit calls. Clobber the size to 0 to prevent it from
1543 being included in the link. */
eea6121a 1544 h->fn_stub->size = 0;
b49e97c9
TS
1545 h->fn_stub->flags &= ~SEC_RELOC;
1546 h->fn_stub->reloc_count = 0;
1547 h->fn_stub->flags |= SEC_EXCLUDE;
1548 }
1549
1550 if (h->call_stub != NULL
30c09090 1551 && ELF_ST_IS_MIPS16 (h->root.other))
b49e97c9
TS
1552 {
1553 /* We don't need the call_stub; this is a 16 bit function, so
1554 calls from other 16 bit functions are OK. Clobber the size
1555 to 0 to prevent it from being included in the link. */
eea6121a 1556 h->call_stub->size = 0;
b49e97c9
TS
1557 h->call_stub->flags &= ~SEC_RELOC;
1558 h->call_stub->reloc_count = 0;
1559 h->call_stub->flags |= SEC_EXCLUDE;
1560 }
1561
1562 if (h->call_fp_stub != NULL
30c09090 1563 && ELF_ST_IS_MIPS16 (h->root.other))
b49e97c9
TS
1564 {
1565 /* We don't need the call_stub; this is a 16 bit function, so
1566 calls from other 16 bit functions are OK. Clobber the size
1567 to 0 to prevent it from being included in the link. */
eea6121a 1568 h->call_fp_stub->size = 0;
b49e97c9
TS
1569 h->call_fp_stub->flags &= ~SEC_RELOC;
1570 h->call_fp_stub->reloc_count = 0;
1571 h->call_fp_stub->flags |= SEC_EXCLUDE;
1572 }
861fb55a
DJ
1573}
1574
1575/* Hashtable callbacks for mips_elf_la25_stubs. */
1576
1577static hashval_t
1578mips_elf_la25_stub_hash (const void *entry_)
1579{
1580 const struct mips_elf_la25_stub *entry;
1581
1582 entry = (struct mips_elf_la25_stub *) entry_;
1583 return entry->h->root.root.u.def.section->id
1584 + entry->h->root.root.u.def.value;
1585}
1586
1587static int
1588mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1589{
1590 const struct mips_elf_la25_stub *entry1, *entry2;
1591
1592 entry1 = (struct mips_elf_la25_stub *) entry1_;
1593 entry2 = (struct mips_elf_la25_stub *) entry2_;
1594 return ((entry1->h->root.root.u.def.section
1595 == entry2->h->root.root.u.def.section)
1596 && (entry1->h->root.root.u.def.value
1597 == entry2->h->root.root.u.def.value));
1598}
1599
1600/* Called by the linker to set up the la25 stub-creation code. FN is
1601 the linker's implementation of add_stub_function. Return true on
1602 success. */
1603
1604bfd_boolean
1605_bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1606 asection *(*fn) (const char *, asection *,
1607 asection *))
1608{
1609 struct mips_elf_link_hash_table *htab;
1610
1611 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1612 if (htab == NULL)
1613 return FALSE;
1614
861fb55a
DJ
1615 htab->add_stub_section = fn;
1616 htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1617 mips_elf_la25_stub_eq, NULL);
1618 if (htab->la25_stubs == NULL)
1619 return FALSE;
1620
1621 return TRUE;
1622}
1623
1624/* Return true if H is a locally-defined PIC function, in the sense
8f0c309a
CLT
1625 that it or its fn_stub might need $25 to be valid on entry.
1626 Note that MIPS16 functions set up $gp using PC-relative instructions,
1627 so they themselves never need $25 to be valid. Only non-MIPS16
1628 entry points are of interest here. */
861fb55a
DJ
1629
1630static bfd_boolean
1631mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1632{
1633 return ((h->root.root.type == bfd_link_hash_defined
1634 || h->root.root.type == bfd_link_hash_defweak)
1635 && h->root.def_regular
1636 && !bfd_is_abs_section (h->root.root.u.def.section)
8f0c309a
CLT
1637 && (!ELF_ST_IS_MIPS16 (h->root.other)
1638 || (h->fn_stub && h->need_fn_stub))
861fb55a
DJ
1639 && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1640 || ELF_ST_IS_MIPS_PIC (h->root.other)));
1641}
1642
8f0c309a
CLT
1643/* Set *SEC to the input section that contains the target of STUB.
1644 Return the offset of the target from the start of that section. */
1645
1646static bfd_vma
1647mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1648 asection **sec)
1649{
1650 if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1651 {
1652 BFD_ASSERT (stub->h->need_fn_stub);
1653 *sec = stub->h->fn_stub;
1654 return 0;
1655 }
1656 else
1657 {
1658 *sec = stub->h->root.root.u.def.section;
1659 return stub->h->root.root.u.def.value;
1660 }
1661}
1662
861fb55a
DJ
1663/* STUB describes an la25 stub that we have decided to implement
1664 by inserting an LUI/ADDIU pair before the target function.
1665 Create the section and redirect the function symbol to it. */
1666
1667static bfd_boolean
1668mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1669 struct bfd_link_info *info)
1670{
1671 struct mips_elf_link_hash_table *htab;
1672 char *name;
1673 asection *s, *input_section;
1674 unsigned int align;
1675
1676 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1677 if (htab == NULL)
1678 return FALSE;
861fb55a
DJ
1679
1680 /* Create a unique name for the new section. */
1681 name = bfd_malloc (11 + sizeof (".text.stub."));
1682 if (name == NULL)
1683 return FALSE;
1684 sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1685
1686 /* Create the section. */
8f0c309a 1687 mips_elf_get_la25_target (stub, &input_section);
861fb55a
DJ
1688 s = htab->add_stub_section (name, input_section,
1689 input_section->output_section);
1690 if (s == NULL)
1691 return FALSE;
1692
1693 /* Make sure that any padding goes before the stub. */
1694 align = input_section->alignment_power;
1695 if (!bfd_set_section_alignment (s->owner, s, align))
1696 return FALSE;
1697 if (align > 3)
1698 s->size = (1 << align) - 8;
1699
1700 /* Create a symbol for the stub. */
1701 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1702 stub->stub_section = s;
1703 stub->offset = s->size;
1704
1705 /* Allocate room for it. */
1706 s->size += 8;
1707 return TRUE;
1708}
1709
1710/* STUB describes an la25 stub that we have decided to implement
1711 with a separate trampoline. Allocate room for it and redirect
1712 the function symbol to it. */
1713
1714static bfd_boolean
1715mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1716 struct bfd_link_info *info)
1717{
1718 struct mips_elf_link_hash_table *htab;
1719 asection *s;
1720
1721 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1722 if (htab == NULL)
1723 return FALSE;
861fb55a
DJ
1724
1725 /* Create a trampoline section, if we haven't already. */
1726 s = htab->strampoline;
1727 if (s == NULL)
1728 {
1729 asection *input_section = stub->h->root.root.u.def.section;
1730 s = htab->add_stub_section (".text", NULL,
1731 input_section->output_section);
1732 if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1733 return FALSE;
1734 htab->strampoline = s;
1735 }
1736
1737 /* Create a symbol for the stub. */
1738 mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1739 stub->stub_section = s;
1740 stub->offset = s->size;
1741
1742 /* Allocate room for it. */
1743 s->size += 16;
1744 return TRUE;
1745}
1746
1747/* H describes a symbol that needs an la25 stub. Make sure that an
1748 appropriate stub exists and point H at it. */
1749
1750static bfd_boolean
1751mips_elf_add_la25_stub (struct bfd_link_info *info,
1752 struct mips_elf_link_hash_entry *h)
1753{
1754 struct mips_elf_link_hash_table *htab;
1755 struct mips_elf_la25_stub search, *stub;
1756 bfd_boolean use_trampoline_p;
1757 asection *s;
1758 bfd_vma value;
1759 void **slot;
1760
861fb55a
DJ
1761 /* Describe the stub we want. */
1762 search.stub_section = NULL;
1763 search.offset = 0;
1764 search.h = h;
1765
1766 /* See if we've already created an equivalent stub. */
1767 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
1768 if (htab == NULL)
1769 return FALSE;
1770
861fb55a
DJ
1771 slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1772 if (slot == NULL)
1773 return FALSE;
1774
1775 stub = (struct mips_elf_la25_stub *) *slot;
1776 if (stub != NULL)
1777 {
1778 /* We can reuse the existing stub. */
1779 h->la25_stub = stub;
1780 return TRUE;
1781 }
1782
1783 /* Create a permanent copy of ENTRY and add it to the hash table. */
1784 stub = bfd_malloc (sizeof (search));
1785 if (stub == NULL)
1786 return FALSE;
1787 *stub = search;
1788 *slot = stub;
1789
8f0c309a
CLT
1790 /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1791 of the section and if we would need no more than 2 nops. */
1792 value = mips_elf_get_la25_target (stub, &s);
1793 use_trampoline_p = (value != 0 || s->alignment_power > 4);
1794
861fb55a
DJ
1795 h->la25_stub = stub;
1796 return (use_trampoline_p
1797 ? mips_elf_add_la25_trampoline (stub, info)
1798 : mips_elf_add_la25_intro (stub, info));
1799}
1800
1801/* A mips_elf_link_hash_traverse callback that is called before sizing
1802 sections. DATA points to a mips_htab_traverse_info structure. */
1803
1804static bfd_boolean
1805mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1806{
1807 struct mips_htab_traverse_info *hti;
1808
1809 hti = (struct mips_htab_traverse_info *) data;
861fb55a
DJ
1810 if (!hti->info->relocatable)
1811 mips_elf_check_mips16_stubs (hti->info, h);
b49e97c9 1812
861fb55a
DJ
1813 if (mips_elf_local_pic_function_p (h))
1814 {
ba85c43e
NC
1815 /* PR 12845: If H is in a section that has been garbage
1816 collected it will have its output section set to *ABS*. */
1817 if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1818 return TRUE;
1819
861fb55a
DJ
1820 /* H is a function that might need $25 to be valid on entry.
1821 If we're creating a non-PIC relocatable object, mark H as
1822 being PIC. If we're creating a non-relocatable object with
1823 non-PIC branches and jumps to H, make sure that H has an la25
1824 stub. */
1825 if (hti->info->relocatable)
1826 {
1827 if (!PIC_OBJECT_P (hti->output_bfd))
1828 h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1829 }
1830 else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1831 {
1832 hti->error = TRUE;
1833 return FALSE;
1834 }
1835 }
b34976b6 1836 return TRUE;
b49e97c9
TS
1837}
1838\f
d6f16593
MR
1839/* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
1840 Most mips16 instructions are 16 bits, but these instructions
1841 are 32 bits.
1842
1843 The format of these instructions is:
1844
1845 +--------------+--------------------------------+
1846 | JALX | X| Imm 20:16 | Imm 25:21 |
1847 +--------------+--------------------------------+
1848 | Immediate 15:0 |
1849 +-----------------------------------------------+
1850
1851 JALX is the 5-bit value 00011. X is 0 for jal, 1 for jalx.
1852 Note that the immediate value in the first word is swapped.
1853
1854 When producing a relocatable object file, R_MIPS16_26 is
1855 handled mostly like R_MIPS_26. In particular, the addend is
1856 stored as a straight 26-bit value in a 32-bit instruction.
1857 (gas makes life simpler for itself by never adjusting a
1858 R_MIPS16_26 reloc to be against a section, so the addend is
1859 always zero). However, the 32 bit instruction is stored as 2
1860 16-bit values, rather than a single 32-bit value. In a
1861 big-endian file, the result is the same; in a little-endian
1862 file, the two 16-bit halves of the 32 bit value are swapped.
1863 This is so that a disassembler can recognize the jal
1864 instruction.
1865
1866 When doing a final link, R_MIPS16_26 is treated as a 32 bit
1867 instruction stored as two 16-bit values. The addend A is the
1868 contents of the targ26 field. The calculation is the same as
1869 R_MIPS_26. When storing the calculated value, reorder the
1870 immediate value as shown above, and don't forget to store the
1871 value as two 16-bit values.
1872
1873 To put it in MIPS ABI terms, the relocation field is T-targ26-16,
1874 defined as
1875
1876 big-endian:
1877 +--------+----------------------+
1878 | | |
1879 | | targ26-16 |
1880 |31 26|25 0|
1881 +--------+----------------------+
1882
1883 little-endian:
1884 +----------+------+-------------+
1885 | | | |
1886 | sub1 | | sub2 |
1887 |0 9|10 15|16 31|
1888 +----------+--------------------+
1889 where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
1890 ((sub1 << 16) | sub2)).
1891
1892 When producing a relocatable object file, the calculation is
1893 (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1894 When producing a fully linked file, the calculation is
1895 let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
1896 ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
1897
738e5348
RS
1898 The table below lists the other MIPS16 instruction relocations.
1899 Each one is calculated in the same way as the non-MIPS16 relocation
1900 given on the right, but using the extended MIPS16 layout of 16-bit
1901 immediate fields:
1902
1903 R_MIPS16_GPREL R_MIPS_GPREL16
1904 R_MIPS16_GOT16 R_MIPS_GOT16
1905 R_MIPS16_CALL16 R_MIPS_CALL16
1906 R_MIPS16_HI16 R_MIPS_HI16
1907 R_MIPS16_LO16 R_MIPS_LO16
1908
1909 A typical instruction will have a format like this:
d6f16593
MR
1910
1911 +--------------+--------------------------------+
1912 | EXTEND | Imm 10:5 | Imm 15:11 |
1913 +--------------+--------------------------------+
1914 | Major | rx | ry | Imm 4:0 |
1915 +--------------+--------------------------------+
1916
1917 EXTEND is the five bit value 11110. Major is the instruction
1918 opcode.
1919
738e5348
RS
1920 All we need to do here is shuffle the bits appropriately.
1921 As above, the two 16-bit halves must be swapped on a
1922 little-endian system. */
1923
1924static inline bfd_boolean
1925mips16_reloc_p (int r_type)
1926{
1927 switch (r_type)
1928 {
1929 case R_MIPS16_26:
1930 case R_MIPS16_GPREL:
1931 case R_MIPS16_GOT16:
1932 case R_MIPS16_CALL16:
1933 case R_MIPS16_HI16:
1934 case R_MIPS16_LO16:
d0f13682
CLT
1935 case R_MIPS16_TLS_GD:
1936 case R_MIPS16_TLS_LDM:
1937 case R_MIPS16_TLS_DTPREL_HI16:
1938 case R_MIPS16_TLS_DTPREL_LO16:
1939 case R_MIPS16_TLS_GOTTPREL:
1940 case R_MIPS16_TLS_TPREL_HI16:
1941 case R_MIPS16_TLS_TPREL_LO16:
738e5348
RS
1942 return TRUE;
1943
1944 default:
1945 return FALSE;
1946 }
1947}
1948
df58fc94
RS
1949/* Check if a microMIPS reloc. */
1950
1951static inline bfd_boolean
1952micromips_reloc_p (unsigned int r_type)
1953{
1954 return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
1955}
1956
1957/* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
1958 on a little-endian system. This does not apply to R_MICROMIPS_PC7_S1
1959 and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions. */
1960
1961static inline bfd_boolean
1962micromips_reloc_shuffle_p (unsigned int r_type)
1963{
1964 return (micromips_reloc_p (r_type)
1965 && r_type != R_MICROMIPS_PC7_S1
1966 && r_type != R_MICROMIPS_PC10_S1);
1967}
1968
738e5348
RS
1969static inline bfd_boolean
1970got16_reloc_p (int r_type)
1971{
df58fc94
RS
1972 return (r_type == R_MIPS_GOT16
1973 || r_type == R_MIPS16_GOT16
1974 || r_type == R_MICROMIPS_GOT16);
738e5348
RS
1975}
1976
1977static inline bfd_boolean
1978call16_reloc_p (int r_type)
1979{
df58fc94
RS
1980 return (r_type == R_MIPS_CALL16
1981 || r_type == R_MIPS16_CALL16
1982 || r_type == R_MICROMIPS_CALL16);
1983}
1984
1985static inline bfd_boolean
1986got_disp_reloc_p (unsigned int r_type)
1987{
1988 return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
1989}
1990
1991static inline bfd_boolean
1992got_page_reloc_p (unsigned int r_type)
1993{
1994 return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
1995}
1996
1997static inline bfd_boolean
1998got_ofst_reloc_p (unsigned int r_type)
1999{
2000 return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2001}
2002
2003static inline bfd_boolean
2004got_hi16_reloc_p (unsigned int r_type)
2005{
2006 return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2007}
2008
2009static inline bfd_boolean
2010got_lo16_reloc_p (unsigned int r_type)
2011{
2012 return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2013}
2014
2015static inline bfd_boolean
2016call_hi16_reloc_p (unsigned int r_type)
2017{
2018 return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2019}
2020
2021static inline bfd_boolean
2022call_lo16_reloc_p (unsigned int r_type)
2023{
2024 return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
738e5348
RS
2025}
2026
2027static inline bfd_boolean
2028hi16_reloc_p (int r_type)
2029{
df58fc94
RS
2030 return (r_type == R_MIPS_HI16
2031 || r_type == R_MIPS16_HI16
2032 || r_type == R_MICROMIPS_HI16);
738e5348 2033}
d6f16593 2034
738e5348
RS
2035static inline bfd_boolean
2036lo16_reloc_p (int r_type)
2037{
df58fc94
RS
2038 return (r_type == R_MIPS_LO16
2039 || r_type == R_MIPS16_LO16
2040 || r_type == R_MICROMIPS_LO16);
738e5348
RS
2041}
2042
2043static inline bfd_boolean
2044mips16_call_reloc_p (int r_type)
2045{
2046 return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2047}
d6f16593 2048
38a7df63
CF
2049static inline bfd_boolean
2050jal_reloc_p (int r_type)
2051{
df58fc94
RS
2052 return (r_type == R_MIPS_26
2053 || r_type == R_MIPS16_26
2054 || r_type == R_MICROMIPS_26_S1);
2055}
2056
2057static inline bfd_boolean
2058micromips_branch_reloc_p (int r_type)
2059{
2060 return (r_type == R_MICROMIPS_26_S1
2061 || r_type == R_MICROMIPS_PC16_S1
2062 || r_type == R_MICROMIPS_PC10_S1
2063 || r_type == R_MICROMIPS_PC7_S1);
2064}
2065
2066static inline bfd_boolean
2067tls_gd_reloc_p (unsigned int r_type)
2068{
d0f13682
CLT
2069 return (r_type == R_MIPS_TLS_GD
2070 || r_type == R_MIPS16_TLS_GD
2071 || r_type == R_MICROMIPS_TLS_GD);
df58fc94
RS
2072}
2073
2074static inline bfd_boolean
2075tls_ldm_reloc_p (unsigned int r_type)
2076{
d0f13682
CLT
2077 return (r_type == R_MIPS_TLS_LDM
2078 || r_type == R_MIPS16_TLS_LDM
2079 || r_type == R_MICROMIPS_TLS_LDM);
df58fc94
RS
2080}
2081
2082static inline bfd_boolean
2083tls_gottprel_reloc_p (unsigned int r_type)
2084{
d0f13682
CLT
2085 return (r_type == R_MIPS_TLS_GOTTPREL
2086 || r_type == R_MIPS16_TLS_GOTTPREL
2087 || r_type == R_MICROMIPS_TLS_GOTTPREL);
38a7df63
CF
2088}
2089
d6f16593 2090void
df58fc94
RS
2091_bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2092 bfd_boolean jal_shuffle, bfd_byte *data)
d6f16593 2093{
df58fc94 2094 bfd_vma first, second, val;
d6f16593 2095
df58fc94 2096 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
d6f16593
MR
2097 return;
2098
df58fc94
RS
2099 /* Pick up the first and second halfwords of the instruction. */
2100 first = bfd_get_16 (abfd, data);
2101 second = bfd_get_16 (abfd, data + 2);
2102 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2103 val = first << 16 | second;
2104 else if (r_type != R_MIPS16_26)
2105 val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2106 | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
d6f16593 2107 else
df58fc94
RS
2108 val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2109 | ((first & 0x1f) << 21) | second);
d6f16593
MR
2110 bfd_put_32 (abfd, val, data);
2111}
2112
2113void
df58fc94
RS
2114_bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2115 bfd_boolean jal_shuffle, bfd_byte *data)
d6f16593 2116{
df58fc94 2117 bfd_vma first, second, val;
d6f16593 2118
df58fc94 2119 if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
d6f16593
MR
2120 return;
2121
2122 val = bfd_get_32 (abfd, data);
df58fc94 2123 if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
d6f16593 2124 {
df58fc94
RS
2125 second = val & 0xffff;
2126 first = val >> 16;
2127 }
2128 else if (r_type != R_MIPS16_26)
2129 {
2130 second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2131 first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
d6f16593
MR
2132 }
2133 else
2134 {
df58fc94
RS
2135 second = val & 0xffff;
2136 first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2137 | ((val >> 21) & 0x1f);
d6f16593 2138 }
df58fc94
RS
2139 bfd_put_16 (abfd, second, data + 2);
2140 bfd_put_16 (abfd, first, data);
d6f16593
MR
2141}
2142
b49e97c9 2143bfd_reloc_status_type
9719ad41
RS
2144_bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2145 arelent *reloc_entry, asection *input_section,
2146 bfd_boolean relocatable, void *data, bfd_vma gp)
b49e97c9
TS
2147{
2148 bfd_vma relocation;
a7ebbfdf 2149 bfd_signed_vma val;
30ac9238 2150 bfd_reloc_status_type status;
b49e97c9
TS
2151
2152 if (bfd_is_com_section (symbol->section))
2153 relocation = 0;
2154 else
2155 relocation = symbol->value;
2156
2157 relocation += symbol->section->output_section->vma;
2158 relocation += symbol->section->output_offset;
2159
07515404 2160 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
b49e97c9
TS
2161 return bfd_reloc_outofrange;
2162
b49e97c9 2163 /* Set val to the offset into the section or symbol. */
a7ebbfdf
TS
2164 val = reloc_entry->addend;
2165
30ac9238 2166 _bfd_mips_elf_sign_extend (val, 16);
a7ebbfdf 2167
b49e97c9 2168 /* Adjust val for the final section location and GP value. If we
1049f94e 2169 are producing relocatable output, we don't want to do this for
b49e97c9 2170 an external symbol. */
1049f94e 2171 if (! relocatable
b49e97c9
TS
2172 || (symbol->flags & BSF_SECTION_SYM) != 0)
2173 val += relocation - gp;
2174
a7ebbfdf
TS
2175 if (reloc_entry->howto->partial_inplace)
2176 {
30ac9238
RS
2177 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2178 (bfd_byte *) data
2179 + reloc_entry->address);
2180 if (status != bfd_reloc_ok)
2181 return status;
a7ebbfdf
TS
2182 }
2183 else
2184 reloc_entry->addend = val;
b49e97c9 2185
1049f94e 2186 if (relocatable)
b49e97c9 2187 reloc_entry->address += input_section->output_offset;
30ac9238
RS
2188
2189 return bfd_reloc_ok;
2190}
2191
2192/* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2193 R_MIPS_GOT16. REL is the relocation, INPUT_SECTION is the section
2194 that contains the relocation field and DATA points to the start of
2195 INPUT_SECTION. */
2196
2197struct mips_hi16
2198{
2199 struct mips_hi16 *next;
2200 bfd_byte *data;
2201 asection *input_section;
2202 arelent rel;
2203};
2204
2205/* FIXME: This should not be a static variable. */
2206
2207static struct mips_hi16 *mips_hi16_list;
2208
2209/* A howto special_function for REL *HI16 relocations. We can only
2210 calculate the correct value once we've seen the partnering
2211 *LO16 relocation, so just save the information for later.
2212
2213 The ABI requires that the *LO16 immediately follow the *HI16.
2214 However, as a GNU extension, we permit an arbitrary number of
2215 *HI16s to be associated with a single *LO16. This significantly
2216 simplies the relocation handling in gcc. */
2217
2218bfd_reloc_status_type
2219_bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2220 asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2221 asection *input_section, bfd *output_bfd,
2222 char **error_message ATTRIBUTE_UNUSED)
2223{
2224 struct mips_hi16 *n;
2225
07515404 2226 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2227 return bfd_reloc_outofrange;
2228
2229 n = bfd_malloc (sizeof *n);
2230 if (n == NULL)
2231 return bfd_reloc_outofrange;
2232
2233 n->next = mips_hi16_list;
2234 n->data = data;
2235 n->input_section = input_section;
2236 n->rel = *reloc_entry;
2237 mips_hi16_list = n;
2238
2239 if (output_bfd != NULL)
2240 reloc_entry->address += input_section->output_offset;
2241
2242 return bfd_reloc_ok;
2243}
2244
738e5348 2245/* A howto special_function for REL R_MIPS*_GOT16 relocations. This is just
30ac9238
RS
2246 like any other 16-bit relocation when applied to global symbols, but is
2247 treated in the same as R_MIPS_HI16 when applied to local symbols. */
2248
2249bfd_reloc_status_type
2250_bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2251 void *data, asection *input_section,
2252 bfd *output_bfd, char **error_message)
2253{
2254 if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2255 || bfd_is_und_section (bfd_get_section (symbol))
2256 || bfd_is_com_section (bfd_get_section (symbol)))
2257 /* The relocation is against a global symbol. */
2258 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2259 input_section, output_bfd,
2260 error_message);
2261
2262 return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2263 input_section, output_bfd, error_message);
2264}
2265
2266/* A howto special_function for REL *LO16 relocations. The *LO16 itself
2267 is a straightforward 16 bit inplace relocation, but we must deal with
2268 any partnering high-part relocations as well. */
2269
2270bfd_reloc_status_type
2271_bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2272 void *data, asection *input_section,
2273 bfd *output_bfd, char **error_message)
2274{
2275 bfd_vma vallo;
d6f16593 2276 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
30ac9238 2277
07515404 2278 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2279 return bfd_reloc_outofrange;
2280
df58fc94 2281 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
d6f16593 2282 location);
df58fc94
RS
2283 vallo = bfd_get_32 (abfd, location);
2284 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2285 location);
d6f16593 2286
30ac9238
RS
2287 while (mips_hi16_list != NULL)
2288 {
2289 bfd_reloc_status_type ret;
2290 struct mips_hi16 *hi;
2291
2292 hi = mips_hi16_list;
2293
738e5348
RS
2294 /* R_MIPS*_GOT16 relocations are something of a special case. We
2295 want to install the addend in the same way as for a R_MIPS*_HI16
30ac9238
RS
2296 relocation (with a rightshift of 16). However, since GOT16
2297 relocations can also be used with global symbols, their howto
2298 has a rightshift of 0. */
2299 if (hi->rel.howto->type == R_MIPS_GOT16)
2300 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
738e5348
RS
2301 else if (hi->rel.howto->type == R_MIPS16_GOT16)
2302 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
df58fc94
RS
2303 else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2304 hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
30ac9238
RS
2305
2306 /* VALLO is a signed 16-bit number. Bias it by 0x8000 so that any
2307 carry or borrow will induce a change of +1 or -1 in the high part. */
2308 hi->rel.addend += (vallo + 0x8000) & 0xffff;
2309
30ac9238
RS
2310 ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2311 hi->input_section, output_bfd,
2312 error_message);
2313 if (ret != bfd_reloc_ok)
2314 return ret;
2315
2316 mips_hi16_list = hi->next;
2317 free (hi);
2318 }
2319
2320 return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2321 input_section, output_bfd,
2322 error_message);
2323}
2324
2325/* A generic howto special_function. This calculates and installs the
2326 relocation itself, thus avoiding the oft-discussed problems in
2327 bfd_perform_relocation and bfd_install_relocation. */
2328
2329bfd_reloc_status_type
2330_bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2331 asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2332 asection *input_section, bfd *output_bfd,
2333 char **error_message ATTRIBUTE_UNUSED)
2334{
2335 bfd_signed_vma val;
2336 bfd_reloc_status_type status;
2337 bfd_boolean relocatable;
2338
2339 relocatable = (output_bfd != NULL);
2340
07515404 2341 if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
30ac9238
RS
2342 return bfd_reloc_outofrange;
2343
2344 /* Build up the field adjustment in VAL. */
2345 val = 0;
2346 if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2347 {
2348 /* Either we're calculating the final field value or we have a
2349 relocation against a section symbol. Add in the section's
2350 offset or address. */
2351 val += symbol->section->output_section->vma;
2352 val += symbol->section->output_offset;
2353 }
2354
2355 if (!relocatable)
2356 {
2357 /* We're calculating the final field value. Add in the symbol's value
2358 and, if pc-relative, subtract the address of the field itself. */
2359 val += symbol->value;
2360 if (reloc_entry->howto->pc_relative)
2361 {
2362 val -= input_section->output_section->vma;
2363 val -= input_section->output_offset;
2364 val -= reloc_entry->address;
2365 }
2366 }
2367
2368 /* VAL is now the final adjustment. If we're keeping this relocation
2369 in the output file, and if the relocation uses a separate addend,
2370 we just need to add VAL to that addend. Otherwise we need to add
2371 VAL to the relocation field itself. */
2372 if (relocatable && !reloc_entry->howto->partial_inplace)
2373 reloc_entry->addend += val;
2374 else
2375 {
d6f16593
MR
2376 bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2377
30ac9238
RS
2378 /* Add in the separate addend, if any. */
2379 val += reloc_entry->addend;
2380
2381 /* Add VAL to the relocation field. */
df58fc94
RS
2382 _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2383 location);
30ac9238 2384 status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
d6f16593 2385 location);
df58fc94
RS
2386 _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2387 location);
d6f16593 2388
30ac9238
RS
2389 if (status != bfd_reloc_ok)
2390 return status;
2391 }
2392
2393 if (relocatable)
2394 reloc_entry->address += input_section->output_offset;
b49e97c9
TS
2395
2396 return bfd_reloc_ok;
2397}
2398\f
2399/* Swap an entry in a .gptab section. Note that these routines rely
2400 on the equivalence of the two elements of the union. */
2401
2402static void
9719ad41
RS
2403bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2404 Elf32_gptab *in)
b49e97c9
TS
2405{
2406 in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2407 in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2408}
2409
2410static void
9719ad41
RS
2411bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2412 Elf32_External_gptab *ex)
b49e97c9
TS
2413{
2414 H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2415 H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2416}
2417
2418static void
9719ad41
RS
2419bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2420 Elf32_External_compact_rel *ex)
b49e97c9
TS
2421{
2422 H_PUT_32 (abfd, in->id1, ex->id1);
2423 H_PUT_32 (abfd, in->num, ex->num);
2424 H_PUT_32 (abfd, in->id2, ex->id2);
2425 H_PUT_32 (abfd, in->offset, ex->offset);
2426 H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2427 H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2428}
2429
2430static void
9719ad41
RS
2431bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2432 Elf32_External_crinfo *ex)
b49e97c9
TS
2433{
2434 unsigned long l;
2435
2436 l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2437 | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2438 | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2439 | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2440 H_PUT_32 (abfd, l, ex->info);
2441 H_PUT_32 (abfd, in->konst, ex->konst);
2442 H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2443}
b49e97c9
TS
2444\f
2445/* A .reginfo section holds a single Elf32_RegInfo structure. These
2446 routines swap this structure in and out. They are used outside of
2447 BFD, so they are globally visible. */
2448
2449void
9719ad41
RS
2450bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2451 Elf32_RegInfo *in)
b49e97c9
TS
2452{
2453 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2454 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2455 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2456 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2457 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2458 in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2459}
2460
2461void
9719ad41
RS
2462bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2463 Elf32_External_RegInfo *ex)
b49e97c9
TS
2464{
2465 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2466 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2467 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2468 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2469 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2470 H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2471}
2472
2473/* In the 64 bit ABI, the .MIPS.options section holds register
2474 information in an Elf64_Reginfo structure. These routines swap
2475 them in and out. They are globally visible because they are used
2476 outside of BFD. These routines are here so that gas can call them
2477 without worrying about whether the 64 bit ABI has been included. */
2478
2479void
9719ad41
RS
2480bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2481 Elf64_Internal_RegInfo *in)
b49e97c9
TS
2482{
2483 in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2484 in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2485 in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2486 in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2487 in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2488 in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2489 in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2490}
2491
2492void
9719ad41
RS
2493bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2494 Elf64_External_RegInfo *ex)
b49e97c9
TS
2495{
2496 H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2497 H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2498 H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2499 H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2500 H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2501 H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2502 H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2503}
2504
2505/* Swap in an options header. */
2506
2507void
9719ad41
RS
2508bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2509 Elf_Internal_Options *in)
b49e97c9
TS
2510{
2511 in->kind = H_GET_8 (abfd, ex->kind);
2512 in->size = H_GET_8 (abfd, ex->size);
2513 in->section = H_GET_16 (abfd, ex->section);
2514 in->info = H_GET_32 (abfd, ex->info);
2515}
2516
2517/* Swap out an options header. */
2518
2519void
9719ad41
RS
2520bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2521 Elf_External_Options *ex)
b49e97c9
TS
2522{
2523 H_PUT_8 (abfd, in->kind, ex->kind);
2524 H_PUT_8 (abfd, in->size, ex->size);
2525 H_PUT_16 (abfd, in->section, ex->section);
2526 H_PUT_32 (abfd, in->info, ex->info);
2527}
2528\f
2529/* This function is called via qsort() to sort the dynamic relocation
2530 entries by increasing r_symndx value. */
2531
2532static int
9719ad41 2533sort_dynamic_relocs (const void *arg1, const void *arg2)
b49e97c9 2534{
947216bf
AM
2535 Elf_Internal_Rela int_reloc1;
2536 Elf_Internal_Rela int_reloc2;
6870500c 2537 int diff;
b49e97c9 2538
947216bf
AM
2539 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2540 bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
b49e97c9 2541
6870500c
RS
2542 diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2543 if (diff != 0)
2544 return diff;
2545
2546 if (int_reloc1.r_offset < int_reloc2.r_offset)
2547 return -1;
2548 if (int_reloc1.r_offset > int_reloc2.r_offset)
2549 return 1;
2550 return 0;
b49e97c9
TS
2551}
2552
f4416af6
AO
2553/* Like sort_dynamic_relocs, but used for elf64 relocations. */
2554
2555static int
7e3102a7
AM
2556sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2557 const void *arg2 ATTRIBUTE_UNUSED)
f4416af6 2558{
7e3102a7 2559#ifdef BFD64
f4416af6
AO
2560 Elf_Internal_Rela int_reloc1[3];
2561 Elf_Internal_Rela int_reloc2[3];
2562
2563 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2564 (reldyn_sorting_bfd, arg1, int_reloc1);
2565 (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2566 (reldyn_sorting_bfd, arg2, int_reloc2);
2567
6870500c
RS
2568 if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2569 return -1;
2570 if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2571 return 1;
2572
2573 if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2574 return -1;
2575 if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2576 return 1;
2577 return 0;
7e3102a7
AM
2578#else
2579 abort ();
2580#endif
f4416af6
AO
2581}
2582
2583
b49e97c9
TS
2584/* This routine is used to write out ECOFF debugging external symbol
2585 information. It is called via mips_elf_link_hash_traverse. The
2586 ECOFF external symbol information must match the ELF external
2587 symbol information. Unfortunately, at this point we don't know
2588 whether a symbol is required by reloc information, so the two
2589 tables may wind up being different. We must sort out the external
2590 symbol information before we can set the final size of the .mdebug
2591 section, and we must set the size of the .mdebug section before we
2592 can relocate any sections, and we can't know which symbols are
2593 required by relocation until we relocate the sections.
2594 Fortunately, it is relatively unlikely that any symbol will be
2595 stripped but required by a reloc. In particular, it can not happen
2596 when generating a final executable. */
2597
b34976b6 2598static bfd_boolean
9719ad41 2599mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
b49e97c9 2600{
9719ad41 2601 struct extsym_info *einfo = data;
b34976b6 2602 bfd_boolean strip;
b49e97c9
TS
2603 asection *sec, *output_section;
2604
b49e97c9 2605 if (h->root.indx == -2)
b34976b6 2606 strip = FALSE;
f5385ebf 2607 else if ((h->root.def_dynamic
77cfaee6
AM
2608 || h->root.ref_dynamic
2609 || h->root.type == bfd_link_hash_new)
f5385ebf
AM
2610 && !h->root.def_regular
2611 && !h->root.ref_regular)
b34976b6 2612 strip = TRUE;
b49e97c9
TS
2613 else if (einfo->info->strip == strip_all
2614 || (einfo->info->strip == strip_some
2615 && bfd_hash_lookup (einfo->info->keep_hash,
2616 h->root.root.root.string,
b34976b6
AM
2617 FALSE, FALSE) == NULL))
2618 strip = TRUE;
b49e97c9 2619 else
b34976b6 2620 strip = FALSE;
b49e97c9
TS
2621
2622 if (strip)
b34976b6 2623 return TRUE;
b49e97c9
TS
2624
2625 if (h->esym.ifd == -2)
2626 {
2627 h->esym.jmptbl = 0;
2628 h->esym.cobol_main = 0;
2629 h->esym.weakext = 0;
2630 h->esym.reserved = 0;
2631 h->esym.ifd = ifdNil;
2632 h->esym.asym.value = 0;
2633 h->esym.asym.st = stGlobal;
2634
2635 if (h->root.root.type == bfd_link_hash_undefined
2636 || h->root.root.type == bfd_link_hash_undefweak)
2637 {
2638 const char *name;
2639
2640 /* Use undefined class. Also, set class and type for some
2641 special symbols. */
2642 name = h->root.root.root.string;
2643 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2644 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2645 {
2646 h->esym.asym.sc = scData;
2647 h->esym.asym.st = stLabel;
2648 h->esym.asym.value = 0;
2649 }
2650 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2651 {
2652 h->esym.asym.sc = scAbs;
2653 h->esym.asym.st = stLabel;
2654 h->esym.asym.value =
2655 mips_elf_hash_table (einfo->info)->procedure_count;
2656 }
4a14403c 2657 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
b49e97c9
TS
2658 {
2659 h->esym.asym.sc = scAbs;
2660 h->esym.asym.st = stLabel;
2661 h->esym.asym.value = elf_gp (einfo->abfd);
2662 }
2663 else
2664 h->esym.asym.sc = scUndefined;
2665 }
2666 else if (h->root.root.type != bfd_link_hash_defined
2667 && h->root.root.type != bfd_link_hash_defweak)
2668 h->esym.asym.sc = scAbs;
2669 else
2670 {
2671 const char *name;
2672
2673 sec = h->root.root.u.def.section;
2674 output_section = sec->output_section;
2675
2676 /* When making a shared library and symbol h is the one from
2677 the another shared library, OUTPUT_SECTION may be null. */
2678 if (output_section == NULL)
2679 h->esym.asym.sc = scUndefined;
2680 else
2681 {
2682 name = bfd_section_name (output_section->owner, output_section);
2683
2684 if (strcmp (name, ".text") == 0)
2685 h->esym.asym.sc = scText;
2686 else if (strcmp (name, ".data") == 0)
2687 h->esym.asym.sc = scData;
2688 else if (strcmp (name, ".sdata") == 0)
2689 h->esym.asym.sc = scSData;
2690 else if (strcmp (name, ".rodata") == 0
2691 || strcmp (name, ".rdata") == 0)
2692 h->esym.asym.sc = scRData;
2693 else if (strcmp (name, ".bss") == 0)
2694 h->esym.asym.sc = scBss;
2695 else if (strcmp (name, ".sbss") == 0)
2696 h->esym.asym.sc = scSBss;
2697 else if (strcmp (name, ".init") == 0)
2698 h->esym.asym.sc = scInit;
2699 else if (strcmp (name, ".fini") == 0)
2700 h->esym.asym.sc = scFini;
2701 else
2702 h->esym.asym.sc = scAbs;
2703 }
2704 }
2705
2706 h->esym.asym.reserved = 0;
2707 h->esym.asym.index = indexNil;
2708 }
2709
2710 if (h->root.root.type == bfd_link_hash_common)
2711 h->esym.asym.value = h->root.root.u.c.size;
2712 else if (h->root.root.type == bfd_link_hash_defined
2713 || h->root.root.type == bfd_link_hash_defweak)
2714 {
2715 if (h->esym.asym.sc == scCommon)
2716 h->esym.asym.sc = scBss;
2717 else if (h->esym.asym.sc == scSCommon)
2718 h->esym.asym.sc = scSBss;
2719
2720 sec = h->root.root.u.def.section;
2721 output_section = sec->output_section;
2722 if (output_section != NULL)
2723 h->esym.asym.value = (h->root.root.u.def.value
2724 + sec->output_offset
2725 + output_section->vma);
2726 else
2727 h->esym.asym.value = 0;
2728 }
33bb52fb 2729 else
b49e97c9
TS
2730 {
2731 struct mips_elf_link_hash_entry *hd = h;
b49e97c9
TS
2732
2733 while (hd->root.root.type == bfd_link_hash_indirect)
33bb52fb 2734 hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
b49e97c9 2735
33bb52fb 2736 if (hd->needs_lazy_stub)
b49e97c9
TS
2737 {
2738 /* Set type and value for a symbol with a function stub. */
2739 h->esym.asym.st = stProc;
2740 sec = hd->root.root.u.def.section;
2741 if (sec == NULL)
2742 h->esym.asym.value = 0;
2743 else
2744 {
2745 output_section = sec->output_section;
2746 if (output_section != NULL)
2747 h->esym.asym.value = (hd->root.plt.offset
2748 + sec->output_offset
2749 + output_section->vma);
2750 else
2751 h->esym.asym.value = 0;
2752 }
b49e97c9
TS
2753 }
2754 }
2755
2756 if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2757 h->root.root.root.string,
2758 &h->esym))
2759 {
b34976b6
AM
2760 einfo->failed = TRUE;
2761 return FALSE;
b49e97c9
TS
2762 }
2763
b34976b6 2764 return TRUE;
b49e97c9
TS
2765}
2766
2767/* A comparison routine used to sort .gptab entries. */
2768
2769static int
9719ad41 2770gptab_compare (const void *p1, const void *p2)
b49e97c9 2771{
9719ad41
RS
2772 const Elf32_gptab *a1 = p1;
2773 const Elf32_gptab *a2 = p2;
b49e97c9
TS
2774
2775 return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2776}
2777\f
b15e6682 2778/* Functions to manage the got entry hash table. */
f4416af6
AO
2779
2780/* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2781 hash number. */
2782
2783static INLINE hashval_t
9719ad41 2784mips_elf_hash_bfd_vma (bfd_vma addr)
f4416af6
AO
2785{
2786#ifdef BFD64
2787 return addr + (addr >> 32);
2788#else
2789 return addr;
2790#endif
2791}
2792
2793/* got_entries only match if they're identical, except for gotidx, so
2794 use all fields to compute the hash, and compare the appropriate
2795 union members. */
2796
b15e6682 2797static hashval_t
9719ad41 2798mips_elf_got_entry_hash (const void *entry_)
b15e6682
AO
2799{
2800 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2801
38985a1c 2802 return entry->symndx
0f20cc35 2803 + ((entry->tls_type & GOT_TLS_LDM) << 17)
f4416af6 2804 + (! entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
38985a1c
AO
2805 : entry->abfd->id
2806 + (entry->symndx >= 0 ? mips_elf_hash_bfd_vma (entry->d.addend)
2807 : entry->d.h->root.root.root.hash));
b15e6682
AO
2808}
2809
2810static int
9719ad41 2811mips_elf_got_entry_eq (const void *entry1, const void *entry2)
b15e6682
AO
2812{
2813 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2814 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2815
0f20cc35
DJ
2816 /* An LDM entry can only match another LDM entry. */
2817 if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2818 return 0;
2819
b15e6682 2820 return e1->abfd == e2->abfd && e1->symndx == e2->symndx
f4416af6
AO
2821 && (! e1->abfd ? e1->d.address == e2->d.address
2822 : e1->symndx >= 0 ? e1->d.addend == e2->d.addend
2823 : e1->d.h == e2->d.h);
2824}
2825
2826/* multi_got_entries are still a match in the case of global objects,
2827 even if the input bfd in which they're referenced differs, so the
2828 hash computation and compare functions are adjusted
2829 accordingly. */
2830
2831static hashval_t
9719ad41 2832mips_elf_multi_got_entry_hash (const void *entry_)
f4416af6
AO
2833{
2834 const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
2835
2836 return entry->symndx
2837 + (! entry->abfd
2838 ? mips_elf_hash_bfd_vma (entry->d.address)
2839 : entry->symndx >= 0
0f20cc35
DJ
2840 ? ((entry->tls_type & GOT_TLS_LDM)
2841 ? (GOT_TLS_LDM << 17)
2842 : (entry->abfd->id
2843 + mips_elf_hash_bfd_vma (entry->d.addend)))
f4416af6
AO
2844 : entry->d.h->root.root.root.hash);
2845}
2846
2847static int
9719ad41 2848mips_elf_multi_got_entry_eq (const void *entry1, const void *entry2)
f4416af6
AO
2849{
2850 const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
2851 const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
2852
0f20cc35
DJ
2853 /* Any two LDM entries match. */
2854 if (e1->tls_type & e2->tls_type & GOT_TLS_LDM)
2855 return 1;
2856
2857 /* Nothing else matches an LDM entry. */
2858 if ((e1->tls_type ^ e2->tls_type) & GOT_TLS_LDM)
2859 return 0;
2860
f4416af6
AO
2861 return e1->symndx == e2->symndx
2862 && (e1->symndx >= 0 ? e1->abfd == e2->abfd && e1->d.addend == e2->d.addend
2863 : e1->abfd == NULL || e2->abfd == NULL
2864 ? e1->abfd == e2->abfd && e1->d.address == e2->d.address
2865 : e1->d.h == e2->d.h);
b15e6682 2866}
c224138d
RS
2867
2868static hashval_t
2869mips_got_page_entry_hash (const void *entry_)
2870{
2871 const struct mips_got_page_entry *entry;
2872
2873 entry = (const struct mips_got_page_entry *) entry_;
2874 return entry->abfd->id + entry->symndx;
2875}
2876
2877static int
2878mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
2879{
2880 const struct mips_got_page_entry *entry1, *entry2;
2881
2882 entry1 = (const struct mips_got_page_entry *) entry1_;
2883 entry2 = (const struct mips_got_page_entry *) entry2_;
2884 return entry1->abfd == entry2->abfd && entry1->symndx == entry2->symndx;
2885}
b15e6682 2886\f
0a44bf69
RS
2887/* Return the dynamic relocation section. If it doesn't exist, try to
2888 create a new it if CREATE_P, otherwise return NULL. Also return NULL
2889 if creation fails. */
f4416af6
AO
2890
2891static asection *
0a44bf69 2892mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
f4416af6 2893{
0a44bf69 2894 const char *dname;
f4416af6 2895 asection *sreloc;
0a44bf69 2896 bfd *dynobj;
f4416af6 2897
0a44bf69
RS
2898 dname = MIPS_ELF_REL_DYN_NAME (info);
2899 dynobj = elf_hash_table (info)->dynobj;
3d4d4302 2900 sreloc = bfd_get_linker_section (dynobj, dname);
f4416af6
AO
2901 if (sreloc == NULL && create_p)
2902 {
3d4d4302
AM
2903 sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
2904 (SEC_ALLOC
2905 | SEC_LOAD
2906 | SEC_HAS_CONTENTS
2907 | SEC_IN_MEMORY
2908 | SEC_LINKER_CREATED
2909 | SEC_READONLY));
f4416af6 2910 if (sreloc == NULL
f4416af6 2911 || ! bfd_set_section_alignment (dynobj, sreloc,
d80dcc6a 2912 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
f4416af6
AO
2913 return NULL;
2914 }
2915 return sreloc;
2916}
2917
0f20cc35
DJ
2918/* Count the number of relocations needed for a TLS GOT entry, with
2919 access types from TLS_TYPE, and symbol H (or a local symbol if H
2920 is NULL). */
2921
2922static int
2923mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
2924 struct elf_link_hash_entry *h)
2925{
2926 int indx = 0;
2927 int ret = 0;
2928 bfd_boolean need_relocs = FALSE;
2929 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
2930
2931 if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
2932 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
2933 indx = h->dynindx;
2934
2935 if ((info->shared || indx != 0)
2936 && (h == NULL
2937 || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
2938 || h->root.type != bfd_link_hash_undefweak))
2939 need_relocs = TRUE;
2940
2941 if (!need_relocs)
2942 return FALSE;
2943
2944 if (tls_type & GOT_TLS_GD)
2945 {
2946 ret++;
2947 if (indx != 0)
2948 ret++;
2949 }
2950
2951 if (tls_type & GOT_TLS_IE)
2952 ret++;
2953
2954 if ((tls_type & GOT_TLS_LDM) && info->shared)
2955 ret++;
2956
2957 return ret;
2958}
2959
2960/* Count the number of TLS relocations required for the GOT entry in
2961 ARG1, if it describes a local symbol. */
2962
2963static int
2964mips_elf_count_local_tls_relocs (void **arg1, void *arg2)
2965{
2966 struct mips_got_entry *entry = * (struct mips_got_entry **) arg1;
2967 struct mips_elf_count_tls_arg *arg = arg2;
2968
2969 if (entry->abfd != NULL && entry->symndx != -1)
2970 arg->needed += mips_tls_got_relocs (arg->info, entry->tls_type, NULL);
2971
2972 return 1;
2973}
2974
2975/* Count the number of TLS GOT entries required for the global (or
2976 forced-local) symbol in ARG1. */
2977
2978static int
2979mips_elf_count_global_tls_entries (void *arg1, void *arg2)
2980{
2981 struct mips_elf_link_hash_entry *hm
2982 = (struct mips_elf_link_hash_entry *) arg1;
2983 struct mips_elf_count_tls_arg *arg = arg2;
2984
2985 if (hm->tls_type & GOT_TLS_GD)
2986 arg->needed += 2;
2987 if (hm->tls_type & GOT_TLS_IE)
2988 arg->needed += 1;
2989
2990 return 1;
2991}
2992
2993/* Count the number of TLS relocations required for the global (or
2994 forced-local) symbol in ARG1. */
2995
2996static int
2997mips_elf_count_global_tls_relocs (void *arg1, void *arg2)
2998{
2999 struct mips_elf_link_hash_entry *hm
3000 = (struct mips_elf_link_hash_entry *) arg1;
3001 struct mips_elf_count_tls_arg *arg = arg2;
3002
3003 arg->needed += mips_tls_got_relocs (arg->info, hm->tls_type, &hm->root);
3004
3005 return 1;
3006}
3007
3008/* Output a simple dynamic relocation into SRELOC. */
3009
3010static void
3011mips_elf_output_dynamic_relocation (bfd *output_bfd,
3012 asection *sreloc,
861fb55a 3013 unsigned long reloc_index,
0f20cc35
DJ
3014 unsigned long indx,
3015 int r_type,
3016 bfd_vma offset)
3017{
3018 Elf_Internal_Rela rel[3];
3019
3020 memset (rel, 0, sizeof (rel));
3021
3022 rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3023 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3024
3025 if (ABI_64_P (output_bfd))
3026 {
3027 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3028 (output_bfd, &rel[0],
3029 (sreloc->contents
861fb55a 3030 + reloc_index * sizeof (Elf64_Mips_External_Rel)));
0f20cc35
DJ
3031 }
3032 else
3033 bfd_elf32_swap_reloc_out
3034 (output_bfd, &rel[0],
3035 (sreloc->contents
861fb55a 3036 + reloc_index * sizeof (Elf32_External_Rel)));
0f20cc35
DJ
3037}
3038
3039/* Initialize a set of TLS GOT entries for one symbol. */
3040
3041static void
3042mips_elf_initialize_tls_slots (bfd *abfd, bfd_vma got_offset,
3043 unsigned char *tls_type_p,
3044 struct bfd_link_info *info,
3045 struct mips_elf_link_hash_entry *h,
3046 bfd_vma value)
3047{
23cc69b6 3048 struct mips_elf_link_hash_table *htab;
0f20cc35
DJ
3049 int indx;
3050 asection *sreloc, *sgot;
3051 bfd_vma offset, offset2;
0f20cc35
DJ
3052 bfd_boolean need_relocs = FALSE;
3053
23cc69b6 3054 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3055 if (htab == NULL)
3056 return;
3057
23cc69b6 3058 sgot = htab->sgot;
0f20cc35
DJ
3059
3060 indx = 0;
3061 if (h != NULL)
3062 {
3063 bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3064
3065 if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3066 && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3067 indx = h->root.dynindx;
3068 }
3069
3070 if (*tls_type_p & GOT_TLS_DONE)
3071 return;
3072
3073 if ((info->shared || indx != 0)
3074 && (h == NULL
3075 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3076 || h->root.type != bfd_link_hash_undefweak))
3077 need_relocs = TRUE;
3078
3079 /* MINUS_ONE means the symbol is not defined in this object. It may not
3080 be defined at all; assume that the value doesn't matter in that
3081 case. Otherwise complain if we would use the value. */
3082 BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3083 || h->root.root.type == bfd_link_hash_undefweak);
3084
3085 /* Emit necessary relocations. */
0a44bf69 3086 sreloc = mips_elf_rel_dyn_section (info, FALSE);
0f20cc35
DJ
3087
3088 /* General Dynamic. */
3089 if (*tls_type_p & GOT_TLS_GD)
3090 {
3091 offset = got_offset;
3092 offset2 = offset + MIPS_ELF_GOT_SIZE (abfd);
3093
3094 if (need_relocs)
3095 {
3096 mips_elf_output_dynamic_relocation
861fb55a 3097 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35
DJ
3098 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3099 sgot->output_offset + sgot->output_section->vma + offset);
3100
3101 if (indx)
3102 mips_elf_output_dynamic_relocation
861fb55a 3103 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35
DJ
3104 ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3105 sgot->output_offset + sgot->output_section->vma + offset2);
3106 else
3107 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3108 sgot->contents + offset2);
3109 }
3110 else
3111 {
3112 MIPS_ELF_PUT_WORD (abfd, 1,
3113 sgot->contents + offset);
3114 MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3115 sgot->contents + offset2);
3116 }
3117
3118 got_offset += 2 * MIPS_ELF_GOT_SIZE (abfd);
3119 }
3120
3121 /* Initial Exec model. */
3122 if (*tls_type_p & GOT_TLS_IE)
3123 {
3124 offset = got_offset;
3125
3126 if (need_relocs)
3127 {
3128 if (indx == 0)
3129 MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3130 sgot->contents + offset);
3131 else
3132 MIPS_ELF_PUT_WORD (abfd, 0,
3133 sgot->contents + offset);
3134
3135 mips_elf_output_dynamic_relocation
861fb55a 3136 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35
DJ
3137 ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3138 sgot->output_offset + sgot->output_section->vma + offset);
3139 }
3140 else
3141 MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3142 sgot->contents + offset);
3143 }
3144
3145 if (*tls_type_p & GOT_TLS_LDM)
3146 {
3147 /* The initial offset is zero, and the LD offsets will include the
3148 bias by DTP_OFFSET. */
3149 MIPS_ELF_PUT_WORD (abfd, 0,
3150 sgot->contents + got_offset
3151 + MIPS_ELF_GOT_SIZE (abfd));
3152
3153 if (!info->shared)
3154 MIPS_ELF_PUT_WORD (abfd, 1,
3155 sgot->contents + got_offset);
3156 else
3157 mips_elf_output_dynamic_relocation
861fb55a 3158 (abfd, sreloc, sreloc->reloc_count++, indx,
0f20cc35
DJ
3159 ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3160 sgot->output_offset + sgot->output_section->vma + got_offset);
3161 }
3162
3163 *tls_type_p |= GOT_TLS_DONE;
3164}
3165
3166/* Return the GOT index to use for a relocation of type R_TYPE against
3167 a symbol accessed using TLS_TYPE models. The GOT entries for this
3168 symbol in this GOT start at GOT_INDEX. This function initializes the
3169 GOT entries and corresponding relocations. */
3170
3171static bfd_vma
3172mips_tls_got_index (bfd *abfd, bfd_vma got_index, unsigned char *tls_type,
3173 int r_type, struct bfd_link_info *info,
3174 struct mips_elf_link_hash_entry *h, bfd_vma symbol)
3175{
df58fc94
RS
3176 BFD_ASSERT (tls_gottprel_reloc_p (r_type)
3177 || tls_gd_reloc_p (r_type)
3178 || tls_ldm_reloc_p (r_type));
0f20cc35
DJ
3179
3180 mips_elf_initialize_tls_slots (abfd, got_index, tls_type, info, h, symbol);
3181
df58fc94 3182 if (tls_gottprel_reloc_p (r_type))
0f20cc35
DJ
3183 {
3184 BFD_ASSERT (*tls_type & GOT_TLS_IE);
3185 if (*tls_type & GOT_TLS_GD)
3186 return got_index + 2 * MIPS_ELF_GOT_SIZE (abfd);
3187 else
3188 return got_index;
3189 }
3190
df58fc94 3191 if (tls_gd_reloc_p (r_type))
0f20cc35
DJ
3192 {
3193 BFD_ASSERT (*tls_type & GOT_TLS_GD);
3194 return got_index;
3195 }
3196
df58fc94 3197 if (tls_ldm_reloc_p (r_type))
0f20cc35
DJ
3198 {
3199 BFD_ASSERT (*tls_type & GOT_TLS_LDM);
3200 return got_index;
3201 }
3202
3203 return got_index;
3204}
3205
0a44bf69
RS
3206/* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3207 for global symbol H. .got.plt comes before the GOT, so the offset
3208 will be negative. */
3209
3210static bfd_vma
3211mips_elf_gotplt_index (struct bfd_link_info *info,
3212 struct elf_link_hash_entry *h)
3213{
3214 bfd_vma plt_index, got_address, got_value;
3215 struct mips_elf_link_hash_table *htab;
3216
3217 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3218 BFD_ASSERT (htab != NULL);
3219
0a44bf69
RS
3220 BFD_ASSERT (h->plt.offset != (bfd_vma) -1);
3221
861fb55a
DJ
3222 /* This function only works for VxWorks, because a non-VxWorks .got.plt
3223 section starts with reserved entries. */
3224 BFD_ASSERT (htab->is_vxworks);
3225
0a44bf69
RS
3226 /* Calculate the index of the symbol's PLT entry. */
3227 plt_index = (h->plt.offset - htab->plt_header_size) / htab->plt_entry_size;
3228
3229 /* Calculate the address of the associated .got.plt entry. */
3230 got_address = (htab->sgotplt->output_section->vma
3231 + htab->sgotplt->output_offset
3232 + plt_index * 4);
3233
3234 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
3235 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3236 + htab->root.hgot->root.u.def.section->output_offset
3237 + htab->root.hgot->root.u.def.value);
3238
3239 return got_address - got_value;
3240}
3241
5c18022e 3242/* Return the GOT offset for address VALUE. If there is not yet a GOT
0a44bf69
RS
3243 entry for this value, create one. If R_SYMNDX refers to a TLS symbol,
3244 create a TLS GOT entry instead. Return -1 if no satisfactory GOT
3245 offset can be found. */
b49e97c9
TS
3246
3247static bfd_vma
9719ad41 3248mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3249 bfd_vma value, unsigned long r_symndx,
0f20cc35 3250 struct mips_elf_link_hash_entry *h, int r_type)
b49e97c9 3251{
a8028dd0 3252 struct mips_elf_link_hash_table *htab;
b15e6682 3253 struct mips_got_entry *entry;
b49e97c9 3254
a8028dd0 3255 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3256 BFD_ASSERT (htab != NULL);
3257
a8028dd0
RS
3258 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3259 r_symndx, h, r_type);
0f20cc35 3260 if (!entry)
b15e6682 3261 return MINUS_ONE;
0f20cc35
DJ
3262
3263 if (TLS_RELOC_P (r_type))
ead49a57 3264 {
a8028dd0 3265 if (entry->symndx == -1 && htab->got_info->next == NULL)
ead49a57
RS
3266 /* A type (3) entry in the single-GOT case. We use the symbol's
3267 hash table entry to track the index. */
3268 return mips_tls_got_index (abfd, h->tls_got_offset, &h->tls_type,
3269 r_type, info, h, value);
3270 else
3271 return mips_tls_got_index (abfd, entry->gotidx, &entry->tls_type,
3272 r_type, info, h, value);
3273 }
0f20cc35
DJ
3274 else
3275 return entry->gotidx;
b49e97c9
TS
3276}
3277
3278/* Returns the GOT index for the global symbol indicated by H. */
3279
3280static bfd_vma
0f20cc35
DJ
3281mips_elf_global_got_index (bfd *abfd, bfd *ibfd, struct elf_link_hash_entry *h,
3282 int r_type, struct bfd_link_info *info)
b49e97c9 3283{
a8028dd0 3284 struct mips_elf_link_hash_table *htab;
91d6fa6a 3285 bfd_vma got_index;
f4416af6 3286 struct mips_got_info *g, *gg;
d0c7ff07 3287 long global_got_dynindx = 0;
b49e97c9 3288
a8028dd0 3289 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3290 BFD_ASSERT (htab != NULL);
3291
a8028dd0 3292 gg = g = htab->got_info;
f4416af6
AO
3293 if (g->bfd2got && ibfd)
3294 {
3295 struct mips_got_entry e, *p;
143d77c5 3296
f4416af6
AO
3297 BFD_ASSERT (h->dynindx >= 0);
3298
3299 g = mips_elf_got_for_ibfd (g, ibfd);
0f20cc35 3300 if (g->next != gg || TLS_RELOC_P (r_type))
f4416af6
AO
3301 {
3302 e.abfd = ibfd;
3303 e.symndx = -1;
3304 e.d.h = (struct mips_elf_link_hash_entry *)h;
0f20cc35 3305 e.tls_type = 0;
f4416af6 3306
9719ad41 3307 p = htab_find (g->got_entries, &e);
f4416af6
AO
3308
3309 BFD_ASSERT (p->gotidx > 0);
0f20cc35
DJ
3310
3311 if (TLS_RELOC_P (r_type))
3312 {
3313 bfd_vma value = MINUS_ONE;
3314 if ((h->root.type == bfd_link_hash_defined
3315 || h->root.type == bfd_link_hash_defweak)
3316 && h->root.u.def.section->output_section)
3317 value = (h->root.u.def.value
3318 + h->root.u.def.section->output_offset
3319 + h->root.u.def.section->output_section->vma);
3320
3321 return mips_tls_got_index (abfd, p->gotidx, &p->tls_type, r_type,
3322 info, e.d.h, value);
3323 }
3324 else
3325 return p->gotidx;
f4416af6
AO
3326 }
3327 }
3328
3329 if (gg->global_gotsym != NULL)
3330 global_got_dynindx = gg->global_gotsym->dynindx;
b49e97c9 3331
0f20cc35
DJ
3332 if (TLS_RELOC_P (r_type))
3333 {
3334 struct mips_elf_link_hash_entry *hm
3335 = (struct mips_elf_link_hash_entry *) h;
3336 bfd_vma value = MINUS_ONE;
3337
3338 if ((h->root.type == bfd_link_hash_defined
3339 || h->root.type == bfd_link_hash_defweak)
3340 && h->root.u.def.section->output_section)
3341 value = (h->root.u.def.value
3342 + h->root.u.def.section->output_offset
3343 + h->root.u.def.section->output_section->vma);
3344
91d6fa6a
NC
3345 got_index = mips_tls_got_index (abfd, hm->tls_got_offset, &hm->tls_type,
3346 r_type, info, hm, value);
0f20cc35
DJ
3347 }
3348 else
3349 {
3350 /* Once we determine the global GOT entry with the lowest dynamic
3351 symbol table index, we must put all dynamic symbols with greater
3352 indices into the GOT. That makes it easy to calculate the GOT
3353 offset. */
3354 BFD_ASSERT (h->dynindx >= global_got_dynindx);
91d6fa6a
NC
3355 got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3356 * MIPS_ELF_GOT_SIZE (abfd));
0f20cc35 3357 }
91d6fa6a 3358 BFD_ASSERT (got_index < htab->sgot->size);
b49e97c9 3359
91d6fa6a 3360 return got_index;
b49e97c9
TS
3361}
3362
5c18022e
RS
3363/* Find a GOT page entry that points to within 32KB of VALUE. These
3364 entries are supposed to be placed at small offsets in the GOT, i.e.,
3365 within 32KB of GP. Return the index of the GOT entry, or -1 if no
3366 entry could be created. If OFFSETP is nonnull, use it to return the
0a44bf69 3367 offset of the GOT entry from VALUE. */
b49e97c9
TS
3368
3369static bfd_vma
9719ad41 3370mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3371 bfd_vma value, bfd_vma *offsetp)
b49e97c9 3372{
91d6fa6a 3373 bfd_vma page, got_index;
b15e6682 3374 struct mips_got_entry *entry;
b49e97c9 3375
0a44bf69 3376 page = (value + 0x8000) & ~(bfd_vma) 0xffff;
a8028dd0
RS
3377 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3378 NULL, R_MIPS_GOT_PAGE);
b49e97c9 3379
b15e6682
AO
3380 if (!entry)
3381 return MINUS_ONE;
143d77c5 3382
91d6fa6a 3383 got_index = entry->gotidx;
b49e97c9
TS
3384
3385 if (offsetp)
f4416af6 3386 *offsetp = value - entry->d.address;
b49e97c9 3387
91d6fa6a 3388 return got_index;
b49e97c9
TS
3389}
3390
738e5348 3391/* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
020d7251
RS
3392 EXTERNAL is true if the relocation was originally against a global
3393 symbol that binds locally. */
b49e97c9
TS
3394
3395static bfd_vma
9719ad41 3396mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
5c18022e 3397 bfd_vma value, bfd_boolean external)
b49e97c9 3398{
b15e6682 3399 struct mips_got_entry *entry;
b49e97c9 3400
0a44bf69
RS
3401 /* GOT16 relocations against local symbols are followed by a LO16
3402 relocation; those against global symbols are not. Thus if the
3403 symbol was originally local, the GOT16 relocation should load the
3404 equivalent of %hi(VALUE), otherwise it should load VALUE itself. */
b49e97c9 3405 if (! external)
0a44bf69 3406 value = mips_elf_high (value) << 16;
b49e97c9 3407
738e5348
RS
3408 /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3409 R_MIPS16_GOT16, R_MIPS_CALL16, etc. The format of the entry is the
3410 same in all cases. */
a8028dd0
RS
3411 entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3412 NULL, R_MIPS_GOT16);
b15e6682
AO
3413 if (entry)
3414 return entry->gotidx;
3415 else
3416 return MINUS_ONE;
b49e97c9
TS
3417}
3418
3419/* Returns the offset for the entry at the INDEXth position
3420 in the GOT. */
3421
3422static bfd_vma
a8028dd0 3423mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
91d6fa6a 3424 bfd *input_bfd, bfd_vma got_index)
b49e97c9 3425{
a8028dd0 3426 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
3427 asection *sgot;
3428 bfd_vma gp;
3429
a8028dd0 3430 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3431 BFD_ASSERT (htab != NULL);
3432
a8028dd0 3433 sgot = htab->sgot;
f4416af6 3434 gp = _bfd_get_gp_value (output_bfd)
a8028dd0 3435 + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
143d77c5 3436
91d6fa6a 3437 return sgot->output_section->vma + sgot->output_offset + got_index - gp;
b49e97c9
TS
3438}
3439
0a44bf69
RS
3440/* Create and return a local GOT entry for VALUE, which was calculated
3441 from a symbol belonging to INPUT_SECTON. Return NULL if it could not
3442 be created. If R_SYMNDX refers to a TLS symbol, create a TLS entry
3443 instead. */
b49e97c9 3444
b15e6682 3445static struct mips_got_entry *
0a44bf69 3446mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
a8028dd0 3447 bfd *ibfd, bfd_vma value,
5c18022e 3448 unsigned long r_symndx,
0f20cc35
DJ
3449 struct mips_elf_link_hash_entry *h,
3450 int r_type)
b49e97c9 3451{
b15e6682 3452 struct mips_got_entry entry, **loc;
f4416af6 3453 struct mips_got_info *g;
0a44bf69
RS
3454 struct mips_elf_link_hash_table *htab;
3455
3456 htab = mips_elf_hash_table (info);
4dfe6ac6 3457 BFD_ASSERT (htab != NULL);
b15e6682 3458
f4416af6
AO
3459 entry.abfd = NULL;
3460 entry.symndx = -1;
3461 entry.d.address = value;
0f20cc35 3462 entry.tls_type = 0;
f4416af6 3463
a8028dd0 3464 g = mips_elf_got_for_ibfd (htab->got_info, ibfd);
f4416af6
AO
3465 if (g == NULL)
3466 {
a8028dd0 3467 g = mips_elf_got_for_ibfd (htab->got_info, abfd);
f4416af6
AO
3468 BFD_ASSERT (g != NULL);
3469 }
b15e6682 3470
020d7251
RS
3471 /* This function shouldn't be called for symbols that live in the global
3472 area of the GOT. */
3473 BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
0f20cc35
DJ
3474 if (TLS_RELOC_P (r_type))
3475 {
3476 struct mips_got_entry *p;
3477
3478 entry.abfd = ibfd;
df58fc94 3479 if (tls_ldm_reloc_p (r_type))
0f20cc35
DJ
3480 {
3481 entry.tls_type = GOT_TLS_LDM;
3482 entry.symndx = 0;
3483 entry.d.addend = 0;
3484 }
3485 else if (h == NULL)
3486 {
3487 entry.symndx = r_symndx;
3488 entry.d.addend = 0;
3489 }
3490 else
3491 entry.d.h = h;
3492
3493 p = (struct mips_got_entry *)
3494 htab_find (g->got_entries, &entry);
3495
3496 BFD_ASSERT (p);
3497 return p;
3498 }
3499
b15e6682
AO
3500 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3501 INSERT);
3502 if (*loc)
3503 return *loc;
143d77c5 3504
b15e6682 3505 entry.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_gotno++;
0f20cc35 3506 entry.tls_type = 0;
b15e6682
AO
3507
3508 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3509
3510 if (! *loc)
3511 return NULL;
143d77c5 3512
b15e6682
AO
3513 memcpy (*loc, &entry, sizeof entry);
3514
8275b357 3515 if (g->assigned_gotno > g->local_gotno)
b49e97c9 3516 {
f4416af6 3517 (*loc)->gotidx = -1;
b49e97c9
TS
3518 /* We didn't allocate enough space in the GOT. */
3519 (*_bfd_error_handler)
3520 (_("not enough GOT space for local GOT entries"));
3521 bfd_set_error (bfd_error_bad_value);
b15e6682 3522 return NULL;
b49e97c9
TS
3523 }
3524
3525 MIPS_ELF_PUT_WORD (abfd, value,
a8028dd0 3526 (htab->sgot->contents + entry.gotidx));
b15e6682 3527
5c18022e 3528 /* These GOT entries need a dynamic relocation on VxWorks. */
0a44bf69
RS
3529 if (htab->is_vxworks)
3530 {
3531 Elf_Internal_Rela outrel;
5c18022e 3532 asection *s;
91d6fa6a 3533 bfd_byte *rloc;
0a44bf69 3534 bfd_vma got_address;
0a44bf69
RS
3535
3536 s = mips_elf_rel_dyn_section (info, FALSE);
a8028dd0
RS
3537 got_address = (htab->sgot->output_section->vma
3538 + htab->sgot->output_offset
0a44bf69
RS
3539 + entry.gotidx);
3540
91d6fa6a 3541 rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
0a44bf69 3542 outrel.r_offset = got_address;
5c18022e
RS
3543 outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3544 outrel.r_addend = value;
91d6fa6a 3545 bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
0a44bf69
RS
3546 }
3547
b15e6682 3548 return *loc;
b49e97c9
TS
3549}
3550
d4596a51
RS
3551/* Return the number of dynamic section symbols required by OUTPUT_BFD.
3552 The number might be exact or a worst-case estimate, depending on how
3553 much information is available to elf_backend_omit_section_dynsym at
3554 the current linking stage. */
3555
3556static bfd_size_type
3557count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3558{
3559 bfd_size_type count;
3560
3561 count = 0;
3562 if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3563 {
3564 asection *p;
3565 const struct elf_backend_data *bed;
3566
3567 bed = get_elf_backend_data (output_bfd);
3568 for (p = output_bfd->sections; p ; p = p->next)
3569 if ((p->flags & SEC_EXCLUDE) == 0
3570 && (p->flags & SEC_ALLOC) != 0
3571 && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3572 ++count;
3573 }
3574 return count;
3575}
3576
b49e97c9 3577/* Sort the dynamic symbol table so that symbols that need GOT entries
d4596a51 3578 appear towards the end. */
b49e97c9 3579
b34976b6 3580static bfd_boolean
d4596a51 3581mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
b49e97c9 3582{
a8028dd0 3583 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
3584 struct mips_elf_hash_sort_data hsd;
3585 struct mips_got_info *g;
b49e97c9 3586
d4596a51
RS
3587 if (elf_hash_table (info)->dynsymcount == 0)
3588 return TRUE;
3589
a8028dd0 3590 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3591 BFD_ASSERT (htab != NULL);
3592
a8028dd0 3593 g = htab->got_info;
d4596a51
RS
3594 if (g == NULL)
3595 return TRUE;
f4416af6 3596
b49e97c9 3597 hsd.low = NULL;
23cc69b6
RS
3598 hsd.max_unref_got_dynindx
3599 = hsd.min_got_dynindx
3600 = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
d4596a51 3601 hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
b49e97c9
TS
3602 mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3603 elf_hash_table (info)),
3604 mips_elf_sort_hash_table_f,
3605 &hsd);
3606
3607 /* There should have been enough room in the symbol table to
44c410de 3608 accommodate both the GOT and non-GOT symbols. */
b49e97c9 3609 BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
d4596a51
RS
3610 BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3611 == elf_hash_table (info)->dynsymcount);
3612 BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3613 == g->global_gotno);
b49e97c9
TS
3614
3615 /* Now we know which dynamic symbol has the lowest dynamic symbol
3616 table index in the GOT. */
b49e97c9
TS
3617 g->global_gotsym = hsd.low;
3618
b34976b6 3619 return TRUE;
b49e97c9
TS
3620}
3621
3622/* If H needs a GOT entry, assign it the highest available dynamic
3623 index. Otherwise, assign it the lowest available dynamic
3624 index. */
3625
b34976b6 3626static bfd_boolean
9719ad41 3627mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
b49e97c9 3628{
9719ad41 3629 struct mips_elf_hash_sort_data *hsd = data;
b49e97c9 3630
b49e97c9
TS
3631 /* Symbols without dynamic symbol table entries aren't interesting
3632 at all. */
3633 if (h->root.dynindx == -1)
b34976b6 3634 return TRUE;
b49e97c9 3635
634835ae 3636 switch (h->global_got_area)
f4416af6 3637 {
634835ae
RS
3638 case GGA_NONE:
3639 h->root.dynindx = hsd->max_non_got_dynindx++;
3640 break;
0f20cc35 3641
634835ae 3642 case GGA_NORMAL:
0f20cc35
DJ
3643 BFD_ASSERT (h->tls_type == GOT_NORMAL);
3644
b49e97c9
TS
3645 h->root.dynindx = --hsd->min_got_dynindx;
3646 hsd->low = (struct elf_link_hash_entry *) h;
634835ae
RS
3647 break;
3648
3649 case GGA_RELOC_ONLY:
3650 BFD_ASSERT (h->tls_type == GOT_NORMAL);
3651
3652 if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3653 hsd->low = (struct elf_link_hash_entry *) h;
3654 h->root.dynindx = hsd->max_unref_got_dynindx++;
3655 break;
b49e97c9
TS
3656 }
3657
b34976b6 3658 return TRUE;
b49e97c9
TS
3659}
3660
3661/* If H is a symbol that needs a global GOT entry, but has a dynamic
3662 symbol table index lower than any we've seen to date, record it for
6ccf4795
RS
3663 posterity. FOR_CALL is true if the caller is only interested in
3664 using the GOT entry for calls. */
b49e97c9 3665
b34976b6 3666static bfd_boolean
9719ad41
RS
3667mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3668 bfd *abfd, struct bfd_link_info *info,
6ccf4795 3669 bfd_boolean for_call,
0f20cc35 3670 unsigned char tls_flag)
b49e97c9 3671{
a8028dd0 3672 struct mips_elf_link_hash_table *htab;
634835ae 3673 struct mips_elf_link_hash_entry *hmips;
f4416af6 3674 struct mips_got_entry entry, **loc;
a8028dd0
RS
3675 struct mips_got_info *g;
3676
3677 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3678 BFD_ASSERT (htab != NULL);
3679
634835ae 3680 hmips = (struct mips_elf_link_hash_entry *) h;
6ccf4795
RS
3681 if (!for_call)
3682 hmips->got_only_for_calls = FALSE;
f4416af6 3683
b49e97c9
TS
3684 /* A global symbol in the GOT must also be in the dynamic symbol
3685 table. */
7c5fcef7
L
3686 if (h->dynindx == -1)
3687 {
3688 switch (ELF_ST_VISIBILITY (h->other))
3689 {
3690 case STV_INTERNAL:
3691 case STV_HIDDEN:
33bb52fb 3692 _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
7c5fcef7
L
3693 break;
3694 }
c152c796 3695 if (!bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 3696 return FALSE;
7c5fcef7 3697 }
b49e97c9 3698
86324f90 3699 /* Make sure we have a GOT to put this entry into. */
a8028dd0 3700 g = htab->got_info;
86324f90
EC
3701 BFD_ASSERT (g != NULL);
3702
f4416af6
AO
3703 entry.abfd = abfd;
3704 entry.symndx = -1;
3705 entry.d.h = (struct mips_elf_link_hash_entry *) h;
0f20cc35 3706 entry.tls_type = 0;
f4416af6
AO
3707
3708 loc = (struct mips_got_entry **) htab_find_slot (g->got_entries, &entry,
3709 INSERT);
3710
b49e97c9
TS
3711 /* If we've already marked this entry as needing GOT space, we don't
3712 need to do it again. */
f4416af6 3713 if (*loc)
0f20cc35
DJ
3714 {
3715 (*loc)->tls_type |= tls_flag;
3716 return TRUE;
3717 }
f4416af6
AO
3718
3719 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3720
3721 if (! *loc)
3722 return FALSE;
143d77c5 3723
f4416af6 3724 entry.gotidx = -1;
0f20cc35
DJ
3725 entry.tls_type = tls_flag;
3726
f4416af6
AO
3727 memcpy (*loc, &entry, sizeof entry);
3728
0f20cc35 3729 if (tls_flag == 0)
634835ae 3730 hmips->global_got_area = GGA_NORMAL;
b49e97c9 3731
b34976b6 3732 return TRUE;
b49e97c9 3733}
f4416af6
AO
3734
3735/* Reserve space in G for a GOT entry containing the value of symbol
3736 SYMNDX in input bfd ABDF, plus ADDEND. */
3737
3738static bfd_boolean
9719ad41 3739mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
a8028dd0 3740 struct bfd_link_info *info,
0f20cc35 3741 unsigned char tls_flag)
f4416af6 3742{
a8028dd0
RS
3743 struct mips_elf_link_hash_table *htab;
3744 struct mips_got_info *g;
f4416af6
AO
3745 struct mips_got_entry entry, **loc;
3746
a8028dd0 3747 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3748 BFD_ASSERT (htab != NULL);
3749
a8028dd0
RS
3750 g = htab->got_info;
3751 BFD_ASSERT (g != NULL);
3752
f4416af6
AO
3753 entry.abfd = abfd;
3754 entry.symndx = symndx;
3755 entry.d.addend = addend;
0f20cc35 3756 entry.tls_type = tls_flag;
f4416af6
AO
3757 loc = (struct mips_got_entry **)
3758 htab_find_slot (g->got_entries, &entry, INSERT);
3759
3760 if (*loc)
0f20cc35
DJ
3761 {
3762 if (tls_flag == GOT_TLS_GD && !((*loc)->tls_type & GOT_TLS_GD))
3763 {
3764 g->tls_gotno += 2;
3765 (*loc)->tls_type |= tls_flag;
3766 }
3767 else if (tls_flag == GOT_TLS_IE && !((*loc)->tls_type & GOT_TLS_IE))
3768 {
3769 g->tls_gotno += 1;
3770 (*loc)->tls_type |= tls_flag;
3771 }
3772 return TRUE;
3773 }
f4416af6 3774
0f20cc35
DJ
3775 if (tls_flag != 0)
3776 {
3777 entry.gotidx = -1;
3778 entry.tls_type = tls_flag;
3779 if (tls_flag == GOT_TLS_IE)
3780 g->tls_gotno += 1;
3781 else if (tls_flag == GOT_TLS_GD)
3782 g->tls_gotno += 2;
3783 else if (g->tls_ldm_offset == MINUS_ONE)
3784 {
3785 g->tls_ldm_offset = MINUS_TWO;
3786 g->tls_gotno += 2;
3787 }
3788 }
3789 else
3790 {
3791 entry.gotidx = g->local_gotno++;
3792 entry.tls_type = 0;
3793 }
f4416af6
AO
3794
3795 *loc = (struct mips_got_entry *)bfd_alloc (abfd, sizeof entry);
3796
3797 if (! *loc)
3798 return FALSE;
143d77c5 3799
f4416af6
AO
3800 memcpy (*loc, &entry, sizeof entry);
3801
3802 return TRUE;
3803}
c224138d
RS
3804
3805/* Return the maximum number of GOT page entries required for RANGE. */
3806
3807static bfd_vma
3808mips_elf_pages_for_range (const struct mips_got_page_range *range)
3809{
3810 return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
3811}
3812
3a3b6725 3813/* Record that ABFD has a page relocation against symbol SYMNDX and
a8028dd0
RS
3814 that ADDEND is the addend for that relocation.
3815
3816 This function creates an upper bound on the number of GOT slots
3817 required; no attempt is made to combine references to non-overridable
3818 global symbols across multiple input files. */
c224138d
RS
3819
3820static bfd_boolean
a8028dd0
RS
3821mips_elf_record_got_page_entry (struct bfd_link_info *info, bfd *abfd,
3822 long symndx, bfd_signed_vma addend)
c224138d 3823{
a8028dd0
RS
3824 struct mips_elf_link_hash_table *htab;
3825 struct mips_got_info *g;
c224138d
RS
3826 struct mips_got_page_entry lookup, *entry;
3827 struct mips_got_page_range **range_ptr, *range;
3828 bfd_vma old_pages, new_pages;
3829 void **loc;
3830
a8028dd0 3831 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3832 BFD_ASSERT (htab != NULL);
3833
a8028dd0
RS
3834 g = htab->got_info;
3835 BFD_ASSERT (g != NULL);
3836
c224138d
RS
3837 /* Find the mips_got_page_entry hash table entry for this symbol. */
3838 lookup.abfd = abfd;
3839 lookup.symndx = symndx;
3840 loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
3841 if (loc == NULL)
3842 return FALSE;
3843
3844 /* Create a mips_got_page_entry if this is the first time we've
3845 seen the symbol. */
3846 entry = (struct mips_got_page_entry *) *loc;
3847 if (!entry)
3848 {
3849 entry = bfd_alloc (abfd, sizeof (*entry));
3850 if (!entry)
3851 return FALSE;
3852
3853 entry->abfd = abfd;
3854 entry->symndx = symndx;
3855 entry->ranges = NULL;
3856 entry->num_pages = 0;
3857 *loc = entry;
3858 }
3859
3860 /* Skip over ranges whose maximum extent cannot share a page entry
3861 with ADDEND. */
3862 range_ptr = &entry->ranges;
3863 while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
3864 range_ptr = &(*range_ptr)->next;
3865
3866 /* If we scanned to the end of the list, or found a range whose
3867 minimum extent cannot share a page entry with ADDEND, create
3868 a new singleton range. */
3869 range = *range_ptr;
3870 if (!range || addend < range->min_addend - 0xffff)
3871 {
3872 range = bfd_alloc (abfd, sizeof (*range));
3873 if (!range)
3874 return FALSE;
3875
3876 range->next = *range_ptr;
3877 range->min_addend = addend;
3878 range->max_addend = addend;
3879
3880 *range_ptr = range;
3881 entry->num_pages++;
3882 g->page_gotno++;
3883 return TRUE;
3884 }
3885
3886 /* Remember how many pages the old range contributed. */
3887 old_pages = mips_elf_pages_for_range (range);
3888
3889 /* Update the ranges. */
3890 if (addend < range->min_addend)
3891 range->min_addend = addend;
3892 else if (addend > range->max_addend)
3893 {
3894 if (range->next && addend >= range->next->min_addend - 0xffff)
3895 {
3896 old_pages += mips_elf_pages_for_range (range->next);
3897 range->max_addend = range->next->max_addend;
3898 range->next = range->next->next;
3899 }
3900 else
3901 range->max_addend = addend;
3902 }
3903
3904 /* Record any change in the total estimate. */
3905 new_pages = mips_elf_pages_for_range (range);
3906 if (old_pages != new_pages)
3907 {
3908 entry->num_pages += new_pages - old_pages;
3909 g->page_gotno += new_pages - old_pages;
3910 }
3911
3912 return TRUE;
3913}
33bb52fb
RS
3914
3915/* Add room for N relocations to the .rel(a).dyn section in ABFD. */
3916
3917static void
3918mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
3919 unsigned int n)
3920{
3921 asection *s;
3922 struct mips_elf_link_hash_table *htab;
3923
3924 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
3925 BFD_ASSERT (htab != NULL);
3926
33bb52fb
RS
3927 s = mips_elf_rel_dyn_section (info, FALSE);
3928 BFD_ASSERT (s != NULL);
3929
3930 if (htab->is_vxworks)
3931 s->size += n * MIPS_ELF_RELA_SIZE (abfd);
3932 else
3933 {
3934 if (s->size == 0)
3935 {
3936 /* Make room for a null element. */
3937 s->size += MIPS_ELF_REL_SIZE (abfd);
3938 ++s->reloc_count;
3939 }
3940 s->size += n * MIPS_ELF_REL_SIZE (abfd);
3941 }
3942}
3943\f
3944/* A htab_traverse callback for GOT entries. Set boolean *DATA to true
3945 if the GOT entry is for an indirect or warning symbol. */
3946
3947static int
3948mips_elf_check_recreate_got (void **entryp, void *data)
3949{
3950 struct mips_got_entry *entry;
3951 bfd_boolean *must_recreate;
3952
3953 entry = (struct mips_got_entry *) *entryp;
3954 must_recreate = (bfd_boolean *) data;
3955 if (entry->abfd != NULL && entry->symndx == -1)
3956 {
3957 struct mips_elf_link_hash_entry *h;
3958
3959 h = entry->d.h;
3960 if (h->root.root.type == bfd_link_hash_indirect
3961 || h->root.root.type == bfd_link_hash_warning)
3962 {
3963 *must_recreate = TRUE;
3964 return 0;
3965 }
3966 }
3967 return 1;
3968}
3969
3970/* A htab_traverse callback for GOT entries. Add all entries to
3971 hash table *DATA, converting entries for indirect and warning
3972 symbols into entries for the target symbol. Set *DATA to null
3973 on error. */
3974
3975static int
3976mips_elf_recreate_got (void **entryp, void *data)
3977{
3978 htab_t *new_got;
3979 struct mips_got_entry *entry;
3980 void **slot;
3981
3982 new_got = (htab_t *) data;
3983 entry = (struct mips_got_entry *) *entryp;
3984 if (entry->abfd != NULL && entry->symndx == -1)
3985 {
3986 struct mips_elf_link_hash_entry *h;
3987
3988 h = entry->d.h;
3989 while (h->root.root.type == bfd_link_hash_indirect
3990 || h->root.root.type == bfd_link_hash_warning)
634835ae
RS
3991 {
3992 BFD_ASSERT (h->global_got_area == GGA_NONE);
3993 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
3994 }
33bb52fb
RS
3995 entry->d.h = h;
3996 }
3997 slot = htab_find_slot (*new_got, entry, INSERT);
3998 if (slot == NULL)
3999 {
4000 *new_got = NULL;
4001 return 0;
4002 }
4003 if (*slot == NULL)
4004 *slot = entry;
33bb52fb
RS
4005 return 1;
4006}
4007
4008/* If any entries in G->got_entries are for indirect or warning symbols,
4009 replace them with entries for the target symbol. */
4010
4011static bfd_boolean
4012mips_elf_resolve_final_got_entries (struct mips_got_info *g)
4013{
4014 bfd_boolean must_recreate;
4015 htab_t new_got;
4016
4017 must_recreate = FALSE;
4018 htab_traverse (g->got_entries, mips_elf_check_recreate_got, &must_recreate);
4019 if (must_recreate)
4020 {
4021 new_got = htab_create (htab_size (g->got_entries),
4022 mips_elf_got_entry_hash,
4023 mips_elf_got_entry_eq, NULL);
4024 htab_traverse (g->got_entries, mips_elf_recreate_got, &new_got);
4025 if (new_got == NULL)
4026 return FALSE;
4027
33bb52fb
RS
4028 htab_delete (g->got_entries);
4029 g->got_entries = new_got;
4030 }
4031 return TRUE;
4032}
4033
634835ae 4034/* A mips_elf_link_hash_traverse callback for which DATA points
020d7251
RS
4035 to the link_info structure. Count the number of type (3) entries
4036 in the master GOT. */
33bb52fb
RS
4037
4038static int
d4596a51 4039mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
33bb52fb 4040{
020d7251 4041 struct bfd_link_info *info;
6ccf4795 4042 struct mips_elf_link_hash_table *htab;
33bb52fb
RS
4043 struct mips_got_info *g;
4044
020d7251 4045 info = (struct bfd_link_info *) data;
6ccf4795
RS
4046 htab = mips_elf_hash_table (info);
4047 g = htab->got_info;
d4596a51 4048 if (h->global_got_area != GGA_NONE)
33bb52fb 4049 {
020d7251
RS
4050 /* Make a final decision about whether the symbol belongs in the
4051 local or global GOT. Symbols that bind locally can (and in the
4052 case of forced-local symbols, must) live in the local GOT.
4053 Those that are aren't in the dynamic symbol table must also
4054 live in the local GOT.
4055
4056 Note that the former condition does not always imply the
4057 latter: symbols do not bind locally if they are completely
4058 undefined. We'll report undefined symbols later if appropriate. */
6ccf4795
RS
4059 if (h->root.dynindx == -1
4060 || (h->got_only_for_calls
4061 ? SYMBOL_CALLS_LOCAL (info, &h->root)
4062 : SYMBOL_REFERENCES_LOCAL (info, &h->root)))
d4596a51 4063 {
020d7251
RS
4064 /* The symbol belongs in the local GOT. We no longer need this
4065 entry if it was only used for relocations; those relocations
4066 will be against the null or section symbol instead of H. */
d4596a51
RS
4067 if (h->global_got_area != GGA_RELOC_ONLY)
4068 g->local_gotno++;
4069 h->global_got_area = GGA_NONE;
4070 }
6ccf4795
RS
4071 else if (htab->is_vxworks
4072 && h->got_only_for_calls
4073 && h->root.plt.offset != MINUS_ONE)
4074 /* On VxWorks, calls can refer directly to the .got.plt entry;
4075 they don't need entries in the regular GOT. .got.plt entries
4076 will be allocated by _bfd_mips_elf_adjust_dynamic_symbol. */
4077 h->global_got_area = GGA_NONE;
d4596a51 4078 else
23cc69b6
RS
4079 {
4080 g->global_gotno++;
4081 if (h->global_got_area == GGA_RELOC_ONLY)
4082 g->reloc_only_gotno++;
4083 }
33bb52fb
RS
4084 }
4085 return 1;
4086}
f4416af6
AO
4087\f
4088/* Compute the hash value of the bfd in a bfd2got hash entry. */
4089
4090static hashval_t
9719ad41 4091mips_elf_bfd2got_entry_hash (const void *entry_)
f4416af6
AO
4092{
4093 const struct mips_elf_bfd2got_hash *entry
4094 = (struct mips_elf_bfd2got_hash *)entry_;
4095
4096 return entry->bfd->id;
4097}
4098
4099/* Check whether two hash entries have the same bfd. */
4100
4101static int
9719ad41 4102mips_elf_bfd2got_entry_eq (const void *entry1, const void *entry2)
f4416af6
AO
4103{
4104 const struct mips_elf_bfd2got_hash *e1
4105 = (const struct mips_elf_bfd2got_hash *)entry1;
4106 const struct mips_elf_bfd2got_hash *e2
4107 = (const struct mips_elf_bfd2got_hash *)entry2;
4108
4109 return e1->bfd == e2->bfd;
4110}
4111
bad36eac 4112/* In a multi-got link, determine the GOT to be used for IBFD. G must
f4416af6
AO
4113 be the master GOT data. */
4114
4115static struct mips_got_info *
9719ad41 4116mips_elf_got_for_ibfd (struct mips_got_info *g, bfd *ibfd)
f4416af6
AO
4117{
4118 struct mips_elf_bfd2got_hash e, *p;
4119
4120 if (! g->bfd2got)
4121 return g;
4122
4123 e.bfd = ibfd;
9719ad41 4124 p = htab_find (g->bfd2got, &e);
f4416af6
AO
4125 return p ? p->g : NULL;
4126}
4127
c224138d
RS
4128/* Use BFD2GOT to find ABFD's got entry, creating one if none exists.
4129 Return NULL if an error occured. */
f4416af6 4130
c224138d
RS
4131static struct mips_got_info *
4132mips_elf_get_got_for_bfd (struct htab *bfd2got, bfd *output_bfd,
4133 bfd *input_bfd)
f4416af6 4134{
f4416af6 4135 struct mips_elf_bfd2got_hash bfdgot_entry, *bfdgot;
c224138d 4136 struct mips_got_info *g;
f4416af6 4137 void **bfdgotp;
143d77c5 4138
c224138d 4139 bfdgot_entry.bfd = input_bfd;
f4416af6 4140 bfdgotp = htab_find_slot (bfd2got, &bfdgot_entry, INSERT);
c224138d 4141 bfdgot = (struct mips_elf_bfd2got_hash *) *bfdgotp;
f4416af6 4142
c224138d 4143 if (bfdgot == NULL)
f4416af6 4144 {
c224138d
RS
4145 bfdgot = ((struct mips_elf_bfd2got_hash *)
4146 bfd_alloc (output_bfd, sizeof (struct mips_elf_bfd2got_hash)));
f4416af6 4147 if (bfdgot == NULL)
c224138d 4148 return NULL;
f4416af6
AO
4149
4150 *bfdgotp = bfdgot;
4151
c224138d
RS
4152 g = ((struct mips_got_info *)
4153 bfd_alloc (output_bfd, sizeof (struct mips_got_info)));
f4416af6 4154 if (g == NULL)
c224138d
RS
4155 return NULL;
4156
4157 bfdgot->bfd = input_bfd;
4158 bfdgot->g = g;
f4416af6
AO
4159
4160 g->global_gotsym = NULL;
4161 g->global_gotno = 0;
23cc69b6 4162 g->reloc_only_gotno = 0;
f4416af6 4163 g->local_gotno = 0;
c224138d 4164 g->page_gotno = 0;
f4416af6 4165 g->assigned_gotno = -1;
0f20cc35
DJ
4166 g->tls_gotno = 0;
4167 g->tls_assigned_gotno = 0;
4168 g->tls_ldm_offset = MINUS_ONE;
f4416af6 4169 g->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
9719ad41 4170 mips_elf_multi_got_entry_eq, NULL);
f4416af6 4171 if (g->got_entries == NULL)
c224138d
RS
4172 return NULL;
4173
4174 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4175 mips_got_page_entry_eq, NULL);
4176 if (g->got_page_entries == NULL)
4177 return NULL;
f4416af6
AO
4178
4179 g->bfd2got = NULL;
4180 g->next = NULL;
4181 }
4182
c224138d
RS
4183 return bfdgot->g;
4184}
4185
4186/* A htab_traverse callback for the entries in the master got.
4187 Create one separate got for each bfd that has entries in the global
4188 got, such that we can tell how many local and global entries each
4189 bfd requires. */
4190
4191static int
4192mips_elf_make_got_per_bfd (void **entryp, void *p)
4193{
4194 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4195 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
4196 struct mips_got_info *g;
4197
4198 g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4199 if (g == NULL)
4200 {
4201 arg->obfd = NULL;
4202 return 0;
4203 }
4204
f4416af6
AO
4205 /* Insert the GOT entry in the bfd's got entry hash table. */
4206 entryp = htab_find_slot (g->got_entries, entry, INSERT);
4207 if (*entryp != NULL)
4208 return 1;
143d77c5 4209
f4416af6
AO
4210 *entryp = entry;
4211
0f20cc35
DJ
4212 if (entry->tls_type)
4213 {
4214 if (entry->tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
4215 g->tls_gotno += 2;
4216 if (entry->tls_type & GOT_TLS_IE)
4217 g->tls_gotno += 1;
4218 }
020d7251 4219 else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
f4416af6
AO
4220 ++g->local_gotno;
4221 else
4222 ++g->global_gotno;
4223
4224 return 1;
4225}
4226
c224138d
RS
4227/* A htab_traverse callback for the page entries in the master got.
4228 Associate each page entry with the bfd's got. */
4229
4230static int
4231mips_elf_make_got_pages_per_bfd (void **entryp, void *p)
4232{
4233 struct mips_got_page_entry *entry = (struct mips_got_page_entry *) *entryp;
4234 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *) p;
4235 struct mips_got_info *g;
4236
4237 g = mips_elf_get_got_for_bfd (arg->bfd2got, arg->obfd, entry->abfd);
4238 if (g == NULL)
4239 {
4240 arg->obfd = NULL;
4241 return 0;
4242 }
4243
4244 /* Insert the GOT entry in the bfd's got entry hash table. */
4245 entryp = htab_find_slot (g->got_page_entries, entry, INSERT);
4246 if (*entryp != NULL)
4247 return 1;
4248
4249 *entryp = entry;
4250 g->page_gotno += entry->num_pages;
4251 return 1;
4252}
4253
4254/* Consider merging the got described by BFD2GOT with TO, using the
4255 information given by ARG. Return -1 if this would lead to overflow,
4256 1 if they were merged successfully, and 0 if a merge failed due to
4257 lack of memory. (These values are chosen so that nonnegative return
4258 values can be returned by a htab_traverse callback.) */
4259
4260static int
4261mips_elf_merge_got_with (struct mips_elf_bfd2got_hash *bfd2got,
4262 struct mips_got_info *to,
4263 struct mips_elf_got_per_bfd_arg *arg)
4264{
4265 struct mips_got_info *from = bfd2got->g;
4266 unsigned int estimate;
4267
4268 /* Work out how many page entries we would need for the combined GOT. */
4269 estimate = arg->max_pages;
4270 if (estimate >= from->page_gotno + to->page_gotno)
4271 estimate = from->page_gotno + to->page_gotno;
4272
e2ece73c 4273 /* And conservatively estimate how many local and TLS entries
c224138d 4274 would be needed. */
e2ece73c
RS
4275 estimate += from->local_gotno + to->local_gotno;
4276 estimate += from->tls_gotno + to->tls_gotno;
4277
17214937
RS
4278 /* If we're merging with the primary got, any TLS relocations will
4279 come after the full set of global entries. Otherwise estimate those
e2ece73c 4280 conservatively as well. */
17214937 4281 if (to == arg->primary && from->tls_gotno + to->tls_gotno)
e2ece73c
RS
4282 estimate += arg->global_count;
4283 else
4284 estimate += from->global_gotno + to->global_gotno;
c224138d
RS
4285
4286 /* Bail out if the combined GOT might be too big. */
4287 if (estimate > arg->max_count)
4288 return -1;
4289
4290 /* Commit to the merge. Record that TO is now the bfd for this got. */
4291 bfd2got->g = to;
4292
4293 /* Transfer the bfd's got information from FROM to TO. */
4294 htab_traverse (from->got_entries, mips_elf_make_got_per_bfd, arg);
4295 if (arg->obfd == NULL)
4296 return 0;
4297
4298 htab_traverse (from->got_page_entries, mips_elf_make_got_pages_per_bfd, arg);
4299 if (arg->obfd == NULL)
4300 return 0;
4301
4302 /* We don't have to worry about releasing memory of the actual
4303 got entries, since they're all in the master got_entries hash
4304 table anyway. */
4305 htab_delete (from->got_entries);
4306 htab_delete (from->got_page_entries);
4307 return 1;
4308}
4309
f4416af6
AO
4310/* Attempt to merge gots of different input bfds. Try to use as much
4311 as possible of the primary got, since it doesn't require explicit
4312 dynamic relocations, but don't use bfds that would reference global
4313 symbols out of the addressable range. Failing the primary got,
4314 attempt to merge with the current got, or finish the current got
4315 and then make make the new got current. */
4316
4317static int
9719ad41 4318mips_elf_merge_gots (void **bfd2got_, void *p)
f4416af6
AO
4319{
4320 struct mips_elf_bfd2got_hash *bfd2got
4321 = (struct mips_elf_bfd2got_hash *)*bfd2got_;
4322 struct mips_elf_got_per_bfd_arg *arg = (struct mips_elf_got_per_bfd_arg *)p;
c224138d
RS
4323 struct mips_got_info *g;
4324 unsigned int estimate;
4325 int result;
4326
4327 g = bfd2got->g;
4328
4329 /* Work out the number of page, local and TLS entries. */
4330 estimate = arg->max_pages;
4331 if (estimate > g->page_gotno)
4332 estimate = g->page_gotno;
4333 estimate += g->local_gotno + g->tls_gotno;
0f20cc35
DJ
4334
4335 /* We place TLS GOT entries after both locals and globals. The globals
4336 for the primary GOT may overflow the normal GOT size limit, so be
4337 sure not to merge a GOT which requires TLS with the primary GOT in that
4338 case. This doesn't affect non-primary GOTs. */
c224138d 4339 estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
143d77c5 4340
c224138d 4341 if (estimate <= arg->max_count)
f4416af6 4342 {
c224138d
RS
4343 /* If we don't have a primary GOT, use it as
4344 a starting point for the primary GOT. */
4345 if (!arg->primary)
4346 {
4347 arg->primary = bfd2got->g;
4348 return 1;
4349 }
f4416af6 4350
c224138d
RS
4351 /* Try merging with the primary GOT. */
4352 result = mips_elf_merge_got_with (bfd2got, arg->primary, arg);
4353 if (result >= 0)
4354 return result;
f4416af6 4355 }
c224138d 4356
f4416af6 4357 /* If we can merge with the last-created got, do it. */
c224138d 4358 if (arg->current)
f4416af6 4359 {
c224138d
RS
4360 result = mips_elf_merge_got_with (bfd2got, arg->current, arg);
4361 if (result >= 0)
4362 return result;
f4416af6 4363 }
c224138d 4364
f4416af6
AO
4365 /* Well, we couldn't merge, so create a new GOT. Don't check if it
4366 fits; if it turns out that it doesn't, we'll get relocation
4367 overflows anyway. */
c224138d
RS
4368 g->next = arg->current;
4369 arg->current = g;
0f20cc35
DJ
4370
4371 return 1;
4372}
4373
ead49a57
RS
4374/* Set the TLS GOT index for the GOT entry in ENTRYP. ENTRYP's NEXT field
4375 is null iff there is just a single GOT. */
0f20cc35
DJ
4376
4377static int
4378mips_elf_initialize_tls_index (void **entryp, void *p)
4379{
4380 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4381 struct mips_got_info *g = p;
ead49a57 4382 bfd_vma next_index;
cbf2cba4 4383 unsigned char tls_type;
0f20cc35
DJ
4384
4385 /* We're only interested in TLS symbols. */
4386 if (entry->tls_type == 0)
4387 return 1;
4388
ead49a57
RS
4389 next_index = MIPS_ELF_GOT_SIZE (entry->abfd) * (long) g->tls_assigned_gotno;
4390
4391 if (entry->symndx == -1 && g->next == NULL)
0f20cc35 4392 {
ead49a57
RS
4393 /* A type (3) got entry in the single-GOT case. We use the symbol's
4394 hash table entry to track its index. */
4395 if (entry->d.h->tls_type & GOT_TLS_OFFSET_DONE)
4396 return 1;
4397 entry->d.h->tls_type |= GOT_TLS_OFFSET_DONE;
4398 entry->d.h->tls_got_offset = next_index;
cbf2cba4 4399 tls_type = entry->d.h->tls_type;
ead49a57
RS
4400 }
4401 else
4402 {
4403 if (entry->tls_type & GOT_TLS_LDM)
0f20cc35 4404 {
ead49a57
RS
4405 /* There are separate mips_got_entry objects for each input bfd
4406 that requires an LDM entry. Make sure that all LDM entries in
4407 a GOT resolve to the same index. */
4408 if (g->tls_ldm_offset != MINUS_TWO && g->tls_ldm_offset != MINUS_ONE)
4005427f 4409 {
ead49a57 4410 entry->gotidx = g->tls_ldm_offset;
4005427f
RS
4411 return 1;
4412 }
ead49a57 4413 g->tls_ldm_offset = next_index;
0f20cc35 4414 }
ead49a57 4415 entry->gotidx = next_index;
cbf2cba4 4416 tls_type = entry->tls_type;
f4416af6
AO
4417 }
4418
ead49a57 4419 /* Account for the entries we've just allocated. */
cbf2cba4 4420 if (tls_type & (GOT_TLS_GD | GOT_TLS_LDM))
0f20cc35 4421 g->tls_assigned_gotno += 2;
cbf2cba4 4422 if (tls_type & GOT_TLS_IE)
0f20cc35
DJ
4423 g->tls_assigned_gotno += 1;
4424
f4416af6
AO
4425 return 1;
4426}
4427
4428/* If passed a NULL mips_got_info in the argument, set the marker used
4429 to tell whether a global symbol needs a got entry (in the primary
4430 got) to the given VALUE.
4431
4432 If passed a pointer G to a mips_got_info in the argument (it must
4433 not be the primary GOT), compute the offset from the beginning of
4434 the (primary) GOT section to the entry in G corresponding to the
4435 global symbol. G's assigned_gotno must contain the index of the
4436 first available global GOT entry in G. VALUE must contain the size
4437 of a GOT entry in bytes. For each global GOT entry that requires a
4438 dynamic relocation, NEEDED_RELOCS is incremented, and the symbol is
4cc11e76 4439 marked as not eligible for lazy resolution through a function
f4416af6
AO
4440 stub. */
4441static int
9719ad41 4442mips_elf_set_global_got_offset (void **entryp, void *p)
f4416af6
AO
4443{
4444 struct mips_got_entry *entry = (struct mips_got_entry *)*entryp;
4445 struct mips_elf_set_global_got_offset_arg *arg
4446 = (struct mips_elf_set_global_got_offset_arg *)p;
4447 struct mips_got_info *g = arg->g;
4448
0f20cc35
DJ
4449 if (g && entry->tls_type != GOT_NORMAL)
4450 arg->needed_relocs +=
4451 mips_tls_got_relocs (arg->info, entry->tls_type,
4452 entry->symndx == -1 ? &entry->d.h->root : NULL);
4453
634835ae
RS
4454 if (entry->abfd != NULL
4455 && entry->symndx == -1
4456 && entry->d.h->global_got_area != GGA_NONE)
f4416af6
AO
4457 {
4458 if (g)
4459 {
4460 BFD_ASSERT (g->global_gotsym == NULL);
4461
4462 entry->gotidx = arg->value * (long) g->assigned_gotno++;
f4416af6
AO
4463 if (arg->info->shared
4464 || (elf_hash_table (arg->info)->dynamic_sections_created
f5385ebf
AM
4465 && entry->d.h->root.def_dynamic
4466 && !entry->d.h->root.def_regular))
f4416af6
AO
4467 ++arg->needed_relocs;
4468 }
4469 else
634835ae 4470 entry->d.h->global_got_area = arg->value;
f4416af6
AO
4471 }
4472
4473 return 1;
4474}
4475
33bb52fb
RS
4476/* A htab_traverse callback for GOT entries for which DATA is the
4477 bfd_link_info. Forbid any global symbols from having traditional
4478 lazy-binding stubs. */
4479
0626d451 4480static int
33bb52fb 4481mips_elf_forbid_lazy_stubs (void **entryp, void *data)
0626d451 4482{
33bb52fb
RS
4483 struct bfd_link_info *info;
4484 struct mips_elf_link_hash_table *htab;
4485 struct mips_got_entry *entry;
0626d451 4486
33bb52fb
RS
4487 entry = (struct mips_got_entry *) *entryp;
4488 info = (struct bfd_link_info *) data;
4489 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4490 BFD_ASSERT (htab != NULL);
4491
0626d451
RS
4492 if (entry->abfd != NULL
4493 && entry->symndx == -1
33bb52fb 4494 && entry->d.h->needs_lazy_stub)
f4416af6 4495 {
33bb52fb
RS
4496 entry->d.h->needs_lazy_stub = FALSE;
4497 htab->lazy_stub_count--;
f4416af6 4498 }
143d77c5 4499
f4416af6
AO
4500 return 1;
4501}
4502
f4416af6
AO
4503/* Return the offset of an input bfd IBFD's GOT from the beginning of
4504 the primary GOT. */
4505static bfd_vma
9719ad41 4506mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
f4416af6
AO
4507{
4508 if (g->bfd2got == NULL)
4509 return 0;
4510
4511 g = mips_elf_got_for_ibfd (g, ibfd);
4512 if (! g)
4513 return 0;
4514
4515 BFD_ASSERT (g->next);
4516
4517 g = g->next;
143d77c5 4518
0f20cc35
DJ
4519 return (g->local_gotno + g->global_gotno + g->tls_gotno)
4520 * MIPS_ELF_GOT_SIZE (abfd);
f4416af6
AO
4521}
4522
4523/* Turn a single GOT that is too big for 16-bit addressing into
4524 a sequence of GOTs, each one 16-bit addressable. */
4525
4526static bfd_boolean
9719ad41 4527mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
a8028dd0 4528 asection *got, bfd_size_type pages)
f4416af6 4529{
a8028dd0 4530 struct mips_elf_link_hash_table *htab;
f4416af6
AO
4531 struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4532 struct mips_elf_set_global_got_offset_arg set_got_offset_arg;
a8028dd0 4533 struct mips_got_info *g, *gg;
33bb52fb
RS
4534 unsigned int assign, needed_relocs;
4535 bfd *dynobj;
f4416af6 4536
33bb52fb 4537 dynobj = elf_hash_table (info)->dynobj;
a8028dd0 4538 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
4539 BFD_ASSERT (htab != NULL);
4540
a8028dd0 4541 g = htab->got_info;
f4416af6 4542 g->bfd2got = htab_try_create (1, mips_elf_bfd2got_entry_hash,
9719ad41 4543 mips_elf_bfd2got_entry_eq, NULL);
f4416af6
AO
4544 if (g->bfd2got == NULL)
4545 return FALSE;
4546
4547 got_per_bfd_arg.bfd2got = g->bfd2got;
4548 got_per_bfd_arg.obfd = abfd;
4549 got_per_bfd_arg.info = info;
4550
4551 /* Count how many GOT entries each input bfd requires, creating a
4552 map from bfd to got info while at that. */
f4416af6
AO
4553 htab_traverse (g->got_entries, mips_elf_make_got_per_bfd, &got_per_bfd_arg);
4554 if (got_per_bfd_arg.obfd == NULL)
4555 return FALSE;
4556
c224138d
RS
4557 /* Also count how many page entries each input bfd requires. */
4558 htab_traverse (g->got_page_entries, mips_elf_make_got_pages_per_bfd,
4559 &got_per_bfd_arg);
4560 if (got_per_bfd_arg.obfd == NULL)
4561 return FALSE;
4562
f4416af6
AO
4563 got_per_bfd_arg.current = NULL;
4564 got_per_bfd_arg.primary = NULL;
0a44bf69 4565 got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
f4416af6 4566 / MIPS_ELF_GOT_SIZE (abfd))
861fb55a 4567 - htab->reserved_gotno);
c224138d 4568 got_per_bfd_arg.max_pages = pages;
0f20cc35
DJ
4569 /* The number of globals that will be included in the primary GOT.
4570 See the calls to mips_elf_set_global_got_offset below for more
4571 information. */
4572 got_per_bfd_arg.global_count = g->global_gotno;
f4416af6
AO
4573
4574 /* Try to merge the GOTs of input bfds together, as long as they
4575 don't seem to exceed the maximum GOT size, choosing one of them
4576 to be the primary GOT. */
4577 htab_traverse (g->bfd2got, mips_elf_merge_gots, &got_per_bfd_arg);
4578 if (got_per_bfd_arg.obfd == NULL)
4579 return FALSE;
4580
0f20cc35 4581 /* If we do not find any suitable primary GOT, create an empty one. */
f4416af6
AO
4582 if (got_per_bfd_arg.primary == NULL)
4583 {
4584 g->next = (struct mips_got_info *)
4585 bfd_alloc (abfd, sizeof (struct mips_got_info));
4586 if (g->next == NULL)
4587 return FALSE;
4588
4589 g->next->global_gotsym = NULL;
4590 g->next->global_gotno = 0;
23cc69b6 4591 g->next->reloc_only_gotno = 0;
f4416af6 4592 g->next->local_gotno = 0;
c224138d 4593 g->next->page_gotno = 0;
0f20cc35 4594 g->next->tls_gotno = 0;
f4416af6 4595 g->next->assigned_gotno = 0;
0f20cc35
DJ
4596 g->next->tls_assigned_gotno = 0;
4597 g->next->tls_ldm_offset = MINUS_ONE;
f4416af6
AO
4598 g->next->got_entries = htab_try_create (1, mips_elf_multi_got_entry_hash,
4599 mips_elf_multi_got_entry_eq,
9719ad41 4600 NULL);
f4416af6
AO
4601 if (g->next->got_entries == NULL)
4602 return FALSE;
c224138d
RS
4603 g->next->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4604 mips_got_page_entry_eq,
4605 NULL);
4606 if (g->next->got_page_entries == NULL)
4607 return FALSE;
f4416af6
AO
4608 g->next->bfd2got = NULL;
4609 }
4610 else
4611 g->next = got_per_bfd_arg.primary;
4612 g->next->next = got_per_bfd_arg.current;
4613
4614 /* GG is now the master GOT, and G is the primary GOT. */
4615 gg = g;
4616 g = g->next;
4617
4618 /* Map the output bfd to the primary got. That's what we're going
4619 to use for bfds that use GOT16 or GOT_PAGE relocations that we
4620 didn't mark in check_relocs, and we want a quick way to find it.
4621 We can't just use gg->next because we're going to reverse the
4622 list. */
4623 {
4624 struct mips_elf_bfd2got_hash *bfdgot;
4625 void **bfdgotp;
143d77c5 4626
f4416af6
AO
4627 bfdgot = (struct mips_elf_bfd2got_hash *)bfd_alloc
4628 (abfd, sizeof (struct mips_elf_bfd2got_hash));
4629
4630 if (bfdgot == NULL)
4631 return FALSE;
4632
4633 bfdgot->bfd = abfd;
4634 bfdgot->g = g;
4635 bfdgotp = htab_find_slot (gg->bfd2got, bfdgot, INSERT);
4636
4637 BFD_ASSERT (*bfdgotp == NULL);
4638 *bfdgotp = bfdgot;
4639 }
4640
634835ae
RS
4641 /* Every symbol that is referenced in a dynamic relocation must be
4642 present in the primary GOT, so arrange for them to appear after
4643 those that are actually referenced. */
23cc69b6 4644 gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
634835ae 4645 g->global_gotno = gg->global_gotno;
f4416af6 4646
f4416af6 4647 set_got_offset_arg.g = NULL;
634835ae 4648 set_got_offset_arg.value = GGA_RELOC_ONLY;
f4416af6
AO
4649 htab_traverse (gg->got_entries, mips_elf_set_global_got_offset,
4650 &set_got_offset_arg);
634835ae 4651 set_got_offset_arg.value = GGA_NORMAL;
f4416af6
AO
4652 htab_traverse (g->got_entries, mips_elf_set_global_got_offset,
4653 &set_got_offset_arg);
f4416af6
AO
4654
4655 /* Now go through the GOTs assigning them offset ranges.
4656 [assigned_gotno, local_gotno[ will be set to the range of local
4657 entries in each GOT. We can then compute the end of a GOT by
4658 adding local_gotno to global_gotno. We reverse the list and make
4659 it circular since then we'll be able to quickly compute the
4660 beginning of a GOT, by computing the end of its predecessor. To
4661 avoid special cases for the primary GOT, while still preserving
4662 assertions that are valid for both single- and multi-got links,
4663 we arrange for the main got struct to have the right number of
4664 global entries, but set its local_gotno such that the initial
4665 offset of the primary GOT is zero. Remember that the primary GOT
4666 will become the last item in the circular linked list, so it
4667 points back to the master GOT. */
4668 gg->local_gotno = -g->global_gotno;
4669 gg->global_gotno = g->global_gotno;
0f20cc35 4670 gg->tls_gotno = 0;
f4416af6
AO
4671 assign = 0;
4672 gg->next = gg;
4673
4674 do
4675 {
4676 struct mips_got_info *gn;
4677
861fb55a 4678 assign += htab->reserved_gotno;
f4416af6 4679 g->assigned_gotno = assign;
c224138d
RS
4680 g->local_gotno += assign;
4681 g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
0f20cc35
DJ
4682 assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4683
ead49a57
RS
4684 /* Take g out of the direct list, and push it onto the reversed
4685 list that gg points to. g->next is guaranteed to be nonnull after
4686 this operation, as required by mips_elf_initialize_tls_index. */
4687 gn = g->next;
4688 g->next = gg->next;
4689 gg->next = g;
4690
0f20cc35
DJ
4691 /* Set up any TLS entries. We always place the TLS entries after
4692 all non-TLS entries. */
4693 g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4694 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
f4416af6 4695
ead49a57 4696 /* Move onto the next GOT. It will be a secondary GOT if nonull. */
f4416af6 4697 g = gn;
0626d451 4698
33bb52fb
RS
4699 /* Forbid global symbols in every non-primary GOT from having
4700 lazy-binding stubs. */
0626d451 4701 if (g)
33bb52fb 4702 htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
f4416af6
AO
4703 }
4704 while (g);
4705
eea6121a 4706 got->size = (gg->next->local_gotno
33bb52fb
RS
4707 + gg->next->global_gotno
4708 + gg->next->tls_gotno) * MIPS_ELF_GOT_SIZE (abfd);
4709
4710 needed_relocs = 0;
4711 set_got_offset_arg.value = MIPS_ELF_GOT_SIZE (abfd);
4712 set_got_offset_arg.info = info;
4713 for (g = gg->next; g && g->next != gg; g = g->next)
4714 {
4715 unsigned int save_assign;
4716
4717 /* Assign offsets to global GOT entries. */
4718 save_assign = g->assigned_gotno;
4719 g->assigned_gotno = g->local_gotno;
4720 set_got_offset_arg.g = g;
4721 set_got_offset_arg.needed_relocs = 0;
4722 htab_traverse (g->got_entries,
4723 mips_elf_set_global_got_offset,
4724 &set_got_offset_arg);
4725 needed_relocs += set_got_offset_arg.needed_relocs;
4726 BFD_ASSERT (g->assigned_gotno - g->local_gotno <= g->global_gotno);
4727
4728 g->assigned_gotno = save_assign;
4729 if (info->shared)
4730 {
4731 needed_relocs += g->local_gotno - g->assigned_gotno;
4732 BFD_ASSERT (g->assigned_gotno == g->next->local_gotno
4733 + g->next->global_gotno
4734 + g->next->tls_gotno
861fb55a 4735 + htab->reserved_gotno);
33bb52fb
RS
4736 }
4737 }
4738
4739 if (needed_relocs)
4740 mips_elf_allocate_dynamic_relocations (dynobj, info,
4741 needed_relocs);
143d77c5 4742
f4416af6
AO
4743 return TRUE;
4744}
143d77c5 4745
b49e97c9
TS
4746\f
4747/* Returns the first relocation of type r_type found, beginning with
4748 RELOCATION. RELEND is one-past-the-end of the relocation table. */
4749
4750static const Elf_Internal_Rela *
9719ad41
RS
4751mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4752 const Elf_Internal_Rela *relocation,
4753 const Elf_Internal_Rela *relend)
b49e97c9 4754{
c000e262
TS
4755 unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4756
b49e97c9
TS
4757 while (relocation < relend)
4758 {
c000e262
TS
4759 if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4760 && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
b49e97c9
TS
4761 return relocation;
4762
4763 ++relocation;
4764 }
4765
4766 /* We didn't find it. */
b49e97c9
TS
4767 return NULL;
4768}
4769
020d7251 4770/* Return whether an input relocation is against a local symbol. */
b49e97c9 4771
b34976b6 4772static bfd_boolean
9719ad41
RS
4773mips_elf_local_relocation_p (bfd *input_bfd,
4774 const Elf_Internal_Rela *relocation,
020d7251 4775 asection **local_sections)
b49e97c9
TS
4776{
4777 unsigned long r_symndx;
4778 Elf_Internal_Shdr *symtab_hdr;
b49e97c9
TS
4779 size_t extsymoff;
4780
4781 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4782 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4783 extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4784
4785 if (r_symndx < extsymoff)
b34976b6 4786 return TRUE;
b49e97c9 4787 if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
b34976b6 4788 return TRUE;
b49e97c9 4789
b34976b6 4790 return FALSE;
b49e97c9
TS
4791}
4792\f
4793/* Sign-extend VALUE, which has the indicated number of BITS. */
4794
a7ebbfdf 4795bfd_vma
9719ad41 4796_bfd_mips_elf_sign_extend (bfd_vma value, int bits)
b49e97c9
TS
4797{
4798 if (value & ((bfd_vma) 1 << (bits - 1)))
4799 /* VALUE is negative. */
4800 value |= ((bfd_vma) - 1) << bits;
4801
4802 return value;
4803}
4804
4805/* Return non-zero if the indicated VALUE has overflowed the maximum
4cc11e76 4806 range expressible by a signed number with the indicated number of
b49e97c9
TS
4807 BITS. */
4808
b34976b6 4809static bfd_boolean
9719ad41 4810mips_elf_overflow_p (bfd_vma value, int bits)
b49e97c9
TS
4811{
4812 bfd_signed_vma svalue = (bfd_signed_vma) value;
4813
4814 if (svalue > (1 << (bits - 1)) - 1)
4815 /* The value is too big. */
b34976b6 4816 return TRUE;
b49e97c9
TS
4817 else if (svalue < -(1 << (bits - 1)))
4818 /* The value is too small. */
b34976b6 4819 return TRUE;
b49e97c9
TS
4820
4821 /* All is well. */
b34976b6 4822 return FALSE;
b49e97c9
TS
4823}
4824
4825/* Calculate the %high function. */
4826
4827static bfd_vma
9719ad41 4828mips_elf_high (bfd_vma value)
b49e97c9
TS
4829{
4830 return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
4831}
4832
4833/* Calculate the %higher function. */
4834
4835static bfd_vma
9719ad41 4836mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
b49e97c9
TS
4837{
4838#ifdef BFD64
4839 return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
4840#else
4841 abort ();
c5ae1840 4842 return MINUS_ONE;
b49e97c9
TS
4843#endif
4844}
4845
4846/* Calculate the %highest function. */
4847
4848static bfd_vma
9719ad41 4849mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
b49e97c9
TS
4850{
4851#ifdef BFD64
b15e6682 4852 return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
b49e97c9
TS
4853#else
4854 abort ();
c5ae1840 4855 return MINUS_ONE;
b49e97c9
TS
4856#endif
4857}
4858\f
4859/* Create the .compact_rel section. */
4860
b34976b6 4861static bfd_boolean
9719ad41
RS
4862mips_elf_create_compact_rel_section
4863 (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
b49e97c9
TS
4864{
4865 flagword flags;
4866 register asection *s;
4867
3d4d4302 4868 if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
b49e97c9
TS
4869 {
4870 flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
4871 | SEC_READONLY);
4872
3d4d4302 4873 s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
b49e97c9 4874 if (s == NULL
b49e97c9
TS
4875 || ! bfd_set_section_alignment (abfd, s,
4876 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 4877 return FALSE;
b49e97c9 4878
eea6121a 4879 s->size = sizeof (Elf32_External_compact_rel);
b49e97c9
TS
4880 }
4881
b34976b6 4882 return TRUE;
b49e97c9
TS
4883}
4884
4885/* Create the .got section to hold the global offset table. */
4886
b34976b6 4887static bfd_boolean
23cc69b6 4888mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
b49e97c9
TS
4889{
4890 flagword flags;
4891 register asection *s;
4892 struct elf_link_hash_entry *h;
14a793b2 4893 struct bfd_link_hash_entry *bh;
b49e97c9
TS
4894 struct mips_got_info *g;
4895 bfd_size_type amt;
0a44bf69
RS
4896 struct mips_elf_link_hash_table *htab;
4897
4898 htab = mips_elf_hash_table (info);
4dfe6ac6 4899 BFD_ASSERT (htab != NULL);
b49e97c9
TS
4900
4901 /* This function may be called more than once. */
23cc69b6
RS
4902 if (htab->sgot)
4903 return TRUE;
b49e97c9
TS
4904
4905 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
4906 | SEC_LINKER_CREATED);
4907
72b4917c
TS
4908 /* We have to use an alignment of 2**4 here because this is hardcoded
4909 in the function stub generation and in the linker script. */
87e0a731 4910 s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
b49e97c9 4911 if (s == NULL
72b4917c 4912 || ! bfd_set_section_alignment (abfd, s, 4))
b34976b6 4913 return FALSE;
a8028dd0 4914 htab->sgot = s;
b49e97c9
TS
4915
4916 /* Define the symbol _GLOBAL_OFFSET_TABLE_. We don't do this in the
4917 linker script because we don't want to define the symbol if we
4918 are not creating a global offset table. */
14a793b2 4919 bh = NULL;
b49e97c9
TS
4920 if (! (_bfd_generic_link_add_one_symbol
4921 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
9719ad41 4922 0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 4923 return FALSE;
14a793b2
AM
4924
4925 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
4926 h->non_elf = 0;
4927 h->def_regular = 1;
b49e97c9 4928 h->type = STT_OBJECT;
d329bcd1 4929 elf_hash_table (info)->hgot = h;
b49e97c9
TS
4930
4931 if (info->shared
c152c796 4932 && ! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 4933 return FALSE;
b49e97c9 4934
b49e97c9 4935 amt = sizeof (struct mips_got_info);
9719ad41 4936 g = bfd_alloc (abfd, amt);
b49e97c9 4937 if (g == NULL)
b34976b6 4938 return FALSE;
b49e97c9 4939 g->global_gotsym = NULL;
e3d54347 4940 g->global_gotno = 0;
23cc69b6 4941 g->reloc_only_gotno = 0;
0f20cc35 4942 g->tls_gotno = 0;
861fb55a 4943 g->local_gotno = 0;
c224138d 4944 g->page_gotno = 0;
861fb55a 4945 g->assigned_gotno = 0;
f4416af6
AO
4946 g->bfd2got = NULL;
4947 g->next = NULL;
0f20cc35 4948 g->tls_ldm_offset = MINUS_ONE;
b15e6682 4949 g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
9719ad41 4950 mips_elf_got_entry_eq, NULL);
b15e6682
AO
4951 if (g->got_entries == NULL)
4952 return FALSE;
c224138d
RS
4953 g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4954 mips_got_page_entry_eq, NULL);
4955 if (g->got_page_entries == NULL)
4956 return FALSE;
a8028dd0 4957 htab->got_info = g;
f0abc2a1 4958 mips_elf_section_data (s)->elf.this_hdr.sh_flags
b49e97c9
TS
4959 |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
4960
861fb55a 4961 /* We also need a .got.plt section when generating PLTs. */
87e0a731
AM
4962 s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
4963 SEC_ALLOC | SEC_LOAD
4964 | SEC_HAS_CONTENTS
4965 | SEC_IN_MEMORY
4966 | SEC_LINKER_CREATED);
861fb55a
DJ
4967 if (s == NULL)
4968 return FALSE;
4969 htab->sgotplt = s;
0a44bf69 4970
b34976b6 4971 return TRUE;
b49e97c9 4972}
b49e97c9 4973\f
0a44bf69
RS
4974/* Return true if H refers to the special VxWorks __GOTT_BASE__ or
4975 __GOTT_INDEX__ symbols. These symbols are only special for
4976 shared objects; they are not used in executables. */
4977
4978static bfd_boolean
4979is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
4980{
4981 return (mips_elf_hash_table (info)->is_vxworks
4982 && info->shared
4983 && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
4984 || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
4985}
861fb55a
DJ
4986
4987/* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
4988 require an la25 stub. See also mips_elf_local_pic_function_p,
4989 which determines whether the destination function ever requires a
4990 stub. */
4991
4992static bfd_boolean
8f0c309a
CLT
4993mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
4994 bfd_boolean target_is_16_bit_code_p)
861fb55a
DJ
4995{
4996 /* We specifically ignore branches and jumps from EF_PIC objects,
4997 where the onus is on the compiler or programmer to perform any
4998 necessary initialization of $25. Sometimes such initialization
4999 is unnecessary; for example, -mno-shared functions do not use
5000 the incoming value of $25, and may therefore be called directly. */
5001 if (PIC_OBJECT_P (input_bfd))
5002 return FALSE;
5003
5004 switch (r_type)
5005 {
5006 case R_MIPS_26:
5007 case R_MIPS_PC16:
df58fc94
RS
5008 case R_MICROMIPS_26_S1:
5009 case R_MICROMIPS_PC7_S1:
5010 case R_MICROMIPS_PC10_S1:
5011 case R_MICROMIPS_PC16_S1:
5012 case R_MICROMIPS_PC23_S2:
861fb55a
DJ
5013 return TRUE;
5014
8f0c309a
CLT
5015 case R_MIPS16_26:
5016 return !target_is_16_bit_code_p;
5017
861fb55a
DJ
5018 default:
5019 return FALSE;
5020 }
5021}
0a44bf69 5022\f
b49e97c9
TS
5023/* Calculate the value produced by the RELOCATION (which comes from
5024 the INPUT_BFD). The ADDEND is the addend to use for this
5025 RELOCATION; RELOCATION->R_ADDEND is ignored.
5026
5027 The result of the relocation calculation is stored in VALUEP.
38a7df63 5028 On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
df58fc94 5029 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
b49e97c9
TS
5030
5031 This function returns bfd_reloc_continue if the caller need take no
5032 further action regarding this relocation, bfd_reloc_notsupported if
5033 something goes dramatically wrong, bfd_reloc_overflow if an
5034 overflow occurs, and bfd_reloc_ok to indicate success. */
5035
5036static bfd_reloc_status_type
9719ad41
RS
5037mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5038 asection *input_section,
5039 struct bfd_link_info *info,
5040 const Elf_Internal_Rela *relocation,
5041 bfd_vma addend, reloc_howto_type *howto,
5042 Elf_Internal_Sym *local_syms,
5043 asection **local_sections, bfd_vma *valuep,
38a7df63
CF
5044 const char **namep,
5045 bfd_boolean *cross_mode_jump_p,
9719ad41 5046 bfd_boolean save_addend)
b49e97c9
TS
5047{
5048 /* The eventual value we will return. */
5049 bfd_vma value;
5050 /* The address of the symbol against which the relocation is
5051 occurring. */
5052 bfd_vma symbol = 0;
5053 /* The final GP value to be used for the relocatable, executable, or
5054 shared object file being produced. */
0a61c8c2 5055 bfd_vma gp;
b49e97c9
TS
5056 /* The place (section offset or address) of the storage unit being
5057 relocated. */
5058 bfd_vma p;
5059 /* The value of GP used to create the relocatable object. */
0a61c8c2 5060 bfd_vma gp0;
b49e97c9
TS
5061 /* The offset into the global offset table at which the address of
5062 the relocation entry symbol, adjusted by the addend, resides
5063 during execution. */
5064 bfd_vma g = MINUS_ONE;
5065 /* The section in which the symbol referenced by the relocation is
5066 located. */
5067 asection *sec = NULL;
5068 struct mips_elf_link_hash_entry *h = NULL;
b34976b6 5069 /* TRUE if the symbol referred to by this relocation is a local
b49e97c9 5070 symbol. */
b34976b6
AM
5071 bfd_boolean local_p, was_local_p;
5072 /* TRUE if the symbol referred to by this relocation is "_gp_disp". */
5073 bfd_boolean gp_disp_p = FALSE;
bbe506e8
TS
5074 /* TRUE if the symbol referred to by this relocation is
5075 "__gnu_local_gp". */
5076 bfd_boolean gnu_local_gp_p = FALSE;
b49e97c9
TS
5077 Elf_Internal_Shdr *symtab_hdr;
5078 size_t extsymoff;
5079 unsigned long r_symndx;
5080 int r_type;
b34976b6 5081 /* TRUE if overflow occurred during the calculation of the
b49e97c9 5082 relocation value. */
b34976b6
AM
5083 bfd_boolean overflowed_p;
5084 /* TRUE if this relocation refers to a MIPS16 function. */
5085 bfd_boolean target_is_16_bit_code_p = FALSE;
df58fc94 5086 bfd_boolean target_is_micromips_code_p = FALSE;
0a44bf69
RS
5087 struct mips_elf_link_hash_table *htab;
5088 bfd *dynobj;
5089
5090 dynobj = elf_hash_table (info)->dynobj;
5091 htab = mips_elf_hash_table (info);
4dfe6ac6 5092 BFD_ASSERT (htab != NULL);
b49e97c9
TS
5093
5094 /* Parse the relocation. */
5095 r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5096 r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5097 p = (input_section->output_section->vma
5098 + input_section->output_offset
5099 + relocation->r_offset);
5100
5101 /* Assume that there will be no overflow. */
b34976b6 5102 overflowed_p = FALSE;
b49e97c9
TS
5103
5104 /* Figure out whether or not the symbol is local, and get the offset
5105 used in the array of hash table entries. */
5106 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5107 local_p = mips_elf_local_relocation_p (input_bfd, relocation,
020d7251 5108 local_sections);
bce03d3d 5109 was_local_p = local_p;
b49e97c9
TS
5110 if (! elf_bad_symtab (input_bfd))
5111 extsymoff = symtab_hdr->sh_info;
5112 else
5113 {
5114 /* The symbol table does not follow the rule that local symbols
5115 must come before globals. */
5116 extsymoff = 0;
5117 }
5118
5119 /* Figure out the value of the symbol. */
5120 if (local_p)
5121 {
5122 Elf_Internal_Sym *sym;
5123
5124 sym = local_syms + r_symndx;
5125 sec = local_sections[r_symndx];
5126
5127 symbol = sec->output_section->vma + sec->output_offset;
d4df96e6
L
5128 if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5129 || (sec->flags & SEC_MERGE))
b49e97c9 5130 symbol += sym->st_value;
d4df96e6
L
5131 if ((sec->flags & SEC_MERGE)
5132 && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5133 {
5134 addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5135 addend -= symbol;
5136 addend += sec->output_section->vma + sec->output_offset;
5137 }
b49e97c9 5138
df58fc94
RS
5139 /* MIPS16/microMIPS text labels should be treated as odd. */
5140 if (ELF_ST_IS_COMPRESSED (sym->st_other))
b49e97c9
TS
5141 ++symbol;
5142
5143 /* Record the name of this symbol, for our caller. */
5144 *namep = bfd_elf_string_from_elf_section (input_bfd,
5145 symtab_hdr->sh_link,
5146 sym->st_name);
5147 if (*namep == '\0')
5148 *namep = bfd_section_name (input_bfd, sec);
5149
30c09090 5150 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
df58fc94 5151 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
b49e97c9
TS
5152 }
5153 else
5154 {
560e09e9
NC
5155 /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ? */
5156
b49e97c9
TS
5157 /* For global symbols we look up the symbol in the hash-table. */
5158 h = ((struct mips_elf_link_hash_entry *)
5159 elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5160 /* Find the real hash-table entry for this symbol. */
5161 while (h->root.root.type == bfd_link_hash_indirect
5162 || h->root.root.type == bfd_link_hash_warning)
5163 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5164
5165 /* Record the name of this symbol, for our caller. */
5166 *namep = h->root.root.root.string;
5167
5168 /* See if this is the special _gp_disp symbol. Note that such a
5169 symbol must always be a global symbol. */
560e09e9 5170 if (strcmp (*namep, "_gp_disp") == 0
b49e97c9
TS
5171 && ! NEWABI_P (input_bfd))
5172 {
5173 /* Relocations against _gp_disp are permitted only with
5174 R_MIPS_HI16 and R_MIPS_LO16 relocations. */
738e5348 5175 if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
b49e97c9
TS
5176 return bfd_reloc_notsupported;
5177
b34976b6 5178 gp_disp_p = TRUE;
b49e97c9 5179 }
bbe506e8
TS
5180 /* See if this is the special _gp symbol. Note that such a
5181 symbol must always be a global symbol. */
5182 else if (strcmp (*namep, "__gnu_local_gp") == 0)
5183 gnu_local_gp_p = TRUE;
5184
5185
b49e97c9
TS
5186 /* If this symbol is defined, calculate its address. Note that
5187 _gp_disp is a magic symbol, always implicitly defined by the
5188 linker, so it's inappropriate to check to see whether or not
5189 its defined. */
5190 else if ((h->root.root.type == bfd_link_hash_defined
5191 || h->root.root.type == bfd_link_hash_defweak)
5192 && h->root.root.u.def.section)
5193 {
5194 sec = h->root.root.u.def.section;
5195 if (sec->output_section)
5196 symbol = (h->root.root.u.def.value
5197 + sec->output_section->vma
5198 + sec->output_offset);
5199 else
5200 symbol = h->root.root.u.def.value;
5201 }
5202 else if (h->root.root.type == bfd_link_hash_undefweak)
5203 /* We allow relocations against undefined weak symbols, giving
5204 it the value zero, so that you can undefined weak functions
5205 and check to see if they exist by looking at their
5206 addresses. */
5207 symbol = 0;
59c2e50f 5208 else if (info->unresolved_syms_in_objects == RM_IGNORE
b49e97c9
TS
5209 && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5210 symbol = 0;
a4d0f181
TS
5211 else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5212 ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
b49e97c9
TS
5213 {
5214 /* If this is a dynamic link, we should have created a
5215 _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5216 in in _bfd_mips_elf_create_dynamic_sections.
5217 Otherwise, we should define the symbol with a value of 0.
5218 FIXME: It should probably get into the symbol table
5219 somehow as well. */
5220 BFD_ASSERT (! info->shared);
5221 BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5222 symbol = 0;
5223 }
5e2b0d47
NC
5224 else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5225 {
5226 /* This is an optional symbol - an Irix specific extension to the
5227 ELF spec. Ignore it for now.
5228 XXX - FIXME - there is more to the spec for OPTIONAL symbols
5229 than simply ignoring them, but we do not handle this for now.
5230 For information see the "64-bit ELF Object File Specification"
5231 which is available from here:
5232 http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf */
5233 symbol = 0;
5234 }
e7e2196d
MR
5235 else if ((*info->callbacks->undefined_symbol)
5236 (info, h->root.root.root.string, input_bfd,
5237 input_section, relocation->r_offset,
5238 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5239 || ELF_ST_VISIBILITY (h->root.other)))
5240 {
5241 return bfd_reloc_undefined;
5242 }
b49e97c9
TS
5243 else
5244 {
e7e2196d 5245 return bfd_reloc_notsupported;
b49e97c9
TS
5246 }
5247
30c09090 5248 target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
df58fc94
RS
5249 /* If the output section is the PLT section,
5250 then the target is not microMIPS. */
5251 target_is_micromips_code_p = (htab->splt != sec
5252 && ELF_ST_IS_MICROMIPS (h->root.other));
b49e97c9
TS
5253 }
5254
738e5348
RS
5255 /* If this is a reference to a 16-bit function with a stub, we need
5256 to redirect the relocation to the stub unless:
5257
5258 (a) the relocation is for a MIPS16 JAL;
5259
5260 (b) the relocation is for a MIPS16 PIC call, and there are no
5261 non-MIPS16 uses of the GOT slot; or
5262
5263 (c) the section allows direct references to MIPS16 functions. */
5264 if (r_type != R_MIPS16_26
5265 && !info->relocatable
5266 && ((h != NULL
5267 && h->fn_stub != NULL
5268 && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
b9d58d71
TS
5269 || (local_p
5270 && elf_tdata (input_bfd)->local_stubs != NULL
b49e97c9 5271 && elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
738e5348 5272 && !section_allows_mips16_refs_p (input_section))
b49e97c9
TS
5273 {
5274 /* This is a 32- or 64-bit call to a 16-bit function. We should
5275 have already noticed that we were going to need the
5276 stub. */
5277 if (local_p)
8f0c309a
CLT
5278 {
5279 sec = elf_tdata (input_bfd)->local_stubs[r_symndx];
5280 value = 0;
5281 }
b49e97c9
TS
5282 else
5283 {
5284 BFD_ASSERT (h->need_fn_stub);
8f0c309a
CLT
5285 if (h->la25_stub)
5286 {
5287 /* If a LA25 header for the stub itself exists, point to the
5288 prepended LUI/ADDIU sequence. */
5289 sec = h->la25_stub->stub_section;
5290 value = h->la25_stub->offset;
5291 }
5292 else
5293 {
5294 sec = h->fn_stub;
5295 value = 0;
5296 }
b49e97c9
TS
5297 }
5298
8f0c309a 5299 symbol = sec->output_section->vma + sec->output_offset + value;
f38c2df5
TS
5300 /* The target is 16-bit, but the stub isn't. */
5301 target_is_16_bit_code_p = FALSE;
b49e97c9
TS
5302 }
5303 /* If this is a 16-bit call to a 32- or 64-bit function with a stub, we
738e5348
RS
5304 need to redirect the call to the stub. Note that we specifically
5305 exclude R_MIPS16_CALL16 from this behavior; indirect calls should
5306 use an indirect stub instead. */
1049f94e 5307 else if (r_type == R_MIPS16_26 && !info->relocatable
b314ec0e 5308 && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
b9d58d71
TS
5309 || (local_p
5310 && elf_tdata (input_bfd)->local_call_stubs != NULL
5311 && elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
b49e97c9
TS
5312 && !target_is_16_bit_code_p)
5313 {
b9d58d71
TS
5314 if (local_p)
5315 sec = elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5316 else
b49e97c9 5317 {
b9d58d71
TS
5318 /* If both call_stub and call_fp_stub are defined, we can figure
5319 out which one to use by checking which one appears in the input
5320 file. */
5321 if (h->call_stub != NULL && h->call_fp_stub != NULL)
b49e97c9 5322 {
b9d58d71 5323 asection *o;
68ffbac6 5324
b9d58d71
TS
5325 sec = NULL;
5326 for (o = input_bfd->sections; o != NULL; o = o->next)
b49e97c9 5327 {
b9d58d71
TS
5328 if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5329 {
5330 sec = h->call_fp_stub;
5331 break;
5332 }
b49e97c9 5333 }
b9d58d71
TS
5334 if (sec == NULL)
5335 sec = h->call_stub;
b49e97c9 5336 }
b9d58d71 5337 else if (h->call_stub != NULL)
b49e97c9 5338 sec = h->call_stub;
b9d58d71
TS
5339 else
5340 sec = h->call_fp_stub;
5341 }
b49e97c9 5342
eea6121a 5343 BFD_ASSERT (sec->size > 0);
b49e97c9
TS
5344 symbol = sec->output_section->vma + sec->output_offset;
5345 }
861fb55a
DJ
5346 /* If this is a direct call to a PIC function, redirect to the
5347 non-PIC stub. */
5348 else if (h != NULL && h->la25_stub
8f0c309a
CLT
5349 && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5350 target_is_16_bit_code_p))
861fb55a
DJ
5351 symbol = (h->la25_stub->stub_section->output_section->vma
5352 + h->la25_stub->stub_section->output_offset
5353 + h->la25_stub->offset);
b49e97c9 5354
df58fc94
RS
5355 /* Make sure MIPS16 and microMIPS are not used together. */
5356 if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5357 || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5358 {
5359 (*_bfd_error_handler)
5360 (_("MIPS16 and microMIPS functions cannot call each other"));
5361 return bfd_reloc_notsupported;
5362 }
5363
b49e97c9 5364 /* Calls from 16-bit code to 32-bit code and vice versa require the
df58fc94
RS
5365 mode change. However, we can ignore calls to undefined weak symbols,
5366 which should never be executed at runtime. This exception is important
5367 because the assembly writer may have "known" that any definition of the
5368 symbol would be 16-bit code, and that direct jumps were therefore
5369 acceptable. */
5370 *cross_mode_jump_p = (!info->relocatable
5371 && !(h && h->root.root.type == bfd_link_hash_undefweak)
5372 && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5373 || (r_type == R_MICROMIPS_26_S1
5374 && !target_is_micromips_code_p)
5375 || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5376 && (target_is_16_bit_code_p
5377 || target_is_micromips_code_p))));
b49e97c9 5378
9f1a453e
MR
5379 local_p = (h == NULL
5380 || (h->got_only_for_calls
5381 ? SYMBOL_CALLS_LOCAL (info, &h->root)
5382 : SYMBOL_REFERENCES_LOCAL (info, &h->root)));
b49e97c9 5383
0a61c8c2
RS
5384 gp0 = _bfd_get_gp_value (input_bfd);
5385 gp = _bfd_get_gp_value (abfd);
23cc69b6 5386 if (htab->got_info)
a8028dd0 5387 gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
0a61c8c2
RS
5388
5389 if (gnu_local_gp_p)
5390 symbol = gp;
5391
df58fc94
RS
5392 /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5393 to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP. The addend is applied by the
5394 corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST. */
5395 if (got_page_reloc_p (r_type) && !local_p)
020d7251 5396 {
df58fc94
RS
5397 r_type = (micromips_reloc_p (r_type)
5398 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
020d7251
RS
5399 addend = 0;
5400 }
5401
e77760d2 5402 /* If we haven't already determined the GOT offset, and we're going
0a61c8c2 5403 to need it, get it now. */
b49e97c9
TS
5404 switch (r_type)
5405 {
738e5348
RS
5406 case R_MIPS16_CALL16:
5407 case R_MIPS16_GOT16:
b49e97c9
TS
5408 case R_MIPS_CALL16:
5409 case R_MIPS_GOT16:
5410 case R_MIPS_GOT_DISP:
5411 case R_MIPS_GOT_HI16:
5412 case R_MIPS_CALL_HI16:
5413 case R_MIPS_GOT_LO16:
5414 case R_MIPS_CALL_LO16:
df58fc94
RS
5415 case R_MICROMIPS_CALL16:
5416 case R_MICROMIPS_GOT16:
5417 case R_MICROMIPS_GOT_DISP:
5418 case R_MICROMIPS_GOT_HI16:
5419 case R_MICROMIPS_CALL_HI16:
5420 case R_MICROMIPS_GOT_LO16:
5421 case R_MICROMIPS_CALL_LO16:
0f20cc35
DJ
5422 case R_MIPS_TLS_GD:
5423 case R_MIPS_TLS_GOTTPREL:
5424 case R_MIPS_TLS_LDM:
d0f13682
CLT
5425 case R_MIPS16_TLS_GD:
5426 case R_MIPS16_TLS_GOTTPREL:
5427 case R_MIPS16_TLS_LDM:
df58fc94
RS
5428 case R_MICROMIPS_TLS_GD:
5429 case R_MICROMIPS_TLS_GOTTPREL:
5430 case R_MICROMIPS_TLS_LDM:
b49e97c9 5431 /* Find the index into the GOT where this value is located. */
df58fc94 5432 if (tls_ldm_reloc_p (r_type))
0f20cc35 5433 {
0a44bf69 5434 g = mips_elf_local_got_index (abfd, input_bfd, info,
5c18022e 5435 0, 0, NULL, r_type);
0f20cc35
DJ
5436 if (g == MINUS_ONE)
5437 return bfd_reloc_outofrange;
5438 }
5439 else if (!local_p)
b49e97c9 5440 {
0a44bf69
RS
5441 /* On VxWorks, CALL relocations should refer to the .got.plt
5442 entry, which is initialized to point at the PLT stub. */
5443 if (htab->is_vxworks
df58fc94
RS
5444 && (call_hi16_reloc_p (r_type)
5445 || call_lo16_reloc_p (r_type)
738e5348 5446 || call16_reloc_p (r_type)))
0a44bf69
RS
5447 {
5448 BFD_ASSERT (addend == 0);
5449 BFD_ASSERT (h->root.needs_plt);
5450 g = mips_elf_gotplt_index (info, &h->root);
5451 }
5452 else
b49e97c9 5453 {
020d7251 5454 BFD_ASSERT (addend == 0);
0a44bf69
RS
5455 g = mips_elf_global_got_index (dynobj, input_bfd,
5456 &h->root, r_type, info);
5457 if (h->tls_type == GOT_NORMAL
020d7251
RS
5458 && !elf_hash_table (info)->dynamic_sections_created)
5459 /* This is a static link. We must initialize the GOT entry. */
a8028dd0 5460 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
b49e97c9
TS
5461 }
5462 }
0a44bf69 5463 else if (!htab->is_vxworks
738e5348 5464 && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
0a44bf69 5465 /* The calculation below does not involve "g". */
b49e97c9
TS
5466 break;
5467 else
5468 {
5c18022e 5469 g = mips_elf_local_got_index (abfd, input_bfd, info,
0a44bf69 5470 symbol + addend, r_symndx, h, r_type);
b49e97c9
TS
5471 if (g == MINUS_ONE)
5472 return bfd_reloc_outofrange;
5473 }
5474
5475 /* Convert GOT indices to actual offsets. */
a8028dd0 5476 g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
b49e97c9 5477 break;
b49e97c9
TS
5478 }
5479
0a44bf69
RS
5480 /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5481 symbols are resolved by the loader. Add them to .rela.dyn. */
5482 if (h != NULL && is_gott_symbol (info, &h->root))
5483 {
5484 Elf_Internal_Rela outrel;
5485 bfd_byte *loc;
5486 asection *s;
5487
5488 s = mips_elf_rel_dyn_section (info, FALSE);
5489 loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5490
5491 outrel.r_offset = (input_section->output_section->vma
5492 + input_section->output_offset
5493 + relocation->r_offset);
5494 outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5495 outrel.r_addend = addend;
5496 bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
9e3313ae
RS
5497
5498 /* If we've written this relocation for a readonly section,
5499 we need to set DF_TEXTREL again, so that we do not delete the
5500 DT_TEXTREL tag. */
5501 if (MIPS_ELF_READONLY_SECTION (input_section))
5502 info->flags |= DF_TEXTREL;
5503
0a44bf69
RS
5504 *valuep = 0;
5505 return bfd_reloc_ok;
5506 }
5507
b49e97c9
TS
5508 /* Figure out what kind of relocation is being performed. */
5509 switch (r_type)
5510 {
5511 case R_MIPS_NONE:
5512 return bfd_reloc_continue;
5513
5514 case R_MIPS_16:
a7ebbfdf 5515 value = symbol + _bfd_mips_elf_sign_extend (addend, 16);
b49e97c9
TS
5516 overflowed_p = mips_elf_overflow_p (value, 16);
5517 break;
5518
5519 case R_MIPS_32:
5520 case R_MIPS_REL32:
5521 case R_MIPS_64:
5522 if ((info->shared
861fb55a 5523 || (htab->root.dynamic_sections_created
b49e97c9 5524 && h != NULL
f5385ebf 5525 && h->root.def_dynamic
861fb55a
DJ
5526 && !h->root.def_regular
5527 && !h->has_static_relocs))
cf35638d 5528 && r_symndx != STN_UNDEF
9a59ad6b
DJ
5529 && (h == NULL
5530 || h->root.root.type != bfd_link_hash_undefweak
5531 || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
b49e97c9
TS
5532 && (input_section->flags & SEC_ALLOC) != 0)
5533 {
861fb55a 5534 /* If we're creating a shared library, then we can't know
b49e97c9
TS
5535 where the symbol will end up. So, we create a relocation
5536 record in the output, and leave the job up to the dynamic
861fb55a
DJ
5537 linker. We must do the same for executable references to
5538 shared library symbols, unless we've decided to use copy
5539 relocs or PLTs instead. */
b49e97c9
TS
5540 value = addend;
5541 if (!mips_elf_create_dynamic_relocation (abfd,
5542 info,
5543 relocation,
5544 h,
5545 sec,
5546 symbol,
5547 &value,
5548 input_section))
5549 return bfd_reloc_undefined;
5550 }
5551 else
5552 {
5553 if (r_type != R_MIPS_REL32)
5554 value = symbol + addend;
5555 else
5556 value = addend;
5557 }
5558 value &= howto->dst_mask;
092dcd75
CD
5559 break;
5560
5561 case R_MIPS_PC32:
5562 value = symbol + addend - p;
5563 value &= howto->dst_mask;
b49e97c9
TS
5564 break;
5565
b49e97c9
TS
5566 case R_MIPS16_26:
5567 /* The calculation for R_MIPS16_26 is just the same as for an
5568 R_MIPS_26. It's only the storage of the relocated field into
5569 the output file that's different. That's handled in
5570 mips_elf_perform_relocation. So, we just fall through to the
5571 R_MIPS_26 case here. */
5572 case R_MIPS_26:
df58fc94
RS
5573 case R_MICROMIPS_26_S1:
5574 {
5575 unsigned int shift;
5576
5577 /* Make sure the target of JALX is word-aligned. Bit 0 must be
5578 the correct ISA mode selector and bit 1 must be 0. */
5579 if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5580 return bfd_reloc_outofrange;
5581
5582 /* Shift is 2, unusually, for microMIPS JALX. */
5583 shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5584
5585 if (was_local_p)
5586 value = addend | ((p + 4) & (0xfc000000 << shift));
5587 else
5588 value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5589 value = (value + symbol) >> shift;
5590 if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5591 overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5592 value &= howto->dst_mask;
5593 }
b49e97c9
TS
5594 break;
5595
0f20cc35 5596 case R_MIPS_TLS_DTPREL_HI16:
d0f13682 5597 case R_MIPS16_TLS_DTPREL_HI16:
df58fc94 5598 case R_MICROMIPS_TLS_DTPREL_HI16:
0f20cc35
DJ
5599 value = (mips_elf_high (addend + symbol - dtprel_base (info))
5600 & howto->dst_mask);
5601 break;
5602
5603 case R_MIPS_TLS_DTPREL_LO16:
741d6ea8
JM
5604 case R_MIPS_TLS_DTPREL32:
5605 case R_MIPS_TLS_DTPREL64:
d0f13682 5606 case R_MIPS16_TLS_DTPREL_LO16:
df58fc94 5607 case R_MICROMIPS_TLS_DTPREL_LO16:
0f20cc35
DJ
5608 value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5609 break;
5610
5611 case R_MIPS_TLS_TPREL_HI16:
d0f13682 5612 case R_MIPS16_TLS_TPREL_HI16:
df58fc94 5613 case R_MICROMIPS_TLS_TPREL_HI16:
0f20cc35
DJ
5614 value = (mips_elf_high (addend + symbol - tprel_base (info))
5615 & howto->dst_mask);
5616 break;
5617
5618 case R_MIPS_TLS_TPREL_LO16:
d0f13682
CLT
5619 case R_MIPS_TLS_TPREL32:
5620 case R_MIPS_TLS_TPREL64:
5621 case R_MIPS16_TLS_TPREL_LO16:
df58fc94 5622 case R_MICROMIPS_TLS_TPREL_LO16:
0f20cc35
DJ
5623 value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5624 break;
5625
b49e97c9 5626 case R_MIPS_HI16:
d6f16593 5627 case R_MIPS16_HI16:
df58fc94 5628 case R_MICROMIPS_HI16:
b49e97c9
TS
5629 if (!gp_disp_p)
5630 {
5631 value = mips_elf_high (addend + symbol);
5632 value &= howto->dst_mask;
5633 }
5634 else
5635 {
d6f16593
MR
5636 /* For MIPS16 ABI code we generate this sequence
5637 0: li $v0,%hi(_gp_disp)
5638 4: addiupc $v1,%lo(_gp_disp)
5639 8: sll $v0,16
5640 12: addu $v0,$v1
5641 14: move $gp,$v0
5642 So the offsets of hi and lo relocs are the same, but the
888b9c01
CLT
5643 base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5644 ADDIUPC clears the low two bits of the instruction address,
5645 so the base is ($t9 + 4) & ~3. */
d6f16593 5646 if (r_type == R_MIPS16_HI16)
888b9c01 5647 value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
df58fc94
RS
5648 /* The microMIPS .cpload sequence uses the same assembly
5649 instructions as the traditional psABI version, but the
5650 incoming $t9 has the low bit set. */
5651 else if (r_type == R_MICROMIPS_HI16)
5652 value = mips_elf_high (addend + gp - p - 1);
d6f16593
MR
5653 else
5654 value = mips_elf_high (addend + gp - p);
b49e97c9
TS
5655 overflowed_p = mips_elf_overflow_p (value, 16);
5656 }
5657 break;
5658
5659 case R_MIPS_LO16:
d6f16593 5660 case R_MIPS16_LO16:
df58fc94
RS
5661 case R_MICROMIPS_LO16:
5662 case R_MICROMIPS_HI0_LO16:
b49e97c9
TS
5663 if (!gp_disp_p)
5664 value = (symbol + addend) & howto->dst_mask;
5665 else
5666 {
d6f16593
MR
5667 /* See the comment for R_MIPS16_HI16 above for the reason
5668 for this conditional. */
5669 if (r_type == R_MIPS16_LO16)
888b9c01 5670 value = addend + gp - (p & ~(bfd_vma) 0x3);
df58fc94
RS
5671 else if (r_type == R_MICROMIPS_LO16
5672 || r_type == R_MICROMIPS_HI0_LO16)
5673 value = addend + gp - p + 3;
d6f16593
MR
5674 else
5675 value = addend + gp - p + 4;
b49e97c9 5676 /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
8dc1a139 5677 for overflow. But, on, say, IRIX5, relocations against
b49e97c9
TS
5678 _gp_disp are normally generated from the .cpload
5679 pseudo-op. It generates code that normally looks like
5680 this:
5681
5682 lui $gp,%hi(_gp_disp)
5683 addiu $gp,$gp,%lo(_gp_disp)
5684 addu $gp,$gp,$t9
5685
5686 Here $t9 holds the address of the function being called,
5687 as required by the MIPS ELF ABI. The R_MIPS_LO16
5688 relocation can easily overflow in this situation, but the
5689 R_MIPS_HI16 relocation will handle the overflow.
5690 Therefore, we consider this a bug in the MIPS ABI, and do
5691 not check for overflow here. */
5692 }
5693 break;
5694
5695 case R_MIPS_LITERAL:
df58fc94 5696 case R_MICROMIPS_LITERAL:
b49e97c9
TS
5697 /* Because we don't merge literal sections, we can handle this
5698 just like R_MIPS_GPREL16. In the long run, we should merge
5699 shared literals, and then we will need to additional work
5700 here. */
5701
5702 /* Fall through. */
5703
5704 case R_MIPS16_GPREL:
5705 /* The R_MIPS16_GPREL performs the same calculation as
5706 R_MIPS_GPREL16, but stores the relocated bits in a different
5707 order. We don't need to do anything special here; the
5708 differences are handled in mips_elf_perform_relocation. */
5709 case R_MIPS_GPREL16:
df58fc94
RS
5710 case R_MICROMIPS_GPREL7_S2:
5711 case R_MICROMIPS_GPREL16:
bce03d3d
AO
5712 /* Only sign-extend the addend if it was extracted from the
5713 instruction. If the addend was separate, leave it alone,
5714 otherwise we may lose significant bits. */
5715 if (howto->partial_inplace)
a7ebbfdf 5716 addend = _bfd_mips_elf_sign_extend (addend, 16);
bce03d3d
AO
5717 value = symbol + addend - gp;
5718 /* If the symbol was local, any earlier relocatable links will
5719 have adjusted its addend with the gp offset, so compensate
5720 for that now. Don't do it for symbols forced local in this
5721 link, though, since they won't have had the gp offset applied
5722 to them before. */
5723 if (was_local_p)
5724 value += gp0;
b49e97c9
TS
5725 overflowed_p = mips_elf_overflow_p (value, 16);
5726 break;
5727
738e5348
RS
5728 case R_MIPS16_GOT16:
5729 case R_MIPS16_CALL16:
b49e97c9
TS
5730 case R_MIPS_GOT16:
5731 case R_MIPS_CALL16:
df58fc94
RS
5732 case R_MICROMIPS_GOT16:
5733 case R_MICROMIPS_CALL16:
0a44bf69 5734 /* VxWorks does not have separate local and global semantics for
738e5348 5735 R_MIPS*_GOT16; every relocation evaluates to "G". */
0a44bf69 5736 if (!htab->is_vxworks && local_p)
b49e97c9 5737 {
5c18022e 5738 value = mips_elf_got16_entry (abfd, input_bfd, info,
020d7251 5739 symbol + addend, !was_local_p);
b49e97c9
TS
5740 if (value == MINUS_ONE)
5741 return bfd_reloc_outofrange;
5742 value
a8028dd0 5743 = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
b49e97c9
TS
5744 overflowed_p = mips_elf_overflow_p (value, 16);
5745 break;
5746 }
5747
5748 /* Fall through. */
5749
0f20cc35
DJ
5750 case R_MIPS_TLS_GD:
5751 case R_MIPS_TLS_GOTTPREL:
5752 case R_MIPS_TLS_LDM:
b49e97c9 5753 case R_MIPS_GOT_DISP:
d0f13682
CLT
5754 case R_MIPS16_TLS_GD:
5755 case R_MIPS16_TLS_GOTTPREL:
5756 case R_MIPS16_TLS_LDM:
df58fc94
RS
5757 case R_MICROMIPS_TLS_GD:
5758 case R_MICROMIPS_TLS_GOTTPREL:
5759 case R_MICROMIPS_TLS_LDM:
5760 case R_MICROMIPS_GOT_DISP:
b49e97c9
TS
5761 value = g;
5762 overflowed_p = mips_elf_overflow_p (value, 16);
5763 break;
5764
5765 case R_MIPS_GPREL32:
bce03d3d
AO
5766 value = (addend + symbol + gp0 - gp);
5767 if (!save_addend)
5768 value &= howto->dst_mask;
b49e97c9
TS
5769 break;
5770
5771 case R_MIPS_PC16:
bad36eac
DJ
5772 case R_MIPS_GNU_REL16_S2:
5773 value = symbol + _bfd_mips_elf_sign_extend (addend, 18) - p;
5774 overflowed_p = mips_elf_overflow_p (value, 18);
37caec6b
TS
5775 value >>= howto->rightshift;
5776 value &= howto->dst_mask;
b49e97c9
TS
5777 break;
5778
df58fc94
RS
5779 case R_MICROMIPS_PC7_S1:
5780 value = symbol + _bfd_mips_elf_sign_extend (addend, 8) - p;
5781 overflowed_p = mips_elf_overflow_p (value, 8);
5782 value >>= howto->rightshift;
5783 value &= howto->dst_mask;
5784 break;
5785
5786 case R_MICROMIPS_PC10_S1:
5787 value = symbol + _bfd_mips_elf_sign_extend (addend, 11) - p;
5788 overflowed_p = mips_elf_overflow_p (value, 11);
5789 value >>= howto->rightshift;
5790 value &= howto->dst_mask;
5791 break;
5792
5793 case R_MICROMIPS_PC16_S1:
5794 value = symbol + _bfd_mips_elf_sign_extend (addend, 17) - p;
5795 overflowed_p = mips_elf_overflow_p (value, 17);
5796 value >>= howto->rightshift;
5797 value &= howto->dst_mask;
5798 break;
5799
5800 case R_MICROMIPS_PC23_S2:
5801 value = symbol + _bfd_mips_elf_sign_extend (addend, 25) - ((p | 3) ^ 3);
5802 overflowed_p = mips_elf_overflow_p (value, 25);
5803 value >>= howto->rightshift;
5804 value &= howto->dst_mask;
5805 break;
5806
b49e97c9
TS
5807 case R_MIPS_GOT_HI16:
5808 case R_MIPS_CALL_HI16:
df58fc94
RS
5809 case R_MICROMIPS_GOT_HI16:
5810 case R_MICROMIPS_CALL_HI16:
b49e97c9
TS
5811 /* We're allowed to handle these two relocations identically.
5812 The dynamic linker is allowed to handle the CALL relocations
5813 differently by creating a lazy evaluation stub. */
5814 value = g;
5815 value = mips_elf_high (value);
5816 value &= howto->dst_mask;
5817 break;
5818
5819 case R_MIPS_GOT_LO16:
5820 case R_MIPS_CALL_LO16:
df58fc94
RS
5821 case R_MICROMIPS_GOT_LO16:
5822 case R_MICROMIPS_CALL_LO16:
b49e97c9
TS
5823 value = g & howto->dst_mask;
5824 break;
5825
5826 case R_MIPS_GOT_PAGE:
df58fc94 5827 case R_MICROMIPS_GOT_PAGE:
5c18022e 5828 value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
b49e97c9
TS
5829 if (value == MINUS_ONE)
5830 return bfd_reloc_outofrange;
a8028dd0 5831 value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
b49e97c9
TS
5832 overflowed_p = mips_elf_overflow_p (value, 16);
5833 break;
5834
5835 case R_MIPS_GOT_OFST:
df58fc94 5836 case R_MICROMIPS_GOT_OFST:
93a2b7ae 5837 if (local_p)
5c18022e 5838 mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
0fdc1bf1
AO
5839 else
5840 value = addend;
b49e97c9
TS
5841 overflowed_p = mips_elf_overflow_p (value, 16);
5842 break;
5843
5844 case R_MIPS_SUB:
df58fc94 5845 case R_MICROMIPS_SUB:
b49e97c9
TS
5846 value = symbol - addend;
5847 value &= howto->dst_mask;
5848 break;
5849
5850 case R_MIPS_HIGHER:
df58fc94 5851 case R_MICROMIPS_HIGHER:
b49e97c9
TS
5852 value = mips_elf_higher (addend + symbol);
5853 value &= howto->dst_mask;
5854 break;
5855
5856 case R_MIPS_HIGHEST:
df58fc94 5857 case R_MICROMIPS_HIGHEST:
b49e97c9
TS
5858 value = mips_elf_highest (addend + symbol);
5859 value &= howto->dst_mask;
5860 break;
5861
5862 case R_MIPS_SCN_DISP:
df58fc94 5863 case R_MICROMIPS_SCN_DISP:
b49e97c9
TS
5864 value = symbol + addend - sec->output_offset;
5865 value &= howto->dst_mask;
5866 break;
5867
b49e97c9 5868 case R_MIPS_JALR:
df58fc94 5869 case R_MICROMIPS_JALR:
1367d393
ILT
5870 /* This relocation is only a hint. In some cases, we optimize
5871 it into a bal instruction. But we don't try to optimize
5bbc5ae7
AN
5872 when the symbol does not resolve locally. */
5873 if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
1367d393
ILT
5874 return bfd_reloc_continue;
5875 value = symbol + addend;
5876 break;
b49e97c9 5877
1367d393 5878 case R_MIPS_PJUMP:
b49e97c9
TS
5879 case R_MIPS_GNU_VTINHERIT:
5880 case R_MIPS_GNU_VTENTRY:
5881 /* We don't do anything with these at present. */
5882 return bfd_reloc_continue;
5883
5884 default:
5885 /* An unrecognized relocation type. */
5886 return bfd_reloc_notsupported;
5887 }
5888
5889 /* Store the VALUE for our caller. */
5890 *valuep = value;
5891 return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
5892}
5893
5894/* Obtain the field relocated by RELOCATION. */
5895
5896static bfd_vma
9719ad41
RS
5897mips_elf_obtain_contents (reloc_howto_type *howto,
5898 const Elf_Internal_Rela *relocation,
5899 bfd *input_bfd, bfd_byte *contents)
b49e97c9
TS
5900{
5901 bfd_vma x;
5902 bfd_byte *location = contents + relocation->r_offset;
5903
5904 /* Obtain the bytes. */
5905 x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
5906
b49e97c9
TS
5907 return x;
5908}
5909
5910/* It has been determined that the result of the RELOCATION is the
5911 VALUE. Use HOWTO to place VALUE into the output file at the
5912 appropriate position. The SECTION is the section to which the
68ffbac6 5913 relocation applies.
38a7df63 5914 CROSS_MODE_JUMP_P is true if the relocation field
df58fc94 5915 is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
b49e97c9 5916
b34976b6 5917 Returns FALSE if anything goes wrong. */
b49e97c9 5918
b34976b6 5919static bfd_boolean
9719ad41
RS
5920mips_elf_perform_relocation (struct bfd_link_info *info,
5921 reloc_howto_type *howto,
5922 const Elf_Internal_Rela *relocation,
5923 bfd_vma value, bfd *input_bfd,
5924 asection *input_section, bfd_byte *contents,
38a7df63 5925 bfd_boolean cross_mode_jump_p)
b49e97c9
TS
5926{
5927 bfd_vma x;
5928 bfd_byte *location;
5929 int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5930
5931 /* Figure out where the relocation is occurring. */
5932 location = contents + relocation->r_offset;
5933
df58fc94 5934 _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
d6f16593 5935
b49e97c9
TS
5936 /* Obtain the current value. */
5937 x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5938
5939 /* Clear the field we are setting. */
5940 x &= ~howto->dst_mask;
5941
b49e97c9
TS
5942 /* Set the field. */
5943 x |= (value & howto->dst_mask);
5944
5945 /* If required, turn JAL into JALX. */
38a7df63 5946 if (cross_mode_jump_p && jal_reloc_p (r_type))
b49e97c9 5947 {
b34976b6 5948 bfd_boolean ok;
b49e97c9
TS
5949 bfd_vma opcode = x >> 26;
5950 bfd_vma jalx_opcode;
5951
5952 /* Check to see if the opcode is already JAL or JALX. */
5953 if (r_type == R_MIPS16_26)
5954 {
5955 ok = ((opcode == 0x6) || (opcode == 0x7));
5956 jalx_opcode = 0x7;
5957 }
df58fc94
RS
5958 else if (r_type == R_MICROMIPS_26_S1)
5959 {
5960 ok = ((opcode == 0x3d) || (opcode == 0x3c));
5961 jalx_opcode = 0x3c;
5962 }
b49e97c9
TS
5963 else
5964 {
5965 ok = ((opcode == 0x3) || (opcode == 0x1d));
5966 jalx_opcode = 0x1d;
5967 }
5968
3bdf9505
MR
5969 /* If the opcode is not JAL or JALX, there's a problem. We cannot
5970 convert J or JALS to JALX. */
b49e97c9
TS
5971 if (!ok)
5972 {
5973 (*_bfd_error_handler)
3bdf9505 5974 (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
d003868e
AM
5975 input_bfd,
5976 input_section,
b49e97c9
TS
5977 (unsigned long) relocation->r_offset);
5978 bfd_set_error (bfd_error_bad_value);
b34976b6 5979 return FALSE;
b49e97c9
TS
5980 }
5981
5982 /* Make this the JALX opcode. */
5983 x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
5984 }
5985
38a7df63
CF
5986 /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
5987 range. */
cd8d5a82 5988 if (!info->relocatable
38a7df63 5989 && !cross_mode_jump_p
cd8d5a82
CF
5990 && ((JAL_TO_BAL_P (input_bfd)
5991 && r_type == R_MIPS_26
5992 && (x >> 26) == 0x3) /* jal addr */
5993 || (JALR_TO_BAL_P (input_bfd)
5994 && r_type == R_MIPS_JALR
38a7df63
CF
5995 && x == 0x0320f809) /* jalr t9 */
5996 || (JR_TO_B_P (input_bfd)
5997 && r_type == R_MIPS_JALR
5998 && x == 0x03200008))) /* jr t9 */
1367d393
ILT
5999 {
6000 bfd_vma addr;
6001 bfd_vma dest;
6002 bfd_signed_vma off;
6003
6004 addr = (input_section->output_section->vma
6005 + input_section->output_offset
6006 + relocation->r_offset
6007 + 4);
6008 if (r_type == R_MIPS_26)
6009 dest = (value << 2) | ((addr >> 28) << 28);
6010 else
6011 dest = value;
6012 off = dest - addr;
6013 if (off <= 0x1ffff && off >= -0x20000)
38a7df63
CF
6014 {
6015 if (x == 0x03200008) /* jr t9 */
6016 x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff); /* b addr */
6017 else
6018 x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff); /* bal addr */
6019 }
1367d393
ILT
6020 }
6021
b49e97c9
TS
6022 /* Put the value into the output. */
6023 bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
d6f16593 6024
df58fc94
RS
6025 _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6026 location);
d6f16593 6027
b34976b6 6028 return TRUE;
b49e97c9 6029}
b49e97c9 6030\f
b49e97c9
TS
6031/* Create a rel.dyn relocation for the dynamic linker to resolve. REL
6032 is the original relocation, which is now being transformed into a
6033 dynamic relocation. The ADDENDP is adjusted if necessary; the
6034 caller should store the result in place of the original addend. */
6035
b34976b6 6036static bfd_boolean
9719ad41
RS
6037mips_elf_create_dynamic_relocation (bfd *output_bfd,
6038 struct bfd_link_info *info,
6039 const Elf_Internal_Rela *rel,
6040 struct mips_elf_link_hash_entry *h,
6041 asection *sec, bfd_vma symbol,
6042 bfd_vma *addendp, asection *input_section)
b49e97c9 6043{
947216bf 6044 Elf_Internal_Rela outrel[3];
b49e97c9
TS
6045 asection *sreloc;
6046 bfd *dynobj;
6047 int r_type;
5d41f0b6
RS
6048 long indx;
6049 bfd_boolean defined_p;
0a44bf69 6050 struct mips_elf_link_hash_table *htab;
b49e97c9 6051
0a44bf69 6052 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
6053 BFD_ASSERT (htab != NULL);
6054
b49e97c9
TS
6055 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6056 dynobj = elf_hash_table (info)->dynobj;
0a44bf69 6057 sreloc = mips_elf_rel_dyn_section (info, FALSE);
b49e97c9
TS
6058 BFD_ASSERT (sreloc != NULL);
6059 BFD_ASSERT (sreloc->contents != NULL);
6060 BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
eea6121a 6061 < sreloc->size);
b49e97c9 6062
b49e97c9
TS
6063 outrel[0].r_offset =
6064 _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
9ddf8309
TS
6065 if (ABI_64_P (output_bfd))
6066 {
6067 outrel[1].r_offset =
6068 _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6069 outrel[2].r_offset =
6070 _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6071 }
b49e97c9 6072
c5ae1840 6073 if (outrel[0].r_offset == MINUS_ONE)
0d591ff7 6074 /* The relocation field has been deleted. */
5d41f0b6
RS
6075 return TRUE;
6076
6077 if (outrel[0].r_offset == MINUS_TWO)
0d591ff7
RS
6078 {
6079 /* The relocation field has been converted into a relative value of
6080 some sort. Functions like _bfd_elf_write_section_eh_frame expect
6081 the field to be fully relocated, so add in the symbol's value. */
0d591ff7 6082 *addendp += symbol;
5d41f0b6 6083 return TRUE;
0d591ff7 6084 }
b49e97c9 6085
5d41f0b6
RS
6086 /* We must now calculate the dynamic symbol table index to use
6087 in the relocation. */
d4a77f3f 6088 if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
5d41f0b6 6089 {
020d7251 6090 BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
5d41f0b6
RS
6091 indx = h->root.dynindx;
6092 if (SGI_COMPAT (output_bfd))
6093 defined_p = h->root.def_regular;
6094 else
6095 /* ??? glibc's ld.so just adds the final GOT entry to the
6096 relocation field. It therefore treats relocs against
6097 defined symbols in the same way as relocs against
6098 undefined symbols. */
6099 defined_p = FALSE;
6100 }
b49e97c9
TS
6101 else
6102 {
5d41f0b6
RS
6103 if (sec != NULL && bfd_is_abs_section (sec))
6104 indx = 0;
6105 else if (sec == NULL || sec->owner == NULL)
fdd07405 6106 {
5d41f0b6
RS
6107 bfd_set_error (bfd_error_bad_value);
6108 return FALSE;
b49e97c9
TS
6109 }
6110 else
6111 {
5d41f0b6 6112 indx = elf_section_data (sec->output_section)->dynindx;
74541ad4
AM
6113 if (indx == 0)
6114 {
6115 asection *osec = htab->root.text_index_section;
6116 indx = elf_section_data (osec)->dynindx;
6117 }
5d41f0b6
RS
6118 if (indx == 0)
6119 abort ();
b49e97c9
TS
6120 }
6121
5d41f0b6
RS
6122 /* Instead of generating a relocation using the section
6123 symbol, we may as well make it a fully relative
6124 relocation. We want to avoid generating relocations to
6125 local symbols because we used to generate them
6126 incorrectly, without adding the original symbol value,
6127 which is mandated by the ABI for section symbols. In
6128 order to give dynamic loaders and applications time to
6129 phase out the incorrect use, we refrain from emitting
6130 section-relative relocations. It's not like they're
6131 useful, after all. This should be a bit more efficient
6132 as well. */
6133 /* ??? Although this behavior is compatible with glibc's ld.so,
6134 the ABI says that relocations against STN_UNDEF should have
6135 a symbol value of 0. Irix rld honors this, so relocations
6136 against STN_UNDEF have no effect. */
6137 if (!SGI_COMPAT (output_bfd))
6138 indx = 0;
6139 defined_p = TRUE;
b49e97c9
TS
6140 }
6141
5d41f0b6
RS
6142 /* If the relocation was previously an absolute relocation and
6143 this symbol will not be referred to by the relocation, we must
6144 adjust it by the value we give it in the dynamic symbol table.
6145 Otherwise leave the job up to the dynamic linker. */
6146 if (defined_p && r_type != R_MIPS_REL32)
6147 *addendp += symbol;
6148
0a44bf69
RS
6149 if (htab->is_vxworks)
6150 /* VxWorks uses non-relative relocations for this. */
6151 outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6152 else
6153 /* The relocation is always an REL32 relocation because we don't
6154 know where the shared library will wind up at load-time. */
6155 outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6156 R_MIPS_REL32);
6157
5d41f0b6
RS
6158 /* For strict adherence to the ABI specification, we should
6159 generate a R_MIPS_64 relocation record by itself before the
6160 _REL32/_64 record as well, such that the addend is read in as
6161 a 64-bit value (REL32 is a 32-bit relocation, after all).
6162 However, since none of the existing ELF64 MIPS dynamic
6163 loaders seems to care, we don't waste space with these
6164 artificial relocations. If this turns out to not be true,
6165 mips_elf_allocate_dynamic_relocation() should be tweaked so
6166 as to make room for a pair of dynamic relocations per
6167 invocation if ABI_64_P, and here we should generate an
6168 additional relocation record with R_MIPS_64 by itself for a
6169 NULL symbol before this relocation record. */
6170 outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6171 ABI_64_P (output_bfd)
6172 ? R_MIPS_64
6173 : R_MIPS_NONE);
6174 outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6175
6176 /* Adjust the output offset of the relocation to reference the
6177 correct location in the output file. */
6178 outrel[0].r_offset += (input_section->output_section->vma
6179 + input_section->output_offset);
6180 outrel[1].r_offset += (input_section->output_section->vma
6181 + input_section->output_offset);
6182 outrel[2].r_offset += (input_section->output_section->vma
6183 + input_section->output_offset);
6184
b49e97c9
TS
6185 /* Put the relocation back out. We have to use the special
6186 relocation outputter in the 64-bit case since the 64-bit
6187 relocation format is non-standard. */
6188 if (ABI_64_P (output_bfd))
6189 {
6190 (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6191 (output_bfd, &outrel[0],
6192 (sreloc->contents
6193 + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6194 }
0a44bf69
RS
6195 else if (htab->is_vxworks)
6196 {
6197 /* VxWorks uses RELA rather than REL dynamic relocations. */
6198 outrel[0].r_addend = *addendp;
6199 bfd_elf32_swap_reloca_out
6200 (output_bfd, &outrel[0],
6201 (sreloc->contents
6202 + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6203 }
b49e97c9 6204 else
947216bf
AM
6205 bfd_elf32_swap_reloc_out
6206 (output_bfd, &outrel[0],
6207 (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
b49e97c9 6208
b49e97c9
TS
6209 /* We've now added another relocation. */
6210 ++sreloc->reloc_count;
6211
6212 /* Make sure the output section is writable. The dynamic linker
6213 will be writing to it. */
6214 elf_section_data (input_section->output_section)->this_hdr.sh_flags
6215 |= SHF_WRITE;
6216
6217 /* On IRIX5, make an entry of compact relocation info. */
5d41f0b6 6218 if (IRIX_COMPAT (output_bfd) == ict_irix5)
b49e97c9 6219 {
3d4d4302 6220 asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
b49e97c9
TS
6221 bfd_byte *cr;
6222
6223 if (scpt)
6224 {
6225 Elf32_crinfo cptrel;
6226
6227 mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6228 cptrel.vaddr = (rel->r_offset
6229 + input_section->output_section->vma
6230 + input_section->output_offset);
6231 if (r_type == R_MIPS_REL32)
6232 mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6233 else
6234 mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6235 mips_elf_set_cr_dist2to (cptrel, 0);
6236 cptrel.konst = *addendp;
6237
6238 cr = (scpt->contents
6239 + sizeof (Elf32_External_compact_rel));
abc0f8d0 6240 mips_elf_set_cr_relvaddr (cptrel, 0);
b49e97c9
TS
6241 bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6242 ((Elf32_External_crinfo *) cr
6243 + scpt->reloc_count));
6244 ++scpt->reloc_count;
6245 }
6246 }
6247
943284cc
DJ
6248 /* If we've written this relocation for a readonly section,
6249 we need to set DF_TEXTREL again, so that we do not delete the
6250 DT_TEXTREL tag. */
6251 if (MIPS_ELF_READONLY_SECTION (input_section))
6252 info->flags |= DF_TEXTREL;
6253
b34976b6 6254 return TRUE;
b49e97c9
TS
6255}
6256\f
b49e97c9
TS
6257/* Return the MACH for a MIPS e_flags value. */
6258
6259unsigned long
9719ad41 6260_bfd_elf_mips_mach (flagword flags)
b49e97c9
TS
6261{
6262 switch (flags & EF_MIPS_MACH)
6263 {
6264 case E_MIPS_MACH_3900:
6265 return bfd_mach_mips3900;
6266
6267 case E_MIPS_MACH_4010:
6268 return bfd_mach_mips4010;
6269
6270 case E_MIPS_MACH_4100:
6271 return bfd_mach_mips4100;
6272
6273 case E_MIPS_MACH_4111:
6274 return bfd_mach_mips4111;
6275
00707a0e
RS
6276 case E_MIPS_MACH_4120:
6277 return bfd_mach_mips4120;
6278
b49e97c9
TS
6279 case E_MIPS_MACH_4650:
6280 return bfd_mach_mips4650;
6281
00707a0e
RS
6282 case E_MIPS_MACH_5400:
6283 return bfd_mach_mips5400;
6284
6285 case E_MIPS_MACH_5500:
6286 return bfd_mach_mips5500;
6287
e407c74b
NC
6288 case E_MIPS_MACH_5900:
6289 return bfd_mach_mips5900;
6290
0d2e43ed
ILT
6291 case E_MIPS_MACH_9000:
6292 return bfd_mach_mips9000;
6293
b49e97c9
TS
6294 case E_MIPS_MACH_SB1:
6295 return bfd_mach_mips_sb1;
6296
350cc38d
MS
6297 case E_MIPS_MACH_LS2E:
6298 return bfd_mach_mips_loongson_2e;
6299
6300 case E_MIPS_MACH_LS2F:
6301 return bfd_mach_mips_loongson_2f;
6302
fd503541
NC
6303 case E_MIPS_MACH_LS3A:
6304 return bfd_mach_mips_loongson_3a;
6305
432233b3
AP
6306 case E_MIPS_MACH_OCTEON2:
6307 return bfd_mach_mips_octeon2;
6308
6f179bd0
AN
6309 case E_MIPS_MACH_OCTEON:
6310 return bfd_mach_mips_octeon;
6311
52b6b6b9
JM
6312 case E_MIPS_MACH_XLR:
6313 return bfd_mach_mips_xlr;
6314
b49e97c9
TS
6315 default:
6316 switch (flags & EF_MIPS_ARCH)
6317 {
6318 default:
6319 case E_MIPS_ARCH_1:
6320 return bfd_mach_mips3000;
b49e97c9
TS
6321
6322 case E_MIPS_ARCH_2:
6323 return bfd_mach_mips6000;
b49e97c9
TS
6324
6325 case E_MIPS_ARCH_3:
6326 return bfd_mach_mips4000;
b49e97c9
TS
6327
6328 case E_MIPS_ARCH_4:
6329 return bfd_mach_mips8000;
b49e97c9
TS
6330
6331 case E_MIPS_ARCH_5:
6332 return bfd_mach_mips5;
b49e97c9
TS
6333
6334 case E_MIPS_ARCH_32:
6335 return bfd_mach_mipsisa32;
b49e97c9
TS
6336
6337 case E_MIPS_ARCH_64:
6338 return bfd_mach_mipsisa64;
af7ee8bf
CD
6339
6340 case E_MIPS_ARCH_32R2:
6341 return bfd_mach_mipsisa32r2;
5f74bc13
CD
6342
6343 case E_MIPS_ARCH_64R2:
6344 return bfd_mach_mipsisa64r2;
b49e97c9
TS
6345 }
6346 }
6347
6348 return 0;
6349}
6350
6351/* Return printable name for ABI. */
6352
6353static INLINE char *
9719ad41 6354elf_mips_abi_name (bfd *abfd)
b49e97c9
TS
6355{
6356 flagword flags;
6357
6358 flags = elf_elfheader (abfd)->e_flags;
6359 switch (flags & EF_MIPS_ABI)
6360 {
6361 case 0:
6362 if (ABI_N32_P (abfd))
6363 return "N32";
6364 else if (ABI_64_P (abfd))
6365 return "64";
6366 else
6367 return "none";
6368 case E_MIPS_ABI_O32:
6369 return "O32";
6370 case E_MIPS_ABI_O64:
6371 return "O64";
6372 case E_MIPS_ABI_EABI32:
6373 return "EABI32";
6374 case E_MIPS_ABI_EABI64:
6375 return "EABI64";
6376 default:
6377 return "unknown abi";
6378 }
6379}
6380\f
6381/* MIPS ELF uses two common sections. One is the usual one, and the
6382 other is for small objects. All the small objects are kept
6383 together, and then referenced via the gp pointer, which yields
6384 faster assembler code. This is what we use for the small common
6385 section. This approach is copied from ecoff.c. */
6386static asection mips_elf_scom_section;
6387static asymbol mips_elf_scom_symbol;
6388static asymbol *mips_elf_scom_symbol_ptr;
6389
6390/* MIPS ELF also uses an acommon section, which represents an
6391 allocated common symbol which may be overridden by a
6392 definition in a shared library. */
6393static asection mips_elf_acom_section;
6394static asymbol mips_elf_acom_symbol;
6395static asymbol *mips_elf_acom_symbol_ptr;
6396
738e5348 6397/* This is used for both the 32-bit and the 64-bit ABI. */
b49e97c9
TS
6398
6399void
9719ad41 6400_bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
b49e97c9
TS
6401{
6402 elf_symbol_type *elfsym;
6403
738e5348 6404 /* Handle the special MIPS section numbers that a symbol may use. */
b49e97c9
TS
6405 elfsym = (elf_symbol_type *) asym;
6406 switch (elfsym->internal_elf_sym.st_shndx)
6407 {
6408 case SHN_MIPS_ACOMMON:
6409 /* This section is used in a dynamically linked executable file.
6410 It is an allocated common section. The dynamic linker can
6411 either resolve these symbols to something in a shared
6412 library, or it can just leave them here. For our purposes,
6413 we can consider these symbols to be in a new section. */
6414 if (mips_elf_acom_section.name == NULL)
6415 {
6416 /* Initialize the acommon section. */
6417 mips_elf_acom_section.name = ".acommon";
6418 mips_elf_acom_section.flags = SEC_ALLOC;
6419 mips_elf_acom_section.output_section = &mips_elf_acom_section;
6420 mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6421 mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6422 mips_elf_acom_symbol.name = ".acommon";
6423 mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6424 mips_elf_acom_symbol.section = &mips_elf_acom_section;
6425 mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6426 }
6427 asym->section = &mips_elf_acom_section;
6428 break;
6429
6430 case SHN_COMMON:
6431 /* Common symbols less than the GP size are automatically
6432 treated as SHN_MIPS_SCOMMON symbols on IRIX5. */
6433 if (asym->value > elf_gp_size (abfd)
b59eed79 6434 || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
b49e97c9
TS
6435 || IRIX_COMPAT (abfd) == ict_irix6)
6436 break;
6437 /* Fall through. */
6438 case SHN_MIPS_SCOMMON:
6439 if (mips_elf_scom_section.name == NULL)
6440 {
6441 /* Initialize the small common section. */
6442 mips_elf_scom_section.name = ".scommon";
6443 mips_elf_scom_section.flags = SEC_IS_COMMON;
6444 mips_elf_scom_section.output_section = &mips_elf_scom_section;
6445 mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6446 mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6447 mips_elf_scom_symbol.name = ".scommon";
6448 mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6449 mips_elf_scom_symbol.section = &mips_elf_scom_section;
6450 mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6451 }
6452 asym->section = &mips_elf_scom_section;
6453 asym->value = elfsym->internal_elf_sym.st_size;
6454 break;
6455
6456 case SHN_MIPS_SUNDEFINED:
6457 asym->section = bfd_und_section_ptr;
6458 break;
6459
b49e97c9 6460 case SHN_MIPS_TEXT:
00b4930b
TS
6461 {
6462 asection *section = bfd_get_section_by_name (abfd, ".text");
6463
00b4930b
TS
6464 if (section != NULL)
6465 {
6466 asym->section = section;
6467 /* MIPS_TEXT is a bit special, the address is not an offset
6468 to the base of the .text section. So substract the section
6469 base address to make it an offset. */
6470 asym->value -= section->vma;
6471 }
6472 }
b49e97c9
TS
6473 break;
6474
6475 case SHN_MIPS_DATA:
00b4930b
TS
6476 {
6477 asection *section = bfd_get_section_by_name (abfd, ".data");
6478
00b4930b
TS
6479 if (section != NULL)
6480 {
6481 asym->section = section;
6482 /* MIPS_DATA is a bit special, the address is not an offset
6483 to the base of the .data section. So substract the section
6484 base address to make it an offset. */
6485 asym->value -= section->vma;
6486 }
6487 }
b49e97c9 6488 break;
b49e97c9 6489 }
738e5348 6490
df58fc94
RS
6491 /* If this is an odd-valued function symbol, assume it's a MIPS16
6492 or microMIPS one. */
738e5348
RS
6493 if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6494 && (asym->value & 1) != 0)
6495 {
6496 asym->value--;
df58fc94
RS
6497 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
6498 elfsym->internal_elf_sym.st_other
6499 = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6500 else
6501 elfsym->internal_elf_sym.st_other
6502 = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
738e5348 6503 }
b49e97c9
TS
6504}
6505\f
8c946ed5
RS
6506/* Implement elf_backend_eh_frame_address_size. This differs from
6507 the default in the way it handles EABI64.
6508
6509 EABI64 was originally specified as an LP64 ABI, and that is what
6510 -mabi=eabi normally gives on a 64-bit target. However, gcc has
6511 historically accepted the combination of -mabi=eabi and -mlong32,
6512 and this ILP32 variation has become semi-official over time.
6513 Both forms use elf32 and have pointer-sized FDE addresses.
6514
6515 If an EABI object was generated by GCC 4.0 or above, it will have
6516 an empty .gcc_compiled_longXX section, where XX is the size of longs
6517 in bits. Unfortunately, ILP32 objects generated by earlier compilers
6518 have no special marking to distinguish them from LP64 objects.
6519
6520 We don't want users of the official LP64 ABI to be punished for the
6521 existence of the ILP32 variant, but at the same time, we don't want
6522 to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6523 We therefore take the following approach:
6524
6525 - If ABFD contains a .gcc_compiled_longXX section, use it to
6526 determine the pointer size.
6527
6528 - Otherwise check the type of the first relocation. Assume that
6529 the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6530
6531 - Otherwise punt.
6532
6533 The second check is enough to detect LP64 objects generated by pre-4.0
6534 compilers because, in the kind of output generated by those compilers,
6535 the first relocation will be associated with either a CIE personality
6536 routine or an FDE start address. Furthermore, the compilers never
6537 used a special (non-pointer) encoding for this ABI.
6538
6539 Checking the relocation type should also be safe because there is no
6540 reason to use R_MIPS_64 in an ILP32 object. Pre-4.0 compilers never
6541 did so. */
6542
6543unsigned int
6544_bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6545{
6546 if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6547 return 8;
6548 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6549 {
6550 bfd_boolean long32_p, long64_p;
6551
6552 long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6553 long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6554 if (long32_p && long64_p)
6555 return 0;
6556 if (long32_p)
6557 return 4;
6558 if (long64_p)
6559 return 8;
6560
6561 if (sec->reloc_count > 0
6562 && elf_section_data (sec)->relocs != NULL
6563 && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6564 == R_MIPS_64))
6565 return 8;
6566
6567 return 0;
6568 }
6569 return 4;
6570}
6571\f
174fd7f9
RS
6572/* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6573 relocations against two unnamed section symbols to resolve to the
6574 same address. For example, if we have code like:
6575
6576 lw $4,%got_disp(.data)($gp)
6577 lw $25,%got_disp(.text)($gp)
6578 jalr $25
6579
6580 then the linker will resolve both relocations to .data and the program
6581 will jump there rather than to .text.
6582
6583 We can work around this problem by giving names to local section symbols.
6584 This is also what the MIPSpro tools do. */
6585
6586bfd_boolean
6587_bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6588{
6589 return SGI_COMPAT (abfd);
6590}
6591\f
b49e97c9
TS
6592/* Work over a section just before writing it out. This routine is
6593 used by both the 32-bit and the 64-bit ABI. FIXME: We recognize
6594 sections that need the SHF_MIPS_GPREL flag by name; there has to be
6595 a better way. */
6596
b34976b6 6597bfd_boolean
9719ad41 6598_bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
b49e97c9
TS
6599{
6600 if (hdr->sh_type == SHT_MIPS_REGINFO
6601 && hdr->sh_size > 0)
6602 {
6603 bfd_byte buf[4];
6604
6605 BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6606 BFD_ASSERT (hdr->contents == NULL);
6607
6608 if (bfd_seek (abfd,
6609 hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6610 SEEK_SET) != 0)
b34976b6 6611 return FALSE;
b49e97c9 6612 H_PUT_32 (abfd, elf_gp (abfd), buf);
9719ad41 6613 if (bfd_bwrite (buf, 4, abfd) != 4)
b34976b6 6614 return FALSE;
b49e97c9
TS
6615 }
6616
6617 if (hdr->sh_type == SHT_MIPS_OPTIONS
6618 && hdr->bfd_section != NULL
f0abc2a1
AM
6619 && mips_elf_section_data (hdr->bfd_section) != NULL
6620 && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
b49e97c9
TS
6621 {
6622 bfd_byte *contents, *l, *lend;
6623
f0abc2a1
AM
6624 /* We stored the section contents in the tdata field in the
6625 set_section_contents routine. We save the section contents
6626 so that we don't have to read them again.
b49e97c9
TS
6627 At this point we know that elf_gp is set, so we can look
6628 through the section contents to see if there is an
6629 ODK_REGINFO structure. */
6630
f0abc2a1 6631 contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
b49e97c9
TS
6632 l = contents;
6633 lend = contents + hdr->sh_size;
6634 while (l + sizeof (Elf_External_Options) <= lend)
6635 {
6636 Elf_Internal_Options intopt;
6637
6638 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6639 &intopt);
1bc8074d
MR
6640 if (intopt.size < sizeof (Elf_External_Options))
6641 {
6642 (*_bfd_error_handler)
6643 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6644 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6645 break;
6646 }
b49e97c9
TS
6647 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6648 {
6649 bfd_byte buf[8];
6650
6651 if (bfd_seek (abfd,
6652 (hdr->sh_offset
6653 + (l - contents)
6654 + sizeof (Elf_External_Options)
6655 + (sizeof (Elf64_External_RegInfo) - 8)),
6656 SEEK_SET) != 0)
b34976b6 6657 return FALSE;
b49e97c9 6658 H_PUT_64 (abfd, elf_gp (abfd), buf);
9719ad41 6659 if (bfd_bwrite (buf, 8, abfd) != 8)
b34976b6 6660 return FALSE;
b49e97c9
TS
6661 }
6662 else if (intopt.kind == ODK_REGINFO)
6663 {
6664 bfd_byte buf[4];
6665
6666 if (bfd_seek (abfd,
6667 (hdr->sh_offset
6668 + (l - contents)
6669 + sizeof (Elf_External_Options)
6670 + (sizeof (Elf32_External_RegInfo) - 4)),
6671 SEEK_SET) != 0)
b34976b6 6672 return FALSE;
b49e97c9 6673 H_PUT_32 (abfd, elf_gp (abfd), buf);
9719ad41 6674 if (bfd_bwrite (buf, 4, abfd) != 4)
b34976b6 6675 return FALSE;
b49e97c9
TS
6676 }
6677 l += intopt.size;
6678 }
6679 }
6680
6681 if (hdr->bfd_section != NULL)
6682 {
6683 const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6684
2d0f9ad9
JM
6685 /* .sbss is not handled specially here because the GNU/Linux
6686 prelinker can convert .sbss from NOBITS to PROGBITS and
6687 changing it back to NOBITS breaks the binary. The entry in
6688 _bfd_mips_elf_special_sections will ensure the correct flags
6689 are set on .sbss if BFD creates it without reading it from an
6690 input file, and without special handling here the flags set
6691 on it in an input file will be followed. */
b49e97c9
TS
6692 if (strcmp (name, ".sdata") == 0
6693 || strcmp (name, ".lit8") == 0
6694 || strcmp (name, ".lit4") == 0)
6695 {
6696 hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
6697 hdr->sh_type = SHT_PROGBITS;
6698 }
b49e97c9
TS
6699 else if (strcmp (name, ".srdata") == 0)
6700 {
6701 hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
6702 hdr->sh_type = SHT_PROGBITS;
6703 }
6704 else if (strcmp (name, ".compact_rel") == 0)
6705 {
6706 hdr->sh_flags = 0;
6707 hdr->sh_type = SHT_PROGBITS;
6708 }
6709 else if (strcmp (name, ".rtproc") == 0)
6710 {
6711 if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
6712 {
6713 unsigned int adjust;
6714
6715 adjust = hdr->sh_size % hdr->sh_addralign;
6716 if (adjust != 0)
6717 hdr->sh_size += hdr->sh_addralign - adjust;
6718 }
6719 }
6720 }
6721
b34976b6 6722 return TRUE;
b49e97c9
TS
6723}
6724
6725/* Handle a MIPS specific section when reading an object file. This
6726 is called when elfcode.h finds a section with an unknown type.
6727 This routine supports both the 32-bit and 64-bit ELF ABI.
6728
6729 FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
6730 how to. */
6731
b34976b6 6732bfd_boolean
6dc132d9
L
6733_bfd_mips_elf_section_from_shdr (bfd *abfd,
6734 Elf_Internal_Shdr *hdr,
6735 const char *name,
6736 int shindex)
b49e97c9
TS
6737{
6738 flagword flags = 0;
6739
6740 /* There ought to be a place to keep ELF backend specific flags, but
6741 at the moment there isn't one. We just keep track of the
6742 sections by their name, instead. Fortunately, the ABI gives
6743 suggested names for all the MIPS specific sections, so we will
6744 probably get away with this. */
6745 switch (hdr->sh_type)
6746 {
6747 case SHT_MIPS_LIBLIST:
6748 if (strcmp (name, ".liblist") != 0)
b34976b6 6749 return FALSE;
b49e97c9
TS
6750 break;
6751 case SHT_MIPS_MSYM:
6752 if (strcmp (name, ".msym") != 0)
b34976b6 6753 return FALSE;
b49e97c9
TS
6754 break;
6755 case SHT_MIPS_CONFLICT:
6756 if (strcmp (name, ".conflict") != 0)
b34976b6 6757 return FALSE;
b49e97c9
TS
6758 break;
6759 case SHT_MIPS_GPTAB:
0112cd26 6760 if (! CONST_STRNEQ (name, ".gptab."))
b34976b6 6761 return FALSE;
b49e97c9
TS
6762 break;
6763 case SHT_MIPS_UCODE:
6764 if (strcmp (name, ".ucode") != 0)
b34976b6 6765 return FALSE;
b49e97c9
TS
6766 break;
6767 case SHT_MIPS_DEBUG:
6768 if (strcmp (name, ".mdebug") != 0)
b34976b6 6769 return FALSE;
b49e97c9
TS
6770 flags = SEC_DEBUGGING;
6771 break;
6772 case SHT_MIPS_REGINFO:
6773 if (strcmp (name, ".reginfo") != 0
6774 || hdr->sh_size != sizeof (Elf32_External_RegInfo))
b34976b6 6775 return FALSE;
b49e97c9
TS
6776 flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
6777 break;
6778 case SHT_MIPS_IFACE:
6779 if (strcmp (name, ".MIPS.interfaces") != 0)
b34976b6 6780 return FALSE;
b49e97c9
TS
6781 break;
6782 case SHT_MIPS_CONTENT:
0112cd26 6783 if (! CONST_STRNEQ (name, ".MIPS.content"))
b34976b6 6784 return FALSE;
b49e97c9
TS
6785 break;
6786 case SHT_MIPS_OPTIONS:
cc2e31b9 6787 if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
b34976b6 6788 return FALSE;
b49e97c9
TS
6789 break;
6790 case SHT_MIPS_DWARF:
1b315056 6791 if (! CONST_STRNEQ (name, ".debug_")
355d10dc 6792 && ! CONST_STRNEQ (name, ".zdebug_"))
b34976b6 6793 return FALSE;
b49e97c9
TS
6794 break;
6795 case SHT_MIPS_SYMBOL_LIB:
6796 if (strcmp (name, ".MIPS.symlib") != 0)
b34976b6 6797 return FALSE;
b49e97c9
TS
6798 break;
6799 case SHT_MIPS_EVENTS:
0112cd26
NC
6800 if (! CONST_STRNEQ (name, ".MIPS.events")
6801 && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
b34976b6 6802 return FALSE;
b49e97c9
TS
6803 break;
6804 default:
cc2e31b9 6805 break;
b49e97c9
TS
6806 }
6807
6dc132d9 6808 if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
b34976b6 6809 return FALSE;
b49e97c9
TS
6810
6811 if (flags)
6812 {
6813 if (! bfd_set_section_flags (abfd, hdr->bfd_section,
6814 (bfd_get_section_flags (abfd,
6815 hdr->bfd_section)
6816 | flags)))
b34976b6 6817 return FALSE;
b49e97c9
TS
6818 }
6819
6820 /* FIXME: We should record sh_info for a .gptab section. */
6821
6822 /* For a .reginfo section, set the gp value in the tdata information
6823 from the contents of this section. We need the gp value while
6824 processing relocs, so we just get it now. The .reginfo section
6825 is not used in the 64-bit MIPS ELF ABI. */
6826 if (hdr->sh_type == SHT_MIPS_REGINFO)
6827 {
6828 Elf32_External_RegInfo ext;
6829 Elf32_RegInfo s;
6830
9719ad41
RS
6831 if (! bfd_get_section_contents (abfd, hdr->bfd_section,
6832 &ext, 0, sizeof ext))
b34976b6 6833 return FALSE;
b49e97c9
TS
6834 bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
6835 elf_gp (abfd) = s.ri_gp_value;
6836 }
6837
6838 /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
6839 set the gp value based on what we find. We may see both
6840 SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
6841 they should agree. */
6842 if (hdr->sh_type == SHT_MIPS_OPTIONS)
6843 {
6844 bfd_byte *contents, *l, *lend;
6845
9719ad41 6846 contents = bfd_malloc (hdr->sh_size);
b49e97c9 6847 if (contents == NULL)
b34976b6 6848 return FALSE;
b49e97c9 6849 if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
9719ad41 6850 0, hdr->sh_size))
b49e97c9
TS
6851 {
6852 free (contents);
b34976b6 6853 return FALSE;
b49e97c9
TS
6854 }
6855 l = contents;
6856 lend = contents + hdr->sh_size;
6857 while (l + sizeof (Elf_External_Options) <= lend)
6858 {
6859 Elf_Internal_Options intopt;
6860
6861 bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6862 &intopt);
1bc8074d
MR
6863 if (intopt.size < sizeof (Elf_External_Options))
6864 {
6865 (*_bfd_error_handler)
6866 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6867 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6868 break;
6869 }
b49e97c9
TS
6870 if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6871 {
6872 Elf64_Internal_RegInfo intreg;
6873
6874 bfd_mips_elf64_swap_reginfo_in
6875 (abfd,
6876 ((Elf64_External_RegInfo *)
6877 (l + sizeof (Elf_External_Options))),
6878 &intreg);
6879 elf_gp (abfd) = intreg.ri_gp_value;
6880 }
6881 else if (intopt.kind == ODK_REGINFO)
6882 {
6883 Elf32_RegInfo intreg;
6884
6885 bfd_mips_elf32_swap_reginfo_in
6886 (abfd,
6887 ((Elf32_External_RegInfo *)
6888 (l + sizeof (Elf_External_Options))),
6889 &intreg);
6890 elf_gp (abfd) = intreg.ri_gp_value;
6891 }
6892 l += intopt.size;
6893 }
6894 free (contents);
6895 }
6896
b34976b6 6897 return TRUE;
b49e97c9
TS
6898}
6899
6900/* Set the correct type for a MIPS ELF section. We do this by the
6901 section name, which is a hack, but ought to work. This routine is
6902 used by both the 32-bit and the 64-bit ABI. */
6903
b34976b6 6904bfd_boolean
9719ad41 6905_bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
b49e97c9 6906{
0414f35b 6907 const char *name = bfd_get_section_name (abfd, sec);
b49e97c9
TS
6908
6909 if (strcmp (name, ".liblist") == 0)
6910 {
6911 hdr->sh_type = SHT_MIPS_LIBLIST;
eea6121a 6912 hdr->sh_info = sec->size / sizeof (Elf32_Lib);
b49e97c9
TS
6913 /* The sh_link field is set in final_write_processing. */
6914 }
6915 else if (strcmp (name, ".conflict") == 0)
6916 hdr->sh_type = SHT_MIPS_CONFLICT;
0112cd26 6917 else if (CONST_STRNEQ (name, ".gptab."))
b49e97c9
TS
6918 {
6919 hdr->sh_type = SHT_MIPS_GPTAB;
6920 hdr->sh_entsize = sizeof (Elf32_External_gptab);
6921 /* The sh_info field is set in final_write_processing. */
6922 }
6923 else if (strcmp (name, ".ucode") == 0)
6924 hdr->sh_type = SHT_MIPS_UCODE;
6925 else if (strcmp (name, ".mdebug") == 0)
6926 {
6927 hdr->sh_type = SHT_MIPS_DEBUG;
8dc1a139 6928 /* In a shared object on IRIX 5.3, the .mdebug section has an
b49e97c9
TS
6929 entsize of 0. FIXME: Does this matter? */
6930 if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
6931 hdr->sh_entsize = 0;
6932 else
6933 hdr->sh_entsize = 1;
6934 }
6935 else if (strcmp (name, ".reginfo") == 0)
6936 {
6937 hdr->sh_type = SHT_MIPS_REGINFO;
8dc1a139 6938 /* In a shared object on IRIX 5.3, the .reginfo section has an
b49e97c9
TS
6939 entsize of 0x18. FIXME: Does this matter? */
6940 if (SGI_COMPAT (abfd))
6941 {
6942 if ((abfd->flags & DYNAMIC) != 0)
6943 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6944 else
6945 hdr->sh_entsize = 1;
6946 }
6947 else
6948 hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
6949 }
6950 else if (SGI_COMPAT (abfd)
6951 && (strcmp (name, ".hash") == 0
6952 || strcmp (name, ".dynamic") == 0
6953 || strcmp (name, ".dynstr") == 0))
6954 {
6955 if (SGI_COMPAT (abfd))
6956 hdr->sh_entsize = 0;
6957#if 0
8dc1a139 6958 /* This isn't how the IRIX6 linker behaves. */
b49e97c9
TS
6959 hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
6960#endif
6961 }
6962 else if (strcmp (name, ".got") == 0
6963 || strcmp (name, ".srdata") == 0
6964 || strcmp (name, ".sdata") == 0
6965 || strcmp (name, ".sbss") == 0
6966 || strcmp (name, ".lit4") == 0
6967 || strcmp (name, ".lit8") == 0)
6968 hdr->sh_flags |= SHF_MIPS_GPREL;
6969 else if (strcmp (name, ".MIPS.interfaces") == 0)
6970 {
6971 hdr->sh_type = SHT_MIPS_IFACE;
6972 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6973 }
0112cd26 6974 else if (CONST_STRNEQ (name, ".MIPS.content"))
b49e97c9
TS
6975 {
6976 hdr->sh_type = SHT_MIPS_CONTENT;
6977 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6978 /* The sh_info field is set in final_write_processing. */
6979 }
cc2e31b9 6980 else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
b49e97c9
TS
6981 {
6982 hdr->sh_type = SHT_MIPS_OPTIONS;
6983 hdr->sh_entsize = 1;
6984 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6985 }
1b315056
CS
6986 else if (CONST_STRNEQ (name, ".debug_")
6987 || CONST_STRNEQ (name, ".zdebug_"))
b5482f21
NC
6988 {
6989 hdr->sh_type = SHT_MIPS_DWARF;
6990
6991 /* Irix facilities such as libexc expect a single .debug_frame
6992 per executable, the system ones have NOSTRIP set and the linker
6993 doesn't merge sections with different flags so ... */
6994 if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
6995 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
6996 }
b49e97c9
TS
6997 else if (strcmp (name, ".MIPS.symlib") == 0)
6998 {
6999 hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7000 /* The sh_link and sh_info fields are set in
7001 final_write_processing. */
7002 }
0112cd26
NC
7003 else if (CONST_STRNEQ (name, ".MIPS.events")
7004 || CONST_STRNEQ (name, ".MIPS.post_rel"))
b49e97c9
TS
7005 {
7006 hdr->sh_type = SHT_MIPS_EVENTS;
7007 hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7008 /* The sh_link field is set in final_write_processing. */
7009 }
7010 else if (strcmp (name, ".msym") == 0)
7011 {
7012 hdr->sh_type = SHT_MIPS_MSYM;
7013 hdr->sh_flags |= SHF_ALLOC;
7014 hdr->sh_entsize = 8;
7015 }
7016
7a79a000
TS
7017 /* The generic elf_fake_sections will set up REL_HDR using the default
7018 kind of relocations. We used to set up a second header for the
7019 non-default kind of relocations here, but only NewABI would use
7020 these, and the IRIX ld doesn't like resulting empty RELA sections.
7021 Thus we create those header only on demand now. */
b49e97c9 7022
b34976b6 7023 return TRUE;
b49e97c9
TS
7024}
7025
7026/* Given a BFD section, try to locate the corresponding ELF section
7027 index. This is used by both the 32-bit and the 64-bit ABI.
7028 Actually, it's not clear to me that the 64-bit ABI supports these,
7029 but for non-PIC objects we will certainly want support for at least
7030 the .scommon section. */
7031
b34976b6 7032bfd_boolean
9719ad41
RS
7033_bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7034 asection *sec, int *retval)
b49e97c9
TS
7035{
7036 if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7037 {
7038 *retval = SHN_MIPS_SCOMMON;
b34976b6 7039 return TRUE;
b49e97c9
TS
7040 }
7041 if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7042 {
7043 *retval = SHN_MIPS_ACOMMON;
b34976b6 7044 return TRUE;
b49e97c9 7045 }
b34976b6 7046 return FALSE;
b49e97c9
TS
7047}
7048\f
7049/* Hook called by the linker routine which adds symbols from an object
7050 file. We must handle the special MIPS section numbers here. */
7051
b34976b6 7052bfd_boolean
9719ad41 7053_bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
555cd476 7054 Elf_Internal_Sym *sym, const char **namep,
9719ad41
RS
7055 flagword *flagsp ATTRIBUTE_UNUSED,
7056 asection **secp, bfd_vma *valp)
b49e97c9
TS
7057{
7058 if (SGI_COMPAT (abfd)
7059 && (abfd->flags & DYNAMIC) != 0
7060 && strcmp (*namep, "_rld_new_interface") == 0)
7061 {
8dc1a139 7062 /* Skip IRIX5 rld entry name. */
b49e97c9 7063 *namep = NULL;
b34976b6 7064 return TRUE;
b49e97c9
TS
7065 }
7066
eedecc07
DD
7067 /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7068 a SECTION *ABS*. This causes ld to think it can resolve _gp_disp
7069 by setting a DT_NEEDED for the shared object. Since _gp_disp is
7070 a magic symbol resolved by the linker, we ignore this bogus definition
7071 of _gp_disp. New ABI objects do not suffer from this problem so this
7072 is not done for them. */
7073 if (!NEWABI_P(abfd)
7074 && (sym->st_shndx == SHN_ABS)
7075 && (strcmp (*namep, "_gp_disp") == 0))
7076 {
7077 *namep = NULL;
7078 return TRUE;
7079 }
7080
b49e97c9
TS
7081 switch (sym->st_shndx)
7082 {
7083 case SHN_COMMON:
7084 /* Common symbols less than the GP size are automatically
7085 treated as SHN_MIPS_SCOMMON symbols. */
7086 if (sym->st_size > elf_gp_size (abfd)
b59eed79 7087 || ELF_ST_TYPE (sym->st_info) == STT_TLS
b49e97c9
TS
7088 || IRIX_COMPAT (abfd) == ict_irix6)
7089 break;
7090 /* Fall through. */
7091 case SHN_MIPS_SCOMMON:
7092 *secp = bfd_make_section_old_way (abfd, ".scommon");
7093 (*secp)->flags |= SEC_IS_COMMON;
7094 *valp = sym->st_size;
7095 break;
7096
7097 case SHN_MIPS_TEXT:
7098 /* This section is used in a shared object. */
7099 if (elf_tdata (abfd)->elf_text_section == NULL)
7100 {
7101 asymbol *elf_text_symbol;
7102 asection *elf_text_section;
7103 bfd_size_type amt = sizeof (asection);
7104
7105 elf_text_section = bfd_zalloc (abfd, amt);
7106 if (elf_text_section == NULL)
b34976b6 7107 return FALSE;
b49e97c9
TS
7108
7109 amt = sizeof (asymbol);
7110 elf_text_symbol = bfd_zalloc (abfd, amt);
7111 if (elf_text_symbol == NULL)
b34976b6 7112 return FALSE;
b49e97c9
TS
7113
7114 /* Initialize the section. */
7115
7116 elf_tdata (abfd)->elf_text_section = elf_text_section;
7117 elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7118
7119 elf_text_section->symbol = elf_text_symbol;
7120 elf_text_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_text_symbol;
7121
7122 elf_text_section->name = ".text";
7123 elf_text_section->flags = SEC_NO_FLAGS;
7124 elf_text_section->output_section = NULL;
7125 elf_text_section->owner = abfd;
7126 elf_text_symbol->name = ".text";
7127 elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7128 elf_text_symbol->section = elf_text_section;
7129 }
7130 /* This code used to do *secp = bfd_und_section_ptr if
7131 info->shared. I don't know why, and that doesn't make sense,
7132 so I took it out. */
7133 *secp = elf_tdata (abfd)->elf_text_section;
7134 break;
7135
7136 case SHN_MIPS_ACOMMON:
7137 /* Fall through. XXX Can we treat this as allocated data? */
7138 case SHN_MIPS_DATA:
7139 /* This section is used in a shared object. */
7140 if (elf_tdata (abfd)->elf_data_section == NULL)
7141 {
7142 asymbol *elf_data_symbol;
7143 asection *elf_data_section;
7144 bfd_size_type amt = sizeof (asection);
7145
7146 elf_data_section = bfd_zalloc (abfd, amt);
7147 if (elf_data_section == NULL)
b34976b6 7148 return FALSE;
b49e97c9
TS
7149
7150 amt = sizeof (asymbol);
7151 elf_data_symbol = bfd_zalloc (abfd, amt);
7152 if (elf_data_symbol == NULL)
b34976b6 7153 return FALSE;
b49e97c9
TS
7154
7155 /* Initialize the section. */
7156
7157 elf_tdata (abfd)->elf_data_section = elf_data_section;
7158 elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7159
7160 elf_data_section->symbol = elf_data_symbol;
7161 elf_data_section->symbol_ptr_ptr = &elf_tdata (abfd)->elf_data_symbol;
7162
7163 elf_data_section->name = ".data";
7164 elf_data_section->flags = SEC_NO_FLAGS;
7165 elf_data_section->output_section = NULL;
7166 elf_data_section->owner = abfd;
7167 elf_data_symbol->name = ".data";
7168 elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7169 elf_data_symbol->section = elf_data_section;
7170 }
7171 /* This code used to do *secp = bfd_und_section_ptr if
7172 info->shared. I don't know why, and that doesn't make sense,
7173 so I took it out. */
7174 *secp = elf_tdata (abfd)->elf_data_section;
7175 break;
7176
7177 case SHN_MIPS_SUNDEFINED:
7178 *secp = bfd_und_section_ptr;
7179 break;
7180 }
7181
7182 if (SGI_COMPAT (abfd)
7183 && ! info->shared
f13a99db 7184 && info->output_bfd->xvec == abfd->xvec
b49e97c9
TS
7185 && strcmp (*namep, "__rld_obj_head") == 0)
7186 {
7187 struct elf_link_hash_entry *h;
14a793b2 7188 struct bfd_link_hash_entry *bh;
b49e97c9
TS
7189
7190 /* Mark __rld_obj_head as dynamic. */
14a793b2 7191 bh = NULL;
b49e97c9 7192 if (! (_bfd_generic_link_add_one_symbol
9719ad41 7193 (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
14a793b2 7194 get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7195 return FALSE;
14a793b2
AM
7196
7197 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7198 h->non_elf = 0;
7199 h->def_regular = 1;
b49e97c9
TS
7200 h->type = STT_OBJECT;
7201
c152c796 7202 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7203 return FALSE;
b49e97c9 7204
b34976b6 7205 mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
b4082c70 7206 mips_elf_hash_table (info)->rld_symbol = h;
b49e97c9
TS
7207 }
7208
7209 /* If this is a mips16 text symbol, add 1 to the value to make it
7210 odd. This will cause something like .word SYM to come up with
7211 the right value when it is loaded into the PC. */
df58fc94 7212 if (ELF_ST_IS_COMPRESSED (sym->st_other))
b49e97c9
TS
7213 ++*valp;
7214
b34976b6 7215 return TRUE;
b49e97c9
TS
7216}
7217
7218/* This hook function is called before the linker writes out a global
7219 symbol. We mark symbols as small common if appropriate. This is
7220 also where we undo the increment of the value for a mips16 symbol. */
7221
6e0b88f1 7222int
9719ad41
RS
7223_bfd_mips_elf_link_output_symbol_hook
7224 (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7225 const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7226 asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
b49e97c9
TS
7227{
7228 /* If we see a common symbol, which implies a relocatable link, then
7229 if a symbol was small common in an input file, mark it as small
7230 common in the output file. */
7231 if (sym->st_shndx == SHN_COMMON
7232 && strcmp (input_sec->name, ".scommon") == 0)
7233 sym->st_shndx = SHN_MIPS_SCOMMON;
7234
df58fc94 7235 if (ELF_ST_IS_COMPRESSED (sym->st_other))
79cda7cf 7236 sym->st_value &= ~1;
b49e97c9 7237
6e0b88f1 7238 return 1;
b49e97c9
TS
7239}
7240\f
7241/* Functions for the dynamic linker. */
7242
7243/* Create dynamic sections when linking against a dynamic object. */
7244
b34976b6 7245bfd_boolean
9719ad41 7246_bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
b49e97c9
TS
7247{
7248 struct elf_link_hash_entry *h;
14a793b2 7249 struct bfd_link_hash_entry *bh;
b49e97c9
TS
7250 flagword flags;
7251 register asection *s;
7252 const char * const *namep;
0a44bf69 7253 struct mips_elf_link_hash_table *htab;
b49e97c9 7254
0a44bf69 7255 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
7256 BFD_ASSERT (htab != NULL);
7257
b49e97c9
TS
7258 flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7259 | SEC_LINKER_CREATED | SEC_READONLY);
7260
0a44bf69
RS
7261 /* The psABI requires a read-only .dynamic section, but the VxWorks
7262 EABI doesn't. */
7263 if (!htab->is_vxworks)
b49e97c9 7264 {
3d4d4302 7265 s = bfd_get_linker_section (abfd, ".dynamic");
0a44bf69
RS
7266 if (s != NULL)
7267 {
7268 if (! bfd_set_section_flags (abfd, s, flags))
7269 return FALSE;
7270 }
b49e97c9
TS
7271 }
7272
7273 /* We need to create .got section. */
23cc69b6 7274 if (!mips_elf_create_got_section (abfd, info))
f4416af6
AO
7275 return FALSE;
7276
0a44bf69 7277 if (! mips_elf_rel_dyn_section (info, TRUE))
b34976b6 7278 return FALSE;
b49e97c9 7279
b49e97c9 7280 /* Create .stub section. */
3d4d4302
AM
7281 s = bfd_make_section_anyway_with_flags (abfd,
7282 MIPS_ELF_STUB_SECTION_NAME (abfd),
7283 flags | SEC_CODE);
4e41d0d7
RS
7284 if (s == NULL
7285 || ! bfd_set_section_alignment (abfd, s,
7286 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7287 return FALSE;
7288 htab->sstubs = s;
b49e97c9 7289
e6aea42d 7290 if (!mips_elf_hash_table (info)->use_rld_obj_head
b49e97c9 7291 && !info->shared
3d4d4302 7292 && bfd_get_linker_section (abfd, ".rld_map") == NULL)
b49e97c9 7293 {
3d4d4302
AM
7294 s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7295 flags &~ (flagword) SEC_READONLY);
b49e97c9 7296 if (s == NULL
b49e97c9
TS
7297 || ! bfd_set_section_alignment (abfd, s,
7298 MIPS_ELF_LOG_FILE_ALIGN (abfd)))
b34976b6 7299 return FALSE;
b49e97c9
TS
7300 }
7301
7302 /* On IRIX5, we adjust add some additional symbols and change the
7303 alignments of several sections. There is no ABI documentation
7304 indicating that this is necessary on IRIX6, nor any evidence that
7305 the linker takes such action. */
7306 if (IRIX_COMPAT (abfd) == ict_irix5)
7307 {
7308 for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7309 {
14a793b2 7310 bh = NULL;
b49e97c9 7311 if (! (_bfd_generic_link_add_one_symbol
9719ad41
RS
7312 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7313 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7314 return FALSE;
14a793b2
AM
7315
7316 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7317 h->non_elf = 0;
7318 h->def_regular = 1;
b49e97c9
TS
7319 h->type = STT_SECTION;
7320
c152c796 7321 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7322 return FALSE;
b49e97c9
TS
7323 }
7324
7325 /* We need to create a .compact_rel section. */
7326 if (SGI_COMPAT (abfd))
7327 {
7328 if (!mips_elf_create_compact_rel_section (abfd, info))
b34976b6 7329 return FALSE;
b49e97c9
TS
7330 }
7331
44c410de 7332 /* Change alignments of some sections. */
3d4d4302 7333 s = bfd_get_linker_section (abfd, ".hash");
b49e97c9 7334 if (s != NULL)
d80dcc6a 7335 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
3d4d4302 7336 s = bfd_get_linker_section (abfd, ".dynsym");
b49e97c9 7337 if (s != NULL)
d80dcc6a 7338 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
3d4d4302 7339 s = bfd_get_linker_section (abfd, ".dynstr");
b49e97c9 7340 if (s != NULL)
d80dcc6a 7341 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
3d4d4302 7342 /* ??? */
b49e97c9
TS
7343 s = bfd_get_section_by_name (abfd, ".reginfo");
7344 if (s != NULL)
d80dcc6a 7345 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
3d4d4302 7346 s = bfd_get_linker_section (abfd, ".dynamic");
b49e97c9 7347 if (s != NULL)
d80dcc6a 7348 bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
b49e97c9
TS
7349 }
7350
7351 if (!info->shared)
7352 {
14a793b2
AM
7353 const char *name;
7354
7355 name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7356 bh = NULL;
7357 if (!(_bfd_generic_link_add_one_symbol
9719ad41
RS
7358 (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7359 NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
b34976b6 7360 return FALSE;
14a793b2
AM
7361
7362 h = (struct elf_link_hash_entry *) bh;
f5385ebf
AM
7363 h->non_elf = 0;
7364 h->def_regular = 1;
b49e97c9
TS
7365 h->type = STT_SECTION;
7366
c152c796 7367 if (! bfd_elf_link_record_dynamic_symbol (info, h))
b34976b6 7368 return FALSE;
b49e97c9
TS
7369
7370 if (! mips_elf_hash_table (info)->use_rld_obj_head)
7371 {
7372 /* __rld_map is a four byte word located in the .data section
7373 and is filled in by the rtld to contain a pointer to
7374 the _r_debug structure. Its symbol value will be set in
7375 _bfd_mips_elf_finish_dynamic_symbol. */
3d4d4302 7376 s = bfd_get_linker_section (abfd, ".rld_map");
0abfb97a 7377 BFD_ASSERT (s != NULL);
14a793b2 7378
0abfb97a
L
7379 name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7380 bh = NULL;
7381 if (!(_bfd_generic_link_add_one_symbol
7382 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7383 get_elf_backend_data (abfd)->collect, &bh)))
7384 return FALSE;
b49e97c9 7385
0abfb97a
L
7386 h = (struct elf_link_hash_entry *) bh;
7387 h->non_elf = 0;
7388 h->def_regular = 1;
7389 h->type = STT_OBJECT;
7390
7391 if (! bfd_elf_link_record_dynamic_symbol (info, h))
7392 return FALSE;
b4082c70 7393 mips_elf_hash_table (info)->rld_symbol = h;
b49e97c9
TS
7394 }
7395 }
7396
861fb55a
DJ
7397 /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7398 Also create the _PROCEDURE_LINKAGE_TABLE symbol. */
7399 if (!_bfd_elf_create_dynamic_sections (abfd, info))
7400 return FALSE;
7401
7402 /* Cache the sections created above. */
3d4d4302
AM
7403 htab->splt = bfd_get_linker_section (abfd, ".plt");
7404 htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
0a44bf69
RS
7405 if (htab->is_vxworks)
7406 {
3d4d4302
AM
7407 htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7408 htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
861fb55a
DJ
7409 }
7410 else
3d4d4302 7411 htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
861fb55a
DJ
7412 if (!htab->sdynbss
7413 || (htab->is_vxworks && !htab->srelbss && !info->shared)
7414 || !htab->srelplt
7415 || !htab->splt)
7416 abort ();
0a44bf69 7417
861fb55a
DJ
7418 if (htab->is_vxworks)
7419 {
0a44bf69
RS
7420 /* Do the usual VxWorks handling. */
7421 if (!elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7422 return FALSE;
7423
7424 /* Work out the PLT sizes. */
7425 if (info->shared)
7426 {
7427 htab->plt_header_size
7428 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
7429 htab->plt_entry_size
7430 = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
7431 }
7432 else
7433 {
7434 htab->plt_header_size
7435 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
7436 htab->plt_entry_size
7437 = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
7438 }
7439 }
861fb55a
DJ
7440 else if (!info->shared)
7441 {
7442 /* All variants of the plt0 entry are the same size. */
7443 htab->plt_header_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
7444 htab->plt_entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
7445 }
0a44bf69 7446
b34976b6 7447 return TRUE;
b49e97c9
TS
7448}
7449\f
c224138d
RS
7450/* Return true if relocation REL against section SEC is a REL rather than
7451 RELA relocation. RELOCS is the first relocation in the section and
7452 ABFD is the bfd that contains SEC. */
7453
7454static bfd_boolean
7455mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7456 const Elf_Internal_Rela *relocs,
7457 const Elf_Internal_Rela *rel)
7458{
7459 Elf_Internal_Shdr *rel_hdr;
7460 const struct elf_backend_data *bed;
7461
d4730f92
BS
7462 /* To determine which flavor of relocation this is, we depend on the
7463 fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR. */
7464 rel_hdr = elf_section_data (sec)->rel.hdr;
7465 if (rel_hdr == NULL)
7466 return FALSE;
c224138d 7467 bed = get_elf_backend_data (abfd);
d4730f92
BS
7468 return ((size_t) (rel - relocs)
7469 < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
c224138d
RS
7470}
7471
7472/* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7473 HOWTO is the relocation's howto and CONTENTS points to the contents
7474 of the section that REL is against. */
7475
7476static bfd_vma
7477mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7478 reloc_howto_type *howto, bfd_byte *contents)
7479{
7480 bfd_byte *location;
7481 unsigned int r_type;
7482 bfd_vma addend;
7483
7484 r_type = ELF_R_TYPE (abfd, rel->r_info);
7485 location = contents + rel->r_offset;
7486
7487 /* Get the addend, which is stored in the input file. */
df58fc94 7488 _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
c224138d 7489 addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
df58fc94 7490 _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
c224138d
RS
7491
7492 return addend & howto->src_mask;
7493}
7494
7495/* REL is a relocation in ABFD that needs a partnering LO16 relocation
7496 and *ADDEND is the addend for REL itself. Look for the LO16 relocation
7497 and update *ADDEND with the final addend. Return true on success
7498 or false if the LO16 could not be found. RELEND is the exclusive
7499 upper bound on the relocations for REL's section. */
7500
7501static bfd_boolean
7502mips_elf_add_lo16_rel_addend (bfd *abfd,
7503 const Elf_Internal_Rela *rel,
7504 const Elf_Internal_Rela *relend,
7505 bfd_byte *contents, bfd_vma *addend)
7506{
7507 unsigned int r_type, lo16_type;
7508 const Elf_Internal_Rela *lo16_relocation;
7509 reloc_howto_type *lo16_howto;
7510 bfd_vma l;
7511
7512 r_type = ELF_R_TYPE (abfd, rel->r_info);
738e5348 7513 if (mips16_reloc_p (r_type))
c224138d 7514 lo16_type = R_MIPS16_LO16;
df58fc94
RS
7515 else if (micromips_reloc_p (r_type))
7516 lo16_type = R_MICROMIPS_LO16;
c224138d
RS
7517 else
7518 lo16_type = R_MIPS_LO16;
7519
7520 /* The combined value is the sum of the HI16 addend, left-shifted by
7521 sixteen bits, and the LO16 addend, sign extended. (Usually, the
7522 code does a `lui' of the HI16 value, and then an `addiu' of the
7523 LO16 value.)
7524
7525 Scan ahead to find a matching LO16 relocation.
7526
7527 According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7528 be immediately following. However, for the IRIX6 ABI, the next
7529 relocation may be a composed relocation consisting of several
7530 relocations for the same address. In that case, the R_MIPS_LO16
7531 relocation may occur as one of these. We permit a similar
7532 extension in general, as that is useful for GCC.
7533
7534 In some cases GCC dead code elimination removes the LO16 but keeps
7535 the corresponding HI16. This is strictly speaking a violation of
7536 the ABI but not immediately harmful. */
7537 lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7538 if (lo16_relocation == NULL)
7539 return FALSE;
7540
7541 /* Obtain the addend kept there. */
7542 lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7543 l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7544
7545 l <<= lo16_howto->rightshift;
7546 l = _bfd_mips_elf_sign_extend (l, 16);
7547
7548 *addend <<= 16;
7549 *addend += l;
7550 return TRUE;
7551}
7552
7553/* Try to read the contents of section SEC in bfd ABFD. Return true and
7554 store the contents in *CONTENTS on success. Assume that *CONTENTS
7555 already holds the contents if it is nonull on entry. */
7556
7557static bfd_boolean
7558mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7559{
7560 if (*contents)
7561 return TRUE;
7562
7563 /* Get cached copy if it exists. */
7564 if (elf_section_data (sec)->this_hdr.contents != NULL)
7565 {
7566 *contents = elf_section_data (sec)->this_hdr.contents;
7567 return TRUE;
7568 }
7569
7570 return bfd_malloc_and_get_section (abfd, sec, contents);
7571}
7572
b49e97c9
TS
7573/* Look through the relocs for a section during the first phase, and
7574 allocate space in the global offset table. */
7575
b34976b6 7576bfd_boolean
9719ad41
RS
7577_bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7578 asection *sec, const Elf_Internal_Rela *relocs)
b49e97c9
TS
7579{
7580 const char *name;
7581 bfd *dynobj;
7582 Elf_Internal_Shdr *symtab_hdr;
7583 struct elf_link_hash_entry **sym_hashes;
b49e97c9
TS
7584 size_t extsymoff;
7585 const Elf_Internal_Rela *rel;
7586 const Elf_Internal_Rela *rel_end;
b49e97c9 7587 asection *sreloc;
9c5bfbb7 7588 const struct elf_backend_data *bed;
0a44bf69 7589 struct mips_elf_link_hash_table *htab;
c224138d
RS
7590 bfd_byte *contents;
7591 bfd_vma addend;
7592 reloc_howto_type *howto;
b49e97c9 7593
1049f94e 7594 if (info->relocatable)
b34976b6 7595 return TRUE;
b49e97c9 7596
0a44bf69 7597 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
7598 BFD_ASSERT (htab != NULL);
7599
b49e97c9
TS
7600 dynobj = elf_hash_table (info)->dynobj;
7601 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7602 sym_hashes = elf_sym_hashes (abfd);
7603 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7604
738e5348
RS
7605 bed = get_elf_backend_data (abfd);
7606 rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7607
b49e97c9
TS
7608 /* Check for the mips16 stub sections. */
7609
7610 name = bfd_get_section_name (abfd, sec);
b9d58d71 7611 if (FN_STUB_P (name))
b49e97c9
TS
7612 {
7613 unsigned long r_symndx;
7614
7615 /* Look at the relocation information to figure out which symbol
7616 this is for. */
7617
cb4437b8 7618 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
738e5348
RS
7619 if (r_symndx == 0)
7620 {
7621 (*_bfd_error_handler)
7622 (_("%B: Warning: cannot determine the target function for"
7623 " stub section `%s'"),
7624 abfd, name);
7625 bfd_set_error (bfd_error_bad_value);
7626 return FALSE;
7627 }
b49e97c9
TS
7628
7629 if (r_symndx < extsymoff
7630 || sym_hashes[r_symndx - extsymoff] == NULL)
7631 {
7632 asection *o;
7633
7634 /* This stub is for a local symbol. This stub will only be
7635 needed if there is some relocation in this BFD, other
7636 than a 16 bit function call, which refers to this symbol. */
7637 for (o = abfd->sections; o != NULL; o = o->next)
7638 {
7639 Elf_Internal_Rela *sec_relocs;
7640 const Elf_Internal_Rela *r, *rend;
7641
7642 /* We can ignore stub sections when looking for relocs. */
7643 if ((o->flags & SEC_RELOC) == 0
7644 || o->reloc_count == 0
738e5348 7645 || section_allows_mips16_refs_p (o))
b49e97c9
TS
7646 continue;
7647
45d6a902 7648 sec_relocs
9719ad41 7649 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
45d6a902 7650 info->keep_memory);
b49e97c9 7651 if (sec_relocs == NULL)
b34976b6 7652 return FALSE;
b49e97c9
TS
7653
7654 rend = sec_relocs + o->reloc_count;
7655 for (r = sec_relocs; r < rend; r++)
7656 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
738e5348 7657 && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
b49e97c9
TS
7658 break;
7659
6cdc0ccc 7660 if (elf_section_data (o)->relocs != sec_relocs)
b49e97c9
TS
7661 free (sec_relocs);
7662
7663 if (r < rend)
7664 break;
7665 }
7666
7667 if (o == NULL)
7668 {
7669 /* There is no non-call reloc for this stub, so we do
7670 not need it. Since this function is called before
7671 the linker maps input sections to output sections, we
7672 can easily discard it by setting the SEC_EXCLUDE
7673 flag. */
7674 sec->flags |= SEC_EXCLUDE;
b34976b6 7675 return TRUE;
b49e97c9
TS
7676 }
7677
7678 /* Record this stub in an array of local symbol stubs for
7679 this BFD. */
7680 if (elf_tdata (abfd)->local_stubs == NULL)
7681 {
7682 unsigned long symcount;
7683 asection **n;
7684 bfd_size_type amt;
7685
7686 if (elf_bad_symtab (abfd))
7687 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7688 else
7689 symcount = symtab_hdr->sh_info;
7690 amt = symcount * sizeof (asection *);
9719ad41 7691 n = bfd_zalloc (abfd, amt);
b49e97c9 7692 if (n == NULL)
b34976b6 7693 return FALSE;
b49e97c9
TS
7694 elf_tdata (abfd)->local_stubs = n;
7695 }
7696
b9d58d71 7697 sec->flags |= SEC_KEEP;
b49e97c9
TS
7698 elf_tdata (abfd)->local_stubs[r_symndx] = sec;
7699
7700 /* We don't need to set mips16_stubs_seen in this case.
7701 That flag is used to see whether we need to look through
7702 the global symbol table for stubs. We don't need to set
7703 it here, because we just have a local stub. */
7704 }
7705 else
7706 {
7707 struct mips_elf_link_hash_entry *h;
7708
7709 h = ((struct mips_elf_link_hash_entry *)
7710 sym_hashes[r_symndx - extsymoff]);
7711
973a3492
L
7712 while (h->root.root.type == bfd_link_hash_indirect
7713 || h->root.root.type == bfd_link_hash_warning)
7714 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
7715
b49e97c9
TS
7716 /* H is the symbol this stub is for. */
7717
b9d58d71
TS
7718 /* If we already have an appropriate stub for this function, we
7719 don't need another one, so we can discard this one. Since
7720 this function is called before the linker maps input sections
7721 to output sections, we can easily discard it by setting the
7722 SEC_EXCLUDE flag. */
7723 if (h->fn_stub != NULL)
7724 {
7725 sec->flags |= SEC_EXCLUDE;
7726 return TRUE;
7727 }
7728
7729 sec->flags |= SEC_KEEP;
b49e97c9 7730 h->fn_stub = sec;
b34976b6 7731 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
b49e97c9
TS
7732 }
7733 }
b9d58d71 7734 else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
b49e97c9
TS
7735 {
7736 unsigned long r_symndx;
7737 struct mips_elf_link_hash_entry *h;
7738 asection **loc;
7739
7740 /* Look at the relocation information to figure out which symbol
7741 this is for. */
7742
cb4437b8 7743 r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
738e5348
RS
7744 if (r_symndx == 0)
7745 {
7746 (*_bfd_error_handler)
7747 (_("%B: Warning: cannot determine the target function for"
7748 " stub section `%s'"),
7749 abfd, name);
7750 bfd_set_error (bfd_error_bad_value);
7751 return FALSE;
7752 }
b49e97c9
TS
7753
7754 if (r_symndx < extsymoff
7755 || sym_hashes[r_symndx - extsymoff] == NULL)
7756 {
b9d58d71 7757 asection *o;
b49e97c9 7758
b9d58d71
TS
7759 /* This stub is for a local symbol. This stub will only be
7760 needed if there is some relocation (R_MIPS16_26) in this BFD
7761 that refers to this symbol. */
7762 for (o = abfd->sections; o != NULL; o = o->next)
7763 {
7764 Elf_Internal_Rela *sec_relocs;
7765 const Elf_Internal_Rela *r, *rend;
7766
7767 /* We can ignore stub sections when looking for relocs. */
7768 if ((o->flags & SEC_RELOC) == 0
7769 || o->reloc_count == 0
738e5348 7770 || section_allows_mips16_refs_p (o))
b9d58d71
TS
7771 continue;
7772
7773 sec_relocs
7774 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7775 info->keep_memory);
7776 if (sec_relocs == NULL)
7777 return FALSE;
7778
7779 rend = sec_relocs + o->reloc_count;
7780 for (r = sec_relocs; r < rend; r++)
7781 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7782 && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
7783 break;
7784
7785 if (elf_section_data (o)->relocs != sec_relocs)
7786 free (sec_relocs);
7787
7788 if (r < rend)
7789 break;
7790 }
7791
7792 if (o == NULL)
7793 {
7794 /* There is no non-call reloc for this stub, so we do
7795 not need it. Since this function is called before
7796 the linker maps input sections to output sections, we
7797 can easily discard it by setting the SEC_EXCLUDE
7798 flag. */
7799 sec->flags |= SEC_EXCLUDE;
7800 return TRUE;
7801 }
7802
7803 /* Record this stub in an array of local symbol call_stubs for
7804 this BFD. */
7805 if (elf_tdata (abfd)->local_call_stubs == NULL)
7806 {
7807 unsigned long symcount;
7808 asection **n;
7809 bfd_size_type amt;
7810
7811 if (elf_bad_symtab (abfd))
7812 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
7813 else
7814 symcount = symtab_hdr->sh_info;
7815 amt = symcount * sizeof (asection *);
7816 n = bfd_zalloc (abfd, amt);
7817 if (n == NULL)
7818 return FALSE;
7819 elf_tdata (abfd)->local_call_stubs = n;
7820 }
b49e97c9 7821
b9d58d71
TS
7822 sec->flags |= SEC_KEEP;
7823 elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
b49e97c9 7824
b9d58d71
TS
7825 /* We don't need to set mips16_stubs_seen in this case.
7826 That flag is used to see whether we need to look through
7827 the global symbol table for stubs. We don't need to set
7828 it here, because we just have a local stub. */
7829 }
b49e97c9 7830 else
b49e97c9 7831 {
b9d58d71
TS
7832 h = ((struct mips_elf_link_hash_entry *)
7833 sym_hashes[r_symndx - extsymoff]);
68ffbac6 7834
b9d58d71 7835 /* H is the symbol this stub is for. */
68ffbac6 7836
b9d58d71
TS
7837 if (CALL_FP_STUB_P (name))
7838 loc = &h->call_fp_stub;
7839 else
7840 loc = &h->call_stub;
68ffbac6 7841
b9d58d71
TS
7842 /* If we already have an appropriate stub for this function, we
7843 don't need another one, so we can discard this one. Since
7844 this function is called before the linker maps input sections
7845 to output sections, we can easily discard it by setting the
7846 SEC_EXCLUDE flag. */
7847 if (*loc != NULL)
7848 {
7849 sec->flags |= SEC_EXCLUDE;
7850 return TRUE;
7851 }
b49e97c9 7852
b9d58d71
TS
7853 sec->flags |= SEC_KEEP;
7854 *loc = sec;
7855 mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
7856 }
b49e97c9
TS
7857 }
7858
b49e97c9 7859 sreloc = NULL;
c224138d 7860 contents = NULL;
b49e97c9
TS
7861 for (rel = relocs; rel < rel_end; ++rel)
7862 {
7863 unsigned long r_symndx;
7864 unsigned int r_type;
7865 struct elf_link_hash_entry *h;
861fb55a 7866 bfd_boolean can_make_dynamic_p;
b49e97c9
TS
7867
7868 r_symndx = ELF_R_SYM (abfd, rel->r_info);
7869 r_type = ELF_R_TYPE (abfd, rel->r_info);
7870
7871 if (r_symndx < extsymoff)
7872 h = NULL;
7873 else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
7874 {
7875 (*_bfd_error_handler)
d003868e
AM
7876 (_("%B: Malformed reloc detected for section %s"),
7877 abfd, name);
b49e97c9 7878 bfd_set_error (bfd_error_bad_value);
b34976b6 7879 return FALSE;
b49e97c9
TS
7880 }
7881 else
7882 {
7883 h = sym_hashes[r_symndx - extsymoff];
3e08fb72
NC
7884 while (h != NULL
7885 && (h->root.type == bfd_link_hash_indirect
7886 || h->root.type == bfd_link_hash_warning))
861fb55a
DJ
7887 h = (struct elf_link_hash_entry *) h->root.u.i.link;
7888 }
b49e97c9 7889
861fb55a
DJ
7890 /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
7891 relocation into a dynamic one. */
7892 can_make_dynamic_p = FALSE;
7893 switch (r_type)
7894 {
861fb55a
DJ
7895 case R_MIPS_GOT16:
7896 case R_MIPS_CALL16:
7897 case R_MIPS_CALL_HI16:
7898 case R_MIPS_CALL_LO16:
7899 case R_MIPS_GOT_HI16:
7900 case R_MIPS_GOT_LO16:
7901 case R_MIPS_GOT_PAGE:
7902 case R_MIPS_GOT_OFST:
7903 case R_MIPS_GOT_DISP:
7904 case R_MIPS_TLS_GOTTPREL:
7905 case R_MIPS_TLS_GD:
7906 case R_MIPS_TLS_LDM:
d0f13682
CLT
7907 case R_MIPS16_GOT16:
7908 case R_MIPS16_CALL16:
7909 case R_MIPS16_TLS_GOTTPREL:
7910 case R_MIPS16_TLS_GD:
7911 case R_MIPS16_TLS_LDM:
df58fc94
RS
7912 case R_MICROMIPS_GOT16:
7913 case R_MICROMIPS_CALL16:
7914 case R_MICROMIPS_CALL_HI16:
7915 case R_MICROMIPS_CALL_LO16:
7916 case R_MICROMIPS_GOT_HI16:
7917 case R_MICROMIPS_GOT_LO16:
7918 case R_MICROMIPS_GOT_PAGE:
7919 case R_MICROMIPS_GOT_OFST:
7920 case R_MICROMIPS_GOT_DISP:
7921 case R_MICROMIPS_TLS_GOTTPREL:
7922 case R_MICROMIPS_TLS_GD:
7923 case R_MICROMIPS_TLS_LDM:
861fb55a
DJ
7924 if (dynobj == NULL)
7925 elf_hash_table (info)->dynobj = dynobj = abfd;
7926 if (!mips_elf_create_got_section (dynobj, info))
7927 return FALSE;
7928 if (htab->is_vxworks && !info->shared)
b49e97c9 7929 {
861fb55a
DJ
7930 (*_bfd_error_handler)
7931 (_("%B: GOT reloc at 0x%lx not expected in executables"),
7932 abfd, (unsigned long) rel->r_offset);
7933 bfd_set_error (bfd_error_bad_value);
7934 return FALSE;
b49e97c9 7935 }
861fb55a 7936 break;
b49e97c9 7937
99da6b5f
AN
7938 /* This is just a hint; it can safely be ignored. Don't set
7939 has_static_relocs for the corresponding symbol. */
7940 case R_MIPS_JALR:
df58fc94 7941 case R_MICROMIPS_JALR:
99da6b5f
AN
7942 break;
7943
861fb55a
DJ
7944 case R_MIPS_32:
7945 case R_MIPS_REL32:
7946 case R_MIPS_64:
7947 /* In VxWorks executables, references to external symbols
7948 must be handled using copy relocs or PLT entries; it is not
7949 possible to convert this relocation into a dynamic one.
7950
7951 For executables that use PLTs and copy-relocs, we have a
7952 choice between converting the relocation into a dynamic
7953 one or using copy relocations or PLT entries. It is
7954 usually better to do the former, unless the relocation is
7955 against a read-only section. */
7956 if ((info->shared
7957 || (h != NULL
7958 && !htab->is_vxworks
7959 && strcmp (h->root.root.string, "__gnu_local_gp") != 0
7960 && !(!info->nocopyreloc
7961 && !PIC_OBJECT_P (abfd)
7962 && MIPS_ELF_READONLY_SECTION (sec))))
7963 && (sec->flags & SEC_ALLOC) != 0)
b49e97c9 7964 {
861fb55a 7965 can_make_dynamic_p = TRUE;
b49e97c9
TS
7966 if (dynobj == NULL)
7967 elf_hash_table (info)->dynobj = dynobj = abfd;
b49e97c9 7968 break;
861fb55a 7969 }
21d790b9
MR
7970 /* For sections that are not SEC_ALLOC a copy reloc would be
7971 output if possible (implying questionable semantics for
7972 read-only data objects) or otherwise the final link would
7973 fail as ld.so will not process them and could not therefore
7974 handle any outstanding dynamic relocations.
7975
7976 For such sections that are also SEC_DEBUGGING, we can avoid
7977 these problems by simply ignoring any relocs as these
7978 sections have a predefined use and we know it is safe to do
7979 so.
7980
7981 This is needed in cases such as a global symbol definition
7982 in a shared library causing a common symbol from an object
7983 file to be converted to an undefined reference. If that
7984 happens, then all the relocations against this symbol from
7985 SEC_DEBUGGING sections in the object file will resolve to
7986 nil. */
7987 if ((sec->flags & SEC_DEBUGGING) != 0)
7988 break;
861fb55a 7989 /* Fall through. */
b49e97c9 7990
861fb55a
DJ
7991 default:
7992 /* Most static relocations require pointer equality, except
7993 for branches. */
7994 if (h)
7995 h->pointer_equality_needed = TRUE;
7996 /* Fall through. */
b49e97c9 7997
861fb55a
DJ
7998 case R_MIPS_26:
7999 case R_MIPS_PC16:
8000 case R_MIPS16_26:
df58fc94
RS
8001 case R_MICROMIPS_26_S1:
8002 case R_MICROMIPS_PC7_S1:
8003 case R_MICROMIPS_PC10_S1:
8004 case R_MICROMIPS_PC16_S1:
8005 case R_MICROMIPS_PC23_S2:
861fb55a
DJ
8006 if (h)
8007 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = TRUE;
8008 break;
b49e97c9
TS
8009 }
8010
0a44bf69
RS
8011 if (h)
8012 {
0a44bf69
RS
8013 /* Relocations against the special VxWorks __GOTT_BASE__ and
8014 __GOTT_INDEX__ symbols must be left to the loader. Allocate
8015 room for them in .rela.dyn. */
8016 if (is_gott_symbol (info, h))
8017 {
8018 if (sreloc == NULL)
8019 {
8020 sreloc = mips_elf_rel_dyn_section (info, TRUE);
8021 if (sreloc == NULL)
8022 return FALSE;
8023 }
8024 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9e3313ae
RS
8025 if (MIPS_ELF_READONLY_SECTION (sec))
8026 /* We tell the dynamic linker that there are
8027 relocations against the text segment. */
8028 info->flags |= DF_TEXTREL;
0a44bf69
RS
8029 }
8030 }
df58fc94
RS
8031 else if (call_lo16_reloc_p (r_type)
8032 || got_lo16_reloc_p (r_type)
8033 || got_disp_reloc_p (r_type)
738e5348 8034 || (got16_reloc_p (r_type) && htab->is_vxworks))
b49e97c9
TS
8035 {
8036 /* We may need a local GOT entry for this relocation. We
8037 don't count R_MIPS_GOT_PAGE because we can estimate the
8038 maximum number of pages needed by looking at the size of
738e5348
RS
8039 the segment. Similar comments apply to R_MIPS*_GOT16 and
8040 R_MIPS*_CALL16, except on VxWorks, where GOT relocations
0a44bf69 8041 always evaluate to "G". We don't count R_MIPS_GOT_HI16, or
b49e97c9 8042 R_MIPS_CALL_HI16 because these are always followed by an
b15e6682 8043 R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16. */
a8028dd0
RS
8044 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8045 rel->r_addend, info, 0))
f4416af6 8046 return FALSE;
b49e97c9
TS
8047 }
8048
8f0c309a
CLT
8049 if (h != NULL
8050 && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8051 ELF_ST_IS_MIPS16 (h->other)))
861fb55a
DJ
8052 ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8053
b49e97c9
TS
8054 switch (r_type)
8055 {
8056 case R_MIPS_CALL16:
738e5348 8057 case R_MIPS16_CALL16:
df58fc94 8058 case R_MICROMIPS_CALL16:
b49e97c9
TS
8059 if (h == NULL)
8060 {
8061 (*_bfd_error_handler)
d003868e
AM
8062 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8063 abfd, (unsigned long) rel->r_offset);
b49e97c9 8064 bfd_set_error (bfd_error_bad_value);
b34976b6 8065 return FALSE;
b49e97c9
TS
8066 }
8067 /* Fall through. */
8068
8069 case R_MIPS_CALL_HI16:
8070 case R_MIPS_CALL_LO16:
df58fc94
RS
8071 case R_MICROMIPS_CALL_HI16:
8072 case R_MICROMIPS_CALL_LO16:
b49e97c9
TS
8073 if (h != NULL)
8074 {
6ccf4795
RS
8075 /* Make sure there is room in the regular GOT to hold the
8076 function's address. We may eliminate it in favour of
8077 a .got.plt entry later; see mips_elf_count_got_symbols. */
8078 if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE, 0))
b34976b6 8079 return FALSE;
b49e97c9
TS
8080
8081 /* We need a stub, not a plt entry for the undefined
8082 function. But we record it as if it needs plt. See
c152c796 8083 _bfd_elf_adjust_dynamic_symbol. */
f5385ebf 8084 h->needs_plt = 1;
b49e97c9
TS
8085 h->type = STT_FUNC;
8086 }
8087 break;
8088
0fdc1bf1 8089 case R_MIPS_GOT_PAGE:
df58fc94 8090 case R_MICROMIPS_GOT_PAGE:
0fdc1bf1
AO
8091 /* If this is a global, overridable symbol, GOT_PAGE will
8092 decay to GOT_DISP, so we'll need a GOT entry for it. */
c224138d 8093 if (h)
0fdc1bf1
AO
8094 {
8095 struct mips_elf_link_hash_entry *hmips =
8096 (struct mips_elf_link_hash_entry *) h;
143d77c5 8097
3a3b6725 8098 /* This symbol is definitely not overridable. */
f5385ebf 8099 if (hmips->root.def_regular
0fdc1bf1 8100 && ! (info->shared && ! info->symbolic
f5385ebf 8101 && ! hmips->root.forced_local))
c224138d 8102 h = NULL;
0fdc1bf1
AO
8103 }
8104 /* Fall through. */
8105
738e5348 8106 case R_MIPS16_GOT16:
b49e97c9
TS
8107 case R_MIPS_GOT16:
8108 case R_MIPS_GOT_HI16:
8109 case R_MIPS_GOT_LO16:
df58fc94
RS
8110 case R_MICROMIPS_GOT16:
8111 case R_MICROMIPS_GOT_HI16:
8112 case R_MICROMIPS_GOT_LO16:
8113 if (!h || got_page_reloc_p (r_type))
c224138d 8114 {
3a3b6725
DJ
8115 /* This relocation needs (or may need, if h != NULL) a
8116 page entry in the GOT. For R_MIPS_GOT_PAGE we do not
8117 know for sure until we know whether the symbol is
8118 preemptible. */
c224138d
RS
8119 if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8120 {
8121 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8122 return FALSE;
8123 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8124 addend = mips_elf_read_rel_addend (abfd, rel,
8125 howto, contents);
9684f078 8126 if (got16_reloc_p (r_type))
c224138d
RS
8127 mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8128 contents, &addend);
8129 else
8130 addend <<= howto->rightshift;
8131 }
8132 else
8133 addend = rel->r_addend;
a8028dd0
RS
8134 if (!mips_elf_record_got_page_entry (info, abfd, r_symndx,
8135 addend))
c224138d 8136 return FALSE;
c224138d
RS
8137 }
8138 /* Fall through. */
8139
b49e97c9 8140 case R_MIPS_GOT_DISP:
df58fc94 8141 case R_MICROMIPS_GOT_DISP:
6ccf4795
RS
8142 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8143 FALSE, 0))
b34976b6 8144 return FALSE;
b49e97c9
TS
8145 break;
8146
0f20cc35 8147 case R_MIPS_TLS_GOTTPREL:
d0f13682 8148 case R_MIPS16_TLS_GOTTPREL:
df58fc94 8149 case R_MICROMIPS_TLS_GOTTPREL:
0f20cc35
DJ
8150 if (info->shared)
8151 info->flags |= DF_STATIC_TLS;
8152 /* Fall through */
8153
8154 case R_MIPS_TLS_LDM:
d0f13682 8155 case R_MIPS16_TLS_LDM:
df58fc94
RS
8156 case R_MICROMIPS_TLS_LDM:
8157 if (tls_ldm_reloc_p (r_type))
0f20cc35 8158 {
cf35638d 8159 r_symndx = STN_UNDEF;
0f20cc35
DJ
8160 h = NULL;
8161 }
8162 /* Fall through */
8163
8164 case R_MIPS_TLS_GD:
d0f13682 8165 case R_MIPS16_TLS_GD:
df58fc94 8166 case R_MICROMIPS_TLS_GD:
0f20cc35
DJ
8167 /* This symbol requires a global offset table entry, or two
8168 for TLS GD relocations. */
8169 {
df58fc94
RS
8170 unsigned char flag;
8171
8172 flag = (tls_gd_reloc_p (r_type)
8173 ? GOT_TLS_GD
8174 : tls_ldm_reloc_p (r_type) ? GOT_TLS_LDM : GOT_TLS_IE);
0f20cc35
DJ
8175 if (h != NULL)
8176 {
8177 struct mips_elf_link_hash_entry *hmips =
8178 (struct mips_elf_link_hash_entry *) h;
8179 hmips->tls_type |= flag;
8180
6ccf4795
RS
8181 if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8182 FALSE, flag))
0f20cc35
DJ
8183 return FALSE;
8184 }
8185 else
8186 {
cf35638d 8187 BFD_ASSERT (flag == GOT_TLS_LDM || r_symndx != STN_UNDEF);
0f20cc35 8188
a8028dd0
RS
8189 if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8190 rel->r_addend,
8191 info, flag))
0f20cc35
DJ
8192 return FALSE;
8193 }
8194 }
8195 break;
8196
b49e97c9
TS
8197 case R_MIPS_32:
8198 case R_MIPS_REL32:
8199 case R_MIPS_64:
0a44bf69
RS
8200 /* In VxWorks executables, references to external symbols
8201 are handled using copy relocs or PLT stubs, so there's
8202 no need to add a .rela.dyn entry for this relocation. */
861fb55a 8203 if (can_make_dynamic_p)
b49e97c9
TS
8204 {
8205 if (sreloc == NULL)
8206 {
0a44bf69 8207 sreloc = mips_elf_rel_dyn_section (info, TRUE);
b49e97c9 8208 if (sreloc == NULL)
f4416af6 8209 return FALSE;
b49e97c9 8210 }
9a59ad6b 8211 if (info->shared && h == NULL)
82f0cfbd
EC
8212 {
8213 /* When creating a shared object, we must copy these
8214 reloc types into the output file as R_MIPS_REL32
0a44bf69
RS
8215 relocs. Make room for this reloc in .rel(a).dyn. */
8216 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
943284cc 8217 if (MIPS_ELF_READONLY_SECTION (sec))
82f0cfbd
EC
8218 /* We tell the dynamic linker that there are
8219 relocations against the text segment. */
8220 info->flags |= DF_TEXTREL;
8221 }
b49e97c9
TS
8222 else
8223 {
8224 struct mips_elf_link_hash_entry *hmips;
82f0cfbd 8225
9a59ad6b
DJ
8226 /* For a shared object, we must copy this relocation
8227 unless the symbol turns out to be undefined and
8228 weak with non-default visibility, in which case
8229 it will be left as zero.
8230
8231 We could elide R_MIPS_REL32 for locally binding symbols
8232 in shared libraries, but do not yet do so.
8233
8234 For an executable, we only need to copy this
8235 reloc if the symbol is defined in a dynamic
8236 object. */
b49e97c9
TS
8237 hmips = (struct mips_elf_link_hash_entry *) h;
8238 ++hmips->possibly_dynamic_relocs;
943284cc 8239 if (MIPS_ELF_READONLY_SECTION (sec))
82f0cfbd
EC
8240 /* We need it to tell the dynamic linker if there
8241 are relocations against the text segment. */
8242 hmips->readonly_reloc = TRUE;
b49e97c9 8243 }
b49e97c9
TS
8244 }
8245
8246 if (SGI_COMPAT (abfd))
8247 mips_elf_hash_table (info)->compact_rel_size +=
8248 sizeof (Elf32_External_crinfo);
8249 break;
8250
8251 case R_MIPS_26:
8252 case R_MIPS_GPREL16:
8253 case R_MIPS_LITERAL:
8254 case R_MIPS_GPREL32:
df58fc94
RS
8255 case R_MICROMIPS_26_S1:
8256 case R_MICROMIPS_GPREL16:
8257 case R_MICROMIPS_LITERAL:
8258 case R_MICROMIPS_GPREL7_S2:
b49e97c9
TS
8259 if (SGI_COMPAT (abfd))
8260 mips_elf_hash_table (info)->compact_rel_size +=
8261 sizeof (Elf32_External_crinfo);
8262 break;
8263
8264 /* This relocation describes the C++ object vtable hierarchy.
8265 Reconstruct it for later use during GC. */
8266 case R_MIPS_GNU_VTINHERIT:
c152c796 8267 if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
b34976b6 8268 return FALSE;
b49e97c9
TS
8269 break;
8270
8271 /* This relocation describes which C++ vtable entries are actually
8272 used. Record for later use during GC. */
8273 case R_MIPS_GNU_VTENTRY:
d17e0c6e
JB
8274 BFD_ASSERT (h != NULL);
8275 if (h != NULL
8276 && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
b34976b6 8277 return FALSE;
b49e97c9
TS
8278 break;
8279
8280 default:
8281 break;
8282 }
8283
8284 /* We must not create a stub for a symbol that has relocations
0a44bf69
RS
8285 related to taking the function's address. This doesn't apply to
8286 VxWorks, where CALL relocs refer to a .got.plt entry instead of
8287 a normal .got entry. */
8288 if (!htab->is_vxworks && h != NULL)
8289 switch (r_type)
8290 {
8291 default:
8292 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8293 break;
738e5348 8294 case R_MIPS16_CALL16:
0a44bf69
RS
8295 case R_MIPS_CALL16:
8296 case R_MIPS_CALL_HI16:
8297 case R_MIPS_CALL_LO16:
8298 case R_MIPS_JALR:
df58fc94
RS
8299 case R_MICROMIPS_CALL16:
8300 case R_MICROMIPS_CALL_HI16:
8301 case R_MICROMIPS_CALL_LO16:
8302 case R_MICROMIPS_JALR:
0a44bf69
RS
8303 break;
8304 }
b49e97c9 8305
738e5348
RS
8306 /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8307 if there is one. We only need to handle global symbols here;
8308 we decide whether to keep or delete stubs for local symbols
8309 when processing the stub's relocations. */
b49e97c9 8310 if (h != NULL
738e5348
RS
8311 && !mips16_call_reloc_p (r_type)
8312 && !section_allows_mips16_refs_p (sec))
b49e97c9
TS
8313 {
8314 struct mips_elf_link_hash_entry *mh;
8315
8316 mh = (struct mips_elf_link_hash_entry *) h;
b34976b6 8317 mh->need_fn_stub = TRUE;
b49e97c9 8318 }
861fb55a
DJ
8319
8320 /* Refuse some position-dependent relocations when creating a
8321 shared library. Do not refuse R_MIPS_32 / R_MIPS_64; they're
8322 not PIC, but we can create dynamic relocations and the result
8323 will be fine. Also do not refuse R_MIPS_LO16, which can be
8324 combined with R_MIPS_GOT16. */
8325 if (info->shared)
8326 {
8327 switch (r_type)
8328 {
8329 case R_MIPS16_HI16:
8330 case R_MIPS_HI16:
8331 case R_MIPS_HIGHER:
8332 case R_MIPS_HIGHEST:
df58fc94
RS
8333 case R_MICROMIPS_HI16:
8334 case R_MICROMIPS_HIGHER:
8335 case R_MICROMIPS_HIGHEST:
861fb55a
DJ
8336 /* Don't refuse a high part relocation if it's against
8337 no symbol (e.g. part of a compound relocation). */
cf35638d 8338 if (r_symndx == STN_UNDEF)
861fb55a
DJ
8339 break;
8340
8341 /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8342 and has a special meaning. */
8343 if (!NEWABI_P (abfd) && h != NULL
8344 && strcmp (h->root.root.string, "_gp_disp") == 0)
8345 break;
8346
0fc1eb3c
RS
8347 /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks. */
8348 if (is_gott_symbol (info, h))
8349 break;
8350
861fb55a
DJ
8351 /* FALLTHROUGH */
8352
8353 case R_MIPS16_26:
8354 case R_MIPS_26:
df58fc94 8355 case R_MICROMIPS_26_S1:
861fb55a
DJ
8356 howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8357 (*_bfd_error_handler)
8358 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8359 abfd, howto->name,
8360 (h) ? h->root.root.string : "a local symbol");
8361 bfd_set_error (bfd_error_bad_value);
8362 return FALSE;
8363 default:
8364 break;
8365 }
8366 }
b49e97c9
TS
8367 }
8368
b34976b6 8369 return TRUE;
b49e97c9
TS
8370}
8371\f
d0647110 8372bfd_boolean
9719ad41
RS
8373_bfd_mips_relax_section (bfd *abfd, asection *sec,
8374 struct bfd_link_info *link_info,
8375 bfd_boolean *again)
d0647110
AO
8376{
8377 Elf_Internal_Rela *internal_relocs;
8378 Elf_Internal_Rela *irel, *irelend;
8379 Elf_Internal_Shdr *symtab_hdr;
8380 bfd_byte *contents = NULL;
d0647110
AO
8381 size_t extsymoff;
8382 bfd_boolean changed_contents = FALSE;
8383 bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8384 Elf_Internal_Sym *isymbuf = NULL;
8385
8386 /* We are not currently changing any sizes, so only one pass. */
8387 *again = FALSE;
8388
1049f94e 8389 if (link_info->relocatable)
d0647110
AO
8390 return TRUE;
8391
9719ad41 8392 internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
45d6a902 8393 link_info->keep_memory);
d0647110
AO
8394 if (internal_relocs == NULL)
8395 return TRUE;
8396
8397 irelend = internal_relocs + sec->reloc_count
8398 * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8399 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8400 extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8401
8402 for (irel = internal_relocs; irel < irelend; irel++)
8403 {
8404 bfd_vma symval;
8405 bfd_signed_vma sym_offset;
8406 unsigned int r_type;
8407 unsigned long r_symndx;
8408 asection *sym_sec;
8409 unsigned long instruction;
8410
8411 /* Turn jalr into bgezal, and jr into beq, if they're marked
8412 with a JALR relocation, that indicate where they jump to.
8413 This saves some pipeline bubbles. */
8414 r_type = ELF_R_TYPE (abfd, irel->r_info);
8415 if (r_type != R_MIPS_JALR)
8416 continue;
8417
8418 r_symndx = ELF_R_SYM (abfd, irel->r_info);
8419 /* Compute the address of the jump target. */
8420 if (r_symndx >= extsymoff)
8421 {
8422 struct mips_elf_link_hash_entry *h
8423 = ((struct mips_elf_link_hash_entry *)
8424 elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8425
8426 while (h->root.root.type == bfd_link_hash_indirect
8427 || h->root.root.type == bfd_link_hash_warning)
8428 h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
143d77c5 8429
d0647110
AO
8430 /* If a symbol is undefined, or if it may be overridden,
8431 skip it. */
8432 if (! ((h->root.root.type == bfd_link_hash_defined
8433 || h->root.root.type == bfd_link_hash_defweak)
8434 && h->root.root.u.def.section)
8435 || (link_info->shared && ! link_info->symbolic
f5385ebf 8436 && !h->root.forced_local))
d0647110
AO
8437 continue;
8438
8439 sym_sec = h->root.root.u.def.section;
8440 if (sym_sec->output_section)
8441 symval = (h->root.root.u.def.value
8442 + sym_sec->output_section->vma
8443 + sym_sec->output_offset);
8444 else
8445 symval = h->root.root.u.def.value;
8446 }
8447 else
8448 {
8449 Elf_Internal_Sym *isym;
8450
8451 /* Read this BFD's symbols if we haven't done so already. */
8452 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8453 {
8454 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8455 if (isymbuf == NULL)
8456 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8457 symtab_hdr->sh_info, 0,
8458 NULL, NULL, NULL);
8459 if (isymbuf == NULL)
8460 goto relax_return;
8461 }
8462
8463 isym = isymbuf + r_symndx;
8464 if (isym->st_shndx == SHN_UNDEF)
8465 continue;
8466 else if (isym->st_shndx == SHN_ABS)
8467 sym_sec = bfd_abs_section_ptr;
8468 else if (isym->st_shndx == SHN_COMMON)
8469 sym_sec = bfd_com_section_ptr;
8470 else
8471 sym_sec
8472 = bfd_section_from_elf_index (abfd, isym->st_shndx);
8473 symval = isym->st_value
8474 + sym_sec->output_section->vma
8475 + sym_sec->output_offset;
8476 }
8477
8478 /* Compute branch offset, from delay slot of the jump to the
8479 branch target. */
8480 sym_offset = (symval + irel->r_addend)
8481 - (sec_start + irel->r_offset + 4);
8482
8483 /* Branch offset must be properly aligned. */
8484 if ((sym_offset & 3) != 0)
8485 continue;
8486
8487 sym_offset >>= 2;
8488
8489 /* Check that it's in range. */
8490 if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8491 continue;
143d77c5 8492
d0647110 8493 /* Get the section contents if we haven't done so already. */
c224138d
RS
8494 if (!mips_elf_get_section_contents (abfd, sec, &contents))
8495 goto relax_return;
d0647110
AO
8496
8497 instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8498
8499 /* If it was jalr <reg>, turn it into bgezal $zero, <target>. */
8500 if ((instruction & 0xfc1fffff) == 0x0000f809)
8501 instruction = 0x04110000;
8502 /* If it was jr <reg>, turn it into b <target>. */
8503 else if ((instruction & 0xfc1fffff) == 0x00000008)
8504 instruction = 0x10000000;
8505 else
8506 continue;
8507
8508 instruction |= (sym_offset & 0xffff);
8509 bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8510 changed_contents = TRUE;
8511 }
8512
8513 if (contents != NULL
8514 && elf_section_data (sec)->this_hdr.contents != contents)
8515 {
8516 if (!changed_contents && !link_info->keep_memory)
8517 free (contents);
8518 else
8519 {
8520 /* Cache the section contents for elf_link_input_bfd. */
8521 elf_section_data (sec)->this_hdr.contents = contents;
8522 }
8523 }
8524 return TRUE;
8525
143d77c5 8526 relax_return:
eea6121a
AM
8527 if (contents != NULL
8528 && elf_section_data (sec)->this_hdr.contents != contents)
8529 free (contents);
d0647110
AO
8530 return FALSE;
8531}
8532\f
9a59ad6b
DJ
8533/* Allocate space for global sym dynamic relocs. */
8534
8535static bfd_boolean
8536allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8537{
8538 struct bfd_link_info *info = inf;
8539 bfd *dynobj;
8540 struct mips_elf_link_hash_entry *hmips;
8541 struct mips_elf_link_hash_table *htab;
8542
8543 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8544 BFD_ASSERT (htab != NULL);
8545
9a59ad6b
DJ
8546 dynobj = elf_hash_table (info)->dynobj;
8547 hmips = (struct mips_elf_link_hash_entry *) h;
8548
8549 /* VxWorks executables are handled elsewhere; we only need to
8550 allocate relocations in shared objects. */
8551 if (htab->is_vxworks && !info->shared)
8552 return TRUE;
8553
7686d77d
AM
8554 /* Ignore indirect symbols. All relocations against such symbols
8555 will be redirected to the target symbol. */
8556 if (h->root.type == bfd_link_hash_indirect)
63897e2c
RS
8557 return TRUE;
8558
9a59ad6b
DJ
8559 /* If this symbol is defined in a dynamic object, or we are creating
8560 a shared library, we will need to copy any R_MIPS_32 or
8561 R_MIPS_REL32 relocs against it into the output file. */
8562 if (! info->relocatable
8563 && hmips->possibly_dynamic_relocs != 0
8564 && (h->root.type == bfd_link_hash_defweak
625ef6dc 8565 || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9a59ad6b
DJ
8566 || info->shared))
8567 {
8568 bfd_boolean do_copy = TRUE;
8569
8570 if (h->root.type == bfd_link_hash_undefweak)
8571 {
8572 /* Do not copy relocations for undefined weak symbols with
8573 non-default visibility. */
8574 if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8575 do_copy = FALSE;
8576
8577 /* Make sure undefined weak symbols are output as a dynamic
8578 symbol in PIEs. */
8579 else if (h->dynindx == -1 && !h->forced_local)
8580 {
8581 if (! bfd_elf_link_record_dynamic_symbol (info, h))
8582 return FALSE;
8583 }
8584 }
8585
8586 if (do_copy)
8587 {
aff469fa 8588 /* Even though we don't directly need a GOT entry for this symbol,
f7ff1106
RS
8589 the SVR4 psABI requires it to have a dynamic symbol table
8590 index greater that DT_MIPS_GOTSYM if there are dynamic
8591 relocations against it.
8592
8593 VxWorks does not enforce the same mapping between the GOT
8594 and the symbol table, so the same requirement does not
8595 apply there. */
6ccf4795
RS
8596 if (!htab->is_vxworks)
8597 {
8598 if (hmips->global_got_area > GGA_RELOC_ONLY)
8599 hmips->global_got_area = GGA_RELOC_ONLY;
8600 hmips->got_only_for_calls = FALSE;
8601 }
aff469fa 8602
9a59ad6b
DJ
8603 mips_elf_allocate_dynamic_relocations
8604 (dynobj, info, hmips->possibly_dynamic_relocs);
8605 if (hmips->readonly_reloc)
8606 /* We tell the dynamic linker that there are relocations
8607 against the text segment. */
8608 info->flags |= DF_TEXTREL;
8609 }
8610 }
8611
8612 return TRUE;
8613}
8614
b49e97c9
TS
8615/* Adjust a symbol defined by a dynamic object and referenced by a
8616 regular object. The current definition is in some section of the
8617 dynamic object, but we're not including those sections. We have to
8618 change the definition to something the rest of the link can
8619 understand. */
8620
b34976b6 8621bfd_boolean
9719ad41
RS
8622_bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8623 struct elf_link_hash_entry *h)
b49e97c9
TS
8624{
8625 bfd *dynobj;
8626 struct mips_elf_link_hash_entry *hmips;
5108fc1b 8627 struct mips_elf_link_hash_table *htab;
b49e97c9 8628
5108fc1b 8629 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8630 BFD_ASSERT (htab != NULL);
8631
b49e97c9 8632 dynobj = elf_hash_table (info)->dynobj;
861fb55a 8633 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9
TS
8634
8635 /* Make sure we know what is going on here. */
8636 BFD_ASSERT (dynobj != NULL
f5385ebf 8637 && (h->needs_plt
f6e332e6 8638 || h->u.weakdef != NULL
f5385ebf
AM
8639 || (h->def_dynamic
8640 && h->ref_regular
8641 && !h->def_regular)));
b49e97c9 8642
b49e97c9 8643 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9 8644
861fb55a
DJ
8645 /* If there are call relocations against an externally-defined symbol,
8646 see whether we can create a MIPS lazy-binding stub for it. We can
8647 only do this if all references to the function are through call
8648 relocations, and in that case, the traditional lazy-binding stubs
8649 are much more efficient than PLT entries.
8650
8651 Traditional stubs are only available on SVR4 psABI-based systems;
8652 VxWorks always uses PLTs instead. */
8653 if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
b49e97c9
TS
8654 {
8655 if (! elf_hash_table (info)->dynamic_sections_created)
b34976b6 8656 return TRUE;
b49e97c9
TS
8657
8658 /* If this symbol is not defined in a regular file, then set
8659 the symbol to the stub location. This is required to make
8660 function pointers compare as equal between the normal
8661 executable and the shared library. */
f5385ebf 8662 if (!h->def_regular)
b49e97c9 8663 {
33bb52fb
RS
8664 hmips->needs_lazy_stub = TRUE;
8665 htab->lazy_stub_count++;
b34976b6 8666 return TRUE;
b49e97c9
TS
8667 }
8668 }
861fb55a
DJ
8669 /* As above, VxWorks requires PLT entries for externally-defined
8670 functions that are only accessed through call relocations.
b49e97c9 8671
861fb55a
DJ
8672 Both VxWorks and non-VxWorks targets also need PLT entries if there
8673 are static-only relocations against an externally-defined function.
8674 This can technically occur for shared libraries if there are
8675 branches to the symbol, although it is unlikely that this will be
8676 used in practice due to the short ranges involved. It can occur
8677 for any relative or absolute relocation in executables; in that
8678 case, the PLT entry becomes the function's canonical address. */
8679 else if (((h->needs_plt && !hmips->no_fn_stub)
8680 || (h->type == STT_FUNC && hmips->has_static_relocs))
8681 && htab->use_plts_and_copy_relocs
8682 && !SYMBOL_CALLS_LOCAL (info, h)
8683 && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
8684 && h->root.type == bfd_link_hash_undefweak))
b49e97c9 8685 {
861fb55a
DJ
8686 /* If this is the first symbol to need a PLT entry, allocate room
8687 for the header. */
8688 if (htab->splt->size == 0)
8689 {
8690 BFD_ASSERT (htab->sgotplt->size == 0);
0a44bf69 8691
861fb55a
DJ
8692 /* If we're using the PLT additions to the psABI, each PLT
8693 entry is 16 bytes and the PLT0 entry is 32 bytes.
8694 Encourage better cache usage by aligning. We do this
8695 lazily to avoid pessimizing traditional objects. */
8696 if (!htab->is_vxworks
8697 && !bfd_set_section_alignment (dynobj, htab->splt, 5))
8698 return FALSE;
0a44bf69 8699
861fb55a
DJ
8700 /* Make sure that .got.plt is word-aligned. We do this lazily
8701 for the same reason as above. */
8702 if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
8703 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
8704 return FALSE;
0a44bf69 8705
861fb55a 8706 htab->splt->size += htab->plt_header_size;
0a44bf69 8707
861fb55a
DJ
8708 /* On non-VxWorks targets, the first two entries in .got.plt
8709 are reserved. */
8710 if (!htab->is_vxworks)
a44acb1e
MR
8711 htab->sgotplt->size
8712 += get_elf_backend_data (dynobj)->got_header_size;
0a44bf69 8713
861fb55a
DJ
8714 /* On VxWorks, also allocate room for the header's
8715 .rela.plt.unloaded entries. */
8716 if (htab->is_vxworks && !info->shared)
0a44bf69
RS
8717 htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
8718 }
8719
8720 /* Assign the next .plt entry to this symbol. */
8721 h->plt.offset = htab->splt->size;
8722 htab->splt->size += htab->plt_entry_size;
8723
8724 /* If the output file has no definition of the symbol, set the
861fb55a 8725 symbol's value to the address of the stub. */
131eb6b7 8726 if (!info->shared && !h->def_regular)
0a44bf69
RS
8727 {
8728 h->root.u.def.section = htab->splt;
8729 h->root.u.def.value = h->plt.offset;
861fb55a
DJ
8730 /* For VxWorks, point at the PLT load stub rather than the
8731 lazy resolution stub; this stub will become the canonical
8732 function address. */
8733 if (htab->is_vxworks)
8734 h->root.u.def.value += 8;
0a44bf69
RS
8735 }
8736
861fb55a
DJ
8737 /* Make room for the .got.plt entry and the R_MIPS_JUMP_SLOT
8738 relocation. */
8739 htab->sgotplt->size += MIPS_ELF_GOT_SIZE (dynobj);
8740 htab->srelplt->size += (htab->is_vxworks
8741 ? MIPS_ELF_RELA_SIZE (dynobj)
8742 : MIPS_ELF_REL_SIZE (dynobj));
0a44bf69
RS
8743
8744 /* Make room for the .rela.plt.unloaded relocations. */
861fb55a 8745 if (htab->is_vxworks && !info->shared)
0a44bf69
RS
8746 htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
8747
861fb55a
DJ
8748 /* All relocations against this symbol that could have been made
8749 dynamic will now refer to the PLT entry instead. */
8750 hmips->possibly_dynamic_relocs = 0;
0a44bf69 8751
0a44bf69
RS
8752 return TRUE;
8753 }
8754
8755 /* If this is a weak symbol, and there is a real definition, the
8756 processor independent code will have arranged for us to see the
8757 real definition first, and we can just use the same value. */
8758 if (h->u.weakdef != NULL)
8759 {
8760 BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
8761 || h->u.weakdef->root.type == bfd_link_hash_defweak);
8762 h->root.u.def.section = h->u.weakdef->root.u.def.section;
8763 h->root.u.def.value = h->u.weakdef->root.u.def.value;
8764 return TRUE;
8765 }
8766
861fb55a
DJ
8767 /* Otherwise, there is nothing further to do for symbols defined
8768 in regular objects. */
8769 if (h->def_regular)
0a44bf69
RS
8770 return TRUE;
8771
861fb55a
DJ
8772 /* There's also nothing more to do if we'll convert all relocations
8773 against this symbol into dynamic relocations. */
8774 if (!hmips->has_static_relocs)
8775 return TRUE;
8776
8777 /* We're now relying on copy relocations. Complain if we have
8778 some that we can't convert. */
8779 if (!htab->use_plts_and_copy_relocs || info->shared)
8780 {
8781 (*_bfd_error_handler) (_("non-dynamic relocations refer to "
8782 "dynamic symbol %s"),
8783 h->root.root.string);
8784 bfd_set_error (bfd_error_bad_value);
8785 return FALSE;
8786 }
8787
0a44bf69
RS
8788 /* We must allocate the symbol in our .dynbss section, which will
8789 become part of the .bss section of the executable. There will be
8790 an entry for this symbol in the .dynsym section. The dynamic
8791 object will contain position independent code, so all references
8792 from the dynamic object to this symbol will go through the global
8793 offset table. The dynamic linker will use the .dynsym entry to
8794 determine the address it must put in the global offset table, so
8795 both the dynamic object and the regular object will refer to the
8796 same memory location for the variable. */
8797
8798 if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
8799 {
861fb55a
DJ
8800 if (htab->is_vxworks)
8801 htab->srelbss->size += sizeof (Elf32_External_Rela);
8802 else
8803 mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
0a44bf69
RS
8804 h->needs_copy = 1;
8805 }
8806
861fb55a
DJ
8807 /* All relocations against this symbol that could have been made
8808 dynamic will now refer to the local copy instead. */
8809 hmips->possibly_dynamic_relocs = 0;
8810
027297b7 8811 return _bfd_elf_adjust_dynamic_copy (h, htab->sdynbss);
0a44bf69 8812}
b49e97c9
TS
8813\f
8814/* This function is called after all the input files have been read,
8815 and the input sections have been assigned to output sections. We
8816 check for any mips16 stub sections that we can discard. */
8817
b34976b6 8818bfd_boolean
9719ad41
RS
8819_bfd_mips_elf_always_size_sections (bfd *output_bfd,
8820 struct bfd_link_info *info)
b49e97c9
TS
8821{
8822 asection *ri;
0a44bf69 8823 struct mips_elf_link_hash_table *htab;
861fb55a 8824 struct mips_htab_traverse_info hti;
0a44bf69
RS
8825
8826 htab = mips_elf_hash_table (info);
4dfe6ac6 8827 BFD_ASSERT (htab != NULL);
f4416af6 8828
b49e97c9
TS
8829 /* The .reginfo section has a fixed size. */
8830 ri = bfd_get_section_by_name (output_bfd, ".reginfo");
8831 if (ri != NULL)
9719ad41 8832 bfd_set_section_size (output_bfd, ri, sizeof (Elf32_External_RegInfo));
b49e97c9 8833
861fb55a
DJ
8834 hti.info = info;
8835 hti.output_bfd = output_bfd;
8836 hti.error = FALSE;
8837 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
8838 mips_elf_check_symbols, &hti);
8839 if (hti.error)
8840 return FALSE;
f4416af6 8841
33bb52fb
RS
8842 return TRUE;
8843}
8844
8845/* If the link uses a GOT, lay it out and work out its size. */
8846
8847static bfd_boolean
8848mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
8849{
8850 bfd *dynobj;
8851 asection *s;
8852 struct mips_got_info *g;
33bb52fb
RS
8853 bfd_size_type loadable_size = 0;
8854 bfd_size_type page_gotno;
8855 bfd *sub;
8856 struct mips_elf_count_tls_arg count_tls_arg;
8857 struct mips_elf_link_hash_table *htab;
8858
8859 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8860 BFD_ASSERT (htab != NULL);
8861
a8028dd0 8862 s = htab->sgot;
f4416af6 8863 if (s == NULL)
b34976b6 8864 return TRUE;
b49e97c9 8865
33bb52fb 8866 dynobj = elf_hash_table (info)->dynobj;
a8028dd0
RS
8867 g = htab->got_info;
8868
861fb55a
DJ
8869 /* Allocate room for the reserved entries. VxWorks always reserves
8870 3 entries; other objects only reserve 2 entries. */
8871 BFD_ASSERT (g->assigned_gotno == 0);
8872 if (htab->is_vxworks)
8873 htab->reserved_gotno = 3;
8874 else
8875 htab->reserved_gotno = 2;
8876 g->local_gotno += htab->reserved_gotno;
8877 g->assigned_gotno = htab->reserved_gotno;
8878
33bb52fb
RS
8879 /* Replace entries for indirect and warning symbols with entries for
8880 the target symbol. */
8881 if (!mips_elf_resolve_final_got_entries (g))
8882 return FALSE;
f4416af6 8883
d4596a51 8884 /* Count the number of GOT symbols. */
020d7251 8885 mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
f4416af6 8886
33bb52fb
RS
8887 /* Calculate the total loadable size of the output. That
8888 will give us the maximum number of GOT_PAGE entries
8889 required. */
8890 for (sub = info->input_bfds; sub; sub = sub->link_next)
8891 {
8892 asection *subsection;
5108fc1b 8893
33bb52fb
RS
8894 for (subsection = sub->sections;
8895 subsection;
8896 subsection = subsection->next)
8897 {
8898 if ((subsection->flags & SEC_ALLOC) == 0)
8899 continue;
8900 loadable_size += ((subsection->size + 0xf)
8901 &~ (bfd_size_type) 0xf);
8902 }
8903 }
f4416af6 8904
0a44bf69 8905 if (htab->is_vxworks)
738e5348 8906 /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
0a44bf69
RS
8907 relocations against local symbols evaluate to "G", and the EABI does
8908 not include R_MIPS_GOT_PAGE. */
c224138d 8909 page_gotno = 0;
0a44bf69
RS
8910 else
8911 /* Assume there are two loadable segments consisting of contiguous
8912 sections. Is 5 enough? */
c224138d
RS
8913 page_gotno = (loadable_size >> 16) + 5;
8914
8915 /* Choose the smaller of the two estimates; both are intended to be
8916 conservative. */
8917 if (page_gotno > g->page_gotno)
8918 page_gotno = g->page_gotno;
f4416af6 8919
c224138d 8920 g->local_gotno += page_gotno;
eea6121a 8921 s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
d4596a51 8922 s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
f4416af6 8923
0f20cc35
DJ
8924 /* We need to calculate tls_gotno for global symbols at this point
8925 instead of building it up earlier, to avoid doublecounting
8926 entries for one global symbol from multiple input files. */
8927 count_tls_arg.info = info;
8928 count_tls_arg.needed = 0;
8929 elf_link_hash_traverse (elf_hash_table (info),
8930 mips_elf_count_global_tls_entries,
8931 &count_tls_arg);
8932 g->tls_gotno += count_tls_arg.needed;
8933 s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
8934
0a44bf69
RS
8935 /* VxWorks does not support multiple GOTs. It initializes $gp to
8936 __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
8937 dynamic loader. */
33bb52fb
RS
8938 if (htab->is_vxworks)
8939 {
8940 /* VxWorks executables do not need a GOT. */
8941 if (info->shared)
8942 {
8943 /* Each VxWorks GOT entry needs an explicit relocation. */
8944 unsigned int count;
8945
861fb55a 8946 count = g->global_gotno + g->local_gotno - htab->reserved_gotno;
33bb52fb
RS
8947 if (count)
8948 mips_elf_allocate_dynamic_relocations (dynobj, info, count);
8949 }
8950 }
8951 else if (s->size > MIPS_ELF_GOT_MAX_SIZE (info))
0f20cc35 8952 {
a8028dd0 8953 if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
0f20cc35
DJ
8954 return FALSE;
8955 }
8956 else
8957 {
33bb52fb
RS
8958 struct mips_elf_count_tls_arg arg;
8959
8960 /* Set up TLS entries. */
0f20cc35
DJ
8961 g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
8962 htab_traverse (g->got_entries, mips_elf_initialize_tls_index, g);
33bb52fb
RS
8963
8964 /* Allocate room for the TLS relocations. */
8965 arg.info = info;
8966 arg.needed = 0;
8967 htab_traverse (g->got_entries, mips_elf_count_local_tls_relocs, &arg);
8968 elf_link_hash_traverse (elf_hash_table (info),
8969 mips_elf_count_global_tls_relocs,
8970 &arg);
8971 if (arg.needed)
8972 mips_elf_allocate_dynamic_relocations (dynobj, info, arg.needed);
0f20cc35 8973 }
b49e97c9 8974
b34976b6 8975 return TRUE;
b49e97c9
TS
8976}
8977
33bb52fb
RS
8978/* Estimate the size of the .MIPS.stubs section. */
8979
8980static void
8981mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
8982{
8983 struct mips_elf_link_hash_table *htab;
8984 bfd_size_type dynsymcount;
8985
8986 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
8987 BFD_ASSERT (htab != NULL);
8988
33bb52fb
RS
8989 if (htab->lazy_stub_count == 0)
8990 return;
8991
8992 /* IRIX rld assumes that a function stub isn't at the end of the .text
8993 section, so add a dummy entry to the end. */
8994 htab->lazy_stub_count++;
8995
8996 /* Get a worst-case estimate of the number of dynamic symbols needed.
8997 At this point, dynsymcount does not account for section symbols
8998 and count_section_dynsyms may overestimate the number that will
8999 be needed. */
9000 dynsymcount = (elf_hash_table (info)->dynsymcount
9001 + count_section_dynsyms (output_bfd, info));
9002
9003 /* Determine the size of one stub entry. */
9004 htab->function_stub_size = (dynsymcount > 0x10000
9005 ? MIPS_FUNCTION_STUB_BIG_SIZE
9006 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9007
9008 htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9009}
9010
9011/* A mips_elf_link_hash_traverse callback for which DATA points to the
9012 MIPS hash table. If H needs a traditional MIPS lazy-binding stub,
9013 allocate an entry in the stubs section. */
9014
9015static bfd_boolean
9016mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void **data)
9017{
9018 struct mips_elf_link_hash_table *htab;
9019
9020 htab = (struct mips_elf_link_hash_table *) data;
9021 if (h->needs_lazy_stub)
9022 {
9023 h->root.root.u.def.section = htab->sstubs;
9024 h->root.root.u.def.value = htab->sstubs->size;
9025 h->root.plt.offset = htab->sstubs->size;
9026 htab->sstubs->size += htab->function_stub_size;
9027 }
9028 return TRUE;
9029}
9030
9031/* Allocate offsets in the stubs section to each symbol that needs one.
9032 Set the final size of the .MIPS.stub section. */
9033
9034static void
9035mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9036{
9037 struct mips_elf_link_hash_table *htab;
9038
9039 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
9040 BFD_ASSERT (htab != NULL);
9041
33bb52fb
RS
9042 if (htab->lazy_stub_count == 0)
9043 return;
9044
9045 htab->sstubs->size = 0;
4dfe6ac6 9046 mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, htab);
33bb52fb
RS
9047 htab->sstubs->size += htab->function_stub_size;
9048 BFD_ASSERT (htab->sstubs->size
9049 == htab->lazy_stub_count * htab->function_stub_size);
9050}
9051
b49e97c9
TS
9052/* Set the sizes of the dynamic sections. */
9053
b34976b6 9054bfd_boolean
9719ad41
RS
9055_bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9056 struct bfd_link_info *info)
b49e97c9
TS
9057{
9058 bfd *dynobj;
861fb55a 9059 asection *s, *sreldyn;
b34976b6 9060 bfd_boolean reltext;
0a44bf69 9061 struct mips_elf_link_hash_table *htab;
b49e97c9 9062
0a44bf69 9063 htab = mips_elf_hash_table (info);
4dfe6ac6 9064 BFD_ASSERT (htab != NULL);
b49e97c9
TS
9065 dynobj = elf_hash_table (info)->dynobj;
9066 BFD_ASSERT (dynobj != NULL);
9067
9068 if (elf_hash_table (info)->dynamic_sections_created)
9069 {
9070 /* Set the contents of the .interp section to the interpreter. */
893c4fe2 9071 if (info->executable)
b49e97c9 9072 {
3d4d4302 9073 s = bfd_get_linker_section (dynobj, ".interp");
b49e97c9 9074 BFD_ASSERT (s != NULL);
eea6121a 9075 s->size
b49e97c9
TS
9076 = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9077 s->contents
9078 = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9079 }
861fb55a
DJ
9080
9081 /* Create a symbol for the PLT, if we know that we are using it. */
9082 if (htab->splt && htab->splt->size > 0 && htab->root.hplt == NULL)
9083 {
9084 struct elf_link_hash_entry *h;
9085
9086 BFD_ASSERT (htab->use_plts_and_copy_relocs);
9087
9088 h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9089 "_PROCEDURE_LINKAGE_TABLE_");
9090 htab->root.hplt = h;
9091 if (h == NULL)
9092 return FALSE;
9093 h->type = STT_FUNC;
9094 }
9095 }
4e41d0d7 9096
9a59ad6b 9097 /* Allocate space for global sym dynamic relocs. */
2c3fc389 9098 elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9a59ad6b 9099
33bb52fb
RS
9100 mips_elf_estimate_stub_size (output_bfd, info);
9101
9102 if (!mips_elf_lay_out_got (output_bfd, info))
9103 return FALSE;
9104
9105 mips_elf_lay_out_lazy_stubs (info);
9106
b49e97c9
TS
9107 /* The check_relocs and adjust_dynamic_symbol entry points have
9108 determined the sizes of the various dynamic sections. Allocate
9109 memory for them. */
b34976b6 9110 reltext = FALSE;
b49e97c9
TS
9111 for (s = dynobj->sections; s != NULL; s = s->next)
9112 {
9113 const char *name;
b49e97c9
TS
9114
9115 /* It's OK to base decisions on the section name, because none
9116 of the dynobj section names depend upon the input files. */
9117 name = bfd_get_section_name (dynobj, s);
9118
9119 if ((s->flags & SEC_LINKER_CREATED) == 0)
9120 continue;
9121
0112cd26 9122 if (CONST_STRNEQ (name, ".rel"))
b49e97c9 9123 {
c456f082 9124 if (s->size != 0)
b49e97c9
TS
9125 {
9126 const char *outname;
9127 asection *target;
9128
9129 /* If this relocation section applies to a read only
9130 section, then we probably need a DT_TEXTREL entry.
0a44bf69 9131 If the relocation section is .rel(a).dyn, we always
b49e97c9
TS
9132 assert a DT_TEXTREL entry rather than testing whether
9133 there exists a relocation to a read only section or
9134 not. */
9135 outname = bfd_get_section_name (output_bfd,
9136 s->output_section);
9137 target = bfd_get_section_by_name (output_bfd, outname + 4);
9138 if ((target != NULL
9139 && (target->flags & SEC_READONLY) != 0
9140 && (target->flags & SEC_ALLOC) != 0)
0a44bf69 9141 || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
b34976b6 9142 reltext = TRUE;
b49e97c9
TS
9143
9144 /* We use the reloc_count field as a counter if we need
9145 to copy relocs into the output file. */
0a44bf69 9146 if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
b49e97c9 9147 s->reloc_count = 0;
f4416af6
AO
9148
9149 /* If combreloc is enabled, elf_link_sort_relocs() will
9150 sort relocations, but in a different way than we do,
9151 and before we're done creating relocations. Also, it
9152 will move them around between input sections'
9153 relocation's contents, so our sorting would be
9154 broken, so don't let it run. */
9155 info->combreloc = 0;
b49e97c9
TS
9156 }
9157 }
b49e97c9
TS
9158 else if (! info->shared
9159 && ! mips_elf_hash_table (info)->use_rld_obj_head
0112cd26 9160 && CONST_STRNEQ (name, ".rld_map"))
b49e97c9 9161 {
5108fc1b 9162 /* We add a room for __rld_map. It will be filled in by the
b49e97c9 9163 rtld to contain a pointer to the _r_debug structure. */
b4082c70 9164 s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
b49e97c9
TS
9165 }
9166 else if (SGI_COMPAT (output_bfd)
0112cd26 9167 && CONST_STRNEQ (name, ".compact_rel"))
eea6121a 9168 s->size += mips_elf_hash_table (info)->compact_rel_size;
861fb55a
DJ
9169 else if (s == htab->splt)
9170 {
9171 /* If the last PLT entry has a branch delay slot, allocate
6d30f5b2
NC
9172 room for an extra nop to fill the delay slot. This is
9173 for CPUs without load interlocking. */
9174 if (! LOAD_INTERLOCKS_P (output_bfd)
9175 && ! htab->is_vxworks && s->size > 0)
861fb55a
DJ
9176 s->size += 4;
9177 }
0112cd26 9178 else if (! CONST_STRNEQ (name, ".init")
33bb52fb 9179 && s != htab->sgot
0a44bf69 9180 && s != htab->sgotplt
861fb55a
DJ
9181 && s != htab->sstubs
9182 && s != htab->sdynbss)
b49e97c9
TS
9183 {
9184 /* It's not one of our sections, so don't allocate space. */
9185 continue;
9186 }
9187
c456f082 9188 if (s->size == 0)
b49e97c9 9189 {
8423293d 9190 s->flags |= SEC_EXCLUDE;
b49e97c9
TS
9191 continue;
9192 }
9193
c456f082
AM
9194 if ((s->flags & SEC_HAS_CONTENTS) == 0)
9195 continue;
9196
b49e97c9 9197 /* Allocate memory for the section contents. */
eea6121a 9198 s->contents = bfd_zalloc (dynobj, s->size);
c456f082 9199 if (s->contents == NULL)
b49e97c9
TS
9200 {
9201 bfd_set_error (bfd_error_no_memory);
b34976b6 9202 return FALSE;
b49e97c9
TS
9203 }
9204 }
9205
9206 if (elf_hash_table (info)->dynamic_sections_created)
9207 {
9208 /* Add some entries to the .dynamic section. We fill in the
9209 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9210 must add the entries now so that we get the correct size for
5750dcec 9211 the .dynamic section. */
af5978fb
RS
9212
9213 /* SGI object has the equivalence of DT_DEBUG in the
5750dcec 9214 DT_MIPS_RLD_MAP entry. This must come first because glibc
6e6be592
MR
9215 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9216 may only look at the first one they see. */
af5978fb
RS
9217 if (!info->shared
9218 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9219 return FALSE;
b49e97c9 9220
5750dcec
DJ
9221 /* The DT_DEBUG entry may be filled in by the dynamic linker and
9222 used by the debugger. */
9223 if (info->executable
9224 && !SGI_COMPAT (output_bfd)
9225 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9226 return FALSE;
9227
0a44bf69 9228 if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
b49e97c9
TS
9229 info->flags |= DF_TEXTREL;
9230
9231 if ((info->flags & DF_TEXTREL) != 0)
9232 {
9233 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
b34976b6 9234 return FALSE;
943284cc
DJ
9235
9236 /* Clear the DF_TEXTREL flag. It will be set again if we
9237 write out an actual text relocation; we may not, because
9238 at this point we do not know whether e.g. any .eh_frame
9239 absolute relocations have been converted to PC-relative. */
9240 info->flags &= ~DF_TEXTREL;
b49e97c9
TS
9241 }
9242
9243 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
b34976b6 9244 return FALSE;
b49e97c9 9245
861fb55a 9246 sreldyn = mips_elf_rel_dyn_section (info, FALSE);
0a44bf69 9247 if (htab->is_vxworks)
b49e97c9 9248 {
0a44bf69
RS
9249 /* VxWorks uses .rela.dyn instead of .rel.dyn. It does not
9250 use any of the DT_MIPS_* tags. */
861fb55a 9251 if (sreldyn && sreldyn->size > 0)
0a44bf69
RS
9252 {
9253 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9254 return FALSE;
b49e97c9 9255
0a44bf69
RS
9256 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9257 return FALSE;
b49e97c9 9258
0a44bf69
RS
9259 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9260 return FALSE;
9261 }
b49e97c9 9262 }
0a44bf69
RS
9263 else
9264 {
861fb55a 9265 if (sreldyn && sreldyn->size > 0)
0a44bf69
RS
9266 {
9267 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9268 return FALSE;
b49e97c9 9269
0a44bf69
RS
9270 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9271 return FALSE;
b49e97c9 9272
0a44bf69
RS
9273 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9274 return FALSE;
9275 }
b49e97c9 9276
0a44bf69
RS
9277 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9278 return FALSE;
b49e97c9 9279
0a44bf69
RS
9280 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9281 return FALSE;
b49e97c9 9282
0a44bf69
RS
9283 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9284 return FALSE;
b49e97c9 9285
0a44bf69
RS
9286 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9287 return FALSE;
b49e97c9 9288
0a44bf69
RS
9289 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9290 return FALSE;
b49e97c9 9291
0a44bf69
RS
9292 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9293 return FALSE;
b49e97c9 9294
0a44bf69
RS
9295 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9296 return FALSE;
9297
9298 if (IRIX_COMPAT (dynobj) == ict_irix5
9299 && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9300 return FALSE;
9301
9302 if (IRIX_COMPAT (dynobj) == ict_irix6
9303 && (bfd_get_section_by_name
af0edeb8 9304 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
0a44bf69
RS
9305 && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9306 return FALSE;
9307 }
861fb55a
DJ
9308 if (htab->splt->size > 0)
9309 {
9310 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9311 return FALSE;
9312
9313 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9314 return FALSE;
9315
9316 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9317 return FALSE;
9318
9319 if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9320 return FALSE;
9321 }
7a2b07ff
NS
9322 if (htab->is_vxworks
9323 && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9324 return FALSE;
b49e97c9
TS
9325 }
9326
b34976b6 9327 return TRUE;
b49e97c9
TS
9328}
9329\f
81d43bff
RS
9330/* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9331 Adjust its R_ADDEND field so that it is correct for the output file.
9332 LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9333 and sections respectively; both use symbol indexes. */
9334
9335static void
9336mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9337 bfd *input_bfd, Elf_Internal_Sym *local_syms,
9338 asection **local_sections, Elf_Internal_Rela *rel)
9339{
9340 unsigned int r_type, r_symndx;
9341 Elf_Internal_Sym *sym;
9342 asection *sec;
9343
020d7251 9344 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
81d43bff
RS
9345 {
9346 r_type = ELF_R_TYPE (output_bfd, rel->r_info);
df58fc94 9347 if (gprel16_reloc_p (r_type)
81d43bff 9348 || r_type == R_MIPS_GPREL32
df58fc94 9349 || literal_reloc_p (r_type))
81d43bff
RS
9350 {
9351 rel->r_addend += _bfd_get_gp_value (input_bfd);
9352 rel->r_addend -= _bfd_get_gp_value (output_bfd);
9353 }
9354
9355 r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9356 sym = local_syms + r_symndx;
9357
9358 /* Adjust REL's addend to account for section merging. */
9359 if (!info->relocatable)
9360 {
9361 sec = local_sections[r_symndx];
9362 _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9363 }
9364
9365 /* This would normally be done by the rela_normal code in elflink.c. */
9366 if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9367 rel->r_addend += local_sections[r_symndx]->output_offset;
9368 }
9369}
9370
545fd46b
MR
9371/* Handle relocations against symbols from removed linkonce sections,
9372 or sections discarded by a linker script. We use this wrapper around
9373 RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9374 on 64-bit ELF targets. In this case for any relocation handled, which
9375 always be the first in a triplet, the remaining two have to be processed
9376 together with the first, even if they are R_MIPS_NONE. It is the symbol
9377 index referred by the first reloc that applies to all the three and the
9378 remaining two never refer to an object symbol. And it is the final
9379 relocation (the last non-null one) that determines the output field of
9380 the whole relocation so retrieve the corresponding howto structure for
9381 the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9382
9383 Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9384 and therefore requires to be pasted in a loop. It also defines a block
9385 and does not protect any of its arguments, hence the extra brackets. */
9386
9387static void
9388mips_reloc_against_discarded_section (bfd *output_bfd,
9389 struct bfd_link_info *info,
9390 bfd *input_bfd, asection *input_section,
9391 Elf_Internal_Rela **rel,
9392 const Elf_Internal_Rela **relend,
9393 bfd_boolean rel_reloc,
9394 reloc_howto_type *howto,
9395 bfd_byte *contents)
9396{
9397 const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9398 int count = bed->s->int_rels_per_ext_rel;
9399 unsigned int r_type;
9400 int i;
9401
9402 for (i = count - 1; i > 0; i--)
9403 {
9404 r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9405 if (r_type != R_MIPS_NONE)
9406 {
9407 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9408 break;
9409 }
9410 }
9411 do
9412 {
9413 RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9414 (*rel), count, (*relend),
9415 howto, i, contents);
9416 }
9417 while (0);
9418}
9419
b49e97c9
TS
9420/* Relocate a MIPS ELF section. */
9421
b34976b6 9422bfd_boolean
9719ad41
RS
9423_bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9424 bfd *input_bfd, asection *input_section,
9425 bfd_byte *contents, Elf_Internal_Rela *relocs,
9426 Elf_Internal_Sym *local_syms,
9427 asection **local_sections)
b49e97c9
TS
9428{
9429 Elf_Internal_Rela *rel;
9430 const Elf_Internal_Rela *relend;
9431 bfd_vma addend = 0;
b34976b6 9432 bfd_boolean use_saved_addend_p = FALSE;
9c5bfbb7 9433 const struct elf_backend_data *bed;
b49e97c9
TS
9434
9435 bed = get_elf_backend_data (output_bfd);
9436 relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9437 for (rel = relocs; rel < relend; ++rel)
9438 {
9439 const char *name;
c9adbffe 9440 bfd_vma value = 0;
b49e97c9 9441 reloc_howto_type *howto;
38a7df63 9442 bfd_boolean cross_mode_jump_p;
b34976b6 9443 /* TRUE if the relocation is a RELA relocation, rather than a
b49e97c9 9444 REL relocation. */
b34976b6 9445 bfd_boolean rela_relocation_p = TRUE;
b49e97c9 9446 unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9719ad41 9447 const char *msg;
ab96bf03
AM
9448 unsigned long r_symndx;
9449 asection *sec;
749b8d9d
L
9450 Elf_Internal_Shdr *symtab_hdr;
9451 struct elf_link_hash_entry *h;
d4730f92 9452 bfd_boolean rel_reloc;
b49e97c9 9453
d4730f92
BS
9454 rel_reloc = (NEWABI_P (input_bfd)
9455 && mips_elf_rel_relocation_p (input_bfd, input_section,
9456 relocs, rel));
b49e97c9 9457 /* Find the relocation howto for this relocation. */
d4730f92 9458 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
ab96bf03
AM
9459
9460 r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
749b8d9d 9461 symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
020d7251 9462 if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
749b8d9d
L
9463 {
9464 sec = local_sections[r_symndx];
9465 h = NULL;
9466 }
ab96bf03
AM
9467 else
9468 {
ab96bf03 9469 unsigned long extsymoff;
ab96bf03 9470
ab96bf03
AM
9471 extsymoff = 0;
9472 if (!elf_bad_symtab (input_bfd))
9473 extsymoff = symtab_hdr->sh_info;
9474 h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
9475 while (h->root.type == bfd_link_hash_indirect
9476 || h->root.type == bfd_link_hash_warning)
9477 h = (struct elf_link_hash_entry *) h->root.u.i.link;
9478
9479 sec = NULL;
9480 if (h->root.type == bfd_link_hash_defined
9481 || h->root.type == bfd_link_hash_defweak)
9482 sec = h->root.u.def.section;
9483 }
9484
dbaa2011 9485 if (sec != NULL && discarded_section (sec))
545fd46b
MR
9486 {
9487 mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
9488 input_section, &rel, &relend,
9489 rel_reloc, howto, contents);
9490 continue;
9491 }
ab96bf03 9492
4a14403c 9493 if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
b49e97c9
TS
9494 {
9495 /* Some 32-bit code uses R_MIPS_64. In particular, people use
9496 64-bit code, but make sure all their addresses are in the
9497 lowermost or uppermost 32-bit section of the 64-bit address
9498 space. Thus, when they use an R_MIPS_64 they mean what is
9499 usually meant by R_MIPS_32, with the exception that the
9500 stored value is sign-extended to 64 bits. */
b34976b6 9501 howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
b49e97c9
TS
9502
9503 /* On big-endian systems, we need to lie about the position
9504 of the reloc. */
9505 if (bfd_big_endian (input_bfd))
9506 rel->r_offset += 4;
9507 }
b49e97c9
TS
9508
9509 if (!use_saved_addend_p)
9510 {
b49e97c9
TS
9511 /* If these relocations were originally of the REL variety,
9512 we must pull the addend out of the field that will be
9513 relocated. Otherwise, we simply use the contents of the
c224138d
RS
9514 RELA relocation. */
9515 if (mips_elf_rel_relocation_p (input_bfd, input_section,
9516 relocs, rel))
b49e97c9 9517 {
b34976b6 9518 rela_relocation_p = FALSE;
c224138d
RS
9519 addend = mips_elf_read_rel_addend (input_bfd, rel,
9520 howto, contents);
738e5348
RS
9521 if (hi16_reloc_p (r_type)
9522 || (got16_reloc_p (r_type)
b49e97c9 9523 && mips_elf_local_relocation_p (input_bfd, rel,
020d7251 9524 local_sections)))
b49e97c9 9525 {
c224138d
RS
9526 if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
9527 contents, &addend))
749b8d9d 9528 {
749b8d9d
L
9529 if (h)
9530 name = h->root.root.string;
9531 else
9532 name = bfd_elf_sym_name (input_bfd, symtab_hdr,
9533 local_syms + r_symndx,
9534 sec);
9535 (*_bfd_error_handler)
9536 (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
9537 input_bfd, input_section, name, howto->name,
9538 rel->r_offset);
749b8d9d 9539 }
b49e97c9 9540 }
30ac9238
RS
9541 else
9542 addend <<= howto->rightshift;
b49e97c9
TS
9543 }
9544 else
9545 addend = rel->r_addend;
81d43bff
RS
9546 mips_elf_adjust_addend (output_bfd, info, input_bfd,
9547 local_syms, local_sections, rel);
b49e97c9
TS
9548 }
9549
1049f94e 9550 if (info->relocatable)
b49e97c9 9551 {
4a14403c 9552 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
b49e97c9
TS
9553 && bfd_big_endian (input_bfd))
9554 rel->r_offset -= 4;
9555
81d43bff 9556 if (!rela_relocation_p && rel->r_addend)
5a659663 9557 {
81d43bff 9558 addend += rel->r_addend;
738e5348 9559 if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
5a659663
TS
9560 addend = mips_elf_high (addend);
9561 else if (r_type == R_MIPS_HIGHER)
9562 addend = mips_elf_higher (addend);
9563 else if (r_type == R_MIPS_HIGHEST)
9564 addend = mips_elf_highest (addend);
30ac9238
RS
9565 else
9566 addend >>= howto->rightshift;
b49e97c9 9567
30ac9238
RS
9568 /* We use the source mask, rather than the destination
9569 mask because the place to which we are writing will be
9570 source of the addend in the final link. */
b49e97c9
TS
9571 addend &= howto->src_mask;
9572
5a659663 9573 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
9574 /* See the comment above about using R_MIPS_64 in the 32-bit
9575 ABI. Here, we need to update the addend. It would be
9576 possible to get away with just using the R_MIPS_32 reloc
9577 but for endianness. */
9578 {
9579 bfd_vma sign_bits;
9580 bfd_vma low_bits;
9581 bfd_vma high_bits;
9582
9583 if (addend & ((bfd_vma) 1 << 31))
9584#ifdef BFD64
9585 sign_bits = ((bfd_vma) 1 << 32) - 1;
9586#else
9587 sign_bits = -1;
9588#endif
9589 else
9590 sign_bits = 0;
9591
9592 /* If we don't know that we have a 64-bit type,
9593 do two separate stores. */
9594 if (bfd_big_endian (input_bfd))
9595 {
9596 /* Store the sign-bits (which are most significant)
9597 first. */
9598 low_bits = sign_bits;
9599 high_bits = addend;
9600 }
9601 else
9602 {
9603 low_bits = addend;
9604 high_bits = sign_bits;
9605 }
9606 bfd_put_32 (input_bfd, low_bits,
9607 contents + rel->r_offset);
9608 bfd_put_32 (input_bfd, high_bits,
9609 contents + rel->r_offset + 4);
9610 continue;
9611 }
9612
9613 if (! mips_elf_perform_relocation (info, howto, rel, addend,
9614 input_bfd, input_section,
b34976b6
AM
9615 contents, FALSE))
9616 return FALSE;
b49e97c9
TS
9617 }
9618
9619 /* Go on to the next relocation. */
9620 continue;
9621 }
9622
9623 /* In the N32 and 64-bit ABIs there may be multiple consecutive
9624 relocations for the same offset. In that case we are
9625 supposed to treat the output of each relocation as the addend
9626 for the next. */
9627 if (rel + 1 < relend
9628 && rel->r_offset == rel[1].r_offset
9629 && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
b34976b6 9630 use_saved_addend_p = TRUE;
b49e97c9 9631 else
b34976b6 9632 use_saved_addend_p = FALSE;
b49e97c9
TS
9633
9634 /* Figure out what value we are supposed to relocate. */
9635 switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
9636 input_section, info, rel,
9637 addend, howto, local_syms,
9638 local_sections, &value,
38a7df63 9639 &name, &cross_mode_jump_p,
bce03d3d 9640 use_saved_addend_p))
b49e97c9
TS
9641 {
9642 case bfd_reloc_continue:
9643 /* There's nothing to do. */
9644 continue;
9645
9646 case bfd_reloc_undefined:
9647 /* mips_elf_calculate_relocation already called the
9648 undefined_symbol callback. There's no real point in
9649 trying to perform the relocation at this point, so we
9650 just skip ahead to the next relocation. */
9651 continue;
9652
9653 case bfd_reloc_notsupported:
9654 msg = _("internal error: unsupported relocation error");
9655 info->callbacks->warning
9656 (info, msg, name, input_bfd, input_section, rel->r_offset);
b34976b6 9657 return FALSE;
b49e97c9
TS
9658
9659 case bfd_reloc_overflow:
9660 if (use_saved_addend_p)
9661 /* Ignore overflow until we reach the last relocation for
9662 a given location. */
9663 ;
9664 else
9665 {
0e53d9da
AN
9666 struct mips_elf_link_hash_table *htab;
9667
9668 htab = mips_elf_hash_table (info);
4dfe6ac6 9669 BFD_ASSERT (htab != NULL);
b49e97c9 9670 BFD_ASSERT (name != NULL);
0e53d9da 9671 if (!htab->small_data_overflow_reported
9684f078 9672 && (gprel16_reloc_p (howto->type)
df58fc94 9673 || literal_reloc_p (howto->type)))
0e53d9da 9674 {
91d6fa6a
NC
9675 msg = _("small-data section exceeds 64KB;"
9676 " lower small-data size limit (see option -G)");
0e53d9da
AN
9677
9678 htab->small_data_overflow_reported = TRUE;
9679 (*info->callbacks->einfo) ("%P: %s\n", msg);
9680 }
b49e97c9 9681 if (! ((*info->callbacks->reloc_overflow)
dfeffb9f 9682 (info, NULL, name, howto->name, (bfd_vma) 0,
b49e97c9 9683 input_bfd, input_section, rel->r_offset)))
b34976b6 9684 return FALSE;
b49e97c9
TS
9685 }
9686 break;
9687
9688 case bfd_reloc_ok:
9689 break;
9690
df58fc94
RS
9691 case bfd_reloc_outofrange:
9692 if (jal_reloc_p (howto->type))
9693 {
9694 msg = _("JALX to a non-word-aligned address");
9695 info->callbacks->warning
9696 (info, msg, name, input_bfd, input_section, rel->r_offset);
9697 return FALSE;
9698 }
9699 /* Fall through. */
9700
b49e97c9
TS
9701 default:
9702 abort ();
9703 break;
9704 }
9705
9706 /* If we've got another relocation for the address, keep going
9707 until we reach the last one. */
9708 if (use_saved_addend_p)
9709 {
9710 addend = value;
9711 continue;
9712 }
9713
4a14403c 9714 if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
b49e97c9
TS
9715 /* See the comment above about using R_MIPS_64 in the 32-bit
9716 ABI. Until now, we've been using the HOWTO for R_MIPS_32;
9717 that calculated the right value. Now, however, we
9718 sign-extend the 32-bit result to 64-bits, and store it as a
9719 64-bit value. We are especially generous here in that we
9720 go to extreme lengths to support this usage on systems with
9721 only a 32-bit VMA. */
9722 {
9723 bfd_vma sign_bits;
9724 bfd_vma low_bits;
9725 bfd_vma high_bits;
9726
9727 if (value & ((bfd_vma) 1 << 31))
9728#ifdef BFD64
9729 sign_bits = ((bfd_vma) 1 << 32) - 1;
9730#else
9731 sign_bits = -1;
9732#endif
9733 else
9734 sign_bits = 0;
9735
9736 /* If we don't know that we have a 64-bit type,
9737 do two separate stores. */
9738 if (bfd_big_endian (input_bfd))
9739 {
9740 /* Undo what we did above. */
9741 rel->r_offset -= 4;
9742 /* Store the sign-bits (which are most significant)
9743 first. */
9744 low_bits = sign_bits;
9745 high_bits = value;
9746 }
9747 else
9748 {
9749 low_bits = value;
9750 high_bits = sign_bits;
9751 }
9752 bfd_put_32 (input_bfd, low_bits,
9753 contents + rel->r_offset);
9754 bfd_put_32 (input_bfd, high_bits,
9755 contents + rel->r_offset + 4);
9756 continue;
9757 }
9758
9759 /* Actually perform the relocation. */
9760 if (! mips_elf_perform_relocation (info, howto, rel, value,
9761 input_bfd, input_section,
38a7df63 9762 contents, cross_mode_jump_p))
b34976b6 9763 return FALSE;
b49e97c9
TS
9764 }
9765
b34976b6 9766 return TRUE;
b49e97c9
TS
9767}
9768\f
861fb55a
DJ
9769/* A function that iterates over each entry in la25_stubs and fills
9770 in the code for each one. DATA points to a mips_htab_traverse_info. */
9771
9772static int
9773mips_elf_create_la25_stub (void **slot, void *data)
9774{
9775 struct mips_htab_traverse_info *hti;
9776 struct mips_elf_link_hash_table *htab;
9777 struct mips_elf_la25_stub *stub;
9778 asection *s;
9779 bfd_byte *loc;
9780 bfd_vma offset, target, target_high, target_low;
9781
9782 stub = (struct mips_elf_la25_stub *) *slot;
9783 hti = (struct mips_htab_traverse_info *) data;
9784 htab = mips_elf_hash_table (hti->info);
4dfe6ac6 9785 BFD_ASSERT (htab != NULL);
861fb55a
DJ
9786
9787 /* Create the section contents, if we haven't already. */
9788 s = stub->stub_section;
9789 loc = s->contents;
9790 if (loc == NULL)
9791 {
9792 loc = bfd_malloc (s->size);
9793 if (loc == NULL)
9794 {
9795 hti->error = TRUE;
9796 return FALSE;
9797 }
9798 s->contents = loc;
9799 }
9800
9801 /* Work out where in the section this stub should go. */
9802 offset = stub->offset;
9803
9804 /* Work out the target address. */
8f0c309a
CLT
9805 target = mips_elf_get_la25_target (stub, &s);
9806 target += s->output_section->vma + s->output_offset;
9807
861fb55a
DJ
9808 target_high = ((target + 0x8000) >> 16) & 0xffff;
9809 target_low = (target & 0xffff);
9810
9811 if (stub->stub_section != htab->strampoline)
9812 {
df58fc94 9813 /* This is a simple LUI/ADDIU stub. Zero out the beginning
861fb55a
DJ
9814 of the section and write the two instructions at the end. */
9815 memset (loc, 0, offset);
9816 loc += offset;
df58fc94
RS
9817 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9818 {
d21911ea
MR
9819 bfd_put_micromips_32 (hti->output_bfd,
9820 LA25_LUI_MICROMIPS (target_high),
9821 loc);
9822 bfd_put_micromips_32 (hti->output_bfd,
9823 LA25_ADDIU_MICROMIPS (target_low),
9824 loc + 4);
df58fc94
RS
9825 }
9826 else
9827 {
9828 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9829 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
9830 }
861fb55a
DJ
9831 }
9832 else
9833 {
9834 /* This is trampoline. */
9835 loc += offset;
df58fc94
RS
9836 if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
9837 {
d21911ea
MR
9838 bfd_put_micromips_32 (hti->output_bfd,
9839 LA25_LUI_MICROMIPS (target_high), loc);
9840 bfd_put_micromips_32 (hti->output_bfd,
9841 LA25_J_MICROMIPS (target), loc + 4);
9842 bfd_put_micromips_32 (hti->output_bfd,
9843 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
df58fc94
RS
9844 bfd_put_32 (hti->output_bfd, 0, loc + 12);
9845 }
9846 else
9847 {
9848 bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
9849 bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
9850 bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
9851 bfd_put_32 (hti->output_bfd, 0, loc + 12);
9852 }
861fb55a
DJ
9853 }
9854 return TRUE;
9855}
9856
b49e97c9
TS
9857/* If NAME is one of the special IRIX6 symbols defined by the linker,
9858 adjust it appropriately now. */
9859
9860static void
9719ad41
RS
9861mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
9862 const char *name, Elf_Internal_Sym *sym)
b49e97c9
TS
9863{
9864 /* The linker script takes care of providing names and values for
9865 these, but we must place them into the right sections. */
9866 static const char* const text_section_symbols[] = {
9867 "_ftext",
9868 "_etext",
9869 "__dso_displacement",
9870 "__elf_header",
9871 "__program_header_table",
9872 NULL
9873 };
9874
9875 static const char* const data_section_symbols[] = {
9876 "_fdata",
9877 "_edata",
9878 "_end",
9879 "_fbss",
9880 NULL
9881 };
9882
9883 const char* const *p;
9884 int i;
9885
9886 for (i = 0; i < 2; ++i)
9887 for (p = (i == 0) ? text_section_symbols : data_section_symbols;
9888 *p;
9889 ++p)
9890 if (strcmp (*p, name) == 0)
9891 {
9892 /* All of these symbols are given type STT_SECTION by the
9893 IRIX6 linker. */
9894 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
e10609d3 9895 sym->st_other = STO_PROTECTED;
b49e97c9
TS
9896
9897 /* The IRIX linker puts these symbols in special sections. */
9898 if (i == 0)
9899 sym->st_shndx = SHN_MIPS_TEXT;
9900 else
9901 sym->st_shndx = SHN_MIPS_DATA;
9902
9903 break;
9904 }
9905}
9906
9907/* Finish up dynamic symbol handling. We set the contents of various
9908 dynamic sections here. */
9909
b34976b6 9910bfd_boolean
9719ad41
RS
9911_bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
9912 struct bfd_link_info *info,
9913 struct elf_link_hash_entry *h,
9914 Elf_Internal_Sym *sym)
b49e97c9
TS
9915{
9916 bfd *dynobj;
b49e97c9 9917 asection *sgot;
f4416af6 9918 struct mips_got_info *g, *gg;
b49e97c9 9919 const char *name;
3d6746ca 9920 int idx;
5108fc1b 9921 struct mips_elf_link_hash_table *htab;
738e5348 9922 struct mips_elf_link_hash_entry *hmips;
b49e97c9 9923
5108fc1b 9924 htab = mips_elf_hash_table (info);
4dfe6ac6 9925 BFD_ASSERT (htab != NULL);
b49e97c9 9926 dynobj = elf_hash_table (info)->dynobj;
738e5348 9927 hmips = (struct mips_elf_link_hash_entry *) h;
b49e97c9 9928
861fb55a
DJ
9929 BFD_ASSERT (!htab->is_vxworks);
9930
9931 if (h->plt.offset != MINUS_ONE && hmips->no_fn_stub)
9932 {
9933 /* We've decided to create a PLT entry for this symbol. */
9934 bfd_byte *loc;
9935 bfd_vma header_address, plt_index, got_address;
9936 bfd_vma got_address_high, got_address_low, load;
9937 const bfd_vma *plt_entry;
9938
9939 BFD_ASSERT (htab->use_plts_and_copy_relocs);
9940 BFD_ASSERT (h->dynindx != -1);
9941 BFD_ASSERT (htab->splt != NULL);
9942 BFD_ASSERT (h->plt.offset <= htab->splt->size);
9943 BFD_ASSERT (!h->def_regular);
9944
9945 /* Calculate the address of the PLT header. */
9946 header_address = (htab->splt->output_section->vma
9947 + htab->splt->output_offset);
9948
9949 /* Calculate the index of the entry. */
9950 plt_index = ((h->plt.offset - htab->plt_header_size)
9951 / htab->plt_entry_size);
9952
9953 /* Calculate the address of the .got.plt entry. */
9954 got_address = (htab->sgotplt->output_section->vma
9955 + htab->sgotplt->output_offset
9956 + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9957 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
9958 got_address_low = got_address & 0xffff;
9959
9960 /* Initially point the .got.plt entry at the PLT header. */
9961 loc = (htab->sgotplt->contents
9962 + (2 + plt_index) * MIPS_ELF_GOT_SIZE (dynobj));
9963 if (ABI_64_P (output_bfd))
9964 bfd_put_64 (output_bfd, header_address, loc);
9965 else
9966 bfd_put_32 (output_bfd, header_address, loc);
9967
9968 /* Find out where the .plt entry should go. */
9969 loc = htab->splt->contents + h->plt.offset;
9970
9971 /* Pick the load opcode. */
9972 load = MIPS_ELF_LOAD_WORD (output_bfd);
9973
9974 /* Fill in the PLT entry itself. */
9975 plt_entry = mips_exec_plt_entry;
9976 bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
9977 bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load, loc + 4);
6d30f5b2
NC
9978
9979 if (! LOAD_INTERLOCKS_P (output_bfd))
9980 {
9981 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
9982 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
9983 }
9984 else
9985 {
9986 bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
9987 bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 12);
9988 }
861fb55a
DJ
9989
9990 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
9991 mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
9992 plt_index, h->dynindx,
9993 R_MIPS_JUMP_SLOT, got_address);
9994
9995 /* We distinguish between PLT entries and lazy-binding stubs by
9996 giving the former an st_other value of STO_MIPS_PLT. Set the
9997 flag and leave the value if there are any relocations in the
9998 binary where pointer equality matters. */
9999 sym->st_shndx = SHN_UNDEF;
10000 if (h->pointer_equality_needed)
10001 sym->st_other = STO_MIPS_PLT;
10002 else
10003 sym->st_value = 0;
10004 }
10005 else if (h->plt.offset != MINUS_ONE)
b49e97c9 10006 {
861fb55a 10007 /* We've decided to create a lazy-binding stub. */
5108fc1b 10008 bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
b49e97c9
TS
10009
10010 /* This symbol has a stub. Set it up. */
10011
10012 BFD_ASSERT (h->dynindx != -1);
10013
5108fc1b
RS
10014 BFD_ASSERT ((htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10015 || (h->dynindx <= 0xffff));
3d6746ca
DD
10016
10017 /* Values up to 2^31 - 1 are allowed. Larger values would cause
5108fc1b
RS
10018 sign extension at runtime in the stub, resulting in a negative
10019 index value. */
10020 if (h->dynindx & ~0x7fffffff)
b34976b6 10021 return FALSE;
b49e97c9
TS
10022
10023 /* Fill the stub. */
3d6746ca
DD
10024 idx = 0;
10025 bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10026 idx += 4;
10027 bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10028 idx += 4;
5108fc1b 10029 if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
3d6746ca 10030 {
5108fc1b 10031 bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
3d6746ca
DD
10032 stub + idx);
10033 idx += 4;
10034 }
10035 bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10036 idx += 4;
b49e97c9 10037
3d6746ca
DD
10038 /* If a large stub is not required and sign extension is not a
10039 problem, then use legacy code in the stub. */
5108fc1b
RS
10040 if (htab->function_stub_size == MIPS_FUNCTION_STUB_BIG_SIZE)
10041 bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff), stub + idx);
10042 else if (h->dynindx & ~0x7fff)
3d6746ca
DD
10043 bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff), stub + idx);
10044 else
5108fc1b
RS
10045 bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10046 stub + idx);
10047
4e41d0d7
RS
10048 BFD_ASSERT (h->plt.offset <= htab->sstubs->size);
10049 memcpy (htab->sstubs->contents + h->plt.offset,
10050 stub, htab->function_stub_size);
b49e97c9
TS
10051
10052 /* Mark the symbol as undefined. plt.offset != -1 occurs
10053 only for the referenced symbol. */
10054 sym->st_shndx = SHN_UNDEF;
10055
10056 /* The run-time linker uses the st_value field of the symbol
10057 to reset the global offset table entry for this external
10058 to its stub address when unlinking a shared object. */
4e41d0d7
RS
10059 sym->st_value = (htab->sstubs->output_section->vma
10060 + htab->sstubs->output_offset
c5ae1840 10061 + h->plt.offset);
b49e97c9
TS
10062 }
10063
738e5348
RS
10064 /* If we have a MIPS16 function with a stub, the dynamic symbol must
10065 refer to the stub, since only the stub uses the standard calling
10066 conventions. */
10067 if (h->dynindx != -1 && hmips->fn_stub != NULL)
10068 {
10069 BFD_ASSERT (hmips->need_fn_stub);
10070 sym->st_value = (hmips->fn_stub->output_section->vma
10071 + hmips->fn_stub->output_offset);
10072 sym->st_size = hmips->fn_stub->size;
10073 sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10074 }
10075
b49e97c9 10076 BFD_ASSERT (h->dynindx != -1
f5385ebf 10077 || h->forced_local);
b49e97c9 10078
23cc69b6 10079 sgot = htab->sgot;
a8028dd0 10080 g = htab->got_info;
b49e97c9
TS
10081 BFD_ASSERT (g != NULL);
10082
10083 /* Run through the global symbol table, creating GOT entries for all
10084 the symbols that need them. */
020d7251 10085 if (hmips->global_got_area != GGA_NONE)
b49e97c9
TS
10086 {
10087 bfd_vma offset;
10088 bfd_vma value;
10089
6eaa6adc 10090 value = sym->st_value;
738e5348
RS
10091 offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10092 R_MIPS_GOT16, info);
b49e97c9
TS
10093 MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10094 }
10095
020d7251 10096 if (hmips->global_got_area != GGA_NONE && g->next && h->type != STT_TLS)
f4416af6
AO
10097 {
10098 struct mips_got_entry e, *p;
0626d451 10099 bfd_vma entry;
f4416af6 10100 bfd_vma offset;
f4416af6
AO
10101
10102 gg = g;
10103
10104 e.abfd = output_bfd;
10105 e.symndx = -1;
738e5348 10106 e.d.h = hmips;
0f20cc35 10107 e.tls_type = 0;
143d77c5 10108
f4416af6
AO
10109 for (g = g->next; g->next != gg; g = g->next)
10110 {
10111 if (g->got_entries
10112 && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10113 &e)))
10114 {
10115 offset = p->gotidx;
0626d451
RS
10116 if (info->shared
10117 || (elf_hash_table (info)->dynamic_sections_created
10118 && p->d.h != NULL
f5385ebf
AM
10119 && p->d.h->root.def_dynamic
10120 && !p->d.h->root.def_regular))
0626d451
RS
10121 {
10122 /* Create an R_MIPS_REL32 relocation for this entry. Due to
10123 the various compatibility problems, it's easier to mock
10124 up an R_MIPS_32 or R_MIPS_64 relocation and leave
10125 mips_elf_create_dynamic_relocation to calculate the
10126 appropriate addend. */
10127 Elf_Internal_Rela rel[3];
10128
10129 memset (rel, 0, sizeof (rel));
10130 if (ABI_64_P (output_bfd))
10131 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10132 else
10133 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10134 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10135
10136 entry = 0;
10137 if (! (mips_elf_create_dynamic_relocation
10138 (output_bfd, info, rel,
10139 e.d.h, NULL, sym->st_value, &entry, sgot)))
10140 return FALSE;
10141 }
10142 else
10143 entry = sym->st_value;
10144 MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
f4416af6
AO
10145 }
10146 }
10147 }
10148
b49e97c9
TS
10149 /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute. */
10150 name = h->root.root.string;
9637f6ef 10151 if (h == elf_hash_table (info)->hdynamic
22edb2f1 10152 || h == elf_hash_table (info)->hgot)
b49e97c9
TS
10153 sym->st_shndx = SHN_ABS;
10154 else if (strcmp (name, "_DYNAMIC_LINK") == 0
10155 || strcmp (name, "_DYNAMIC_LINKING") == 0)
10156 {
10157 sym->st_shndx = SHN_ABS;
10158 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10159 sym->st_value = 1;
10160 }
4a14403c 10161 else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
b49e97c9
TS
10162 {
10163 sym->st_shndx = SHN_ABS;
10164 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10165 sym->st_value = elf_gp (output_bfd);
10166 }
10167 else if (SGI_COMPAT (output_bfd))
10168 {
10169 if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10170 || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10171 {
10172 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10173 sym->st_other = STO_PROTECTED;
10174 sym->st_value = 0;
10175 sym->st_shndx = SHN_MIPS_DATA;
10176 }
10177 else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10178 {
10179 sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10180 sym->st_other = STO_PROTECTED;
10181 sym->st_value = mips_elf_hash_table (info)->procedure_count;
10182 sym->st_shndx = SHN_ABS;
10183 }
10184 else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10185 {
10186 if (h->type == STT_FUNC)
10187 sym->st_shndx = SHN_MIPS_TEXT;
10188 else if (h->type == STT_OBJECT)
10189 sym->st_shndx = SHN_MIPS_DATA;
10190 }
10191 }
10192
861fb55a
DJ
10193 /* Emit a copy reloc, if needed. */
10194 if (h->needs_copy)
10195 {
10196 asection *s;
10197 bfd_vma symval;
10198
10199 BFD_ASSERT (h->dynindx != -1);
10200 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10201
10202 s = mips_elf_rel_dyn_section (info, FALSE);
10203 symval = (h->root.u.def.section->output_section->vma
10204 + h->root.u.def.section->output_offset
10205 + h->root.u.def.value);
10206 mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10207 h->dynindx, R_MIPS_COPY, symval);
10208 }
10209
b49e97c9
TS
10210 /* Handle the IRIX6-specific symbols. */
10211 if (IRIX_COMPAT (output_bfd) == ict_irix6)
10212 mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10213
738e5348
RS
10214 /* Keep dynamic MIPS16 symbols odd. This allows the dynamic linker to
10215 treat MIPS16 symbols like any other. */
30c09090 10216 if (ELF_ST_IS_MIPS16 (sym->st_other))
738e5348
RS
10217 {
10218 BFD_ASSERT (sym->st_value & 1);
10219 sym->st_other -= STO_MIPS16;
10220 }
b49e97c9 10221
b34976b6 10222 return TRUE;
b49e97c9
TS
10223}
10224
0a44bf69
RS
10225/* Likewise, for VxWorks. */
10226
10227bfd_boolean
10228_bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10229 struct bfd_link_info *info,
10230 struct elf_link_hash_entry *h,
10231 Elf_Internal_Sym *sym)
10232{
10233 bfd *dynobj;
10234 asection *sgot;
10235 struct mips_got_info *g;
10236 struct mips_elf_link_hash_table *htab;
020d7251 10237 struct mips_elf_link_hash_entry *hmips;
0a44bf69
RS
10238
10239 htab = mips_elf_hash_table (info);
4dfe6ac6 10240 BFD_ASSERT (htab != NULL);
0a44bf69 10241 dynobj = elf_hash_table (info)->dynobj;
020d7251 10242 hmips = (struct mips_elf_link_hash_entry *) h;
0a44bf69
RS
10243
10244 if (h->plt.offset != (bfd_vma) -1)
10245 {
6d79d2ed 10246 bfd_byte *loc;
0a44bf69
RS
10247 bfd_vma plt_address, plt_index, got_address, got_offset, branch_offset;
10248 Elf_Internal_Rela rel;
10249 static const bfd_vma *plt_entry;
10250
10251 BFD_ASSERT (h->dynindx != -1);
10252 BFD_ASSERT (htab->splt != NULL);
10253 BFD_ASSERT (h->plt.offset <= htab->splt->size);
10254
10255 /* Calculate the address of the .plt entry. */
10256 plt_address = (htab->splt->output_section->vma
10257 + htab->splt->output_offset
10258 + h->plt.offset);
10259
10260 /* Calculate the index of the entry. */
10261 plt_index = ((h->plt.offset - htab->plt_header_size)
10262 / htab->plt_entry_size);
10263
10264 /* Calculate the address of the .got.plt entry. */
10265 got_address = (htab->sgotplt->output_section->vma
10266 + htab->sgotplt->output_offset
10267 + plt_index * 4);
10268
10269 /* Calculate the offset of the .got.plt entry from
10270 _GLOBAL_OFFSET_TABLE_. */
10271 got_offset = mips_elf_gotplt_index (info, h);
10272
10273 /* Calculate the offset for the branch at the start of the PLT
10274 entry. The branch jumps to the beginning of .plt. */
10275 branch_offset = -(h->plt.offset / 4 + 1) & 0xffff;
10276
10277 /* Fill in the initial value of the .got.plt entry. */
10278 bfd_put_32 (output_bfd, plt_address,
10279 htab->sgotplt->contents + plt_index * 4);
10280
10281 /* Find out where the .plt entry should go. */
10282 loc = htab->splt->contents + h->plt.offset;
10283
10284 if (info->shared)
10285 {
10286 plt_entry = mips_vxworks_shared_plt_entry;
10287 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10288 bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10289 }
10290 else
10291 {
10292 bfd_vma got_address_high, got_address_low;
10293
10294 plt_entry = mips_vxworks_exec_plt_entry;
10295 got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10296 got_address_low = got_address & 0xffff;
10297
10298 bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
10299 bfd_put_32 (output_bfd, plt_entry[1] | plt_index, loc + 4);
10300 bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
10301 bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
10302 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10303 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10304 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10305 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10306
10307 loc = (htab->srelplt2->contents
10308 + (plt_index * 3 + 2) * sizeof (Elf32_External_Rela));
10309
10310 /* Emit a relocation for the .got.plt entry. */
10311 rel.r_offset = got_address;
10312 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10313 rel.r_addend = h->plt.offset;
10314 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10315
10316 /* Emit a relocation for the lui of %hi(<.got.plt slot>). */
10317 loc += sizeof (Elf32_External_Rela);
10318 rel.r_offset = plt_address + 8;
10319 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10320 rel.r_addend = got_offset;
10321 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10322
10323 /* Emit a relocation for the addiu of %lo(<.got.plt slot>). */
10324 loc += sizeof (Elf32_External_Rela);
10325 rel.r_offset += 4;
10326 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10327 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10328 }
10329
10330 /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry. */
10331 loc = htab->srelplt->contents + plt_index * sizeof (Elf32_External_Rela);
10332 rel.r_offset = got_address;
10333 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
10334 rel.r_addend = 0;
10335 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10336
10337 if (!h->def_regular)
10338 sym->st_shndx = SHN_UNDEF;
10339 }
10340
10341 BFD_ASSERT (h->dynindx != -1 || h->forced_local);
10342
23cc69b6 10343 sgot = htab->sgot;
a8028dd0 10344 g = htab->got_info;
0a44bf69
RS
10345 BFD_ASSERT (g != NULL);
10346
10347 /* See if this symbol has an entry in the GOT. */
020d7251 10348 if (hmips->global_got_area != GGA_NONE)
0a44bf69
RS
10349 {
10350 bfd_vma offset;
10351 Elf_Internal_Rela outrel;
10352 bfd_byte *loc;
10353 asection *s;
10354
10355 /* Install the symbol value in the GOT. */
10356 offset = mips_elf_global_got_index (dynobj, output_bfd, h,
10357 R_MIPS_GOT16, info);
10358 MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
10359
10360 /* Add a dynamic relocation for it. */
10361 s = mips_elf_rel_dyn_section (info, FALSE);
10362 loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
10363 outrel.r_offset = (sgot->output_section->vma
10364 + sgot->output_offset
10365 + offset);
10366 outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
10367 outrel.r_addend = 0;
10368 bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
10369 }
10370
10371 /* Emit a copy reloc, if needed. */
10372 if (h->needs_copy)
10373 {
10374 Elf_Internal_Rela rel;
10375
10376 BFD_ASSERT (h->dynindx != -1);
10377
10378 rel.r_offset = (h->root.u.def.section->output_section->vma
10379 + h->root.u.def.section->output_offset
10380 + h->root.u.def.value);
10381 rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
10382 rel.r_addend = 0;
10383 bfd_elf32_swap_reloca_out (output_bfd, &rel,
10384 htab->srelbss->contents
10385 + (htab->srelbss->reloc_count
10386 * sizeof (Elf32_External_Rela)));
10387 ++htab->srelbss->reloc_count;
10388 }
10389
df58fc94
RS
10390 /* If this is a mips16/microMIPS symbol, force the value to be even. */
10391 if (ELF_ST_IS_COMPRESSED (sym->st_other))
0a44bf69
RS
10392 sym->st_value &= ~1;
10393
10394 return TRUE;
10395}
10396
861fb55a
DJ
10397/* Write out a plt0 entry to the beginning of .plt. */
10398
10399static void
10400mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10401{
10402 bfd_byte *loc;
10403 bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
10404 static const bfd_vma *plt_entry;
10405 struct mips_elf_link_hash_table *htab;
10406
10407 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
10408 BFD_ASSERT (htab != NULL);
10409
861fb55a
DJ
10410 if (ABI_64_P (output_bfd))
10411 plt_entry = mips_n64_exec_plt0_entry;
10412 else if (ABI_N32_P (output_bfd))
10413 plt_entry = mips_n32_exec_plt0_entry;
10414 else
10415 plt_entry = mips_o32_exec_plt0_entry;
10416
10417 /* Calculate the value of .got.plt. */
10418 gotplt_value = (htab->sgotplt->output_section->vma
10419 + htab->sgotplt->output_offset);
10420 gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
10421 gotplt_value_low = gotplt_value & 0xffff;
10422
10423 /* The PLT sequence is not safe for N64 if .got.plt's address can
10424 not be loaded in two instructions. */
10425 BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
10426 || ~(gotplt_value | 0x7fffffff) == 0);
10427
10428 /* Install the PLT header. */
10429 loc = htab->splt->contents;
10430 bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
10431 bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
10432 bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
10433 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10434 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10435 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10436 bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
10437 bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
10438}
10439
0a44bf69
RS
10440/* Install the PLT header for a VxWorks executable and finalize the
10441 contents of .rela.plt.unloaded. */
10442
10443static void
10444mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
10445{
10446 Elf_Internal_Rela rela;
10447 bfd_byte *loc;
10448 bfd_vma got_value, got_value_high, got_value_low, plt_address;
10449 static const bfd_vma *plt_entry;
10450 struct mips_elf_link_hash_table *htab;
10451
10452 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
10453 BFD_ASSERT (htab != NULL);
10454
0a44bf69
RS
10455 plt_entry = mips_vxworks_exec_plt0_entry;
10456
10457 /* Calculate the value of _GLOBAL_OFFSET_TABLE_. */
10458 got_value = (htab->root.hgot->root.u.def.section->output_section->vma
10459 + htab->root.hgot->root.u.def.section->output_offset
10460 + htab->root.hgot->root.u.def.value);
10461
10462 got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
10463 got_value_low = got_value & 0xffff;
10464
10465 /* Calculate the address of the PLT header. */
10466 plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
10467
10468 /* Install the PLT header. */
10469 loc = htab->splt->contents;
10470 bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
10471 bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
10472 bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
10473 bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10474 bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
10475 bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
10476
10477 /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_). */
10478 loc = htab->srelplt2->contents;
10479 rela.r_offset = plt_address;
10480 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10481 rela.r_addend = 0;
10482 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10483 loc += sizeof (Elf32_External_Rela);
10484
10485 /* Output the relocation for the following addiu of
10486 %lo(_GLOBAL_OFFSET_TABLE_). */
10487 rela.r_offset += 4;
10488 rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10489 bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
10490 loc += sizeof (Elf32_External_Rela);
10491
10492 /* Fix up the remaining relocations. They may have the wrong
10493 symbol index for _G_O_T_ or _P_L_T_ depending on the order
10494 in which symbols were output. */
10495 while (loc < htab->srelplt2->contents + htab->srelplt2->size)
10496 {
10497 Elf_Internal_Rela rel;
10498
10499 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10500 rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
10501 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10502 loc += sizeof (Elf32_External_Rela);
10503
10504 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10505 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
10506 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10507 loc += sizeof (Elf32_External_Rela);
10508
10509 bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
10510 rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
10511 bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
10512 loc += sizeof (Elf32_External_Rela);
10513 }
10514}
10515
10516/* Install the PLT header for a VxWorks shared library. */
10517
10518static void
10519mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
10520{
10521 unsigned int i;
10522 struct mips_elf_link_hash_table *htab;
10523
10524 htab = mips_elf_hash_table (info);
4dfe6ac6 10525 BFD_ASSERT (htab != NULL);
0a44bf69
RS
10526
10527 /* We just need to copy the entry byte-by-byte. */
10528 for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
10529 bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
10530 htab->splt->contents + i * 4);
10531}
10532
b49e97c9
TS
10533/* Finish up the dynamic sections. */
10534
b34976b6 10535bfd_boolean
9719ad41
RS
10536_bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
10537 struct bfd_link_info *info)
b49e97c9
TS
10538{
10539 bfd *dynobj;
10540 asection *sdyn;
10541 asection *sgot;
f4416af6 10542 struct mips_got_info *gg, *g;
0a44bf69 10543 struct mips_elf_link_hash_table *htab;
b49e97c9 10544
0a44bf69 10545 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
10546 BFD_ASSERT (htab != NULL);
10547
b49e97c9
TS
10548 dynobj = elf_hash_table (info)->dynobj;
10549
3d4d4302 10550 sdyn = bfd_get_linker_section (dynobj, ".dynamic");
b49e97c9 10551
23cc69b6
RS
10552 sgot = htab->sgot;
10553 gg = htab->got_info;
b49e97c9
TS
10554
10555 if (elf_hash_table (info)->dynamic_sections_created)
10556 {
10557 bfd_byte *b;
943284cc 10558 int dyn_to_skip = 0, dyn_skipped = 0;
b49e97c9
TS
10559
10560 BFD_ASSERT (sdyn != NULL);
23cc69b6
RS
10561 BFD_ASSERT (gg != NULL);
10562
10563 g = mips_elf_got_for_ibfd (gg, output_bfd);
b49e97c9
TS
10564 BFD_ASSERT (g != NULL);
10565
10566 for (b = sdyn->contents;
eea6121a 10567 b < sdyn->contents + sdyn->size;
b49e97c9
TS
10568 b += MIPS_ELF_DYN_SIZE (dynobj))
10569 {
10570 Elf_Internal_Dyn dyn;
10571 const char *name;
10572 size_t elemsize;
10573 asection *s;
b34976b6 10574 bfd_boolean swap_out_p;
b49e97c9
TS
10575
10576 /* Read in the current dynamic entry. */
10577 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10578
10579 /* Assume that we're going to modify it and write it out. */
b34976b6 10580 swap_out_p = TRUE;
b49e97c9
TS
10581
10582 switch (dyn.d_tag)
10583 {
10584 case DT_RELENT:
b49e97c9
TS
10585 dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
10586 break;
10587
0a44bf69
RS
10588 case DT_RELAENT:
10589 BFD_ASSERT (htab->is_vxworks);
10590 dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
10591 break;
10592
b49e97c9
TS
10593 case DT_STRSZ:
10594 /* Rewrite DT_STRSZ. */
10595 dyn.d_un.d_val =
10596 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
10597 break;
10598
10599 case DT_PLTGOT:
861fb55a
DJ
10600 s = htab->sgot;
10601 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
10602 break;
10603
10604 case DT_MIPS_PLTGOT:
10605 s = htab->sgotplt;
10606 dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
b49e97c9
TS
10607 break;
10608
10609 case DT_MIPS_RLD_VERSION:
10610 dyn.d_un.d_val = 1; /* XXX */
10611 break;
10612
10613 case DT_MIPS_FLAGS:
10614 dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
10615 break;
10616
b49e97c9 10617 case DT_MIPS_TIME_STAMP:
6edfbbad
DJ
10618 {
10619 time_t t;
10620 time (&t);
10621 dyn.d_un.d_val = t;
10622 }
b49e97c9
TS
10623 break;
10624
10625 case DT_MIPS_ICHECKSUM:
10626 /* XXX FIXME: */
b34976b6 10627 swap_out_p = FALSE;
b49e97c9
TS
10628 break;
10629
10630 case DT_MIPS_IVERSION:
10631 /* XXX FIXME: */
b34976b6 10632 swap_out_p = FALSE;
b49e97c9
TS
10633 break;
10634
10635 case DT_MIPS_BASE_ADDRESS:
10636 s = output_bfd->sections;
10637 BFD_ASSERT (s != NULL);
10638 dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
10639 break;
10640
10641 case DT_MIPS_LOCAL_GOTNO:
10642 dyn.d_un.d_val = g->local_gotno;
10643 break;
10644
10645 case DT_MIPS_UNREFEXTNO:
10646 /* The index into the dynamic symbol table which is the
10647 entry of the first external symbol that is not
10648 referenced within the same object. */
10649 dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
10650 break;
10651
10652 case DT_MIPS_GOTSYM:
f4416af6 10653 if (gg->global_gotsym)
b49e97c9 10654 {
f4416af6 10655 dyn.d_un.d_val = gg->global_gotsym->dynindx;
b49e97c9
TS
10656 break;
10657 }
10658 /* In case if we don't have global got symbols we default
10659 to setting DT_MIPS_GOTSYM to the same value as
10660 DT_MIPS_SYMTABNO, so we just fall through. */
10661
10662 case DT_MIPS_SYMTABNO:
10663 name = ".dynsym";
10664 elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
10665 s = bfd_get_section_by_name (output_bfd, name);
10666 BFD_ASSERT (s != NULL);
10667
eea6121a 10668 dyn.d_un.d_val = s->size / elemsize;
b49e97c9
TS
10669 break;
10670
10671 case DT_MIPS_HIPAGENO:
861fb55a 10672 dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
b49e97c9
TS
10673 break;
10674
10675 case DT_MIPS_RLD_MAP:
b4082c70
DD
10676 {
10677 struct elf_link_hash_entry *h;
10678 h = mips_elf_hash_table (info)->rld_symbol;
10679 if (!h)
10680 {
10681 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10682 swap_out_p = FALSE;
10683 break;
10684 }
10685 s = h->root.u.def.section;
10686 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
10687 + h->root.u.def.value);
10688 }
b49e97c9
TS
10689 break;
10690
10691 case DT_MIPS_OPTIONS:
10692 s = (bfd_get_section_by_name
10693 (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
10694 dyn.d_un.d_ptr = s->vma;
10695 break;
10696
0a44bf69
RS
10697 case DT_RELASZ:
10698 BFD_ASSERT (htab->is_vxworks);
10699 /* The count does not include the JUMP_SLOT relocations. */
10700 if (htab->srelplt)
10701 dyn.d_un.d_val -= htab->srelplt->size;
10702 break;
10703
10704 case DT_PLTREL:
861fb55a
DJ
10705 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10706 if (htab->is_vxworks)
10707 dyn.d_un.d_val = DT_RELA;
10708 else
10709 dyn.d_un.d_val = DT_REL;
0a44bf69
RS
10710 break;
10711
10712 case DT_PLTRELSZ:
861fb55a 10713 BFD_ASSERT (htab->use_plts_and_copy_relocs);
0a44bf69
RS
10714 dyn.d_un.d_val = htab->srelplt->size;
10715 break;
10716
10717 case DT_JMPREL:
861fb55a
DJ
10718 BFD_ASSERT (htab->use_plts_and_copy_relocs);
10719 dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
0a44bf69
RS
10720 + htab->srelplt->output_offset);
10721 break;
10722
943284cc
DJ
10723 case DT_TEXTREL:
10724 /* If we didn't need any text relocations after all, delete
10725 the dynamic tag. */
10726 if (!(info->flags & DF_TEXTREL))
10727 {
10728 dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
10729 swap_out_p = FALSE;
10730 }
10731 break;
10732
10733 case DT_FLAGS:
10734 /* If we didn't need any text relocations after all, clear
10735 DF_TEXTREL from DT_FLAGS. */
10736 if (!(info->flags & DF_TEXTREL))
10737 dyn.d_un.d_val &= ~DF_TEXTREL;
10738 else
10739 swap_out_p = FALSE;
10740 break;
10741
b49e97c9 10742 default:
b34976b6 10743 swap_out_p = FALSE;
7a2b07ff
NS
10744 if (htab->is_vxworks
10745 && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
10746 swap_out_p = TRUE;
b49e97c9
TS
10747 break;
10748 }
10749
943284cc 10750 if (swap_out_p || dyn_skipped)
b49e97c9 10751 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
943284cc
DJ
10752 (dynobj, &dyn, b - dyn_skipped);
10753
10754 if (dyn_to_skip)
10755 {
10756 dyn_skipped += dyn_to_skip;
10757 dyn_to_skip = 0;
10758 }
b49e97c9 10759 }
943284cc
DJ
10760
10761 /* Wipe out any trailing entries if we shifted down a dynamic tag. */
10762 if (dyn_skipped > 0)
10763 memset (b - dyn_skipped, 0, dyn_skipped);
b49e97c9
TS
10764 }
10765
b55fd4d4
DJ
10766 if (sgot != NULL && sgot->size > 0
10767 && !bfd_is_abs_section (sgot->output_section))
b49e97c9 10768 {
0a44bf69
RS
10769 if (htab->is_vxworks)
10770 {
10771 /* The first entry of the global offset table points to the
10772 ".dynamic" section. The second is initialized by the
10773 loader and contains the shared library identifier.
10774 The third is also initialized by the loader and points
10775 to the lazy resolution stub. */
10776 MIPS_ELF_PUT_WORD (output_bfd,
10777 sdyn->output_offset + sdyn->output_section->vma,
10778 sgot->contents);
10779 MIPS_ELF_PUT_WORD (output_bfd, 0,
10780 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10781 MIPS_ELF_PUT_WORD (output_bfd, 0,
10782 sgot->contents
10783 + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
10784 }
10785 else
10786 {
10787 /* The first entry of the global offset table will be filled at
10788 runtime. The second entry will be used by some runtime loaders.
10789 This isn't the case of IRIX rld. */
10790 MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
51e38d68 10791 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
0a44bf69
RS
10792 sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
10793 }
b49e97c9 10794
54938e2a
TS
10795 elf_section_data (sgot->output_section)->this_hdr.sh_entsize
10796 = MIPS_ELF_GOT_SIZE (output_bfd);
10797 }
b49e97c9 10798
f4416af6
AO
10799 /* Generate dynamic relocations for the non-primary gots. */
10800 if (gg != NULL && gg->next)
10801 {
10802 Elf_Internal_Rela rel[3];
10803 bfd_vma addend = 0;
10804
10805 memset (rel, 0, sizeof (rel));
10806 rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
10807
10808 for (g = gg->next; g->next != gg; g = g->next)
10809 {
91d6fa6a 10810 bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
0f20cc35 10811 + g->next->tls_gotno;
f4416af6 10812
9719ad41 10813 MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
91d6fa6a 10814 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
51e38d68
RS
10815 MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
10816 sgot->contents
91d6fa6a 10817 + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
f4416af6
AO
10818
10819 if (! info->shared)
10820 continue;
10821
91d6fa6a 10822 while (got_index < g->assigned_gotno)
f4416af6
AO
10823 {
10824 rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
91d6fa6a 10825 = got_index++ * MIPS_ELF_GOT_SIZE (output_bfd);
f4416af6
AO
10826 if (!(mips_elf_create_dynamic_relocation
10827 (output_bfd, info, rel, NULL,
10828 bfd_abs_section_ptr,
10829 0, &addend, sgot)))
10830 return FALSE;
10831 BFD_ASSERT (addend == 0);
10832 }
10833 }
10834 }
10835
3133ddbf
DJ
10836 /* The generation of dynamic relocations for the non-primary gots
10837 adds more dynamic relocations. We cannot count them until
10838 here. */
10839
10840 if (elf_hash_table (info)->dynamic_sections_created)
10841 {
10842 bfd_byte *b;
10843 bfd_boolean swap_out_p;
10844
10845 BFD_ASSERT (sdyn != NULL);
10846
10847 for (b = sdyn->contents;
10848 b < sdyn->contents + sdyn->size;
10849 b += MIPS_ELF_DYN_SIZE (dynobj))
10850 {
10851 Elf_Internal_Dyn dyn;
10852 asection *s;
10853
10854 /* Read in the current dynamic entry. */
10855 (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
10856
10857 /* Assume that we're going to modify it and write it out. */
10858 swap_out_p = TRUE;
10859
10860 switch (dyn.d_tag)
10861 {
10862 case DT_RELSZ:
10863 /* Reduce DT_RELSZ to account for any relocations we
10864 decided not to make. This is for the n64 irix rld,
10865 which doesn't seem to apply any relocations if there
10866 are trailing null entries. */
0a44bf69 10867 s = mips_elf_rel_dyn_section (info, FALSE);
3133ddbf
DJ
10868 dyn.d_un.d_val = (s->reloc_count
10869 * (ABI_64_P (output_bfd)
10870 ? sizeof (Elf64_Mips_External_Rel)
10871 : sizeof (Elf32_External_Rel)));
bcfdf036
RS
10872 /* Adjust the section size too. Tools like the prelinker
10873 can reasonably expect the values to the same. */
10874 elf_section_data (s->output_section)->this_hdr.sh_size
10875 = dyn.d_un.d_val;
3133ddbf
DJ
10876 break;
10877
10878 default:
10879 swap_out_p = FALSE;
10880 break;
10881 }
10882
10883 if (swap_out_p)
10884 (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
10885 (dynobj, &dyn, b);
10886 }
10887 }
10888
b49e97c9 10889 {
b49e97c9
TS
10890 asection *s;
10891 Elf32_compact_rel cpt;
10892
b49e97c9
TS
10893 if (SGI_COMPAT (output_bfd))
10894 {
10895 /* Write .compact_rel section out. */
3d4d4302 10896 s = bfd_get_linker_section (dynobj, ".compact_rel");
b49e97c9
TS
10897 if (s != NULL)
10898 {
10899 cpt.id1 = 1;
10900 cpt.num = s->reloc_count;
10901 cpt.id2 = 2;
10902 cpt.offset = (s->output_section->filepos
10903 + sizeof (Elf32_External_compact_rel));
10904 cpt.reserved0 = 0;
10905 cpt.reserved1 = 0;
10906 bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
10907 ((Elf32_External_compact_rel *)
10908 s->contents));
10909
10910 /* Clean up a dummy stub function entry in .text. */
4e41d0d7 10911 if (htab->sstubs != NULL)
b49e97c9
TS
10912 {
10913 file_ptr dummy_offset;
10914
4e41d0d7
RS
10915 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
10916 dummy_offset = htab->sstubs->size - htab->function_stub_size;
10917 memset (htab->sstubs->contents + dummy_offset, 0,
5108fc1b 10918 htab->function_stub_size);
b49e97c9
TS
10919 }
10920 }
10921 }
10922
0a44bf69
RS
10923 /* The psABI says that the dynamic relocations must be sorted in
10924 increasing order of r_symndx. The VxWorks EABI doesn't require
10925 this, and because the code below handles REL rather than RELA
10926 relocations, using it for VxWorks would be outright harmful. */
10927 if (!htab->is_vxworks)
b49e97c9 10928 {
0a44bf69
RS
10929 s = mips_elf_rel_dyn_section (info, FALSE);
10930 if (s != NULL
10931 && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
10932 {
10933 reldyn_sorting_bfd = output_bfd;
b49e97c9 10934
0a44bf69
RS
10935 if (ABI_64_P (output_bfd))
10936 qsort ((Elf64_External_Rel *) s->contents + 1,
10937 s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
10938 sort_dynamic_relocs_64);
10939 else
10940 qsort ((Elf32_External_Rel *) s->contents + 1,
10941 s->reloc_count - 1, sizeof (Elf32_External_Rel),
10942 sort_dynamic_relocs);
10943 }
b49e97c9 10944 }
b49e97c9
TS
10945 }
10946
861fb55a 10947 if (htab->splt && htab->splt->size > 0)
0a44bf69 10948 {
861fb55a
DJ
10949 if (htab->is_vxworks)
10950 {
10951 if (info->shared)
10952 mips_vxworks_finish_shared_plt (output_bfd, info);
10953 else
10954 mips_vxworks_finish_exec_plt (output_bfd, info);
10955 }
0a44bf69 10956 else
861fb55a
DJ
10957 {
10958 BFD_ASSERT (!info->shared);
10959 mips_finish_exec_plt (output_bfd, info);
10960 }
0a44bf69 10961 }
b34976b6 10962 return TRUE;
b49e97c9
TS
10963}
10964
b49e97c9 10965
64543e1a
RS
10966/* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags. */
10967
10968static void
9719ad41 10969mips_set_isa_flags (bfd *abfd)
b49e97c9 10970{
64543e1a 10971 flagword val;
b49e97c9
TS
10972
10973 switch (bfd_get_mach (abfd))
10974 {
10975 default:
10976 case bfd_mach_mips3000:
10977 val = E_MIPS_ARCH_1;
10978 break;
10979
10980 case bfd_mach_mips3900:
10981 val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
10982 break;
10983
10984 case bfd_mach_mips6000:
10985 val = E_MIPS_ARCH_2;
10986 break;
10987
10988 case bfd_mach_mips4000:
10989 case bfd_mach_mips4300:
10990 case bfd_mach_mips4400:
10991 case bfd_mach_mips4600:
10992 val = E_MIPS_ARCH_3;
10993 break;
10994
10995 case bfd_mach_mips4010:
10996 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
10997 break;
10998
10999 case bfd_mach_mips4100:
11000 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11001 break;
11002
11003 case bfd_mach_mips4111:
11004 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11005 break;
11006
00707a0e
RS
11007 case bfd_mach_mips4120:
11008 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11009 break;
11010
b49e97c9
TS
11011 case bfd_mach_mips4650:
11012 val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11013 break;
11014
00707a0e
RS
11015 case bfd_mach_mips5400:
11016 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11017 break;
11018
11019 case bfd_mach_mips5500:
11020 val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11021 break;
11022
e407c74b
NC
11023 case bfd_mach_mips5900:
11024 val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11025 break;
11026
0d2e43ed
ILT
11027 case bfd_mach_mips9000:
11028 val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11029 break;
11030
b49e97c9 11031 case bfd_mach_mips5000:
5a7ea749 11032 case bfd_mach_mips7000:
b49e97c9
TS
11033 case bfd_mach_mips8000:
11034 case bfd_mach_mips10000:
11035 case bfd_mach_mips12000:
3aa3176b
TS
11036 case bfd_mach_mips14000:
11037 case bfd_mach_mips16000:
b49e97c9
TS
11038 val = E_MIPS_ARCH_4;
11039 break;
11040
11041 case bfd_mach_mips5:
11042 val = E_MIPS_ARCH_5;
11043 break;
11044
350cc38d
MS
11045 case bfd_mach_mips_loongson_2e:
11046 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11047 break;
11048
11049 case bfd_mach_mips_loongson_2f:
11050 val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11051 break;
11052
b49e97c9
TS
11053 case bfd_mach_mips_sb1:
11054 val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11055 break;
11056
d051516a
NC
11057 case bfd_mach_mips_loongson_3a:
11058 val = E_MIPS_ARCH_64 | E_MIPS_MACH_LS3A;
11059 break;
11060
6f179bd0 11061 case bfd_mach_mips_octeon:
dd6a37e7 11062 case bfd_mach_mips_octeonp:
6f179bd0
AN
11063 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11064 break;
11065
52b6b6b9
JM
11066 case bfd_mach_mips_xlr:
11067 val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11068 break;
11069
432233b3
AP
11070 case bfd_mach_mips_octeon2:
11071 val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11072 break;
11073
b49e97c9
TS
11074 case bfd_mach_mipsisa32:
11075 val = E_MIPS_ARCH_32;
11076 break;
11077
11078 case bfd_mach_mipsisa64:
11079 val = E_MIPS_ARCH_64;
af7ee8bf
CD
11080 break;
11081
11082 case bfd_mach_mipsisa32r2:
11083 val = E_MIPS_ARCH_32R2;
11084 break;
5f74bc13
CD
11085
11086 case bfd_mach_mipsisa64r2:
11087 val = E_MIPS_ARCH_64R2;
11088 break;
b49e97c9 11089 }
b49e97c9
TS
11090 elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11091 elf_elfheader (abfd)->e_flags |= val;
11092
64543e1a
RS
11093}
11094
11095
11096/* The final processing done just before writing out a MIPS ELF object
11097 file. This gets the MIPS architecture right based on the machine
11098 number. This is used by both the 32-bit and the 64-bit ABI. */
11099
11100void
9719ad41
RS
11101_bfd_mips_elf_final_write_processing (bfd *abfd,
11102 bfd_boolean linker ATTRIBUTE_UNUSED)
64543e1a
RS
11103{
11104 unsigned int i;
11105 Elf_Internal_Shdr **hdrpp;
11106 const char *name;
11107 asection *sec;
11108
11109 /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11110 is nonzero. This is for compatibility with old objects, which used
11111 a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH. */
11112 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11113 mips_set_isa_flags (abfd);
11114
b49e97c9
TS
11115 /* Set the sh_info field for .gptab sections and other appropriate
11116 info for each special section. */
11117 for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11118 i < elf_numsections (abfd);
11119 i++, hdrpp++)
11120 {
11121 switch ((*hdrpp)->sh_type)
11122 {
11123 case SHT_MIPS_MSYM:
11124 case SHT_MIPS_LIBLIST:
11125 sec = bfd_get_section_by_name (abfd, ".dynstr");
11126 if (sec != NULL)
11127 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11128 break;
11129
11130 case SHT_MIPS_GPTAB:
11131 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11132 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11133 BFD_ASSERT (name != NULL
0112cd26 11134 && CONST_STRNEQ (name, ".gptab."));
b49e97c9
TS
11135 sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11136 BFD_ASSERT (sec != NULL);
11137 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11138 break;
11139
11140 case SHT_MIPS_CONTENT:
11141 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11142 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11143 BFD_ASSERT (name != NULL
0112cd26 11144 && CONST_STRNEQ (name, ".MIPS.content"));
b49e97c9
TS
11145 sec = bfd_get_section_by_name (abfd,
11146 name + sizeof ".MIPS.content" - 1);
11147 BFD_ASSERT (sec != NULL);
11148 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11149 break;
11150
11151 case SHT_MIPS_SYMBOL_LIB:
11152 sec = bfd_get_section_by_name (abfd, ".dynsym");
11153 if (sec != NULL)
11154 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11155 sec = bfd_get_section_by_name (abfd, ".liblist");
11156 if (sec != NULL)
11157 (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11158 break;
11159
11160 case SHT_MIPS_EVENTS:
11161 BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11162 name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11163 BFD_ASSERT (name != NULL);
0112cd26 11164 if (CONST_STRNEQ (name, ".MIPS.events"))
b49e97c9
TS
11165 sec = bfd_get_section_by_name (abfd,
11166 name + sizeof ".MIPS.events" - 1);
11167 else
11168 {
0112cd26 11169 BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
b49e97c9
TS
11170 sec = bfd_get_section_by_name (abfd,
11171 (name
11172 + sizeof ".MIPS.post_rel" - 1));
11173 }
11174 BFD_ASSERT (sec != NULL);
11175 (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11176 break;
11177
11178 }
11179 }
11180}
11181\f
8dc1a139 11182/* When creating an IRIX5 executable, we need REGINFO and RTPROC
b49e97c9
TS
11183 segments. */
11184
11185int
a6b96beb
AM
11186_bfd_mips_elf_additional_program_headers (bfd *abfd,
11187 struct bfd_link_info *info ATTRIBUTE_UNUSED)
b49e97c9
TS
11188{
11189 asection *s;
11190 int ret = 0;
11191
11192 /* See if we need a PT_MIPS_REGINFO segment. */
11193 s = bfd_get_section_by_name (abfd, ".reginfo");
11194 if (s && (s->flags & SEC_LOAD))
11195 ++ret;
11196
11197 /* See if we need a PT_MIPS_OPTIONS segment. */
11198 if (IRIX_COMPAT (abfd) == ict_irix6
11199 && bfd_get_section_by_name (abfd,
11200 MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
11201 ++ret;
11202
11203 /* See if we need a PT_MIPS_RTPROC segment. */
11204 if (IRIX_COMPAT (abfd) == ict_irix5
11205 && bfd_get_section_by_name (abfd, ".dynamic")
11206 && bfd_get_section_by_name (abfd, ".mdebug"))
11207 ++ret;
11208
98c904a8
RS
11209 /* Allocate a PT_NULL header in dynamic objects. See
11210 _bfd_mips_elf_modify_segment_map for details. */
11211 if (!SGI_COMPAT (abfd)
11212 && bfd_get_section_by_name (abfd, ".dynamic"))
11213 ++ret;
11214
b49e97c9
TS
11215 return ret;
11216}
11217
8dc1a139 11218/* Modify the segment map for an IRIX5 executable. */
b49e97c9 11219
b34976b6 11220bfd_boolean
9719ad41 11221_bfd_mips_elf_modify_segment_map (bfd *abfd,
7c8b76cc 11222 struct bfd_link_info *info)
b49e97c9
TS
11223{
11224 asection *s;
11225 struct elf_segment_map *m, **pm;
11226 bfd_size_type amt;
11227
11228 /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
11229 segment. */
11230 s = bfd_get_section_by_name (abfd, ".reginfo");
11231 if (s != NULL && (s->flags & SEC_LOAD) != 0)
11232 {
11233 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11234 if (m->p_type == PT_MIPS_REGINFO)
11235 break;
11236 if (m == NULL)
11237 {
11238 amt = sizeof *m;
9719ad41 11239 m = bfd_zalloc (abfd, amt);
b49e97c9 11240 if (m == NULL)
b34976b6 11241 return FALSE;
b49e97c9
TS
11242
11243 m->p_type = PT_MIPS_REGINFO;
11244 m->count = 1;
11245 m->sections[0] = s;
11246
11247 /* We want to put it after the PHDR and INTERP segments. */
11248 pm = &elf_tdata (abfd)->segment_map;
11249 while (*pm != NULL
11250 && ((*pm)->p_type == PT_PHDR
11251 || (*pm)->p_type == PT_INTERP))
11252 pm = &(*pm)->next;
11253
11254 m->next = *pm;
11255 *pm = m;
11256 }
11257 }
11258
11259 /* For IRIX 6, we don't have .mdebug sections, nor does anything but
11260 .dynamic end up in PT_DYNAMIC. However, we do have to insert a
98a8deaf 11261 PT_MIPS_OPTIONS segment immediately following the program header
b49e97c9 11262 table. */
c1fd6598
AO
11263 if (NEWABI_P (abfd)
11264 /* On non-IRIX6 new abi, we'll have already created a segment
11265 for this section, so don't create another. I'm not sure this
11266 is not also the case for IRIX 6, but I can't test it right
11267 now. */
11268 && IRIX_COMPAT (abfd) == ict_irix6)
b49e97c9
TS
11269 {
11270 for (s = abfd->sections; s; s = s->next)
11271 if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
11272 break;
11273
11274 if (s)
11275 {
11276 struct elf_segment_map *options_segment;
11277
98a8deaf
RS
11278 pm = &elf_tdata (abfd)->segment_map;
11279 while (*pm != NULL
11280 && ((*pm)->p_type == PT_PHDR
11281 || (*pm)->p_type == PT_INTERP))
11282 pm = &(*pm)->next;
b49e97c9 11283
8ded5a0f
AM
11284 if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
11285 {
11286 amt = sizeof (struct elf_segment_map);
11287 options_segment = bfd_zalloc (abfd, amt);
11288 options_segment->next = *pm;
11289 options_segment->p_type = PT_MIPS_OPTIONS;
11290 options_segment->p_flags = PF_R;
11291 options_segment->p_flags_valid = TRUE;
11292 options_segment->count = 1;
11293 options_segment->sections[0] = s;
11294 *pm = options_segment;
11295 }
b49e97c9
TS
11296 }
11297 }
11298 else
11299 {
11300 if (IRIX_COMPAT (abfd) == ict_irix5)
11301 {
11302 /* If there are .dynamic and .mdebug sections, we make a room
11303 for the RTPROC header. FIXME: Rewrite without section names. */
11304 if (bfd_get_section_by_name (abfd, ".interp") == NULL
11305 && bfd_get_section_by_name (abfd, ".dynamic") != NULL
11306 && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
11307 {
11308 for (m = elf_tdata (abfd)->segment_map; m != NULL; m = m->next)
11309 if (m->p_type == PT_MIPS_RTPROC)
11310 break;
11311 if (m == NULL)
11312 {
11313 amt = sizeof *m;
9719ad41 11314 m = bfd_zalloc (abfd, amt);
b49e97c9 11315 if (m == NULL)
b34976b6 11316 return FALSE;
b49e97c9
TS
11317
11318 m->p_type = PT_MIPS_RTPROC;
11319
11320 s = bfd_get_section_by_name (abfd, ".rtproc");
11321 if (s == NULL)
11322 {
11323 m->count = 0;
11324 m->p_flags = 0;
11325 m->p_flags_valid = 1;
11326 }
11327 else
11328 {
11329 m->count = 1;
11330 m->sections[0] = s;
11331 }
11332
11333 /* We want to put it after the DYNAMIC segment. */
11334 pm = &elf_tdata (abfd)->segment_map;
11335 while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
11336 pm = &(*pm)->next;
11337 if (*pm != NULL)
11338 pm = &(*pm)->next;
11339
11340 m->next = *pm;
11341 *pm = m;
11342 }
11343 }
11344 }
8dc1a139 11345 /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
b49e97c9
TS
11346 .dynstr, .dynsym, and .hash sections, and everything in
11347 between. */
11348 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL;
11349 pm = &(*pm)->next)
11350 if ((*pm)->p_type == PT_DYNAMIC)
11351 break;
11352 m = *pm;
11353 if (m != NULL && IRIX_COMPAT (abfd) == ict_none)
11354 {
11355 /* For a normal mips executable the permissions for the PT_DYNAMIC
11356 segment are read, write and execute. We do that here since
11357 the code in elf.c sets only the read permission. This matters
11358 sometimes for the dynamic linker. */
11359 if (bfd_get_section_by_name (abfd, ".dynamic") != NULL)
11360 {
11361 m->p_flags = PF_R | PF_W | PF_X;
11362 m->p_flags_valid = 1;
11363 }
11364 }
f6f62d6f
RS
11365 /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
11366 glibc's dynamic linker has traditionally derived the number of
11367 tags from the p_filesz field, and sometimes allocates stack
11368 arrays of that size. An overly-big PT_DYNAMIC segment can
11369 be actively harmful in such cases. Making PT_DYNAMIC contain
11370 other sections can also make life hard for the prelinker,
11371 which might move one of the other sections to a different
11372 PT_LOAD segment. */
11373 if (SGI_COMPAT (abfd)
11374 && m != NULL
11375 && m->count == 1
11376 && strcmp (m->sections[0]->name, ".dynamic") == 0)
b49e97c9
TS
11377 {
11378 static const char *sec_names[] =
11379 {
11380 ".dynamic", ".dynstr", ".dynsym", ".hash"
11381 };
11382 bfd_vma low, high;
11383 unsigned int i, c;
11384 struct elf_segment_map *n;
11385
792b4a53 11386 low = ~(bfd_vma) 0;
b49e97c9
TS
11387 high = 0;
11388 for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
11389 {
11390 s = bfd_get_section_by_name (abfd, sec_names[i]);
11391 if (s != NULL && (s->flags & SEC_LOAD) != 0)
11392 {
11393 bfd_size_type sz;
11394
11395 if (low > s->vma)
11396 low = s->vma;
eea6121a 11397 sz = s->size;
b49e97c9
TS
11398 if (high < s->vma + sz)
11399 high = s->vma + sz;
11400 }
11401 }
11402
11403 c = 0;
11404 for (s = abfd->sections; s != NULL; s = s->next)
11405 if ((s->flags & SEC_LOAD) != 0
11406 && s->vma >= low
eea6121a 11407 && s->vma + s->size <= high)
b49e97c9
TS
11408 ++c;
11409
11410 amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
9719ad41 11411 n = bfd_zalloc (abfd, amt);
b49e97c9 11412 if (n == NULL)
b34976b6 11413 return FALSE;
b49e97c9
TS
11414 *n = *m;
11415 n->count = c;
11416
11417 i = 0;
11418 for (s = abfd->sections; s != NULL; s = s->next)
11419 {
11420 if ((s->flags & SEC_LOAD) != 0
11421 && s->vma >= low
eea6121a 11422 && s->vma + s->size <= high)
b49e97c9
TS
11423 {
11424 n->sections[i] = s;
11425 ++i;
11426 }
11427 }
11428
11429 *pm = n;
11430 }
11431 }
11432
98c904a8
RS
11433 /* Allocate a spare program header in dynamic objects so that tools
11434 like the prelinker can add an extra PT_LOAD entry.
11435
11436 If the prelinker needs to make room for a new PT_LOAD entry, its
11437 standard procedure is to move the first (read-only) sections into
11438 the new (writable) segment. However, the MIPS ABI requires
11439 .dynamic to be in a read-only segment, and the section will often
11440 start within sizeof (ElfNN_Phdr) bytes of the last program header.
11441
11442 Although the prelinker could in principle move .dynamic to a
11443 writable segment, it seems better to allocate a spare program
11444 header instead, and avoid the need to move any sections.
11445 There is a long tradition of allocating spare dynamic tags,
11446 so allocating a spare program header seems like a natural
7c8b76cc
JM
11447 extension.
11448
11449 If INFO is NULL, we may be copying an already prelinked binary
11450 with objcopy or strip, so do not add this header. */
11451 if (info != NULL
11452 && !SGI_COMPAT (abfd)
98c904a8
RS
11453 && bfd_get_section_by_name (abfd, ".dynamic"))
11454 {
11455 for (pm = &elf_tdata (abfd)->segment_map; *pm != NULL; pm = &(*pm)->next)
11456 if ((*pm)->p_type == PT_NULL)
11457 break;
11458 if (*pm == NULL)
11459 {
11460 m = bfd_zalloc (abfd, sizeof (*m));
11461 if (m == NULL)
11462 return FALSE;
11463
11464 m->p_type = PT_NULL;
11465 *pm = m;
11466 }
11467 }
11468
b34976b6 11469 return TRUE;
b49e97c9
TS
11470}
11471\f
11472/* Return the section that should be marked against GC for a given
11473 relocation. */
11474
11475asection *
9719ad41 11476_bfd_mips_elf_gc_mark_hook (asection *sec,
07adf181 11477 struct bfd_link_info *info,
9719ad41
RS
11478 Elf_Internal_Rela *rel,
11479 struct elf_link_hash_entry *h,
11480 Elf_Internal_Sym *sym)
b49e97c9
TS
11481{
11482 /* ??? Do mips16 stub sections need to be handled special? */
11483
11484 if (h != NULL)
07adf181
AM
11485 switch (ELF_R_TYPE (sec->owner, rel->r_info))
11486 {
11487 case R_MIPS_GNU_VTINHERIT:
11488 case R_MIPS_GNU_VTENTRY:
11489 return NULL;
11490 }
b49e97c9 11491
07adf181 11492 return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
b49e97c9
TS
11493}
11494
11495/* Update the got entry reference counts for the section being removed. */
11496
b34976b6 11497bfd_boolean
9719ad41
RS
11498_bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
11499 struct bfd_link_info *info ATTRIBUTE_UNUSED,
11500 asection *sec ATTRIBUTE_UNUSED,
11501 const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
b49e97c9
TS
11502{
11503#if 0
11504 Elf_Internal_Shdr *symtab_hdr;
11505 struct elf_link_hash_entry **sym_hashes;
11506 bfd_signed_vma *local_got_refcounts;
11507 const Elf_Internal_Rela *rel, *relend;
11508 unsigned long r_symndx;
11509 struct elf_link_hash_entry *h;
11510
7dda2462
TG
11511 if (info->relocatable)
11512 return TRUE;
11513
b49e97c9
TS
11514 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
11515 sym_hashes = elf_sym_hashes (abfd);
11516 local_got_refcounts = elf_local_got_refcounts (abfd);
11517
11518 relend = relocs + sec->reloc_count;
11519 for (rel = relocs; rel < relend; rel++)
11520 switch (ELF_R_TYPE (abfd, rel->r_info))
11521 {
738e5348
RS
11522 case R_MIPS16_GOT16:
11523 case R_MIPS16_CALL16:
b49e97c9
TS
11524 case R_MIPS_GOT16:
11525 case R_MIPS_CALL16:
11526 case R_MIPS_CALL_HI16:
11527 case R_MIPS_CALL_LO16:
11528 case R_MIPS_GOT_HI16:
11529 case R_MIPS_GOT_LO16:
4a14403c
TS
11530 case R_MIPS_GOT_DISP:
11531 case R_MIPS_GOT_PAGE:
11532 case R_MIPS_GOT_OFST:
df58fc94
RS
11533 case R_MICROMIPS_GOT16:
11534 case R_MICROMIPS_CALL16:
11535 case R_MICROMIPS_CALL_HI16:
11536 case R_MICROMIPS_CALL_LO16:
11537 case R_MICROMIPS_GOT_HI16:
11538 case R_MICROMIPS_GOT_LO16:
11539 case R_MICROMIPS_GOT_DISP:
11540 case R_MICROMIPS_GOT_PAGE:
11541 case R_MICROMIPS_GOT_OFST:
b49e97c9
TS
11542 /* ??? It would seem that the existing MIPS code does no sort
11543 of reference counting or whatnot on its GOT and PLT entries,
11544 so it is not possible to garbage collect them at this time. */
11545 break;
11546
11547 default:
11548 break;
11549 }
11550#endif
11551
b34976b6 11552 return TRUE;
b49e97c9
TS
11553}
11554\f
11555/* Copy data from a MIPS ELF indirect symbol to its direct symbol,
11556 hiding the old indirect symbol. Process additional relocation
11557 information. Also called for weakdefs, in which case we just let
11558 _bfd_elf_link_hash_copy_indirect copy the flags for us. */
11559
11560void
fcfa13d2 11561_bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
9719ad41
RS
11562 struct elf_link_hash_entry *dir,
11563 struct elf_link_hash_entry *ind)
b49e97c9
TS
11564{
11565 struct mips_elf_link_hash_entry *dirmips, *indmips;
11566
fcfa13d2 11567 _bfd_elf_link_hash_copy_indirect (info, dir, ind);
b49e97c9 11568
861fb55a
DJ
11569 dirmips = (struct mips_elf_link_hash_entry *) dir;
11570 indmips = (struct mips_elf_link_hash_entry *) ind;
11571 /* Any absolute non-dynamic relocations against an indirect or weak
11572 definition will be against the target symbol. */
11573 if (indmips->has_static_relocs)
11574 dirmips->has_static_relocs = TRUE;
11575
b49e97c9
TS
11576 if (ind->root.type != bfd_link_hash_indirect)
11577 return;
11578
b49e97c9
TS
11579 dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
11580 if (indmips->readonly_reloc)
b34976b6 11581 dirmips->readonly_reloc = TRUE;
b49e97c9 11582 if (indmips->no_fn_stub)
b34976b6 11583 dirmips->no_fn_stub = TRUE;
61b0a4af
RS
11584 if (indmips->fn_stub)
11585 {
11586 dirmips->fn_stub = indmips->fn_stub;
11587 indmips->fn_stub = NULL;
11588 }
11589 if (indmips->need_fn_stub)
11590 {
11591 dirmips->need_fn_stub = TRUE;
11592 indmips->need_fn_stub = FALSE;
11593 }
11594 if (indmips->call_stub)
11595 {
11596 dirmips->call_stub = indmips->call_stub;
11597 indmips->call_stub = NULL;
11598 }
11599 if (indmips->call_fp_stub)
11600 {
11601 dirmips->call_fp_stub = indmips->call_fp_stub;
11602 indmips->call_fp_stub = NULL;
11603 }
634835ae
RS
11604 if (indmips->global_got_area < dirmips->global_got_area)
11605 dirmips->global_got_area = indmips->global_got_area;
11606 if (indmips->global_got_area < GGA_NONE)
11607 indmips->global_got_area = GGA_NONE;
861fb55a
DJ
11608 if (indmips->has_nonpic_branches)
11609 dirmips->has_nonpic_branches = TRUE;
0f20cc35
DJ
11610
11611 if (dirmips->tls_type == 0)
11612 dirmips->tls_type = indmips->tls_type;
b49e97c9 11613}
b49e97c9 11614\f
d01414a5
TS
11615#define PDR_SIZE 32
11616
b34976b6 11617bfd_boolean
9719ad41
RS
11618_bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
11619 struct bfd_link_info *info)
d01414a5
TS
11620{
11621 asection *o;
b34976b6 11622 bfd_boolean ret = FALSE;
d01414a5
TS
11623 unsigned char *tdata;
11624 size_t i, skip;
11625
11626 o = bfd_get_section_by_name (abfd, ".pdr");
11627 if (! o)
b34976b6 11628 return FALSE;
eea6121a 11629 if (o->size == 0)
b34976b6 11630 return FALSE;
eea6121a 11631 if (o->size % PDR_SIZE != 0)
b34976b6 11632 return FALSE;
d01414a5
TS
11633 if (o->output_section != NULL
11634 && bfd_is_abs_section (o->output_section))
b34976b6 11635 return FALSE;
d01414a5 11636
eea6121a 11637 tdata = bfd_zmalloc (o->size / PDR_SIZE);
d01414a5 11638 if (! tdata)
b34976b6 11639 return FALSE;
d01414a5 11640
9719ad41 11641 cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
45d6a902 11642 info->keep_memory);
d01414a5
TS
11643 if (!cookie->rels)
11644 {
11645 free (tdata);
b34976b6 11646 return FALSE;
d01414a5
TS
11647 }
11648
11649 cookie->rel = cookie->rels;
11650 cookie->relend = cookie->rels + o->reloc_count;
11651
eea6121a 11652 for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
d01414a5 11653 {
c152c796 11654 if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
d01414a5
TS
11655 {
11656 tdata[i] = 1;
11657 skip ++;
11658 }
11659 }
11660
11661 if (skip != 0)
11662 {
f0abc2a1 11663 mips_elf_section_data (o)->u.tdata = tdata;
eea6121a 11664 o->size -= skip * PDR_SIZE;
b34976b6 11665 ret = TRUE;
d01414a5
TS
11666 }
11667 else
11668 free (tdata);
11669
11670 if (! info->keep_memory)
11671 free (cookie->rels);
11672
11673 return ret;
11674}
11675
b34976b6 11676bfd_boolean
9719ad41 11677_bfd_mips_elf_ignore_discarded_relocs (asection *sec)
53bfd6b4
MR
11678{
11679 if (strcmp (sec->name, ".pdr") == 0)
b34976b6
AM
11680 return TRUE;
11681 return FALSE;
53bfd6b4 11682}
d01414a5 11683
b34976b6 11684bfd_boolean
c7b8f16e
JB
11685_bfd_mips_elf_write_section (bfd *output_bfd,
11686 struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
11687 asection *sec, bfd_byte *contents)
d01414a5
TS
11688{
11689 bfd_byte *to, *from, *end;
11690 int i;
11691
11692 if (strcmp (sec->name, ".pdr") != 0)
b34976b6 11693 return FALSE;
d01414a5 11694
f0abc2a1 11695 if (mips_elf_section_data (sec)->u.tdata == NULL)
b34976b6 11696 return FALSE;
d01414a5
TS
11697
11698 to = contents;
eea6121a 11699 end = contents + sec->size;
d01414a5
TS
11700 for (from = contents, i = 0;
11701 from < end;
11702 from += PDR_SIZE, i++)
11703 {
f0abc2a1 11704 if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
d01414a5
TS
11705 continue;
11706 if (to != from)
11707 memcpy (to, from, PDR_SIZE);
11708 to += PDR_SIZE;
11709 }
11710 bfd_set_section_contents (output_bfd, sec->output_section, contents,
eea6121a 11711 sec->output_offset, sec->size);
b34976b6 11712 return TRUE;
d01414a5 11713}
53bfd6b4 11714\f
df58fc94
RS
11715/* microMIPS code retains local labels for linker relaxation. Omit them
11716 from output by default for clarity. */
11717
11718bfd_boolean
11719_bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
11720{
11721 return _bfd_elf_is_local_label_name (abfd, sym->name);
11722}
11723
b49e97c9
TS
11724/* MIPS ELF uses a special find_nearest_line routine in order the
11725 handle the ECOFF debugging information. */
11726
11727struct mips_elf_find_line
11728{
11729 struct ecoff_debug_info d;
11730 struct ecoff_find_line i;
11731};
11732
b34976b6 11733bfd_boolean
9719ad41
RS
11734_bfd_mips_elf_find_nearest_line (bfd *abfd, asection *section,
11735 asymbol **symbols, bfd_vma offset,
11736 const char **filename_ptr,
11737 const char **functionname_ptr,
11738 unsigned int *line_ptr)
b49e97c9
TS
11739{
11740 asection *msec;
11741
11742 if (_bfd_dwarf1_find_nearest_line (abfd, section, symbols, offset,
11743 filename_ptr, functionname_ptr,
11744 line_ptr))
b34976b6 11745 return TRUE;
b49e97c9 11746
fc28f9aa
TG
11747 if (_bfd_dwarf2_find_nearest_line (abfd, dwarf_debug_sections,
11748 section, symbols, offset,
b49e97c9 11749 filename_ptr, functionname_ptr,
9b8d1a36 11750 line_ptr, NULL, ABI_64_P (abfd) ? 8 : 0,
b49e97c9 11751 &elf_tdata (abfd)->dwarf2_find_line_info))
b34976b6 11752 return TRUE;
b49e97c9
TS
11753
11754 msec = bfd_get_section_by_name (abfd, ".mdebug");
11755 if (msec != NULL)
11756 {
11757 flagword origflags;
11758 struct mips_elf_find_line *fi;
11759 const struct ecoff_debug_swap * const swap =
11760 get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
11761
11762 /* If we are called during a link, mips_elf_final_link may have
11763 cleared the SEC_HAS_CONTENTS field. We force it back on here
11764 if appropriate (which it normally will be). */
11765 origflags = msec->flags;
11766 if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
11767 msec->flags |= SEC_HAS_CONTENTS;
11768
11769 fi = elf_tdata (abfd)->find_line_info;
11770 if (fi == NULL)
11771 {
11772 bfd_size_type external_fdr_size;
11773 char *fraw_src;
11774 char *fraw_end;
11775 struct fdr *fdr_ptr;
11776 bfd_size_type amt = sizeof (struct mips_elf_find_line);
11777
9719ad41 11778 fi = bfd_zalloc (abfd, amt);
b49e97c9
TS
11779 if (fi == NULL)
11780 {
11781 msec->flags = origflags;
b34976b6 11782 return FALSE;
b49e97c9
TS
11783 }
11784
11785 if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
11786 {
11787 msec->flags = origflags;
b34976b6 11788 return FALSE;
b49e97c9
TS
11789 }
11790
11791 /* Swap in the FDR information. */
11792 amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
9719ad41 11793 fi->d.fdr = bfd_alloc (abfd, amt);
b49e97c9
TS
11794 if (fi->d.fdr == NULL)
11795 {
11796 msec->flags = origflags;
b34976b6 11797 return FALSE;
b49e97c9
TS
11798 }
11799 external_fdr_size = swap->external_fdr_size;
11800 fdr_ptr = fi->d.fdr;
11801 fraw_src = (char *) fi->d.external_fdr;
11802 fraw_end = (fraw_src
11803 + fi->d.symbolic_header.ifdMax * external_fdr_size);
11804 for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
9719ad41 11805 (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
b49e97c9
TS
11806
11807 elf_tdata (abfd)->find_line_info = fi;
11808
11809 /* Note that we don't bother to ever free this information.
11810 find_nearest_line is either called all the time, as in
11811 objdump -l, so the information should be saved, or it is
11812 rarely called, as in ld error messages, so the memory
11813 wasted is unimportant. Still, it would probably be a
11814 good idea for free_cached_info to throw it away. */
11815 }
11816
11817 if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
11818 &fi->i, filename_ptr, functionname_ptr,
11819 line_ptr))
11820 {
11821 msec->flags = origflags;
b34976b6 11822 return TRUE;
b49e97c9
TS
11823 }
11824
11825 msec->flags = origflags;
11826 }
11827
11828 /* Fall back on the generic ELF find_nearest_line routine. */
11829
11830 return _bfd_elf_find_nearest_line (abfd, section, symbols, offset,
11831 filename_ptr, functionname_ptr,
11832 line_ptr);
11833}
4ab527b0
FF
11834
11835bfd_boolean
11836_bfd_mips_elf_find_inliner_info (bfd *abfd,
11837 const char **filename_ptr,
11838 const char **functionname_ptr,
11839 unsigned int *line_ptr)
11840{
11841 bfd_boolean found;
11842 found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
11843 functionname_ptr, line_ptr,
11844 & elf_tdata (abfd)->dwarf2_find_line_info);
11845 return found;
11846}
11847
b49e97c9
TS
11848\f
11849/* When are writing out the .options or .MIPS.options section,
11850 remember the bytes we are writing out, so that we can install the
11851 GP value in the section_processing routine. */
11852
b34976b6 11853bfd_boolean
9719ad41
RS
11854_bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
11855 const void *location,
11856 file_ptr offset, bfd_size_type count)
b49e97c9 11857{
cc2e31b9 11858 if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
b49e97c9
TS
11859 {
11860 bfd_byte *c;
11861
11862 if (elf_section_data (section) == NULL)
11863 {
11864 bfd_size_type amt = sizeof (struct bfd_elf_section_data);
9719ad41 11865 section->used_by_bfd = bfd_zalloc (abfd, amt);
b49e97c9 11866 if (elf_section_data (section) == NULL)
b34976b6 11867 return FALSE;
b49e97c9 11868 }
f0abc2a1 11869 c = mips_elf_section_data (section)->u.tdata;
b49e97c9
TS
11870 if (c == NULL)
11871 {
eea6121a 11872 c = bfd_zalloc (abfd, section->size);
b49e97c9 11873 if (c == NULL)
b34976b6 11874 return FALSE;
f0abc2a1 11875 mips_elf_section_data (section)->u.tdata = c;
b49e97c9
TS
11876 }
11877
9719ad41 11878 memcpy (c + offset, location, count);
b49e97c9
TS
11879 }
11880
11881 return _bfd_elf_set_section_contents (abfd, section, location, offset,
11882 count);
11883}
11884
11885/* This is almost identical to bfd_generic_get_... except that some
11886 MIPS relocations need to be handled specially. Sigh. */
11887
11888bfd_byte *
9719ad41
RS
11889_bfd_elf_mips_get_relocated_section_contents
11890 (bfd *abfd,
11891 struct bfd_link_info *link_info,
11892 struct bfd_link_order *link_order,
11893 bfd_byte *data,
11894 bfd_boolean relocatable,
11895 asymbol **symbols)
b49e97c9
TS
11896{
11897 /* Get enough memory to hold the stuff */
11898 bfd *input_bfd = link_order->u.indirect.section->owner;
11899 asection *input_section = link_order->u.indirect.section;
eea6121a 11900 bfd_size_type sz;
b49e97c9
TS
11901
11902 long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
11903 arelent **reloc_vector = NULL;
11904 long reloc_count;
11905
11906 if (reloc_size < 0)
11907 goto error_return;
11908
9719ad41 11909 reloc_vector = bfd_malloc (reloc_size);
b49e97c9
TS
11910 if (reloc_vector == NULL && reloc_size != 0)
11911 goto error_return;
11912
11913 /* read in the section */
eea6121a
AM
11914 sz = input_section->rawsize ? input_section->rawsize : input_section->size;
11915 if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
b49e97c9
TS
11916 goto error_return;
11917
b49e97c9
TS
11918 reloc_count = bfd_canonicalize_reloc (input_bfd,
11919 input_section,
11920 reloc_vector,
11921 symbols);
11922 if (reloc_count < 0)
11923 goto error_return;
11924
11925 if (reloc_count > 0)
11926 {
11927 arelent **parent;
11928 /* for mips */
11929 int gp_found;
11930 bfd_vma gp = 0x12345678; /* initialize just to shut gcc up */
11931
11932 {
11933 struct bfd_hash_entry *h;
11934 struct bfd_link_hash_entry *lh;
11935 /* Skip all this stuff if we aren't mixing formats. */
11936 if (abfd && input_bfd
11937 && abfd->xvec == input_bfd->xvec)
11938 lh = 0;
11939 else
11940 {
b34976b6 11941 h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
b49e97c9
TS
11942 lh = (struct bfd_link_hash_entry *) h;
11943 }
11944 lookup:
11945 if (lh)
11946 {
11947 switch (lh->type)
11948 {
11949 case bfd_link_hash_undefined:
11950 case bfd_link_hash_undefweak:
11951 case bfd_link_hash_common:
11952 gp_found = 0;
11953 break;
11954 case bfd_link_hash_defined:
11955 case bfd_link_hash_defweak:
11956 gp_found = 1;
11957 gp = lh->u.def.value;
11958 break;
11959 case bfd_link_hash_indirect:
11960 case bfd_link_hash_warning:
11961 lh = lh->u.i.link;
11962 /* @@FIXME ignoring warning for now */
11963 goto lookup;
11964 case bfd_link_hash_new:
11965 default:
11966 abort ();
11967 }
11968 }
11969 else
11970 gp_found = 0;
11971 }
11972 /* end mips */
9719ad41 11973 for (parent = reloc_vector; *parent != NULL; parent++)
b49e97c9 11974 {
9719ad41 11975 char *error_message = NULL;
b49e97c9
TS
11976 bfd_reloc_status_type r;
11977
11978 /* Specific to MIPS: Deal with relocation types that require
11979 knowing the gp of the output bfd. */
11980 asymbol *sym = *(*parent)->sym_ptr_ptr;
b49e97c9 11981
8236346f
EC
11982 /* If we've managed to find the gp and have a special
11983 function for the relocation then go ahead, else default
11984 to the generic handling. */
11985 if (gp_found
11986 && (*parent)->howto->special_function
11987 == _bfd_mips_elf32_gprel16_reloc)
11988 r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
11989 input_section, relocatable,
11990 data, gp);
11991 else
86324f90 11992 r = bfd_perform_relocation (input_bfd, *parent, data,
8236346f
EC
11993 input_section,
11994 relocatable ? abfd : NULL,
11995 &error_message);
b49e97c9 11996
1049f94e 11997 if (relocatable)
b49e97c9
TS
11998 {
11999 asection *os = input_section->output_section;
12000
12001 /* A partial link, so keep the relocs */
12002 os->orelocation[os->reloc_count] = *parent;
12003 os->reloc_count++;
12004 }
12005
12006 if (r != bfd_reloc_ok)
12007 {
12008 switch (r)
12009 {
12010 case bfd_reloc_undefined:
12011 if (!((*link_info->callbacks->undefined_symbol)
12012 (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
5e2b0d47 12013 input_bfd, input_section, (*parent)->address, TRUE)))
b49e97c9
TS
12014 goto error_return;
12015 break;
12016 case bfd_reloc_dangerous:
9719ad41 12017 BFD_ASSERT (error_message != NULL);
b49e97c9
TS
12018 if (!((*link_info->callbacks->reloc_dangerous)
12019 (link_info, error_message, input_bfd, input_section,
12020 (*parent)->address)))
12021 goto error_return;
12022 break;
12023 case bfd_reloc_overflow:
12024 if (!((*link_info->callbacks->reloc_overflow)
dfeffb9f
L
12025 (link_info, NULL,
12026 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
b49e97c9
TS
12027 (*parent)->howto->name, (*parent)->addend,
12028 input_bfd, input_section, (*parent)->address)))
12029 goto error_return;
12030 break;
12031 case bfd_reloc_outofrange:
12032 default:
12033 abort ();
12034 break;
12035 }
12036
12037 }
12038 }
12039 }
12040 if (reloc_vector != NULL)
12041 free (reloc_vector);
12042 return data;
12043
12044error_return:
12045 if (reloc_vector != NULL)
12046 free (reloc_vector);
12047 return NULL;
12048}
12049\f
df58fc94
RS
12050static bfd_boolean
12051mips_elf_relax_delete_bytes (bfd *abfd,
12052 asection *sec, bfd_vma addr, int count)
12053{
12054 Elf_Internal_Shdr *symtab_hdr;
12055 unsigned int sec_shndx;
12056 bfd_byte *contents;
12057 Elf_Internal_Rela *irel, *irelend;
12058 Elf_Internal_Sym *isym;
12059 Elf_Internal_Sym *isymend;
12060 struct elf_link_hash_entry **sym_hashes;
12061 struct elf_link_hash_entry **end_hashes;
12062 struct elf_link_hash_entry **start_hashes;
12063 unsigned int symcount;
12064
12065 sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12066 contents = elf_section_data (sec)->this_hdr.contents;
12067
12068 irel = elf_section_data (sec)->relocs;
12069 irelend = irel + sec->reloc_count;
12070
12071 /* Actually delete the bytes. */
12072 memmove (contents + addr, contents + addr + count,
12073 (size_t) (sec->size - addr - count));
12074 sec->size -= count;
12075
12076 /* Adjust all the relocs. */
12077 for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12078 {
12079 /* Get the new reloc address. */
12080 if (irel->r_offset > addr)
12081 irel->r_offset -= count;
12082 }
12083
12084 BFD_ASSERT (addr % 2 == 0);
12085 BFD_ASSERT (count % 2 == 0);
12086
12087 /* Adjust the local symbols defined in this section. */
12088 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12089 isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12090 for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
2309ddf2 12091 if (isym->st_shndx == sec_shndx && isym->st_value > addr)
df58fc94
RS
12092 isym->st_value -= count;
12093
12094 /* Now adjust the global symbols defined in this section. */
12095 symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12096 - symtab_hdr->sh_info);
12097 sym_hashes = start_hashes = elf_sym_hashes (abfd);
12098 end_hashes = sym_hashes + symcount;
12099
12100 for (; sym_hashes < end_hashes; sym_hashes++)
12101 {
12102 struct elf_link_hash_entry *sym_hash = *sym_hashes;
12103
12104 if ((sym_hash->root.type == bfd_link_hash_defined
12105 || sym_hash->root.type == bfd_link_hash_defweak)
12106 && sym_hash->root.u.def.section == sec)
12107 {
2309ddf2 12108 bfd_vma value = sym_hash->root.u.def.value;
df58fc94 12109
df58fc94
RS
12110 if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12111 value &= MINUS_TWO;
12112 if (value > addr)
12113 sym_hash->root.u.def.value -= count;
12114 }
12115 }
12116
12117 return TRUE;
12118}
12119
12120
12121/* Opcodes needed for microMIPS relaxation as found in
12122 opcodes/micromips-opc.c. */
12123
12124struct opcode_descriptor {
12125 unsigned long match;
12126 unsigned long mask;
12127};
12128
12129/* The $ra register aka $31. */
12130
12131#define RA 31
12132
12133/* 32-bit instruction format register fields. */
12134
12135#define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
12136#define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
12137
12138/* Check if a 5-bit register index can be abbreviated to 3 bits. */
12139
12140#define OP16_VALID_REG(r) \
12141 ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
12142
12143
12144/* 32-bit and 16-bit branches. */
12145
12146static const struct opcode_descriptor b_insns_32[] = {
12147 { /* "b", "p", */ 0x40400000, 0xffff0000 }, /* bgez 0 */
12148 { /* "b", "p", */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
12149 { 0, 0 } /* End marker for find_match(). */
12150};
12151
12152static const struct opcode_descriptor bc_insn_32 =
12153 { /* "bc(1|2)(ft)", "N,p", */ 0x42800000, 0xfec30000 };
12154
12155static const struct opcode_descriptor bz_insn_32 =
12156 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 };
12157
12158static const struct opcode_descriptor bzal_insn_32 =
12159 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 };
12160
12161static const struct opcode_descriptor beq_insn_32 =
12162 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 };
12163
12164static const struct opcode_descriptor b_insn_16 =
12165 { /* "b", "mD", */ 0xcc00, 0xfc00 };
12166
12167static const struct opcode_descriptor bz_insn_16 =
c088dedf 12168 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 };
df58fc94
RS
12169
12170
12171/* 32-bit and 16-bit branch EQ and NE zero. */
12172
12173/* NOTE: All opcode tables have BEQ/BNE in the same order: first the
12174 eq and second the ne. This convention is used when replacing a
12175 32-bit BEQ/BNE with the 16-bit version. */
12176
12177#define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
12178
12179static const struct opcode_descriptor bz_rs_insns_32[] = {
12180 { /* "beqz", "s,p", */ 0x94000000, 0xffe00000 },
12181 { /* "bnez", "s,p", */ 0xb4000000, 0xffe00000 },
12182 { 0, 0 } /* End marker for find_match(). */
12183};
12184
12185static const struct opcode_descriptor bz_rt_insns_32[] = {
12186 { /* "beqz", "t,p", */ 0x94000000, 0xfc01f000 },
12187 { /* "bnez", "t,p", */ 0xb4000000, 0xfc01f000 },
12188 { 0, 0 } /* End marker for find_match(). */
12189};
12190
12191static const struct opcode_descriptor bzc_insns_32[] = {
12192 { /* "beqzc", "s,p", */ 0x40e00000, 0xffe00000 },
12193 { /* "bnezc", "s,p", */ 0x40a00000, 0xffe00000 },
12194 { 0, 0 } /* End marker for find_match(). */
12195};
12196
12197static const struct opcode_descriptor bz_insns_16[] = {
12198 { /* "beqz", "md,mE", */ 0x8c00, 0xfc00 },
12199 { /* "bnez", "md,mE", */ 0xac00, 0xfc00 },
12200 { 0, 0 } /* End marker for find_match(). */
12201};
12202
12203/* Switch between a 5-bit register index and its 3-bit shorthand. */
12204
12205#define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
12206#define BZ16_REG_FIELD(r) \
12207 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
12208
12209
12210/* 32-bit instructions with a delay slot. */
12211
12212static const struct opcode_descriptor jal_insn_32_bd16 =
12213 { /* "jals", "a", */ 0x74000000, 0xfc000000 };
12214
12215static const struct opcode_descriptor jal_insn_32_bd32 =
12216 { /* "jal", "a", */ 0xf4000000, 0xfc000000 };
12217
12218static const struct opcode_descriptor jal_x_insn_32_bd32 =
12219 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 };
12220
12221static const struct opcode_descriptor j_insn_32 =
12222 { /* "j", "a", */ 0xd4000000, 0xfc000000 };
12223
12224static const struct opcode_descriptor jalr_insn_32 =
12225 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff };
12226
12227/* This table can be compacted, because no opcode replacement is made. */
12228
12229static const struct opcode_descriptor ds_insns_32_bd16[] = {
12230 { /* "jals", "a", */ 0x74000000, 0xfc000000 },
12231
12232 { /* "jalrs[.hb]", "t,s", */ 0x00004f3c, 0xfc00efff },
12233 { /* "b(ge|lt)zals", "s,p", */ 0x42200000, 0xffa00000 },
12234
12235 { /* "b(g|l)(e|t)z", "s,p", */ 0x40000000, 0xff200000 },
12236 { /* "b(eq|ne)", "s,t,p", */ 0x94000000, 0xdc000000 },
12237 { /* "j", "a", */ 0xd4000000, 0xfc000000 },
12238 { 0, 0 } /* End marker for find_match(). */
12239};
12240
12241/* This table can be compacted, because no opcode replacement is made. */
12242
12243static const struct opcode_descriptor ds_insns_32_bd32[] = {
12244 { /* "jal[x]", "a", */ 0xf0000000, 0xf8000000 },
12245
12246 { /* "jalr[.hb]", "t,s", */ 0x00000f3c, 0xfc00efff },
12247 { /* "b(ge|lt)zal", "s,p", */ 0x40200000, 0xffa00000 },
12248 { 0, 0 } /* End marker for find_match(). */
12249};
12250
12251
12252/* 16-bit instructions with a delay slot. */
12253
12254static const struct opcode_descriptor jalr_insn_16_bd16 =
12255 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 };
12256
12257static const struct opcode_descriptor jalr_insn_16_bd32 =
12258 { /* "jalr", "my,mj", */ 0x45c0, 0xffe0 };
12259
12260static const struct opcode_descriptor jr_insn_16 =
12261 { /* "jr", "mj", */ 0x4580, 0xffe0 };
12262
12263#define JR16_REG(opcode) ((opcode) & 0x1f)
12264
12265/* This table can be compacted, because no opcode replacement is made. */
12266
12267static const struct opcode_descriptor ds_insns_16_bd16[] = {
12268 { /* "jalrs", "my,mj", */ 0x45e0, 0xffe0 },
12269
12270 { /* "b", "mD", */ 0xcc00, 0xfc00 },
12271 { /* "b(eq|ne)z", "md,mE", */ 0x8c00, 0xdc00 },
12272 { /* "jr", "mj", */ 0x4580, 0xffe0 },
12273 { 0, 0 } /* End marker for find_match(). */
12274};
12275
12276
12277/* LUI instruction. */
12278
12279static const struct opcode_descriptor lui_insn =
12280 { /* "lui", "s,u", */ 0x41a00000, 0xffe00000 };
12281
12282
12283/* ADDIU instruction. */
12284
12285static const struct opcode_descriptor addiu_insn =
12286 { /* "addiu", "t,r,j", */ 0x30000000, 0xfc000000 };
12287
12288static const struct opcode_descriptor addiupc_insn =
12289 { /* "addiu", "mb,$pc,mQ", */ 0x78000000, 0xfc000000 };
12290
12291#define ADDIUPC_REG_FIELD(r) \
12292 (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
12293
12294
12295/* Relaxable instructions in a JAL delay slot: MOVE. */
12296
12297/* The 16-bit move has rd in 9:5 and rs in 4:0. The 32-bit moves
12298 (ADDU, OR) have rd in 15:11 and rs in 10:16. */
12299#define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
12300#define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
12301
12302#define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
12303#define MOVE16_RS_FIELD(r) (((r) & 0x1f) )
12304
12305static const struct opcode_descriptor move_insns_32[] = {
12306 { /* "move", "d,s", */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
12307 { /* "move", "d,s", */ 0x00000290, 0xffe007ff }, /* or d,s,$0 */
12308 { 0, 0 } /* End marker for find_match(). */
12309};
12310
12311static const struct opcode_descriptor move_insn_16 =
12312 { /* "move", "mp,mj", */ 0x0c00, 0xfc00 };
12313
12314
12315/* NOP instructions. */
12316
12317static const struct opcode_descriptor nop_insn_32 =
12318 { /* "nop", "", */ 0x00000000, 0xffffffff };
12319
12320static const struct opcode_descriptor nop_insn_16 =
12321 { /* "nop", "", */ 0x0c00, 0xffff };
12322
12323
12324/* Instruction match support. */
12325
12326#define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
12327
12328static int
12329find_match (unsigned long opcode, const struct opcode_descriptor insn[])
12330{
12331 unsigned long indx;
12332
12333 for (indx = 0; insn[indx].mask != 0; indx++)
12334 if (MATCH (opcode, insn[indx]))
12335 return indx;
12336
12337 return -1;
12338}
12339
12340
12341/* Branch and delay slot decoding support. */
12342
12343/* If PTR points to what *might* be a 16-bit branch or jump, then
12344 return the minimum length of its delay slot, otherwise return 0.
12345 Non-zero results are not definitive as we might be checking against
12346 the second half of another instruction. */
12347
12348static int
12349check_br16_dslot (bfd *abfd, bfd_byte *ptr)
12350{
12351 unsigned long opcode;
12352 int bdsize;
12353
12354 opcode = bfd_get_16 (abfd, ptr);
12355 if (MATCH (opcode, jalr_insn_16_bd32) != 0)
12356 /* 16-bit branch/jump with a 32-bit delay slot. */
12357 bdsize = 4;
12358 else if (MATCH (opcode, jalr_insn_16_bd16) != 0
12359 || find_match (opcode, ds_insns_16_bd16) >= 0)
12360 /* 16-bit branch/jump with a 16-bit delay slot. */
12361 bdsize = 2;
12362 else
12363 /* No delay slot. */
12364 bdsize = 0;
12365
12366 return bdsize;
12367}
12368
12369/* If PTR points to what *might* be a 32-bit branch or jump, then
12370 return the minimum length of its delay slot, otherwise return 0.
12371 Non-zero results are not definitive as we might be checking against
12372 the second half of another instruction. */
12373
12374static int
12375check_br32_dslot (bfd *abfd, bfd_byte *ptr)
12376{
12377 unsigned long opcode;
12378 int bdsize;
12379
d21911ea 12380 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
12381 if (find_match (opcode, ds_insns_32_bd32) >= 0)
12382 /* 32-bit branch/jump with a 32-bit delay slot. */
12383 bdsize = 4;
12384 else if (find_match (opcode, ds_insns_32_bd16) >= 0)
12385 /* 32-bit branch/jump with a 16-bit delay slot. */
12386 bdsize = 2;
12387 else
12388 /* No delay slot. */
12389 bdsize = 0;
12390
12391 return bdsize;
12392}
12393
12394/* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
12395 that doesn't fiddle with REG, then return TRUE, otherwise FALSE. */
12396
12397static bfd_boolean
12398check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12399{
12400 unsigned long opcode;
12401
12402 opcode = bfd_get_16 (abfd, ptr);
12403 if (MATCH (opcode, b_insn_16)
12404 /* B16 */
12405 || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
12406 /* JR16 */
12407 || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
12408 /* BEQZ16, BNEZ16 */
12409 || (MATCH (opcode, jalr_insn_16_bd32)
12410 /* JALR16 */
12411 && reg != JR16_REG (opcode) && reg != RA))
12412 return TRUE;
12413
12414 return FALSE;
12415}
12416
12417/* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
12418 then return TRUE, otherwise FALSE. */
12419
f41e5fcc 12420static bfd_boolean
df58fc94
RS
12421check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
12422{
12423 unsigned long opcode;
12424
d21911ea 12425 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
12426 if (MATCH (opcode, j_insn_32)
12427 /* J */
12428 || MATCH (opcode, bc_insn_32)
12429 /* BC1F, BC1T, BC2F, BC2T */
12430 || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
12431 /* JAL, JALX */
12432 || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
12433 /* BGEZ, BGTZ, BLEZ, BLTZ */
12434 || (MATCH (opcode, bzal_insn_32)
12435 /* BGEZAL, BLTZAL */
12436 && reg != OP32_SREG (opcode) && reg != RA)
12437 || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
12438 /* JALR, JALR.HB, BEQ, BNE */
12439 && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
12440 return TRUE;
12441
12442 return FALSE;
12443}
12444
80cab405
MR
12445/* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
12446 IRELEND) at OFFSET indicate that there must be a compact branch there,
12447 then return TRUE, otherwise FALSE. */
df58fc94
RS
12448
12449static bfd_boolean
80cab405
MR
12450check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
12451 const Elf_Internal_Rela *internal_relocs,
12452 const Elf_Internal_Rela *irelend)
df58fc94 12453{
80cab405
MR
12454 const Elf_Internal_Rela *irel;
12455 unsigned long opcode;
12456
d21911ea 12457 opcode = bfd_get_micromips_32 (abfd, ptr);
80cab405
MR
12458 if (find_match (opcode, bzc_insns_32) < 0)
12459 return FALSE;
df58fc94
RS
12460
12461 for (irel = internal_relocs; irel < irelend; irel++)
80cab405
MR
12462 if (irel->r_offset == offset
12463 && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
12464 return TRUE;
12465
df58fc94
RS
12466 return FALSE;
12467}
80cab405
MR
12468
12469/* Bitsize checking. */
12470#define IS_BITSIZE(val, N) \
12471 (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1))) \
12472 - (1ULL << ((N) - 1))) == (val))
12473
df58fc94
RS
12474\f
12475bfd_boolean
12476_bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
12477 struct bfd_link_info *link_info,
12478 bfd_boolean *again)
12479{
12480 Elf_Internal_Shdr *symtab_hdr;
12481 Elf_Internal_Rela *internal_relocs;
12482 Elf_Internal_Rela *irel, *irelend;
12483 bfd_byte *contents = NULL;
12484 Elf_Internal_Sym *isymbuf = NULL;
12485
12486 /* Assume nothing changes. */
12487 *again = FALSE;
12488
12489 /* We don't have to do anything for a relocatable link, if
12490 this section does not have relocs, or if this is not a
12491 code section. */
12492
12493 if (link_info->relocatable
12494 || (sec->flags & SEC_RELOC) == 0
12495 || sec->reloc_count == 0
12496 || (sec->flags & SEC_CODE) == 0)
12497 return TRUE;
12498
12499 symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12500
12501 /* Get a copy of the native relocations. */
12502 internal_relocs = (_bfd_elf_link_read_relocs
2c3fc389 12503 (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
df58fc94
RS
12504 link_info->keep_memory));
12505 if (internal_relocs == NULL)
12506 goto error_return;
12507
12508 /* Walk through them looking for relaxing opportunities. */
12509 irelend = internal_relocs + sec->reloc_count;
12510 for (irel = internal_relocs; irel < irelend; irel++)
12511 {
12512 unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
12513 unsigned int r_type = ELF32_R_TYPE (irel->r_info);
12514 bfd_boolean target_is_micromips_code_p;
12515 unsigned long opcode;
12516 bfd_vma symval;
12517 bfd_vma pcrval;
2309ddf2 12518 bfd_byte *ptr;
df58fc94
RS
12519 int fndopc;
12520
12521 /* The number of bytes to delete for relaxation and from where
12522 to delete these bytes starting at irel->r_offset. */
12523 int delcnt = 0;
12524 int deloff = 0;
12525
12526 /* If this isn't something that can be relaxed, then ignore
12527 this reloc. */
12528 if (r_type != R_MICROMIPS_HI16
12529 && r_type != R_MICROMIPS_PC16_S1
2309ddf2 12530 && r_type != R_MICROMIPS_26_S1)
df58fc94
RS
12531 continue;
12532
12533 /* Get the section contents if we haven't done so already. */
12534 if (contents == NULL)
12535 {
12536 /* Get cached copy if it exists. */
12537 if (elf_section_data (sec)->this_hdr.contents != NULL)
12538 contents = elf_section_data (sec)->this_hdr.contents;
12539 /* Go get them off disk. */
12540 else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
12541 goto error_return;
12542 }
2309ddf2 12543 ptr = contents + irel->r_offset;
df58fc94
RS
12544
12545 /* Read this BFD's local symbols if we haven't done so already. */
12546 if (isymbuf == NULL && symtab_hdr->sh_info != 0)
12547 {
12548 isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
12549 if (isymbuf == NULL)
12550 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
12551 symtab_hdr->sh_info, 0,
12552 NULL, NULL, NULL);
12553 if (isymbuf == NULL)
12554 goto error_return;
12555 }
12556
12557 /* Get the value of the symbol referred to by the reloc. */
12558 if (r_symndx < symtab_hdr->sh_info)
12559 {
12560 /* A local symbol. */
12561 Elf_Internal_Sym *isym;
12562 asection *sym_sec;
12563
12564 isym = isymbuf + r_symndx;
12565 if (isym->st_shndx == SHN_UNDEF)
12566 sym_sec = bfd_und_section_ptr;
12567 else if (isym->st_shndx == SHN_ABS)
12568 sym_sec = bfd_abs_section_ptr;
12569 else if (isym->st_shndx == SHN_COMMON)
12570 sym_sec = bfd_com_section_ptr;
12571 else
12572 sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
12573 symval = (isym->st_value
12574 + sym_sec->output_section->vma
12575 + sym_sec->output_offset);
12576 target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
12577 }
12578 else
12579 {
12580 unsigned long indx;
12581 struct elf_link_hash_entry *h;
12582
12583 /* An external symbol. */
12584 indx = r_symndx - symtab_hdr->sh_info;
12585 h = elf_sym_hashes (abfd)[indx];
12586 BFD_ASSERT (h != NULL);
12587
12588 if (h->root.type != bfd_link_hash_defined
12589 && h->root.type != bfd_link_hash_defweak)
12590 /* This appears to be a reference to an undefined
12591 symbol. Just ignore it -- it will be caught by the
12592 regular reloc processing. */
12593 continue;
12594
12595 symval = (h->root.u.def.value
12596 + h->root.u.def.section->output_section->vma
12597 + h->root.u.def.section->output_offset);
12598 target_is_micromips_code_p = (!h->needs_plt
12599 && ELF_ST_IS_MICROMIPS (h->other));
12600 }
12601
12602
12603 /* For simplicity of coding, we are going to modify the
12604 section contents, the section relocs, and the BFD symbol
12605 table. We must tell the rest of the code not to free up this
12606 information. It would be possible to instead create a table
12607 of changes which have to be made, as is done in coff-mips.c;
12608 that would be more work, but would require less memory when
12609 the linker is run. */
12610
12611 /* Only 32-bit instructions relaxed. */
12612 if (irel->r_offset + 4 > sec->size)
12613 continue;
12614
d21911ea 12615 opcode = bfd_get_micromips_32 (abfd, ptr);
df58fc94
RS
12616
12617 /* This is the pc-relative distance from the instruction the
12618 relocation is applied to, to the symbol referred. */
12619 pcrval = (symval
12620 - (sec->output_section->vma + sec->output_offset)
12621 - irel->r_offset);
12622
12623 /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
12624 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
12625 R_MICROMIPS_PC23_S2. The R_MICROMIPS_PC23_S2 condition is
12626
12627 (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
12628
12629 where pcrval has first to be adjusted to apply against the LO16
12630 location (we make the adjustment later on, when we have figured
12631 out the offset). */
12632 if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
12633 {
80cab405 12634 bfd_boolean bzc = FALSE;
df58fc94
RS
12635 unsigned long nextopc;
12636 unsigned long reg;
12637 bfd_vma offset;
12638
12639 /* Give up if the previous reloc was a HI16 against this symbol
12640 too. */
12641 if (irel > internal_relocs
12642 && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
12643 && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
12644 continue;
12645
12646 /* Or if the next reloc is not a LO16 against this symbol. */
12647 if (irel + 1 >= irelend
12648 || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
12649 || ELF32_R_SYM (irel[1].r_info) != r_symndx)
12650 continue;
12651
12652 /* Or if the second next reloc is a LO16 against this symbol too. */
12653 if (irel + 2 >= irelend
12654 && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
12655 && ELF32_R_SYM (irel[2].r_info) == r_symndx)
12656 continue;
12657
80cab405
MR
12658 /* See if the LUI instruction *might* be in a branch delay slot.
12659 We check whether what looks like a 16-bit branch or jump is
12660 actually an immediate argument to a compact branch, and let
12661 it through if so. */
df58fc94 12662 if (irel->r_offset >= 2
2309ddf2 12663 && check_br16_dslot (abfd, ptr - 2)
df58fc94 12664 && !(irel->r_offset >= 4
80cab405
MR
12665 && (bzc = check_relocated_bzc (abfd,
12666 ptr - 4, irel->r_offset - 4,
12667 internal_relocs, irelend))))
df58fc94
RS
12668 continue;
12669 if (irel->r_offset >= 4
80cab405 12670 && !bzc
2309ddf2 12671 && check_br32_dslot (abfd, ptr - 4))
df58fc94
RS
12672 continue;
12673
12674 reg = OP32_SREG (opcode);
12675
12676 /* We only relax adjacent instructions or ones separated with
12677 a branch or jump that has a delay slot. The branch or jump
12678 must not fiddle with the register used to hold the address.
12679 Subtract 4 for the LUI itself. */
12680 offset = irel[1].r_offset - irel[0].r_offset;
12681 switch (offset - 4)
12682 {
12683 case 0:
12684 break;
12685 case 2:
2309ddf2 12686 if (check_br16 (abfd, ptr + 4, reg))
df58fc94
RS
12687 break;
12688 continue;
12689 case 4:
2309ddf2 12690 if (check_br32 (abfd, ptr + 4, reg))
df58fc94
RS
12691 break;
12692 continue;
12693 default:
12694 continue;
12695 }
12696
d21911ea 12697 nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
df58fc94
RS
12698
12699 /* Give up unless the same register is used with both
12700 relocations. */
12701 if (OP32_SREG (nextopc) != reg)
12702 continue;
12703
12704 /* Now adjust pcrval, subtracting the offset to the LO16 reloc
12705 and rounding up to take masking of the two LSBs into account. */
12706 pcrval = ((pcrval - offset + 3) | 3) ^ 3;
12707
12708 /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16. */
12709 if (IS_BITSIZE (symval, 16))
12710 {
12711 /* Fix the relocation's type. */
12712 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
12713
12714 /* Instructions using R_MICROMIPS_LO16 have the base or
12715 source register in bits 20:16. This register becomes $0
12716 (zero) as the result of the R_MICROMIPS_HI16 being 0. */
12717 nextopc &= ~0x001f0000;
12718 bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
12719 contents + irel[1].r_offset);
12720 }
12721
12722 /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
12723 We add 4 to take LUI deletion into account while checking
12724 the PC-relative distance. */
12725 else if (symval % 4 == 0
12726 && IS_BITSIZE (pcrval + 4, 25)
12727 && MATCH (nextopc, addiu_insn)
12728 && OP32_TREG (nextopc) == OP32_SREG (nextopc)
12729 && OP16_VALID_REG (OP32_TREG (nextopc)))
12730 {
12731 /* Fix the relocation's type. */
12732 irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
12733
12734 /* Replace ADDIU with the ADDIUPC version. */
12735 nextopc = (addiupc_insn.match
12736 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
12737
d21911ea
MR
12738 bfd_put_micromips_32 (abfd, nextopc,
12739 contents + irel[1].r_offset);
df58fc94
RS
12740 }
12741
12742 /* Can't do anything, give up, sigh... */
12743 else
12744 continue;
12745
12746 /* Fix the relocation's type. */
12747 irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
12748
12749 /* Delete the LUI instruction: 4 bytes at irel->r_offset. */
12750 delcnt = 4;
12751 deloff = 0;
12752 }
12753
12754 /* Compact branch relaxation -- due to the multitude of macros
12755 employed by the compiler/assembler, compact branches are not
12756 always generated. Obviously, this can/will be fixed elsewhere,
12757 but there is no drawback in double checking it here. */
12758 else if (r_type == R_MICROMIPS_PC16_S1
12759 && irel->r_offset + 5 < sec->size
12760 && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12761 || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
2309ddf2 12762 && MATCH (bfd_get_16 (abfd, ptr + 4), nop_insn_16))
df58fc94
RS
12763 {
12764 unsigned long reg;
12765
12766 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12767
12768 /* Replace BEQZ/BNEZ with the compact version. */
12769 opcode = (bzc_insns_32[fndopc].match
12770 | BZC32_REG_FIELD (reg)
12771 | (opcode & 0xffff)); /* Addend value. */
12772
d21911ea 12773 bfd_put_micromips_32 (abfd, opcode, ptr);
df58fc94
RS
12774
12775 /* Delete the 16-bit delay slot NOP: two bytes from
12776 irel->offset + 4. */
12777 delcnt = 2;
12778 deloff = 4;
12779 }
12780
12781 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1. We need
12782 to check the distance from the next instruction, so subtract 2. */
12783 else if (r_type == R_MICROMIPS_PC16_S1
12784 && IS_BITSIZE (pcrval - 2, 11)
12785 && find_match (opcode, b_insns_32) >= 0)
12786 {
12787 /* Fix the relocation's type. */
12788 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
12789
a8685210 12790 /* Replace the 32-bit opcode with a 16-bit opcode. */
df58fc94
RS
12791 bfd_put_16 (abfd,
12792 (b_insn_16.match
12793 | (opcode & 0x3ff)), /* Addend value. */
2309ddf2 12794 ptr);
df58fc94
RS
12795
12796 /* Delete 2 bytes from irel->r_offset + 2. */
12797 delcnt = 2;
12798 deloff = 2;
12799 }
12800
12801 /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1. We need
12802 to check the distance from the next instruction, so subtract 2. */
12803 else if (r_type == R_MICROMIPS_PC16_S1
12804 && IS_BITSIZE (pcrval - 2, 8)
12805 && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
12806 && OP16_VALID_REG (OP32_SREG (opcode)))
12807 || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
12808 && OP16_VALID_REG (OP32_TREG (opcode)))))
12809 {
12810 unsigned long reg;
12811
12812 reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
12813
12814 /* Fix the relocation's type. */
12815 irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
12816
a8685210 12817 /* Replace the 32-bit opcode with a 16-bit opcode. */
df58fc94
RS
12818 bfd_put_16 (abfd,
12819 (bz_insns_16[fndopc].match
12820 | BZ16_REG_FIELD (reg)
12821 | (opcode & 0x7f)), /* Addend value. */
2309ddf2 12822 ptr);
df58fc94
RS
12823
12824 /* Delete 2 bytes from irel->r_offset + 2. */
12825 delcnt = 2;
12826 deloff = 2;
12827 }
12828
12829 /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets. */
12830 else if (r_type == R_MICROMIPS_26_S1
12831 && target_is_micromips_code_p
12832 && irel->r_offset + 7 < sec->size
12833 && MATCH (opcode, jal_insn_32_bd32))
12834 {
12835 unsigned long n32opc;
12836 bfd_boolean relaxed = FALSE;
12837
d21911ea 12838 n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
df58fc94
RS
12839
12840 if (MATCH (n32opc, nop_insn_32))
12841 {
12842 /* Replace delay slot 32-bit NOP with a 16-bit NOP. */
2309ddf2 12843 bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
df58fc94
RS
12844
12845 relaxed = TRUE;
12846 }
12847 else if (find_match (n32opc, move_insns_32) >= 0)
12848 {
12849 /* Replace delay slot 32-bit MOVE with 16-bit MOVE. */
12850 bfd_put_16 (abfd,
12851 (move_insn_16.match
12852 | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
12853 | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
2309ddf2 12854 ptr + 4);
df58fc94
RS
12855
12856 relaxed = TRUE;
12857 }
12858 /* Other 32-bit instructions relaxable to 16-bit
12859 instructions will be handled here later. */
12860
12861 if (relaxed)
12862 {
12863 /* JAL with 32-bit delay slot that is changed to a JALS
12864 with 16-bit delay slot. */
d21911ea 12865 bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
df58fc94
RS
12866
12867 /* Delete 2 bytes from irel->r_offset + 6. */
12868 delcnt = 2;
12869 deloff = 6;
12870 }
12871 }
12872
12873 if (delcnt != 0)
12874 {
12875 /* Note that we've changed the relocs, section contents, etc. */
12876 elf_section_data (sec)->relocs = internal_relocs;
12877 elf_section_data (sec)->this_hdr.contents = contents;
12878 symtab_hdr->contents = (unsigned char *) isymbuf;
12879
12880 /* Delete bytes depending on the delcnt and deloff. */
12881 if (!mips_elf_relax_delete_bytes (abfd, sec,
12882 irel->r_offset + deloff, delcnt))
12883 goto error_return;
12884
12885 /* That will change things, so we should relax again.
12886 Note that this is not required, and it may be slow. */
12887 *again = TRUE;
12888 }
12889 }
12890
12891 if (isymbuf != NULL
12892 && symtab_hdr->contents != (unsigned char *) isymbuf)
12893 {
12894 if (! link_info->keep_memory)
12895 free (isymbuf);
12896 else
12897 {
12898 /* Cache the symbols for elf_link_input_bfd. */
12899 symtab_hdr->contents = (unsigned char *) isymbuf;
12900 }
12901 }
12902
12903 if (contents != NULL
12904 && elf_section_data (sec)->this_hdr.contents != contents)
12905 {
12906 if (! link_info->keep_memory)
12907 free (contents);
12908 else
12909 {
12910 /* Cache the section contents for elf_link_input_bfd. */
12911 elf_section_data (sec)->this_hdr.contents = contents;
12912 }
12913 }
12914
12915 if (internal_relocs != NULL
12916 && elf_section_data (sec)->relocs != internal_relocs)
12917 free (internal_relocs);
12918
12919 return TRUE;
12920
12921 error_return:
12922 if (isymbuf != NULL
12923 && symtab_hdr->contents != (unsigned char *) isymbuf)
12924 free (isymbuf);
12925 if (contents != NULL
12926 && elf_section_data (sec)->this_hdr.contents != contents)
12927 free (contents);
12928 if (internal_relocs != NULL
12929 && elf_section_data (sec)->relocs != internal_relocs)
12930 free (internal_relocs);
12931
12932 return FALSE;
12933}
12934\f
b49e97c9
TS
12935/* Create a MIPS ELF linker hash table. */
12936
12937struct bfd_link_hash_table *
9719ad41 12938_bfd_mips_elf_link_hash_table_create (bfd *abfd)
b49e97c9
TS
12939{
12940 struct mips_elf_link_hash_table *ret;
12941 bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
12942
7bf52ea2 12943 ret = bfd_zmalloc (amt);
9719ad41 12944 if (ret == NULL)
b49e97c9
TS
12945 return NULL;
12946
66eb6687
AM
12947 if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
12948 mips_elf_link_hash_newfunc,
4dfe6ac6
NC
12949 sizeof (struct mips_elf_link_hash_entry),
12950 MIPS_ELF_DATA))
b49e97c9 12951 {
e2d34d7d 12952 free (ret);
b49e97c9
TS
12953 return NULL;
12954 }
12955
b49e97c9
TS
12956 return &ret->root.root;
12957}
0a44bf69
RS
12958
12959/* Likewise, but indicate that the target is VxWorks. */
12960
12961struct bfd_link_hash_table *
12962_bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
12963{
12964 struct bfd_link_hash_table *ret;
12965
12966 ret = _bfd_mips_elf_link_hash_table_create (abfd);
12967 if (ret)
12968 {
12969 struct mips_elf_link_hash_table *htab;
12970
12971 htab = (struct mips_elf_link_hash_table *) ret;
861fb55a
DJ
12972 htab->use_plts_and_copy_relocs = TRUE;
12973 htab->is_vxworks = TRUE;
0a44bf69
RS
12974 }
12975 return ret;
12976}
861fb55a
DJ
12977
12978/* A function that the linker calls if we are allowed to use PLTs
12979 and copy relocs. */
12980
12981void
12982_bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
12983{
12984 mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
12985}
b49e97c9
TS
12986\f
12987/* We need to use a special link routine to handle the .reginfo and
12988 the .mdebug sections. We need to merge all instances of these
12989 sections together, not write them all out sequentially. */
12990
b34976b6 12991bfd_boolean
9719ad41 12992_bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
b49e97c9 12993{
b49e97c9
TS
12994 asection *o;
12995 struct bfd_link_order *p;
12996 asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
12997 asection *rtproc_sec;
12998 Elf32_RegInfo reginfo;
12999 struct ecoff_debug_info debug;
861fb55a 13000 struct mips_htab_traverse_info hti;
7a2a6943
NC
13001 const struct elf_backend_data *bed = get_elf_backend_data (abfd);
13002 const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
b49e97c9 13003 HDRR *symhdr = &debug.symbolic_header;
9719ad41 13004 void *mdebug_handle = NULL;
b49e97c9
TS
13005 asection *s;
13006 EXTR esym;
13007 unsigned int i;
13008 bfd_size_type amt;
0a44bf69 13009 struct mips_elf_link_hash_table *htab;
b49e97c9
TS
13010
13011 static const char * const secname[] =
13012 {
13013 ".text", ".init", ".fini", ".data",
13014 ".rodata", ".sdata", ".sbss", ".bss"
13015 };
13016 static const int sc[] =
13017 {
13018 scText, scInit, scFini, scData,
13019 scRData, scSData, scSBss, scBss
13020 };
13021
d4596a51
RS
13022 /* Sort the dynamic symbols so that those with GOT entries come after
13023 those without. */
0a44bf69 13024 htab = mips_elf_hash_table (info);
4dfe6ac6
NC
13025 BFD_ASSERT (htab != NULL);
13026
d4596a51
RS
13027 if (!mips_elf_sort_hash_table (abfd, info))
13028 return FALSE;
b49e97c9 13029
861fb55a
DJ
13030 /* Create any scheduled LA25 stubs. */
13031 hti.info = info;
13032 hti.output_bfd = abfd;
13033 hti.error = FALSE;
13034 htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
13035 if (hti.error)
13036 return FALSE;
13037
b49e97c9
TS
13038 /* Get a value for the GP register. */
13039 if (elf_gp (abfd) == 0)
13040 {
13041 struct bfd_link_hash_entry *h;
13042
b34976b6 13043 h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
9719ad41 13044 if (h != NULL && h->type == bfd_link_hash_defined)
b49e97c9
TS
13045 elf_gp (abfd) = (h->u.def.value
13046 + h->u.def.section->output_section->vma
13047 + h->u.def.section->output_offset);
0a44bf69
RS
13048 else if (htab->is_vxworks
13049 && (h = bfd_link_hash_lookup (info->hash,
13050 "_GLOBAL_OFFSET_TABLE_",
13051 FALSE, FALSE, TRUE))
13052 && h->type == bfd_link_hash_defined)
13053 elf_gp (abfd) = (h->u.def.section->output_section->vma
13054 + h->u.def.section->output_offset
13055 + h->u.def.value);
1049f94e 13056 else if (info->relocatable)
b49e97c9
TS
13057 {
13058 bfd_vma lo = MINUS_ONE;
13059
13060 /* Find the GP-relative section with the lowest offset. */
9719ad41 13061 for (o = abfd->sections; o != NULL; o = o->next)
b49e97c9
TS
13062 if (o->vma < lo
13063 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
13064 lo = o->vma;
13065
13066 /* And calculate GP relative to that. */
0a44bf69 13067 elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
b49e97c9
TS
13068 }
13069 else
13070 {
13071 /* If the relocate_section function needs to do a reloc
13072 involving the GP value, it should make a reloc_dangerous
13073 callback to warn that GP is not defined. */
13074 }
13075 }
13076
13077 /* Go through the sections and collect the .reginfo and .mdebug
13078 information. */
13079 reginfo_sec = NULL;
13080 mdebug_sec = NULL;
13081 gptab_data_sec = NULL;
13082 gptab_bss_sec = NULL;
9719ad41 13083 for (o = abfd->sections; o != NULL; o = o->next)
b49e97c9
TS
13084 {
13085 if (strcmp (o->name, ".reginfo") == 0)
13086 {
13087 memset (&reginfo, 0, sizeof reginfo);
13088
13089 /* We have found the .reginfo section in the output file.
13090 Look through all the link_orders comprising it and merge
13091 the information together. */
8423293d 13092 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
13093 {
13094 asection *input_section;
13095 bfd *input_bfd;
13096 Elf32_External_RegInfo ext;
13097 Elf32_RegInfo sub;
13098
13099 if (p->type != bfd_indirect_link_order)
13100 {
13101 if (p->type == bfd_data_link_order)
13102 continue;
13103 abort ();
13104 }
13105
13106 input_section = p->u.indirect.section;
13107 input_bfd = input_section->owner;
13108
b49e97c9 13109 if (! bfd_get_section_contents (input_bfd, input_section,
9719ad41 13110 &ext, 0, sizeof ext))
b34976b6 13111 return FALSE;
b49e97c9
TS
13112
13113 bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
13114
13115 reginfo.ri_gprmask |= sub.ri_gprmask;
13116 reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
13117 reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
13118 reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
13119 reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
13120
13121 /* ri_gp_value is set by the function
13122 mips_elf32_section_processing when the section is
13123 finally written out. */
13124
13125 /* Hack: reset the SEC_HAS_CONTENTS flag so that
13126 elf_link_input_bfd ignores this section. */
13127 input_section->flags &= ~SEC_HAS_CONTENTS;
13128 }
13129
13130 /* Size has been set in _bfd_mips_elf_always_size_sections. */
eea6121a 13131 BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
b49e97c9
TS
13132
13133 /* Skip this section later on (I don't think this currently
13134 matters, but someday it might). */
8423293d 13135 o->map_head.link_order = NULL;
b49e97c9
TS
13136
13137 reginfo_sec = o;
13138 }
13139
13140 if (strcmp (o->name, ".mdebug") == 0)
13141 {
13142 struct extsym_info einfo;
13143 bfd_vma last;
13144
13145 /* We have found the .mdebug section in the output file.
13146 Look through all the link_orders comprising it and merge
13147 the information together. */
13148 symhdr->magic = swap->sym_magic;
13149 /* FIXME: What should the version stamp be? */
13150 symhdr->vstamp = 0;
13151 symhdr->ilineMax = 0;
13152 symhdr->cbLine = 0;
13153 symhdr->idnMax = 0;
13154 symhdr->ipdMax = 0;
13155 symhdr->isymMax = 0;
13156 symhdr->ioptMax = 0;
13157 symhdr->iauxMax = 0;
13158 symhdr->issMax = 0;
13159 symhdr->issExtMax = 0;
13160 symhdr->ifdMax = 0;
13161 symhdr->crfd = 0;
13162 symhdr->iextMax = 0;
13163
13164 /* We accumulate the debugging information itself in the
13165 debug_info structure. */
13166 debug.line = NULL;
13167 debug.external_dnr = NULL;
13168 debug.external_pdr = NULL;
13169 debug.external_sym = NULL;
13170 debug.external_opt = NULL;
13171 debug.external_aux = NULL;
13172 debug.ss = NULL;
13173 debug.ssext = debug.ssext_end = NULL;
13174 debug.external_fdr = NULL;
13175 debug.external_rfd = NULL;
13176 debug.external_ext = debug.external_ext_end = NULL;
13177
13178 mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
9719ad41 13179 if (mdebug_handle == NULL)
b34976b6 13180 return FALSE;
b49e97c9
TS
13181
13182 esym.jmptbl = 0;
13183 esym.cobol_main = 0;
13184 esym.weakext = 0;
13185 esym.reserved = 0;
13186 esym.ifd = ifdNil;
13187 esym.asym.iss = issNil;
13188 esym.asym.st = stLocal;
13189 esym.asym.reserved = 0;
13190 esym.asym.index = indexNil;
13191 last = 0;
13192 for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
13193 {
13194 esym.asym.sc = sc[i];
13195 s = bfd_get_section_by_name (abfd, secname[i]);
13196 if (s != NULL)
13197 {
13198 esym.asym.value = s->vma;
eea6121a 13199 last = s->vma + s->size;
b49e97c9
TS
13200 }
13201 else
13202 esym.asym.value = last;
13203 if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
13204 secname[i], &esym))
b34976b6 13205 return FALSE;
b49e97c9
TS
13206 }
13207
8423293d 13208 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
13209 {
13210 asection *input_section;
13211 bfd *input_bfd;
13212 const struct ecoff_debug_swap *input_swap;
13213 struct ecoff_debug_info input_debug;
13214 char *eraw_src;
13215 char *eraw_end;
13216
13217 if (p->type != bfd_indirect_link_order)
13218 {
13219 if (p->type == bfd_data_link_order)
13220 continue;
13221 abort ();
13222 }
13223
13224 input_section = p->u.indirect.section;
13225 input_bfd = input_section->owner;
13226
d5eaccd7 13227 if (!is_mips_elf (input_bfd))
b49e97c9
TS
13228 {
13229 /* I don't know what a non MIPS ELF bfd would be
13230 doing with a .mdebug section, but I don't really
13231 want to deal with it. */
13232 continue;
13233 }
13234
13235 input_swap = (get_elf_backend_data (input_bfd)
13236 ->elf_backend_ecoff_debug_swap);
13237
eea6121a 13238 BFD_ASSERT (p->size == input_section->size);
b49e97c9
TS
13239
13240 /* The ECOFF linking code expects that we have already
13241 read in the debugging information and set up an
13242 ecoff_debug_info structure, so we do that now. */
13243 if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
13244 &input_debug))
b34976b6 13245 return FALSE;
b49e97c9
TS
13246
13247 if (! (bfd_ecoff_debug_accumulate
13248 (mdebug_handle, abfd, &debug, swap, input_bfd,
13249 &input_debug, input_swap, info)))
b34976b6 13250 return FALSE;
b49e97c9
TS
13251
13252 /* Loop through the external symbols. For each one with
13253 interesting information, try to find the symbol in
13254 the linker global hash table and save the information
13255 for the output external symbols. */
13256 eraw_src = input_debug.external_ext;
13257 eraw_end = (eraw_src
13258 + (input_debug.symbolic_header.iextMax
13259 * input_swap->external_ext_size));
13260 for (;
13261 eraw_src < eraw_end;
13262 eraw_src += input_swap->external_ext_size)
13263 {
13264 EXTR ext;
13265 const char *name;
13266 struct mips_elf_link_hash_entry *h;
13267
9719ad41 13268 (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
b49e97c9
TS
13269 if (ext.asym.sc == scNil
13270 || ext.asym.sc == scUndefined
13271 || ext.asym.sc == scSUndefined)
13272 continue;
13273
13274 name = input_debug.ssext + ext.asym.iss;
13275 h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
b34976b6 13276 name, FALSE, FALSE, TRUE);
b49e97c9
TS
13277 if (h == NULL || h->esym.ifd != -2)
13278 continue;
13279
13280 if (ext.ifd != -1)
13281 {
13282 BFD_ASSERT (ext.ifd
13283 < input_debug.symbolic_header.ifdMax);
13284 ext.ifd = input_debug.ifdmap[ext.ifd];
13285 }
13286
13287 h->esym = ext;
13288 }
13289
13290 /* Free up the information we just read. */
13291 free (input_debug.line);
13292 free (input_debug.external_dnr);
13293 free (input_debug.external_pdr);
13294 free (input_debug.external_sym);
13295 free (input_debug.external_opt);
13296 free (input_debug.external_aux);
13297 free (input_debug.ss);
13298 free (input_debug.ssext);
13299 free (input_debug.external_fdr);
13300 free (input_debug.external_rfd);
13301 free (input_debug.external_ext);
13302
13303 /* Hack: reset the SEC_HAS_CONTENTS flag so that
13304 elf_link_input_bfd ignores this section. */
13305 input_section->flags &= ~SEC_HAS_CONTENTS;
13306 }
13307
13308 if (SGI_COMPAT (abfd) && info->shared)
13309 {
13310 /* Create .rtproc section. */
87e0a731 13311 rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
b49e97c9
TS
13312 if (rtproc_sec == NULL)
13313 {
13314 flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
13315 | SEC_LINKER_CREATED | SEC_READONLY);
13316
87e0a731
AM
13317 rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
13318 ".rtproc",
13319 flags);
b49e97c9 13320 if (rtproc_sec == NULL
b49e97c9 13321 || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
b34976b6 13322 return FALSE;
b49e97c9
TS
13323 }
13324
13325 if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
13326 info, rtproc_sec,
13327 &debug))
b34976b6 13328 return FALSE;
b49e97c9
TS
13329 }
13330
13331 /* Build the external symbol information. */
13332 einfo.abfd = abfd;
13333 einfo.info = info;
13334 einfo.debug = &debug;
13335 einfo.swap = swap;
b34976b6 13336 einfo.failed = FALSE;
b49e97c9 13337 mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9719ad41 13338 mips_elf_output_extsym, &einfo);
b49e97c9 13339 if (einfo.failed)
b34976b6 13340 return FALSE;
b49e97c9
TS
13341
13342 /* Set the size of the .mdebug section. */
eea6121a 13343 o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
b49e97c9
TS
13344
13345 /* Skip this section later on (I don't think this currently
13346 matters, but someday it might). */
8423293d 13347 o->map_head.link_order = NULL;
b49e97c9
TS
13348
13349 mdebug_sec = o;
13350 }
13351
0112cd26 13352 if (CONST_STRNEQ (o->name, ".gptab."))
b49e97c9
TS
13353 {
13354 const char *subname;
13355 unsigned int c;
13356 Elf32_gptab *tab;
13357 Elf32_External_gptab *ext_tab;
13358 unsigned int j;
13359
13360 /* The .gptab.sdata and .gptab.sbss sections hold
13361 information describing how the small data area would
13362 change depending upon the -G switch. These sections
13363 not used in executables files. */
1049f94e 13364 if (! info->relocatable)
b49e97c9 13365 {
8423293d 13366 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
13367 {
13368 asection *input_section;
13369
13370 if (p->type != bfd_indirect_link_order)
13371 {
13372 if (p->type == bfd_data_link_order)
13373 continue;
13374 abort ();
13375 }
13376
13377 input_section = p->u.indirect.section;
13378
13379 /* Hack: reset the SEC_HAS_CONTENTS flag so that
13380 elf_link_input_bfd ignores this section. */
13381 input_section->flags &= ~SEC_HAS_CONTENTS;
13382 }
13383
13384 /* Skip this section later on (I don't think this
13385 currently matters, but someday it might). */
8423293d 13386 o->map_head.link_order = NULL;
b49e97c9
TS
13387
13388 /* Really remove the section. */
5daa8fe7 13389 bfd_section_list_remove (abfd, o);
b49e97c9
TS
13390 --abfd->section_count;
13391
13392 continue;
13393 }
13394
13395 /* There is one gptab for initialized data, and one for
13396 uninitialized data. */
13397 if (strcmp (o->name, ".gptab.sdata") == 0)
13398 gptab_data_sec = o;
13399 else if (strcmp (o->name, ".gptab.sbss") == 0)
13400 gptab_bss_sec = o;
13401 else
13402 {
13403 (*_bfd_error_handler)
13404 (_("%s: illegal section name `%s'"),
13405 bfd_get_filename (abfd), o->name);
13406 bfd_set_error (bfd_error_nonrepresentable_section);
b34976b6 13407 return FALSE;
b49e97c9
TS
13408 }
13409
13410 /* The linker script always combines .gptab.data and
13411 .gptab.sdata into .gptab.sdata, and likewise for
13412 .gptab.bss and .gptab.sbss. It is possible that there is
13413 no .sdata or .sbss section in the output file, in which
13414 case we must change the name of the output section. */
13415 subname = o->name + sizeof ".gptab" - 1;
13416 if (bfd_get_section_by_name (abfd, subname) == NULL)
13417 {
13418 if (o == gptab_data_sec)
13419 o->name = ".gptab.data";
13420 else
13421 o->name = ".gptab.bss";
13422 subname = o->name + sizeof ".gptab" - 1;
13423 BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
13424 }
13425
13426 /* Set up the first entry. */
13427 c = 1;
13428 amt = c * sizeof (Elf32_gptab);
9719ad41 13429 tab = bfd_malloc (amt);
b49e97c9 13430 if (tab == NULL)
b34976b6 13431 return FALSE;
b49e97c9
TS
13432 tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
13433 tab[0].gt_header.gt_unused = 0;
13434
13435 /* Combine the input sections. */
8423293d 13436 for (p = o->map_head.link_order; p != NULL; p = p->next)
b49e97c9
TS
13437 {
13438 asection *input_section;
13439 bfd *input_bfd;
13440 bfd_size_type size;
13441 unsigned long last;
13442 bfd_size_type gpentry;
13443
13444 if (p->type != bfd_indirect_link_order)
13445 {
13446 if (p->type == bfd_data_link_order)
13447 continue;
13448 abort ();
13449 }
13450
13451 input_section = p->u.indirect.section;
13452 input_bfd = input_section->owner;
13453
13454 /* Combine the gptab entries for this input section one
13455 by one. We know that the input gptab entries are
13456 sorted by ascending -G value. */
eea6121a 13457 size = input_section->size;
b49e97c9
TS
13458 last = 0;
13459 for (gpentry = sizeof (Elf32_External_gptab);
13460 gpentry < size;
13461 gpentry += sizeof (Elf32_External_gptab))
13462 {
13463 Elf32_External_gptab ext_gptab;
13464 Elf32_gptab int_gptab;
13465 unsigned long val;
13466 unsigned long add;
b34976b6 13467 bfd_boolean exact;
b49e97c9
TS
13468 unsigned int look;
13469
13470 if (! (bfd_get_section_contents
9719ad41
RS
13471 (input_bfd, input_section, &ext_gptab, gpentry,
13472 sizeof (Elf32_External_gptab))))
b49e97c9
TS
13473 {
13474 free (tab);
b34976b6 13475 return FALSE;
b49e97c9
TS
13476 }
13477
13478 bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
13479 &int_gptab);
13480 val = int_gptab.gt_entry.gt_g_value;
13481 add = int_gptab.gt_entry.gt_bytes - last;
13482
b34976b6 13483 exact = FALSE;
b49e97c9
TS
13484 for (look = 1; look < c; look++)
13485 {
13486 if (tab[look].gt_entry.gt_g_value >= val)
13487 tab[look].gt_entry.gt_bytes += add;
13488
13489 if (tab[look].gt_entry.gt_g_value == val)
b34976b6 13490 exact = TRUE;
b49e97c9
TS
13491 }
13492
13493 if (! exact)
13494 {
13495 Elf32_gptab *new_tab;
13496 unsigned int max;
13497
13498 /* We need a new table entry. */
13499 amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
9719ad41 13500 new_tab = bfd_realloc (tab, amt);
b49e97c9
TS
13501 if (new_tab == NULL)
13502 {
13503 free (tab);
b34976b6 13504 return FALSE;
b49e97c9
TS
13505 }
13506 tab = new_tab;
13507 tab[c].gt_entry.gt_g_value = val;
13508 tab[c].gt_entry.gt_bytes = add;
13509
13510 /* Merge in the size for the next smallest -G
13511 value, since that will be implied by this new
13512 value. */
13513 max = 0;
13514 for (look = 1; look < c; look++)
13515 {
13516 if (tab[look].gt_entry.gt_g_value < val
13517 && (max == 0
13518 || (tab[look].gt_entry.gt_g_value
13519 > tab[max].gt_entry.gt_g_value)))
13520 max = look;
13521 }
13522 if (max != 0)
13523 tab[c].gt_entry.gt_bytes +=
13524 tab[max].gt_entry.gt_bytes;
13525
13526 ++c;
13527 }
13528
13529 last = int_gptab.gt_entry.gt_bytes;
13530 }
13531
13532 /* Hack: reset the SEC_HAS_CONTENTS flag so that
13533 elf_link_input_bfd ignores this section. */
13534 input_section->flags &= ~SEC_HAS_CONTENTS;
13535 }
13536
13537 /* The table must be sorted by -G value. */
13538 if (c > 2)
13539 qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
13540
13541 /* Swap out the table. */
13542 amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
9719ad41 13543 ext_tab = bfd_alloc (abfd, amt);
b49e97c9
TS
13544 if (ext_tab == NULL)
13545 {
13546 free (tab);
b34976b6 13547 return FALSE;
b49e97c9
TS
13548 }
13549
13550 for (j = 0; j < c; j++)
13551 bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
13552 free (tab);
13553
eea6121a 13554 o->size = c * sizeof (Elf32_External_gptab);
b49e97c9
TS
13555 o->contents = (bfd_byte *) ext_tab;
13556
13557 /* Skip this section later on (I don't think this currently
13558 matters, but someday it might). */
8423293d 13559 o->map_head.link_order = NULL;
b49e97c9
TS
13560 }
13561 }
13562
13563 /* Invoke the regular ELF backend linker to do all the work. */
c152c796 13564 if (!bfd_elf_final_link (abfd, info))
b34976b6 13565 return FALSE;
b49e97c9
TS
13566
13567 /* Now write out the computed sections. */
13568
9719ad41 13569 if (reginfo_sec != NULL)
b49e97c9
TS
13570 {
13571 Elf32_External_RegInfo ext;
13572
13573 bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
9719ad41 13574 if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
b34976b6 13575 return FALSE;
b49e97c9
TS
13576 }
13577
9719ad41 13578 if (mdebug_sec != NULL)
b49e97c9
TS
13579 {
13580 BFD_ASSERT (abfd->output_has_begun);
13581 if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
13582 swap, info,
13583 mdebug_sec->filepos))
b34976b6 13584 return FALSE;
b49e97c9
TS
13585
13586 bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
13587 }
13588
9719ad41 13589 if (gptab_data_sec != NULL)
b49e97c9
TS
13590 {
13591 if (! bfd_set_section_contents (abfd, gptab_data_sec,
13592 gptab_data_sec->contents,
eea6121a 13593 0, gptab_data_sec->size))
b34976b6 13594 return FALSE;
b49e97c9
TS
13595 }
13596
9719ad41 13597 if (gptab_bss_sec != NULL)
b49e97c9
TS
13598 {
13599 if (! bfd_set_section_contents (abfd, gptab_bss_sec,
13600 gptab_bss_sec->contents,
eea6121a 13601 0, gptab_bss_sec->size))
b34976b6 13602 return FALSE;
b49e97c9
TS
13603 }
13604
13605 if (SGI_COMPAT (abfd))
13606 {
13607 rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
13608 if (rtproc_sec != NULL)
13609 {
13610 if (! bfd_set_section_contents (abfd, rtproc_sec,
13611 rtproc_sec->contents,
eea6121a 13612 0, rtproc_sec->size))
b34976b6 13613 return FALSE;
b49e97c9
TS
13614 }
13615 }
13616
b34976b6 13617 return TRUE;
b49e97c9
TS
13618}
13619\f
64543e1a
RS
13620/* Structure for saying that BFD machine EXTENSION extends BASE. */
13621
13622struct mips_mach_extension {
13623 unsigned long extension, base;
13624};
13625
13626
13627/* An array describing how BFD machines relate to one another. The entries
13628 are ordered topologically with MIPS I extensions listed last. */
13629
13630static const struct mips_mach_extension mips_mach_extensions[] = {
6f179bd0 13631 /* MIPS64r2 extensions. */
432233b3 13632 { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
dd6a37e7 13633 { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
6f179bd0
AN
13634 { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13635
64543e1a 13636 /* MIPS64 extensions. */
5f74bc13 13637 { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
64543e1a 13638 { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
52b6b6b9 13639 { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
fd503541 13640 { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64 },
64543e1a
RS
13641
13642 /* MIPS V extensions. */
13643 { bfd_mach_mipsisa64, bfd_mach_mips5 },
13644
13645 /* R10000 extensions. */
13646 { bfd_mach_mips12000, bfd_mach_mips10000 },
3aa3176b
TS
13647 { bfd_mach_mips14000, bfd_mach_mips10000 },
13648 { bfd_mach_mips16000, bfd_mach_mips10000 },
64543e1a
RS
13649
13650 /* R5000 extensions. Note: the vr5500 ISA is an extension of the core
13651 vr5400 ISA, but doesn't include the multimedia stuff. It seems
13652 better to allow vr5400 and vr5500 code to be merged anyway, since
13653 many libraries will just use the core ISA. Perhaps we could add
13654 some sort of ASE flag if this ever proves a problem. */
13655 { bfd_mach_mips5500, bfd_mach_mips5400 },
13656 { bfd_mach_mips5400, bfd_mach_mips5000 },
13657
13658 /* MIPS IV extensions. */
13659 { bfd_mach_mips5, bfd_mach_mips8000 },
13660 { bfd_mach_mips10000, bfd_mach_mips8000 },
13661 { bfd_mach_mips5000, bfd_mach_mips8000 },
5a7ea749 13662 { bfd_mach_mips7000, bfd_mach_mips8000 },
0d2e43ed 13663 { bfd_mach_mips9000, bfd_mach_mips8000 },
64543e1a
RS
13664
13665 /* VR4100 extensions. */
13666 { bfd_mach_mips4120, bfd_mach_mips4100 },
13667 { bfd_mach_mips4111, bfd_mach_mips4100 },
13668
13669 /* MIPS III extensions. */
350cc38d
MS
13670 { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13671 { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
64543e1a
RS
13672 { bfd_mach_mips8000, bfd_mach_mips4000 },
13673 { bfd_mach_mips4650, bfd_mach_mips4000 },
13674 { bfd_mach_mips4600, bfd_mach_mips4000 },
13675 { bfd_mach_mips4400, bfd_mach_mips4000 },
13676 { bfd_mach_mips4300, bfd_mach_mips4000 },
13677 { bfd_mach_mips4100, bfd_mach_mips4000 },
13678 { bfd_mach_mips4010, bfd_mach_mips4000 },
e407c74b 13679 { bfd_mach_mips5900, bfd_mach_mips4000 },
64543e1a
RS
13680
13681 /* MIPS32 extensions. */
13682 { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13683
13684 /* MIPS II extensions. */
13685 { bfd_mach_mips4000, bfd_mach_mips6000 },
13686 { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13687
13688 /* MIPS I extensions. */
13689 { bfd_mach_mips6000, bfd_mach_mips3000 },
13690 { bfd_mach_mips3900, bfd_mach_mips3000 }
13691};
13692
13693
13694/* Return true if bfd machine EXTENSION is an extension of machine BASE. */
13695
13696static bfd_boolean
9719ad41 13697mips_mach_extends_p (unsigned long base, unsigned long extension)
64543e1a
RS
13698{
13699 size_t i;
13700
c5211a54
RS
13701 if (extension == base)
13702 return TRUE;
13703
13704 if (base == bfd_mach_mipsisa32
13705 && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
13706 return TRUE;
13707
13708 if (base == bfd_mach_mipsisa32r2
13709 && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
13710 return TRUE;
13711
13712 for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
64543e1a 13713 if (extension == mips_mach_extensions[i].extension)
c5211a54
RS
13714 {
13715 extension = mips_mach_extensions[i].base;
13716 if (extension == base)
13717 return TRUE;
13718 }
64543e1a 13719
c5211a54 13720 return FALSE;
64543e1a
RS
13721}
13722
13723
13724/* Return true if the given ELF header flags describe a 32-bit binary. */
00707a0e 13725
b34976b6 13726static bfd_boolean
9719ad41 13727mips_32bit_flags_p (flagword flags)
00707a0e 13728{
64543e1a
RS
13729 return ((flags & EF_MIPS_32BITMODE) != 0
13730 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
13731 || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
13732 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
13733 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
13734 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
13735 || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2);
00707a0e
RS
13736}
13737
64543e1a 13738
2cf19d5c
JM
13739/* Merge object attributes from IBFD into OBFD. Raise an error if
13740 there are conflicting attributes. */
13741static bfd_boolean
13742mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
13743{
13744 obj_attribute *in_attr;
13745 obj_attribute *out_attr;
6ae68ba3
MR
13746 bfd *abi_fp_bfd;
13747
13748 abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
13749 in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
13750 if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
13751 mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
2cf19d5c
JM
13752
13753 if (!elf_known_obj_attributes_proc (obfd)[0].i)
13754 {
13755 /* This is the first object. Copy the attributes. */
13756 _bfd_elf_copy_obj_attributes (ibfd, obfd);
13757
13758 /* Use the Tag_null value to indicate the attributes have been
13759 initialized. */
13760 elf_known_obj_attributes_proc (obfd)[0].i = 1;
13761
13762 return TRUE;
13763 }
13764
13765 /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
13766 non-conflicting ones. */
2cf19d5c
JM
13767 out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
13768 if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
13769 {
13770 out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
13771 if (out_attr[Tag_GNU_MIPS_ABI_FP].i == 0)
13772 out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
6ae68ba3 13773 else if (in_attr[Tag_GNU_MIPS_ABI_FP].i != 0)
2cf19d5c
JM
13774 switch (out_attr[Tag_GNU_MIPS_ABI_FP].i)
13775 {
13776 case 1:
13777 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13778 {
13779 case 2:
13780 _bfd_error_handler
6ae68ba3
MR
13781 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13782 obfd, abi_fp_bfd, ibfd, "-mdouble-float", "-msingle-float");
51a0dd31 13783 break;
2cf19d5c
JM
13784
13785 case 3:
13786 _bfd_error_handler
6ae68ba3
MR
13787 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13788 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
2cf19d5c
JM
13789 break;
13790
42554f6a
TS
13791 case 4:
13792 _bfd_error_handler
6ae68ba3
MR
13793 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13794 obfd, abi_fp_bfd, ibfd,
13795 "-mdouble-float", "-mips32r2 -mfp64");
42554f6a
TS
13796 break;
13797
2cf19d5c 13798 default:
6ae68ba3
MR
13799 _bfd_error_handler
13800 (_("Warning: %B uses %s (set by %B), "
13801 "%B uses unknown floating point ABI %d"),
13802 obfd, abi_fp_bfd, ibfd,
13803 "-mdouble-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13804 break;
2cf19d5c
JM
13805 }
13806 break;
13807
13808 case 2:
13809 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13810 {
13811 case 1:
13812 _bfd_error_handler
6ae68ba3
MR
13813 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13814 obfd, abi_fp_bfd, ibfd, "-msingle-float", "-mdouble-float");
51a0dd31 13815 break;
2cf19d5c
JM
13816
13817 case 3:
13818 _bfd_error_handler
6ae68ba3
MR
13819 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13820 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
2cf19d5c
JM
13821 break;
13822
42554f6a
TS
13823 case 4:
13824 _bfd_error_handler
6ae68ba3
MR
13825 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13826 obfd, abi_fp_bfd, ibfd,
13827 "-msingle-float", "-mips32r2 -mfp64");
42554f6a
TS
13828 break;
13829
2cf19d5c 13830 default:
6ae68ba3
MR
13831 _bfd_error_handler
13832 (_("Warning: %B uses %s (set by %B), "
13833 "%B uses unknown floating point ABI %d"),
13834 obfd, abi_fp_bfd, ibfd,
13835 "-msingle-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13836 break;
2cf19d5c
JM
13837 }
13838 break;
13839
13840 case 3:
13841 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13842 {
13843 case 1:
13844 case 2:
42554f6a 13845 case 4:
2cf19d5c 13846 _bfd_error_handler
6ae68ba3
MR
13847 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13848 obfd, abi_fp_bfd, ibfd, "-msoft-float", "-mhard-float");
2cf19d5c
JM
13849 break;
13850
13851 default:
6ae68ba3
MR
13852 _bfd_error_handler
13853 (_("Warning: %B uses %s (set by %B), "
13854 "%B uses unknown floating point ABI %d"),
13855 obfd, abi_fp_bfd, ibfd,
13856 "-msoft-float", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13857 break;
2cf19d5c
JM
13858 }
13859 break;
13860
42554f6a
TS
13861 case 4:
13862 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13863 {
13864 case 1:
13865 _bfd_error_handler
6ae68ba3
MR
13866 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13867 obfd, abi_fp_bfd, ibfd,
13868 "-mips32r2 -mfp64", "-mdouble-float");
42554f6a
TS
13869 break;
13870
13871 case 2:
13872 _bfd_error_handler
6ae68ba3
MR
13873 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13874 obfd, abi_fp_bfd, ibfd,
13875 "-mips32r2 -mfp64", "-msingle-float");
42554f6a
TS
13876 break;
13877
13878 case 3:
13879 _bfd_error_handler
6ae68ba3
MR
13880 (_("Warning: %B uses %s (set by %B), %B uses %s"),
13881 obfd, abi_fp_bfd, ibfd, "-mhard-float", "-msoft-float");
42554f6a
TS
13882 break;
13883
13884 default:
6ae68ba3
MR
13885 _bfd_error_handler
13886 (_("Warning: %B uses %s (set by %B), "
13887 "%B uses unknown floating point ABI %d"),
13888 obfd, abi_fp_bfd, ibfd,
13889 "-mips32r2 -mfp64", in_attr[Tag_GNU_MIPS_ABI_FP].i);
13890 break;
42554f6a
TS
13891 }
13892 break;
13893
2cf19d5c 13894 default:
6ae68ba3
MR
13895 switch (in_attr[Tag_GNU_MIPS_ABI_FP].i)
13896 {
13897 case 1:
13898 _bfd_error_handler
13899 (_("Warning: %B uses unknown floating point ABI %d "
13900 "(set by %B), %B uses %s"),
13901 obfd, abi_fp_bfd, ibfd,
13902 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mdouble-float");
13903 break;
13904
13905 case 2:
13906 _bfd_error_handler
13907 (_("Warning: %B uses unknown floating point ABI %d "
13908 "(set by %B), %B uses %s"),
13909 obfd, abi_fp_bfd, ibfd,
13910 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msingle-float");
13911 break;
13912
13913 case 3:
13914 _bfd_error_handler
13915 (_("Warning: %B uses unknown floating point ABI %d "
13916 "(set by %B), %B uses %s"),
13917 obfd, abi_fp_bfd, ibfd,
13918 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-msoft-float");
13919 break;
13920
13921 case 4:
13922 _bfd_error_handler
13923 (_("Warning: %B uses unknown floating point ABI %d "
13924 "(set by %B), %B uses %s"),
13925 obfd, abi_fp_bfd, ibfd,
13926 out_attr[Tag_GNU_MIPS_ABI_FP].i, "-mips32r2 -mfp64");
13927 break;
13928
13929 default:
13930 _bfd_error_handler
13931 (_("Warning: %B uses unknown floating point ABI %d "
13932 "(set by %B), %B uses unknown floating point ABI %d"),
13933 obfd, abi_fp_bfd, ibfd,
13934 out_attr[Tag_GNU_MIPS_ABI_FP].i,
13935 in_attr[Tag_GNU_MIPS_ABI_FP].i);
13936 break;
13937 }
13938 break;
2cf19d5c
JM
13939 }
13940 }
13941
13942 /* Merge Tag_compatibility attributes and any common GNU ones. */
13943 _bfd_elf_merge_object_attributes (ibfd, obfd);
13944
13945 return TRUE;
13946}
13947
b49e97c9
TS
13948/* Merge backend specific data from an object file to the output
13949 object file when linking. */
13950
b34976b6 13951bfd_boolean
9719ad41 13952_bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
b49e97c9
TS
13953{
13954 flagword old_flags;
13955 flagword new_flags;
b34976b6
AM
13956 bfd_boolean ok;
13957 bfd_boolean null_input_bfd = TRUE;
b49e97c9
TS
13958 asection *sec;
13959
58238693 13960 /* Check if we have the same endianness. */
82e51918 13961 if (! _bfd_generic_verify_endian_match (ibfd, obfd))
aa701218
AO
13962 {
13963 (*_bfd_error_handler)
d003868e
AM
13964 (_("%B: endianness incompatible with that of the selected emulation"),
13965 ibfd);
aa701218
AO
13966 return FALSE;
13967 }
b49e97c9 13968
d5eaccd7 13969 if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
b34976b6 13970 return TRUE;
b49e97c9 13971
aa701218
AO
13972 if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
13973 {
13974 (*_bfd_error_handler)
d003868e
AM
13975 (_("%B: ABI is incompatible with that of the selected emulation"),
13976 ibfd);
aa701218
AO
13977 return FALSE;
13978 }
13979
2cf19d5c
JM
13980 if (!mips_elf_merge_obj_attributes (ibfd, obfd))
13981 return FALSE;
13982
b49e97c9
TS
13983 new_flags = elf_elfheader (ibfd)->e_flags;
13984 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
13985 old_flags = elf_elfheader (obfd)->e_flags;
13986
13987 if (! elf_flags_init (obfd))
13988 {
b34976b6 13989 elf_flags_init (obfd) = TRUE;
b49e97c9
TS
13990 elf_elfheader (obfd)->e_flags = new_flags;
13991 elf_elfheader (obfd)->e_ident[EI_CLASS]
13992 = elf_elfheader (ibfd)->e_ident[EI_CLASS];
13993
13994 if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
2907b861 13995 && (bfd_get_arch_info (obfd)->the_default
68ffbac6 13996 || mips_mach_extends_p (bfd_get_mach (obfd),
2907b861 13997 bfd_get_mach (ibfd))))
b49e97c9
TS
13998 {
13999 if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
14000 bfd_get_mach (ibfd)))
b34976b6 14001 return FALSE;
b49e97c9
TS
14002 }
14003
b34976b6 14004 return TRUE;
b49e97c9
TS
14005 }
14006
14007 /* Check flag compatibility. */
14008
14009 new_flags &= ~EF_MIPS_NOREORDER;
14010 old_flags &= ~EF_MIPS_NOREORDER;
14011
f4416af6
AO
14012 /* Some IRIX 6 BSD-compatibility objects have this bit set. It
14013 doesn't seem to matter. */
14014 new_flags &= ~EF_MIPS_XGOT;
14015 old_flags &= ~EF_MIPS_XGOT;
14016
98a8deaf
RS
14017 /* MIPSpro generates ucode info in n64 objects. Again, we should
14018 just be able to ignore this. */
14019 new_flags &= ~EF_MIPS_UCODE;
14020 old_flags &= ~EF_MIPS_UCODE;
14021
861fb55a
DJ
14022 /* DSOs should only be linked with CPIC code. */
14023 if ((ibfd->flags & DYNAMIC) != 0)
14024 new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
0a44bf69 14025
b49e97c9 14026 if (new_flags == old_flags)
b34976b6 14027 return TRUE;
b49e97c9
TS
14028
14029 /* Check to see if the input BFD actually contains any sections.
14030 If not, its flags may not have been initialised either, but it cannot
14031 actually cause any incompatibility. */
14032 for (sec = ibfd->sections; sec != NULL; sec = sec->next)
14033 {
14034 /* Ignore synthetic sections and empty .text, .data and .bss sections
ed88c97e
RS
14035 which are automatically generated by gas. Also ignore fake
14036 (s)common sections, since merely defining a common symbol does
14037 not affect compatibility. */
14038 if ((sec->flags & SEC_IS_COMMON) == 0
14039 && strcmp (sec->name, ".reginfo")
b49e97c9 14040 && strcmp (sec->name, ".mdebug")
eea6121a 14041 && (sec->size != 0
d13d89fa
NS
14042 || (strcmp (sec->name, ".text")
14043 && strcmp (sec->name, ".data")
14044 && strcmp (sec->name, ".bss"))))
b49e97c9 14045 {
b34976b6 14046 null_input_bfd = FALSE;
b49e97c9
TS
14047 break;
14048 }
14049 }
14050 if (null_input_bfd)
b34976b6 14051 return TRUE;
b49e97c9 14052
b34976b6 14053 ok = TRUE;
b49e97c9 14054
143d77c5
EC
14055 if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14056 != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
b49e97c9 14057 {
b49e97c9 14058 (*_bfd_error_handler)
861fb55a 14059 (_("%B: warning: linking abicalls files with non-abicalls files"),
d003868e 14060 ibfd);
143d77c5 14061 ok = TRUE;
b49e97c9
TS
14062 }
14063
143d77c5
EC
14064 if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14065 elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14066 if (! (new_flags & EF_MIPS_PIC))
14067 elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14068
14069 new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14070 old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
b49e97c9 14071
64543e1a
RS
14072 /* Compare the ISAs. */
14073 if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
b49e97c9 14074 {
64543e1a 14075 (*_bfd_error_handler)
d003868e
AM
14076 (_("%B: linking 32-bit code with 64-bit code"),
14077 ibfd);
64543e1a
RS
14078 ok = FALSE;
14079 }
14080 else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14081 {
14082 /* OBFD's ISA isn't the same as, or an extension of, IBFD's. */
14083 if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
b49e97c9 14084 {
64543e1a
RS
14085 /* Copy the architecture info from IBFD to OBFD. Also copy
14086 the 32-bit flag (if set) so that we continue to recognise
14087 OBFD as a 32-bit binary. */
14088 bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14089 elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14090 elf_elfheader (obfd)->e_flags
14091 |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14092
14093 /* Copy across the ABI flags if OBFD doesn't use them
14094 and if that was what caused us to treat IBFD as 32-bit. */
14095 if ((old_flags & EF_MIPS_ABI) == 0
14096 && mips_32bit_flags_p (new_flags)
14097 && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14098 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
b49e97c9
TS
14099 }
14100 else
14101 {
64543e1a 14102 /* The ISAs aren't compatible. */
b49e97c9 14103 (*_bfd_error_handler)
d003868e
AM
14104 (_("%B: linking %s module with previous %s modules"),
14105 ibfd,
64543e1a
RS
14106 bfd_printable_name (ibfd),
14107 bfd_printable_name (obfd));
b34976b6 14108 ok = FALSE;
b49e97c9 14109 }
b49e97c9
TS
14110 }
14111
64543e1a
RS
14112 new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14113 old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14114
14115 /* Compare ABIs. The 64-bit ABI does not use EF_MIPS_ABI. But, it
b49e97c9
TS
14116 does set EI_CLASS differently from any 32-bit ABI. */
14117 if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14118 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14119 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14120 {
14121 /* Only error if both are set (to different values). */
14122 if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14123 || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14124 != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14125 {
14126 (*_bfd_error_handler)
d003868e
AM
14127 (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14128 ibfd,
b49e97c9
TS
14129 elf_mips_abi_name (ibfd),
14130 elf_mips_abi_name (obfd));
b34976b6 14131 ok = FALSE;
b49e97c9
TS
14132 }
14133 new_flags &= ~EF_MIPS_ABI;
14134 old_flags &= ~EF_MIPS_ABI;
14135 }
14136
df58fc94
RS
14137 /* Compare ASEs. Forbid linking MIPS16 and microMIPS ASE modules together
14138 and allow arbitrary mixing of the remaining ASEs (retain the union). */
fb39dac1
RS
14139 if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
14140 {
df58fc94
RS
14141 int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14142 int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
14143 int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
14144 int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
14145 int micro_mis = old_m16 && new_micro;
14146 int m16_mis = old_micro && new_m16;
14147
14148 if (m16_mis || micro_mis)
14149 {
14150 (*_bfd_error_handler)
14151 (_("%B: ASE mismatch: linking %s module with previous %s modules"),
14152 ibfd,
14153 m16_mis ? "MIPS16" : "microMIPS",
14154 m16_mis ? "microMIPS" : "MIPS16");
14155 ok = FALSE;
14156 }
14157
fb39dac1
RS
14158 elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
14159
14160 new_flags &= ~ EF_MIPS_ARCH_ASE;
14161 old_flags &= ~ EF_MIPS_ARCH_ASE;
14162 }
14163
b49e97c9
TS
14164 /* Warn about any other mismatches */
14165 if (new_flags != old_flags)
14166 {
14167 (*_bfd_error_handler)
d003868e
AM
14168 (_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
14169 ibfd, (unsigned long) new_flags,
b49e97c9 14170 (unsigned long) old_flags);
b34976b6 14171 ok = FALSE;
b49e97c9
TS
14172 }
14173
14174 if (! ok)
14175 {
14176 bfd_set_error (bfd_error_bad_value);
b34976b6 14177 return FALSE;
b49e97c9
TS
14178 }
14179
b34976b6 14180 return TRUE;
b49e97c9
TS
14181}
14182
14183/* Function to keep MIPS specific file flags like as EF_MIPS_PIC. */
14184
b34976b6 14185bfd_boolean
9719ad41 14186_bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
b49e97c9
TS
14187{
14188 BFD_ASSERT (!elf_flags_init (abfd)
14189 || elf_elfheader (abfd)->e_flags == flags);
14190
14191 elf_elfheader (abfd)->e_flags = flags;
b34976b6
AM
14192 elf_flags_init (abfd) = TRUE;
14193 return TRUE;
b49e97c9
TS
14194}
14195
ad9563d6
CM
14196char *
14197_bfd_mips_elf_get_target_dtag (bfd_vma dtag)
14198{
14199 switch (dtag)
14200 {
14201 default: return "";
14202 case DT_MIPS_RLD_VERSION:
14203 return "MIPS_RLD_VERSION";
14204 case DT_MIPS_TIME_STAMP:
14205 return "MIPS_TIME_STAMP";
14206 case DT_MIPS_ICHECKSUM:
14207 return "MIPS_ICHECKSUM";
14208 case DT_MIPS_IVERSION:
14209 return "MIPS_IVERSION";
14210 case DT_MIPS_FLAGS:
14211 return "MIPS_FLAGS";
14212 case DT_MIPS_BASE_ADDRESS:
14213 return "MIPS_BASE_ADDRESS";
14214 case DT_MIPS_MSYM:
14215 return "MIPS_MSYM";
14216 case DT_MIPS_CONFLICT:
14217 return "MIPS_CONFLICT";
14218 case DT_MIPS_LIBLIST:
14219 return "MIPS_LIBLIST";
14220 case DT_MIPS_LOCAL_GOTNO:
14221 return "MIPS_LOCAL_GOTNO";
14222 case DT_MIPS_CONFLICTNO:
14223 return "MIPS_CONFLICTNO";
14224 case DT_MIPS_LIBLISTNO:
14225 return "MIPS_LIBLISTNO";
14226 case DT_MIPS_SYMTABNO:
14227 return "MIPS_SYMTABNO";
14228 case DT_MIPS_UNREFEXTNO:
14229 return "MIPS_UNREFEXTNO";
14230 case DT_MIPS_GOTSYM:
14231 return "MIPS_GOTSYM";
14232 case DT_MIPS_HIPAGENO:
14233 return "MIPS_HIPAGENO";
14234 case DT_MIPS_RLD_MAP:
14235 return "MIPS_RLD_MAP";
14236 case DT_MIPS_DELTA_CLASS:
14237 return "MIPS_DELTA_CLASS";
14238 case DT_MIPS_DELTA_CLASS_NO:
14239 return "MIPS_DELTA_CLASS_NO";
14240 case DT_MIPS_DELTA_INSTANCE:
14241 return "MIPS_DELTA_INSTANCE";
14242 case DT_MIPS_DELTA_INSTANCE_NO:
14243 return "MIPS_DELTA_INSTANCE_NO";
14244 case DT_MIPS_DELTA_RELOC:
14245 return "MIPS_DELTA_RELOC";
14246 case DT_MIPS_DELTA_RELOC_NO:
14247 return "MIPS_DELTA_RELOC_NO";
14248 case DT_MIPS_DELTA_SYM:
14249 return "MIPS_DELTA_SYM";
14250 case DT_MIPS_DELTA_SYM_NO:
14251 return "MIPS_DELTA_SYM_NO";
14252 case DT_MIPS_DELTA_CLASSSYM:
14253 return "MIPS_DELTA_CLASSSYM";
14254 case DT_MIPS_DELTA_CLASSSYM_NO:
14255 return "MIPS_DELTA_CLASSSYM_NO";
14256 case DT_MIPS_CXX_FLAGS:
14257 return "MIPS_CXX_FLAGS";
14258 case DT_MIPS_PIXIE_INIT:
14259 return "MIPS_PIXIE_INIT";
14260 case DT_MIPS_SYMBOL_LIB:
14261 return "MIPS_SYMBOL_LIB";
14262 case DT_MIPS_LOCALPAGE_GOTIDX:
14263 return "MIPS_LOCALPAGE_GOTIDX";
14264 case DT_MIPS_LOCAL_GOTIDX:
14265 return "MIPS_LOCAL_GOTIDX";
14266 case DT_MIPS_HIDDEN_GOTIDX:
14267 return "MIPS_HIDDEN_GOTIDX";
14268 case DT_MIPS_PROTECTED_GOTIDX:
14269 return "MIPS_PROTECTED_GOT_IDX";
14270 case DT_MIPS_OPTIONS:
14271 return "MIPS_OPTIONS";
14272 case DT_MIPS_INTERFACE:
14273 return "MIPS_INTERFACE";
14274 case DT_MIPS_DYNSTR_ALIGN:
14275 return "DT_MIPS_DYNSTR_ALIGN";
14276 case DT_MIPS_INTERFACE_SIZE:
14277 return "DT_MIPS_INTERFACE_SIZE";
14278 case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
14279 return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
14280 case DT_MIPS_PERF_SUFFIX:
14281 return "DT_MIPS_PERF_SUFFIX";
14282 case DT_MIPS_COMPACT_SIZE:
14283 return "DT_MIPS_COMPACT_SIZE";
14284 case DT_MIPS_GP_VALUE:
14285 return "DT_MIPS_GP_VALUE";
14286 case DT_MIPS_AUX_DYNAMIC:
14287 return "DT_MIPS_AUX_DYNAMIC";
861fb55a
DJ
14288 case DT_MIPS_PLTGOT:
14289 return "DT_MIPS_PLTGOT";
14290 case DT_MIPS_RWPLT:
14291 return "DT_MIPS_RWPLT";
ad9563d6
CM
14292 }
14293}
14294
b34976b6 14295bfd_boolean
9719ad41 14296_bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
b49e97c9 14297{
9719ad41 14298 FILE *file = ptr;
b49e97c9
TS
14299
14300 BFD_ASSERT (abfd != NULL && ptr != NULL);
14301
14302 /* Print normal ELF private data. */
14303 _bfd_elf_print_private_bfd_data (abfd, ptr);
14304
14305 /* xgettext:c-format */
14306 fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
14307
14308 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
14309 fprintf (file, _(" [abi=O32]"));
14310 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
14311 fprintf (file, _(" [abi=O64]"));
14312 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
14313 fprintf (file, _(" [abi=EABI32]"));
14314 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
14315 fprintf (file, _(" [abi=EABI64]"));
14316 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
14317 fprintf (file, _(" [abi unknown]"));
14318 else if (ABI_N32_P (abfd))
14319 fprintf (file, _(" [abi=N32]"));
14320 else if (ABI_64_P (abfd))
14321 fprintf (file, _(" [abi=64]"));
14322 else
14323 fprintf (file, _(" [no abi set]"));
14324
14325 if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
ae0d2616 14326 fprintf (file, " [mips1]");
b49e97c9 14327 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
ae0d2616 14328 fprintf (file, " [mips2]");
b49e97c9 14329 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
ae0d2616 14330 fprintf (file, " [mips3]");
b49e97c9 14331 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
ae0d2616 14332 fprintf (file, " [mips4]");
b49e97c9 14333 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
ae0d2616 14334 fprintf (file, " [mips5]");
b49e97c9 14335 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
ae0d2616 14336 fprintf (file, " [mips32]");
b49e97c9 14337 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
ae0d2616 14338 fprintf (file, " [mips64]");
af7ee8bf 14339 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
ae0d2616 14340 fprintf (file, " [mips32r2]");
5f74bc13 14341 else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
ae0d2616 14342 fprintf (file, " [mips64r2]");
b49e97c9
TS
14343 else
14344 fprintf (file, _(" [unknown ISA]"));
14345
40d32fc6 14346 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
ae0d2616 14347 fprintf (file, " [mdmx]");
40d32fc6
CD
14348
14349 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
ae0d2616 14350 fprintf (file, " [mips16]");
40d32fc6 14351
df58fc94
RS
14352 if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14353 fprintf (file, " [micromips]");
14354
b49e97c9 14355 if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
ae0d2616 14356 fprintf (file, " [32bitmode]");
b49e97c9
TS
14357 else
14358 fprintf (file, _(" [not 32bitmode]"));
14359
c0e3f241 14360 if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
ae0d2616 14361 fprintf (file, " [noreorder]");
c0e3f241
CD
14362
14363 if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
ae0d2616 14364 fprintf (file, " [PIC]");
c0e3f241
CD
14365
14366 if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
ae0d2616 14367 fprintf (file, " [CPIC]");
c0e3f241
CD
14368
14369 if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
ae0d2616 14370 fprintf (file, " [XGOT]");
c0e3f241
CD
14371
14372 if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
ae0d2616 14373 fprintf (file, " [UCODE]");
c0e3f241 14374
b49e97c9
TS
14375 fputc ('\n', file);
14376
b34976b6 14377 return TRUE;
b49e97c9 14378}
2f89ff8d 14379
b35d266b 14380const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
2f89ff8d 14381{
0112cd26
NC
14382 { STRING_COMMA_LEN (".lit4"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14383 { STRING_COMMA_LEN (".lit8"), 0, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14384 { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
14385 { STRING_COMMA_LEN (".sbss"), -2, SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14386 { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
14387 { STRING_COMMA_LEN (".ucode"), 0, SHT_MIPS_UCODE, 0 },
14388 { NULL, 0, 0, 0, 0 }
2f89ff8d 14389};
5e2b0d47 14390
8992f0d7
TS
14391/* Merge non visibility st_other attributes. Ensure that the
14392 STO_OPTIONAL flag is copied into h->other, even if this is not a
14393 definiton of the symbol. */
5e2b0d47
NC
14394void
14395_bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
14396 const Elf_Internal_Sym *isym,
14397 bfd_boolean definition,
14398 bfd_boolean dynamic ATTRIBUTE_UNUSED)
14399{
8992f0d7
TS
14400 if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
14401 {
14402 unsigned char other;
14403
14404 other = (definition ? isym->st_other : h->other);
14405 other &= ~ELF_ST_VISIBILITY (-1);
14406 h->other = other | ELF_ST_VISIBILITY (h->other);
14407 }
14408
14409 if (!definition
5e2b0d47
NC
14410 && ELF_MIPS_IS_OPTIONAL (isym->st_other))
14411 h->other |= STO_OPTIONAL;
14412}
12ac1cf5
NC
14413
14414/* Decide whether an undefined symbol is special and can be ignored.
14415 This is the case for OPTIONAL symbols on IRIX. */
14416bfd_boolean
14417_bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
14418{
14419 return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
14420}
e0764319
NC
14421
14422bfd_boolean
14423_bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
14424{
14425 return (sym->st_shndx == SHN_COMMON
14426 || sym->st_shndx == SHN_MIPS_ACOMMON
14427 || sym->st_shndx == SHN_MIPS_SCOMMON);
14428}
861fb55a
DJ
14429
14430/* Return address for Ith PLT stub in section PLT, for relocation REL
14431 or (bfd_vma) -1 if it should not be included. */
14432
14433bfd_vma
14434_bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
14435 const arelent *rel ATTRIBUTE_UNUSED)
14436{
14437 return (plt->vma
14438 + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
14439 + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
14440}
14441
14442void
14443_bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
14444{
14445 struct mips_elf_link_hash_table *htab;
14446 Elf_Internal_Ehdr *i_ehdrp;
14447
14448 i_ehdrp = elf_elfheader (abfd);
14449 if (link_info)
14450 {
14451 htab = mips_elf_hash_table (link_info);
4dfe6ac6
NC
14452 BFD_ASSERT (htab != NULL);
14453
861fb55a
DJ
14454 if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
14455 i_ehdrp->e_ident[EI_ABIVERSION] = 1;
14456 }
14457}
This page took 1.548337 seconds and 4 git commands to generate.