MIPS/LD/testsuite: Use wildcard address matching in `undefweak-overflow'
[external/binutils.git] / bfd / elfxx-mips.c
1 /* MIPS-specific support for ELF
2    Copyright (C) 1993-2016 Free Software Foundation, Inc.
3
4    Most of the information added by Ian Lance Taylor, Cygnus Support,
5    <ian@cygnus.com>.
6    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7    <mark@codesourcery.com>
8    Traditional MIPS targets support added by Koundinya.K, Dansk Data
9    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10
11    This file is part of BFD, the Binary File Descriptor library.
12
13    This program is free software; you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3 of the License, or
16    (at your option) any later version.
17
18    This program is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26    MA 02110-1301, USA.  */
27
28
29 /* This file handles functionality common to the different MIPS ABI's.  */
30
31 #include "sysdep.h"
32 #include "bfd.h"
33 #include "libbfd.h"
34 #include "libiberty.h"
35 #include "elf-bfd.h"
36 #include "elfxx-mips.h"
37 #include "elf/mips.h"
38 #include "elf-vxworks.h"
39 #include "dwarf2.h"
40
41 /* Get the ECOFF swapping routines.  */
42 #include "coff/sym.h"
43 #include "coff/symconst.h"
44 #include "coff/ecoff.h"
45 #include "coff/mips.h"
46
47 #include "hashtab.h"
48
49 /* Types of TLS GOT entry.  */
50 enum mips_got_tls_type {
51   GOT_TLS_NONE,
52   GOT_TLS_GD,
53   GOT_TLS_LDM,
54   GOT_TLS_IE
55 };
56
57 /* This structure is used to hold information about one GOT entry.
58    There are four types of entry:
59
60       (1) an absolute address
61             requires: abfd == NULL
62             fields: d.address
63
64       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
65             requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
66             fields: abfd, symndx, d.addend, tls_type
67
68       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
69             requires: abfd != NULL, symndx == -1
70             fields: d.h, tls_type
71
72       (4) a TLS LDM slot
73             requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
74             fields: none; there's only one of these per GOT.  */
75 struct mips_got_entry
76 {
77   /* One input bfd that needs the GOT entry.  */
78   bfd *abfd;
79   /* The index of the symbol, as stored in the relocation r_info, if
80      we have a local symbol; -1 otherwise.  */
81   long symndx;
82   union
83   {
84     /* If abfd == NULL, an address that must be stored in the got.  */
85     bfd_vma address;
86     /* If abfd != NULL && symndx != -1, the addend of the relocation
87        that should be added to the symbol value.  */
88     bfd_vma addend;
89     /* If abfd != NULL && symndx == -1, the hash table entry
90        corresponding to a symbol in the GOT.  The symbol's entry
91        is in the local area if h->global_got_area is GGA_NONE,
92        otherwise it is in the global area.  */
93     struct mips_elf_link_hash_entry *h;
94   } d;
95
96   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
97      symbol entry with r_symndx == 0.  */
98   unsigned char tls_type;
99
100   /* True if we have filled in the GOT contents for a TLS entry,
101      and created the associated relocations.  */
102   unsigned char tls_initialized;
103
104   /* The offset from the beginning of the .got section to the entry
105      corresponding to this symbol+addend.  If it's a global symbol
106      whose offset is yet to be decided, it's going to be -1.  */
107   long gotidx;
108 };
109
110 /* This structure represents a GOT page reference from an input bfd.
111    Each instance represents a symbol + ADDEND, where the representation
112    of the symbol depends on whether it is local to the input bfd.
113    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
114    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
115
116    Page references with SYMNDX >= 0 always become page references
117    in the output.  Page references with SYMNDX < 0 only become page
118    references if the symbol binds locally; in other cases, the page
119    reference decays to a global GOT reference.  */
120 struct mips_got_page_ref
121 {
122   long symndx;
123   union
124   {
125     struct mips_elf_link_hash_entry *h;
126     bfd *abfd;
127   } u;
128   bfd_vma addend;
129 };
130
131 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
132    The structures form a non-overlapping list that is sorted by increasing
133    MIN_ADDEND.  */
134 struct mips_got_page_range
135 {
136   struct mips_got_page_range *next;
137   bfd_signed_vma min_addend;
138   bfd_signed_vma max_addend;
139 };
140
141 /* This structure describes the range of addends that are applied to page
142    relocations against a given section.  */
143 struct mips_got_page_entry
144 {
145   /* The section that these entries are based on.  */
146   asection *sec;
147   /* The ranges for this page entry.  */
148   struct mips_got_page_range *ranges;
149   /* The maximum number of page entries needed for RANGES.  */
150   bfd_vma num_pages;
151 };
152
153 /* This structure is used to hold .got information when linking.  */
154
155 struct mips_got_info
156 {
157   /* The number of global .got entries.  */
158   unsigned int global_gotno;
159   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
160   unsigned int reloc_only_gotno;
161   /* The number of .got slots used for TLS.  */
162   unsigned int tls_gotno;
163   /* The first unused TLS .got entry.  Used only during
164      mips_elf_initialize_tls_index.  */
165   unsigned int tls_assigned_gotno;
166   /* The number of local .got entries, eventually including page entries.  */
167   unsigned int local_gotno;
168   /* The maximum number of page entries needed.  */
169   unsigned int page_gotno;
170   /* The number of relocations needed for the GOT entries.  */
171   unsigned int relocs;
172   /* The first unused local .got entry.  */
173   unsigned int assigned_low_gotno;
174   /* The last unused local .got entry.  */
175   unsigned int assigned_high_gotno;
176   /* A hash table holding members of the got.  */
177   struct htab *got_entries;
178   /* A hash table holding mips_got_page_ref structures.  */
179   struct htab *got_page_refs;
180   /* A hash table of mips_got_page_entry structures.  */
181   struct htab *got_page_entries;
182   /* In multi-got links, a pointer to the next got (err, rather, most
183      of the time, it points to the previous got).  */
184   struct mips_got_info *next;
185 };
186
187 /* Structure passed when merging bfds' gots.  */
188
189 struct mips_elf_got_per_bfd_arg
190 {
191   /* The output bfd.  */
192   bfd *obfd;
193   /* The link information.  */
194   struct bfd_link_info *info;
195   /* A pointer to the primary got, i.e., the one that's going to get
196      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
197      DT_MIPS_GOTSYM.  */
198   struct mips_got_info *primary;
199   /* A non-primary got we're trying to merge with other input bfd's
200      gots.  */
201   struct mips_got_info *current;
202   /* The maximum number of got entries that can be addressed with a
203      16-bit offset.  */
204   unsigned int max_count;
205   /* The maximum number of page entries needed by each got.  */
206   unsigned int max_pages;
207   /* The total number of global entries which will live in the
208      primary got and be automatically relocated.  This includes
209      those not referenced by the primary GOT but included in
210      the "master" GOT.  */
211   unsigned int global_count;
212 };
213
214 /* A structure used to pass information to htab_traverse callbacks
215    when laying out the GOT.  */
216
217 struct mips_elf_traverse_got_arg
218 {
219   struct bfd_link_info *info;
220   struct mips_got_info *g;
221   int value;
222 };
223
224 struct _mips_elf_section_data
225 {
226   struct bfd_elf_section_data elf;
227   union
228   {
229     bfd_byte *tdata;
230   } u;
231 };
232
233 #define mips_elf_section_data(sec) \
234   ((struct _mips_elf_section_data *) elf_section_data (sec))
235
236 #define is_mips_elf(bfd)                                \
237   (bfd_get_flavour (bfd) == bfd_target_elf_flavour      \
238    && elf_tdata (bfd) != NULL                           \
239    && elf_object_id (bfd) == MIPS_ELF_DATA)
240
241 /* The ABI says that every symbol used by dynamic relocations must have
242    a global GOT entry.  Among other things, this provides the dynamic
243    linker with a free, directly-indexed cache.  The GOT can therefore
244    contain symbols that are not referenced by GOT relocations themselves
245    (in other words, it may have symbols that are not referenced by things
246    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
247
248    GOT relocations are less likely to overflow if we put the associated
249    GOT entries towards the beginning.  We therefore divide the global
250    GOT entries into two areas: "normal" and "reloc-only".  Entries in
251    the first area can be used for both dynamic relocations and GP-relative
252    accesses, while those in the "reloc-only" area are for dynamic
253    relocations only.
254
255    These GGA_* ("Global GOT Area") values are organised so that lower
256    values are more general than higher values.  Also, non-GGA_NONE
257    values are ordered by the position of the area in the GOT.  */
258 #define GGA_NORMAL 0
259 #define GGA_RELOC_ONLY 1
260 #define GGA_NONE 2
261
262 /* Information about a non-PIC interface to a PIC function.  There are
263    two ways of creating these interfaces.  The first is to add:
264
265         lui     $25,%hi(func)
266         addiu   $25,$25,%lo(func)
267
268    immediately before a PIC function "func".  The second is to add:
269
270         lui     $25,%hi(func)
271         j       func
272         addiu   $25,$25,%lo(func)
273
274    to a separate trampoline section.
275
276    Stubs of the first kind go in a new section immediately before the
277    target function.  Stubs of the second kind go in a single section
278    pointed to by the hash table's "strampoline" field.  */
279 struct mips_elf_la25_stub {
280   /* The generated section that contains this stub.  */
281   asection *stub_section;
282
283   /* The offset of the stub from the start of STUB_SECTION.  */
284   bfd_vma offset;
285
286   /* One symbol for the original function.  Its location is available
287      in H->root.root.u.def.  */
288   struct mips_elf_link_hash_entry *h;
289 };
290
291 /* Macros for populating a mips_elf_la25_stub.  */
292
293 #define LA25_LUI(VAL) (0x3c190000 | (VAL))      /* lui t9,VAL */
294 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
295 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))    /* addiu t9,t9,VAL */
296 #define LA25_LUI_MICROMIPS(VAL)                                         \
297   (0x41b90000 | (VAL))                          /* lui t9,VAL */
298 #define LA25_J_MICROMIPS(VAL)                                           \
299   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))     /* j VAL */
300 #define LA25_ADDIU_MICROMIPS(VAL)                                       \
301   (0x33390000 | (VAL))                          /* addiu t9,t9,VAL */
302
303 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
304    the dynamic symbols.  */
305
306 struct mips_elf_hash_sort_data
307 {
308   /* The symbol in the global GOT with the lowest dynamic symbol table
309      index.  */
310   struct elf_link_hash_entry *low;
311   /* The least dynamic symbol table index corresponding to a non-TLS
312      symbol with a GOT entry.  */
313   long min_got_dynindx;
314   /* The greatest dynamic symbol table index corresponding to a symbol
315      with a GOT entry that is not referenced (e.g., a dynamic symbol
316      with dynamic relocations pointing to it from non-primary GOTs).  */
317   long max_unref_got_dynindx;
318   /* The greatest dynamic symbol table index not corresponding to a
319      symbol without a GOT entry.  */
320   long max_non_got_dynindx;
321 };
322
323 /* We make up to two PLT entries if needed, one for standard MIPS code
324    and one for compressed code, either a MIPS16 or microMIPS one.  We
325    keep a separate record of traditional lazy-binding stubs, for easier
326    processing.  */
327
328 struct plt_entry
329 {
330   /* Traditional SVR4 stub offset, or -1 if none.  */
331   bfd_vma stub_offset;
332
333   /* Standard PLT entry offset, or -1 if none.  */
334   bfd_vma mips_offset;
335
336   /* Compressed PLT entry offset, or -1 if none.  */
337   bfd_vma comp_offset;
338
339   /* The corresponding .got.plt index, or -1 if none.  */
340   bfd_vma gotplt_index;
341
342   /* Whether we need a standard PLT entry.  */
343   unsigned int need_mips : 1;
344
345   /* Whether we need a compressed PLT entry.  */
346   unsigned int need_comp : 1;
347 };
348
349 /* The MIPS ELF linker needs additional information for each symbol in
350    the global hash table.  */
351
352 struct mips_elf_link_hash_entry
353 {
354   struct elf_link_hash_entry root;
355
356   /* External symbol information.  */
357   EXTR esym;
358
359   /* The la25 stub we have created for ths symbol, if any.  */
360   struct mips_elf_la25_stub *la25_stub;
361
362   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
363      this symbol.  */
364   unsigned int possibly_dynamic_relocs;
365
366   /* If there is a stub that 32 bit functions should use to call this
367      16 bit function, this points to the section containing the stub.  */
368   asection *fn_stub;
369
370   /* If there is a stub that 16 bit functions should use to call this
371      32 bit function, this points to the section containing the stub.  */
372   asection *call_stub;
373
374   /* This is like the call_stub field, but it is used if the function
375      being called returns a floating point value.  */
376   asection *call_fp_stub;
377
378   /* The highest GGA_* value that satisfies all references to this symbol.  */
379   unsigned int global_got_area : 2;
380
381   /* True if all GOT relocations against this symbol are for calls.  This is
382      a looser condition than no_fn_stub below, because there may be other
383      non-call non-GOT relocations against the symbol.  */
384   unsigned int got_only_for_calls : 1;
385
386   /* True if one of the relocations described by possibly_dynamic_relocs
387      is against a readonly section.  */
388   unsigned int readonly_reloc : 1;
389
390   /* True if there is a relocation against this symbol that must be
391      resolved by the static linker (in other words, if the relocation
392      cannot possibly be made dynamic).  */
393   unsigned int has_static_relocs : 1;
394
395   /* True if we must not create a .MIPS.stubs entry for this symbol.
396      This is set, for example, if there are relocations related to
397      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
398      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
399   unsigned int no_fn_stub : 1;
400
401   /* Whether we need the fn_stub; this is true if this symbol appears
402      in any relocs other than a 16 bit call.  */
403   unsigned int need_fn_stub : 1;
404
405   /* True if this symbol is referenced by branch relocations from
406      any non-PIC input file.  This is used to determine whether an
407      la25 stub is required.  */
408   unsigned int has_nonpic_branches : 1;
409
410   /* Does this symbol need a traditional MIPS lazy-binding stub
411      (as opposed to a PLT entry)?  */
412   unsigned int needs_lazy_stub : 1;
413
414   /* Does this symbol resolve to a PLT entry?  */
415   unsigned int use_plt_entry : 1;
416 };
417
418 /* MIPS ELF linker hash table.  */
419
420 struct mips_elf_link_hash_table
421 {
422   struct elf_link_hash_table root;
423
424   /* The number of .rtproc entries.  */
425   bfd_size_type procedure_count;
426
427   /* The size of the .compact_rel section (if SGI_COMPAT).  */
428   bfd_size_type compact_rel_size;
429
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.  */
432   bfd_boolean use_rld_obj_head;
433
434   /* The  __rld_map or __rld_obj_head symbol. */
435   struct elf_link_hash_entry *rld_symbol;
436
437   /* This is set if we see any mips16 stub sections.  */
438   bfd_boolean mips16_stubs_seen;
439
440   /* True if we can generate copy relocs and PLTs.  */
441   bfd_boolean use_plts_and_copy_relocs;
442
443   /* True if we can only use 32-bit microMIPS instructions.  */
444   bfd_boolean insn32;
445
446   /* True if we're generating code for VxWorks.  */
447   bfd_boolean is_vxworks;
448
449   /* True if we already reported the small-data section overflow.  */
450   bfd_boolean small_data_overflow_reported;
451
452   /* Shortcuts to some dynamic sections, or NULL if they are not
453      being used.  */
454   asection *srelbss;
455   asection *sdynbss;
456   asection *srelplt;
457   asection *srelplt2;
458   asection *sgotplt;
459   asection *splt;
460   asection *sstubs;
461   asection *sgot;
462
463   /* The master GOT information.  */
464   struct mips_got_info *got_info;
465
466   /* The global symbol in the GOT with the lowest index in the dynamic
467      symbol table.  */
468   struct elf_link_hash_entry *global_gotsym;
469
470   /* The size of the PLT header in bytes.  */
471   bfd_vma plt_header_size;
472
473   /* The size of a standard PLT entry in bytes.  */
474   bfd_vma plt_mips_entry_size;
475
476   /* The size of a compressed PLT entry in bytes.  */
477   bfd_vma plt_comp_entry_size;
478
479   /* The offset of the next standard PLT entry to create.  */
480   bfd_vma plt_mips_offset;
481
482   /* The offset of the next compressed PLT entry to create.  */
483   bfd_vma plt_comp_offset;
484
485   /* The index of the next .got.plt entry to create.  */
486   bfd_vma plt_got_index;
487
488   /* The number of functions that need a lazy-binding stub.  */
489   bfd_vma lazy_stub_count;
490
491   /* The size of a function stub entry in bytes.  */
492   bfd_vma function_stub_size;
493
494   /* The number of reserved entries at the beginning of the GOT.  */
495   unsigned int reserved_gotno;
496
497   /* The section used for mips_elf_la25_stub trampolines.
498      See the comment above that structure for details.  */
499   asection *strampoline;
500
501   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
502      pairs.  */
503   htab_t la25_stubs;
504
505   /* A function FN (NAME, IS, OS) that creates a new input section
506      called NAME and links it to output section OS.  If IS is nonnull,
507      the new section should go immediately before it, otherwise it
508      should go at the (current) beginning of OS.
509
510      The function returns the new section on success, otherwise it
511      returns null.  */
512   asection *(*add_stub_section) (const char *, asection *, asection *);
513
514   /* Small local sym cache.  */
515   struct sym_cache sym_cache;
516
517   /* Is the PLT header compressed?  */
518   unsigned int plt_header_is_comp : 1;
519 };
520
521 /* Get the MIPS ELF linker hash table from a link_info structure.  */
522
523 #define mips_elf_hash_table(p) \
524   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
525   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
526
527 /* A structure used to communicate with htab_traverse callbacks.  */
528 struct mips_htab_traverse_info
529 {
530   /* The usual link-wide information.  */
531   struct bfd_link_info *info;
532   bfd *output_bfd;
533
534   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
535   bfd_boolean error;
536 };
537
538 /* MIPS ELF private object data.  */
539
540 struct mips_elf_obj_tdata
541 {
542   /* Generic ELF private object data.  */
543   struct elf_obj_tdata root;
544
545   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
546   bfd *abi_fp_bfd;
547
548   /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
549   bfd *abi_msa_bfd;
550
551   /* The abiflags for this object.  */
552   Elf_Internal_ABIFlags_v0 abiflags;
553   bfd_boolean abiflags_valid;
554
555   /* The GOT requirements of input bfds.  */
556   struct mips_got_info *got;
557
558   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
559      included directly in this one, but there's no point to wasting
560      the memory just for the infrequently called find_nearest_line.  */
561   struct mips_elf_find_line *find_line_info;
562
563   /* An array of stub sections indexed by symbol number.  */
564   asection **local_stubs;
565   asection **local_call_stubs;
566
567   /* The Irix 5 support uses two virtual sections, which represent
568      text/data symbols defined in dynamic objects.  */
569   asymbol *elf_data_symbol;
570   asymbol *elf_text_symbol;
571   asection *elf_data_section;
572   asection *elf_text_section;
573 };
574
575 /* Get MIPS ELF private object data from BFD's tdata.  */
576
577 #define mips_elf_tdata(bfd) \
578   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
579
580 #define TLS_RELOC_P(r_type) \
581   (r_type == R_MIPS_TLS_DTPMOD32                \
582    || r_type == R_MIPS_TLS_DTPMOD64             \
583    || r_type == R_MIPS_TLS_DTPREL32             \
584    || r_type == R_MIPS_TLS_DTPREL64             \
585    || r_type == R_MIPS_TLS_GD                   \
586    || r_type == R_MIPS_TLS_LDM                  \
587    || r_type == R_MIPS_TLS_DTPREL_HI16          \
588    || r_type == R_MIPS_TLS_DTPREL_LO16          \
589    || r_type == R_MIPS_TLS_GOTTPREL             \
590    || r_type == R_MIPS_TLS_TPREL32              \
591    || r_type == R_MIPS_TLS_TPREL64              \
592    || r_type == R_MIPS_TLS_TPREL_HI16           \
593    || r_type == R_MIPS_TLS_TPREL_LO16           \
594    || r_type == R_MIPS16_TLS_GD                 \
595    || r_type == R_MIPS16_TLS_LDM                \
596    || r_type == R_MIPS16_TLS_DTPREL_HI16        \
597    || r_type == R_MIPS16_TLS_DTPREL_LO16        \
598    || r_type == R_MIPS16_TLS_GOTTPREL           \
599    || r_type == R_MIPS16_TLS_TPREL_HI16         \
600    || r_type == R_MIPS16_TLS_TPREL_LO16         \
601    || r_type == R_MICROMIPS_TLS_GD              \
602    || r_type == R_MICROMIPS_TLS_LDM             \
603    || r_type == R_MICROMIPS_TLS_DTPREL_HI16     \
604    || r_type == R_MICROMIPS_TLS_DTPREL_LO16     \
605    || r_type == R_MICROMIPS_TLS_GOTTPREL        \
606    || r_type == R_MICROMIPS_TLS_TPREL_HI16      \
607    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
608
609 /* Structure used to pass information to mips_elf_output_extsym.  */
610
611 struct extsym_info
612 {
613   bfd *abfd;
614   struct bfd_link_info *info;
615   struct ecoff_debug_info *debug;
616   const struct ecoff_debug_swap *swap;
617   bfd_boolean failed;
618 };
619
620 /* The names of the runtime procedure table symbols used on IRIX5.  */
621
622 static const char * const mips_elf_dynsym_rtproc_names[] =
623 {
624   "_procedure_table",
625   "_procedure_string_table",
626   "_procedure_table_size",
627   NULL
628 };
629
630 /* These structures are used to generate the .compact_rel section on
631    IRIX5.  */
632
633 typedef struct
634 {
635   unsigned long id1;            /* Always one?  */
636   unsigned long num;            /* Number of compact relocation entries.  */
637   unsigned long id2;            /* Always two?  */
638   unsigned long offset;         /* The file offset of the first relocation.  */
639   unsigned long reserved0;      /* Zero?  */
640   unsigned long reserved1;      /* Zero?  */
641 } Elf32_compact_rel;
642
643 typedef struct
644 {
645   bfd_byte id1[4];
646   bfd_byte num[4];
647   bfd_byte id2[4];
648   bfd_byte offset[4];
649   bfd_byte reserved0[4];
650   bfd_byte reserved1[4];
651 } Elf32_External_compact_rel;
652
653 typedef struct
654 {
655   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
656   unsigned int rtype : 4;       /* Relocation types. See below.  */
657   unsigned int dist2to : 8;
658   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
659   unsigned long konst;          /* KONST field. See below.  */
660   unsigned long vaddr;          /* VADDR to be relocated.  */
661 } Elf32_crinfo;
662
663 typedef struct
664 {
665   unsigned int ctype : 1;       /* 1: long 0: short format. See below.  */
666   unsigned int rtype : 4;       /* Relocation types. See below.  */
667   unsigned int dist2to : 8;
668   unsigned int relvaddr : 19;   /* (VADDR - vaddr of the previous entry)/ 4 */
669   unsigned long konst;          /* KONST field. See below.  */
670 } Elf32_crinfo2;
671
672 typedef struct
673 {
674   bfd_byte info[4];
675   bfd_byte konst[4];
676   bfd_byte vaddr[4];
677 } Elf32_External_crinfo;
678
679 typedef struct
680 {
681   bfd_byte info[4];
682   bfd_byte konst[4];
683 } Elf32_External_crinfo2;
684
685 /* These are the constants used to swap the bitfields in a crinfo.  */
686
687 #define CRINFO_CTYPE (0x1)
688 #define CRINFO_CTYPE_SH (31)
689 #define CRINFO_RTYPE (0xf)
690 #define CRINFO_RTYPE_SH (27)
691 #define CRINFO_DIST2TO (0xff)
692 #define CRINFO_DIST2TO_SH (19)
693 #define CRINFO_RELVADDR (0x7ffff)
694 #define CRINFO_RELVADDR_SH (0)
695
696 /* A compact relocation info has long (3 words) or short (2 words)
697    formats.  A short format doesn't have VADDR field and relvaddr
698    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
699 #define CRF_MIPS_LONG                   1
700 #define CRF_MIPS_SHORT                  0
701
702 /* There are 4 types of compact relocation at least. The value KONST
703    has different meaning for each type:
704
705    (type)               (konst)
706    CT_MIPS_REL32        Address in data
707    CT_MIPS_WORD         Address in word (XXX)
708    CT_MIPS_GPHI_LO      GP - vaddr
709    CT_MIPS_JMPAD        Address to jump
710    */
711
712 #define CRT_MIPS_REL32                  0xa
713 #define CRT_MIPS_WORD                   0xb
714 #define CRT_MIPS_GPHI_LO                0xc
715 #define CRT_MIPS_JMPAD                  0xd
716
717 #define mips_elf_set_cr_format(x,format)        ((x).ctype = (format))
718 #define mips_elf_set_cr_type(x,type)            ((x).rtype = (type))
719 #define mips_elf_set_cr_dist2to(x,v)            ((x).dist2to = (v))
720 #define mips_elf_set_cr_relvaddr(x,d)           ((x).relvaddr = (d)<<2)
721 \f
722 /* The structure of the runtime procedure descriptor created by the
723    loader for use by the static exception system.  */
724
725 typedef struct runtime_pdr {
726         bfd_vma adr;            /* Memory address of start of procedure.  */
727         long    regmask;        /* Save register mask.  */
728         long    regoffset;      /* Save register offset.  */
729         long    fregmask;       /* Save floating point register mask.  */
730         long    fregoffset;     /* Save floating point register offset.  */
731         long    frameoffset;    /* Frame size.  */
732         short   framereg;       /* Frame pointer register.  */
733         short   pcreg;          /* Offset or reg of return pc.  */
734         long    irpss;          /* Index into the runtime string table.  */
735         long    reserved;
736         struct exception_info *exception_info;/* Pointer to exception array.  */
737 } RPDR, *pRPDR;
738 #define cbRPDR sizeof (RPDR)
739 #define rpdNil ((pRPDR) 0)
740 \f
741 static struct mips_got_entry *mips_elf_create_local_got_entry
742   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
743    struct mips_elf_link_hash_entry *, int);
744 static bfd_boolean mips_elf_sort_hash_table_f
745   (struct mips_elf_link_hash_entry *, void *);
746 static bfd_vma mips_elf_high
747   (bfd_vma);
748 static bfd_boolean mips_elf_create_dynamic_relocation
749   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
750    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
751    bfd_vma *, asection *);
752 static bfd_vma mips_elf_adjust_gp
753   (bfd *, struct mips_got_info *, bfd *);
754
755 /* This will be used when we sort the dynamic relocation records.  */
756 static bfd *reldyn_sorting_bfd;
757
758 /* True if ABFD is for CPUs with load interlocking that include
759    non-MIPS1 CPUs and R3900.  */
760 #define LOAD_INTERLOCKS_P(abfd) \
761   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
762    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
763
764 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
765    This should be safe for all architectures.  We enable this predicate
766    for RM9000 for now.  */
767 #define JAL_TO_BAL_P(abfd) \
768   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
769
770 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
771    This should be safe for all architectures.  We enable this predicate for
772    all CPUs.  */
773 #define JALR_TO_BAL_P(abfd) 1
774
775 /* True if ABFD is for CPUs that are faster if JR is converted to B.
776    This should be safe for all architectures.  We enable this predicate for
777    all CPUs.  */
778 #define JR_TO_B_P(abfd) 1
779
780 /* True if ABFD is a PIC object.  */
781 #define PIC_OBJECT_P(abfd) \
782   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
783
784 /* Nonzero if ABFD is using the O32 ABI.  */
785 #define ABI_O32_P(abfd) \
786   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
787
788 /* Nonzero if ABFD is using the N32 ABI.  */
789 #define ABI_N32_P(abfd) \
790   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
791
792 /* Nonzero if ABFD is using the N64 ABI.  */
793 #define ABI_64_P(abfd) \
794   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
795
796 /* Nonzero if ABFD is using NewABI conventions.  */
797 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
798
799 /* Nonzero if ABFD has microMIPS code.  */
800 #define MICROMIPS_P(abfd) \
801   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
802
803 /* Nonzero if ABFD is MIPS R6.  */
804 #define MIPSR6_P(abfd) \
805   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
806     || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
807
808 /* The IRIX compatibility level we are striving for.  */
809 #define IRIX_COMPAT(abfd) \
810   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
811
812 /* Whether we are trying to be compatible with IRIX at all.  */
813 #define SGI_COMPAT(abfd) \
814   (IRIX_COMPAT (abfd) != ict_none)
815
816 /* The name of the options section.  */
817 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
818   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
819
820 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
821    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
822 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
823   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
824
825 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
826 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
827   (strcmp (NAME, ".MIPS.abiflags") == 0)
828
829 /* Whether the section is readonly.  */
830 #define MIPS_ELF_READONLY_SECTION(sec) \
831   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))         \
832    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
833
834 /* The name of the stub section.  */
835 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
836
837 /* The size of an external REL relocation.  */
838 #define MIPS_ELF_REL_SIZE(abfd) \
839   (get_elf_backend_data (abfd)->s->sizeof_rel)
840
841 /* The size of an external RELA relocation.  */
842 #define MIPS_ELF_RELA_SIZE(abfd) \
843   (get_elf_backend_data (abfd)->s->sizeof_rela)
844
845 /* The size of an external dynamic table entry.  */
846 #define MIPS_ELF_DYN_SIZE(abfd) \
847   (get_elf_backend_data (abfd)->s->sizeof_dyn)
848
849 /* The size of a GOT entry.  */
850 #define MIPS_ELF_GOT_SIZE(abfd) \
851   (get_elf_backend_data (abfd)->s->arch_size / 8)
852
853 /* The size of the .rld_map section. */
854 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
855   (get_elf_backend_data (abfd)->s->arch_size / 8)
856
857 /* The size of a symbol-table entry.  */
858 #define MIPS_ELF_SYM_SIZE(abfd) \
859   (get_elf_backend_data (abfd)->s->sizeof_sym)
860
861 /* The default alignment for sections, as a power of two.  */
862 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)                           \
863   (get_elf_backend_data (abfd)->s->log_file_align)
864
865 /* Get word-sized data.  */
866 #define MIPS_ELF_GET_WORD(abfd, ptr) \
867   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
868
869 /* Put out word-sized data.  */
870 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)       \
871   (ABI_64_P (abfd)                              \
872    ? bfd_put_64 (abfd, val, ptr)                \
873    : bfd_put_32 (abfd, val, ptr))
874
875 /* The opcode for word-sized loads (LW or LD).  */
876 #define MIPS_ELF_LOAD_WORD(abfd) \
877   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
878
879 /* Add a dynamic symbol table-entry.  */
880 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)      \
881   _bfd_elf_add_dynamic_entry (info, tag, val)
882
883 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)                      \
884   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
885
886 /* The name of the dynamic relocation section.  */
887 #define MIPS_ELF_REL_DYN_NAME(INFO) \
888   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
889
890 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
891    from smaller values.  Start with zero, widen, *then* decrement.  */
892 #define MINUS_ONE       (((bfd_vma)0) - 1)
893 #define MINUS_TWO       (((bfd_vma)0) - 2)
894
895 /* The value to write into got[1] for SVR4 targets, to identify it is
896    a GNU object.  The dynamic linker can then use got[1] to store the
897    module pointer.  */
898 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
899   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
900
901 /* The offset of $gp from the beginning of the .got section.  */
902 #define ELF_MIPS_GP_OFFSET(INFO) \
903   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
904
905 /* The maximum size of the GOT for it to be addressable using 16-bit
906    offsets from $gp.  */
907 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
908
909 /* Instructions which appear in a stub.  */
910 #define STUB_LW(abfd)                                                   \
911   ((ABI_64_P (abfd)                                                     \
912     ? 0xdf998010                                /* ld t9,0x8010(gp) */  \
913     : 0x8f998010))                              /* lw t9,0x8010(gp) */
914 #define STUB_MOVE 0x03e07825                    /* or t7,ra,zero */
915 #define STUB_LUI(VAL) (0x3c180000 + (VAL))      /* lui t8,VAL */
916 #define STUB_JALR 0x0320f809                    /* jalr t9,ra */
917 #define STUB_ORI(VAL) (0x37180000 + (VAL))      /* ori t8,t8,VAL */
918 #define STUB_LI16U(VAL) (0x34180000 + (VAL))    /* ori t8,zero,VAL unsigned */
919 #define STUB_LI16S(abfd, VAL)                                           \
920    ((ABI_64_P (abfd)                                                    \
921     ? (0x64180000 + (VAL))      /* daddiu t8,zero,VAL sign extended */  \
922     : (0x24180000 + (VAL))))    /* addiu t8,zero,VAL sign extended */
923
924 /* Likewise for the microMIPS ASE.  */
925 #define STUB_LW_MICROMIPS(abfd)                                         \
926   (ABI_64_P (abfd)                                                      \
927    ? 0xdf3c8010                                 /* ld t9,0x8010(gp) */  \
928    : 0xff3c8010)                                /* lw t9,0x8010(gp) */
929 #define STUB_MOVE_MICROMIPS 0x0dff              /* move t7,ra */
930 #define STUB_MOVE32_MICROMIPS 0x001f7a90        /* or t7,ra,zero */
931 #define STUB_LUI_MICROMIPS(VAL)                                         \
932    (0x41b80000 + (VAL))                         /* lui t8,VAL */
933 #define STUB_JALR_MICROMIPS 0x45d9              /* jalr t9 */
934 #define STUB_JALR32_MICROMIPS 0x03f90f3c        /* jalr ra,t9 */
935 #define STUB_ORI_MICROMIPS(VAL)                                         \
936   (0x53180000 + (VAL))                          /* ori t8,t8,VAL */
937 #define STUB_LI16U_MICROMIPS(VAL)                                       \
938   (0x53000000 + (VAL))                          /* ori t8,zero,VAL unsigned */
939 #define STUB_LI16S_MICROMIPS(abfd, VAL)                                 \
940    (ABI_64_P (abfd)                                                     \
941     ? 0x5f000000 + (VAL)        /* daddiu t8,zero,VAL sign extended */  \
942     : 0x33000000 + (VAL))       /* addiu t8,zero,VAL sign extended */
943
944 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
945 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
946 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
947 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
948 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
949 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
950
951 /* The name of the dynamic interpreter.  This is put in the .interp
952    section.  */
953
954 #define ELF_DYNAMIC_INTERPRETER(abfd)           \
955    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"   \
956     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"  \
957     : "/usr/lib/libc.so.1")
958
959 #ifdef BFD64
960 #define MNAME(bfd,pre,pos) \
961   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
962 #define ELF_R_SYM(bfd, i)                                       \
963   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
964 #define ELF_R_TYPE(bfd, i)                                      \
965   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
966 #define ELF_R_INFO(bfd, s, t)                                   \
967   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
968 #else
969 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
970 #define ELF_R_SYM(bfd, i)                                       \
971   (ELF32_R_SYM (i))
972 #define ELF_R_TYPE(bfd, i)                                      \
973   (ELF32_R_TYPE (i))
974 #define ELF_R_INFO(bfd, s, t)                                   \
975   (ELF32_R_INFO (s, t))
976 #endif
977 \f
978   /* The mips16 compiler uses a couple of special sections to handle
979      floating point arguments.
980
981      Section names that look like .mips16.fn.FNNAME contain stubs that
982      copy floating point arguments from the fp regs to the gp regs and
983      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
984      call should be redirected to the stub instead.  If no 32 bit
985      function calls FNNAME, the stub should be discarded.  We need to
986      consider any reference to the function, not just a call, because
987      if the address of the function is taken we will need the stub,
988      since the address might be passed to a 32 bit function.
989
990      Section names that look like .mips16.call.FNNAME contain stubs
991      that copy floating point arguments from the gp regs to the fp
992      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
993      then any 16 bit function that calls FNNAME should be redirected
994      to the stub instead.  If FNNAME is not a 32 bit function, the
995      stub should be discarded.
996
997      .mips16.call.fp.FNNAME sections are similar, but contain stubs
998      which call FNNAME and then copy the return value from the fp regs
999      to the gp regs.  These stubs store the return value in $18 while
1000      calling FNNAME; any function which might call one of these stubs
1001      must arrange to save $18 around the call.  (This case is not
1002      needed for 32 bit functions that call 16 bit functions, because
1003      16 bit functions always return floating point values in both
1004      $f0/$f1 and $2/$3.)
1005
1006      Note that in all cases FNNAME might be defined statically.
1007      Therefore, FNNAME is not used literally.  Instead, the relocation
1008      information will indicate which symbol the section is for.
1009
1010      We record any stubs that we find in the symbol table.  */
1011
1012 #define FN_STUB ".mips16.fn."
1013 #define CALL_STUB ".mips16.call."
1014 #define CALL_FP_STUB ".mips16.call.fp."
1015
1016 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1017 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1018 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1019 \f
1020 /* The format of the first PLT entry in an O32 executable.  */
1021 static const bfd_vma mips_o32_exec_plt0_entry[] =
1022 {
1023   0x3c1c0000,   /* lui $28, %hi(&GOTPLT[0])                             */
1024   0x8f990000,   /* lw $25, %lo(&GOTPLT[0])($28)                         */
1025   0x279c0000,   /* addiu $28, $28, %lo(&GOTPLT[0])                      */
1026   0x031cc023,   /* subu $24, $24, $28                                   */
1027   0x03e07825,   /* or t7, ra, zero                                      */
1028   0x0018c082,   /* srl $24, $24, 2                                      */
1029   0x0320f809,   /* jalr $25                                             */
1030   0x2718fffe    /* subu $24, $24, 2                                     */
1031 };
1032
1033 /* The format of the first PLT entry in an N32 executable.  Different
1034    because gp ($28) is not available; we use t2 ($14) instead.  */
1035 static const bfd_vma mips_n32_exec_plt0_entry[] =
1036 {
1037   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1038   0x8dd90000,   /* lw $25, %lo(&GOTPLT[0])($14)                         */
1039   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1040   0x030ec023,   /* subu $24, $24, $14                                   */
1041   0x03e07825,   /* or t7, ra, zero                                      */
1042   0x0018c082,   /* srl $24, $24, 2                                      */
1043   0x0320f809,   /* jalr $25                                             */
1044   0x2718fffe    /* subu $24, $24, 2                                     */
1045 };
1046
1047 /* The format of the first PLT entry in an N64 executable.  Different
1048    from N32 because of the increased size of GOT entries.  */
1049 static const bfd_vma mips_n64_exec_plt0_entry[] =
1050 {
1051   0x3c0e0000,   /* lui $14, %hi(&GOTPLT[0])                             */
1052   0xddd90000,   /* ld $25, %lo(&GOTPLT[0])($14)                         */
1053   0x25ce0000,   /* addiu $14, $14, %lo(&GOTPLT[0])                      */
1054   0x030ec023,   /* subu $24, $24, $14                                   */
1055   0x03e07825,   /* or t7, ra, zero                                      */
1056   0x0018c0c2,   /* srl $24, $24, 3                                      */
1057   0x0320f809,   /* jalr $25                                             */
1058   0x2718fffe    /* subu $24, $24, 2                                     */
1059 };
1060
1061 /* The format of the microMIPS first PLT entry in an O32 executable.
1062    We rely on v0 ($2) rather than t8 ($24) to contain the address
1063    of the GOTPLT entry handled, so this stub may only be used when
1064    all the subsequent PLT entries are microMIPS code too.
1065
1066    The trailing NOP is for alignment and correct disassembly only.  */
1067 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1068 {
1069   0x7980, 0x0000,       /* addiupc $3, (&GOTPLT[0]) - .                 */
1070   0xff23, 0x0000,       /* lw $25, 0($3)                                */
1071   0x0535,               /* subu $2, $2, $3                              */
1072   0x2525,               /* srl $2, $2, 2                                */
1073   0x3302, 0xfffe,       /* subu $24, $2, 2                              */
1074   0x0dff,               /* move $15, $31                                */
1075   0x45f9,               /* jalrs $25                                    */
1076   0x0f83,               /* move $28, $3                                 */
1077   0x0c00                /* nop                                          */
1078 };
1079
1080 /* The format of the microMIPS first PLT entry in an O32 executable
1081    in the insn32 mode.  */
1082 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1083 {
1084   0x41bc, 0x0000,       /* lui $28, %hi(&GOTPLT[0])                     */
1085   0xff3c, 0x0000,       /* lw $25, %lo(&GOTPLT[0])($28)                 */
1086   0x339c, 0x0000,       /* addiu $28, $28, %lo(&GOTPLT[0])              */
1087   0x0398, 0xc1d0,       /* subu $24, $24, $28                           */
1088   0x001f, 0x7a90,       /* or $15, $31, zero                            */
1089   0x0318, 0x1040,       /* srl $24, $24, 2                              */
1090   0x03f9, 0x0f3c,       /* jalr $25                                     */
1091   0x3318, 0xfffe        /* subu $24, $24, 2                             */
1092 };
1093
1094 /* The format of subsequent standard PLT entries.  */
1095 static const bfd_vma mips_exec_plt_entry[] =
1096 {
1097   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1098   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1099   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1100   0x03200008    /* jr $25                                       */
1101 };
1102
1103 /* In the following PLT entry the JR and ADDIU instructions will
1104    be swapped in _bfd_mips_elf_finish_dynamic_symbol because
1105    LOAD_INTERLOCKS_P will be true for MIPS R6.  */
1106 static const bfd_vma mipsr6_exec_plt_entry[] =
1107 {
1108   0x3c0f0000,   /* lui $15, %hi(.got.plt entry)                 */
1109   0x01f90000,   /* l[wd] $25, %lo(.got.plt entry)($15)          */
1110   0x25f80000,   /* addiu $24, $15, %lo(.got.plt entry)          */
1111   0x03200009    /* jr $25                                       */
1112 };
1113
1114 /* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1115    and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1116    directly addressable.  */
1117 static const bfd_vma mips16_o32_exec_plt_entry[] =
1118 {
1119   0xb203,               /* lw $2, 12($pc)                       */
1120   0x9a60,               /* lw $3, 0($2)                         */
1121   0x651a,               /* move $24, $2                         */
1122   0xeb00,               /* jr $3                                */
1123   0x653b,               /* move $25, $3                         */
1124   0x6500,               /* nop                                  */
1125   0x0000, 0x0000        /* .word (.got.plt entry)               */
1126 };
1127
1128 /* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1129    as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1130 static const bfd_vma micromips_o32_exec_plt_entry[] =
1131 {
1132   0x7900, 0x0000,       /* addiupc $2, (.got.plt entry) - .     */
1133   0xff22, 0x0000,       /* lw $25, 0($2)                        */
1134   0x4599,               /* jr $25                               */
1135   0x0f02                /* move $24, $2                         */
1136 };
1137
1138 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1139 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1140 {
1141   0x41af, 0x0000,       /* lui $15, %hi(.got.plt entry)         */
1142   0xff2f, 0x0000,       /* lw $25, %lo(.got.plt entry)($15)     */
1143   0x0019, 0x0f3c,       /* jr $25                               */
1144   0x330f, 0x0000        /* addiu $24, $15, %lo(.got.plt entry)  */
1145 };
1146
1147 /* The format of the first PLT entry in a VxWorks executable.  */
1148 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1149 {
1150   0x3c190000,   /* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)           */
1151   0x27390000,   /* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)     */
1152   0x8f390008,   /* lw t9, 8(t9)                                 */
1153   0x00000000,   /* nop                                          */
1154   0x03200008,   /* jr t9                                        */
1155   0x00000000    /* nop                                          */
1156 };
1157
1158 /* The format of subsequent PLT entries.  */
1159 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1160 {
1161   0x10000000,   /* b .PLT_resolver                      */
1162   0x24180000,   /* li t8, <pltindex>                    */
1163   0x3c190000,   /* lui t9, %hi(<.got.plt slot>)         */
1164   0x27390000,   /* addiu t9, t9, %lo(<.got.plt slot>)   */
1165   0x8f390000,   /* lw t9, 0(t9)                         */
1166   0x00000000,   /* nop                                  */
1167   0x03200008,   /* jr t9                                */
1168   0x00000000    /* nop                                  */
1169 };
1170
1171 /* The format of the first PLT entry in a VxWorks shared object.  */
1172 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1173 {
1174   0x8f990008,   /* lw t9, 8(gp)         */
1175   0x00000000,   /* nop                  */
1176   0x03200008,   /* jr t9                */
1177   0x00000000,   /* nop                  */
1178   0x00000000,   /* nop                  */
1179   0x00000000    /* nop                  */
1180 };
1181
1182 /* The format of subsequent PLT entries.  */
1183 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1184 {
1185   0x10000000,   /* b .PLT_resolver      */
1186   0x24180000    /* li t8, <pltindex>    */
1187 };
1188 \f
1189 /* microMIPS 32-bit opcode helper installer.  */
1190
1191 static void
1192 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1193 {
1194   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1195   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1196 }
1197
1198 /* microMIPS 32-bit opcode helper retriever.  */
1199
1200 static bfd_vma
1201 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1202 {
1203   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1204 }
1205 \f
1206 /* Look up an entry in a MIPS ELF linker hash table.  */
1207
1208 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)  \
1209   ((struct mips_elf_link_hash_entry *)                                  \
1210    elf_link_hash_lookup (&(table)->root, (string), (create),            \
1211                          (copy), (follow)))
1212
1213 /* Traverse a MIPS ELF linker hash table.  */
1214
1215 #define mips_elf_link_hash_traverse(table, func, info)                  \
1216   (elf_link_hash_traverse                                               \
1217    (&(table)->root,                                                     \
1218     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),    \
1219     (info)))
1220
1221 /* Find the base offsets for thread-local storage in this object,
1222    for GD/LD and IE/LE respectively.  */
1223
1224 #define TP_OFFSET 0x7000
1225 #define DTP_OFFSET 0x8000
1226
1227 static bfd_vma
1228 dtprel_base (struct bfd_link_info *info)
1229 {
1230   /* If tls_sec is NULL, we should have signalled an error already.  */
1231   if (elf_hash_table (info)->tls_sec == NULL)
1232     return 0;
1233   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1234 }
1235
1236 static bfd_vma
1237 tprel_base (struct bfd_link_info *info)
1238 {
1239   /* If tls_sec is NULL, we should have signalled an error already.  */
1240   if (elf_hash_table (info)->tls_sec == NULL)
1241     return 0;
1242   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1243 }
1244
1245 /* Create an entry in a MIPS ELF linker hash table.  */
1246
1247 static struct bfd_hash_entry *
1248 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1249                             struct bfd_hash_table *table, const char *string)
1250 {
1251   struct mips_elf_link_hash_entry *ret =
1252     (struct mips_elf_link_hash_entry *) entry;
1253
1254   /* Allocate the structure if it has not already been allocated by a
1255      subclass.  */
1256   if (ret == NULL)
1257     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1258   if (ret == NULL)
1259     return (struct bfd_hash_entry *) ret;
1260
1261   /* Call the allocation method of the superclass.  */
1262   ret = ((struct mips_elf_link_hash_entry *)
1263          _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1264                                      table, string));
1265   if (ret != NULL)
1266     {
1267       /* Set local fields.  */
1268       memset (&ret->esym, 0, sizeof (EXTR));
1269       /* We use -2 as a marker to indicate that the information has
1270          not been set.  -1 means there is no associated ifd.  */
1271       ret->esym.ifd = -2;
1272       ret->la25_stub = 0;
1273       ret->possibly_dynamic_relocs = 0;
1274       ret->fn_stub = NULL;
1275       ret->call_stub = NULL;
1276       ret->call_fp_stub = NULL;
1277       ret->global_got_area = GGA_NONE;
1278       ret->got_only_for_calls = TRUE;
1279       ret->readonly_reloc = FALSE;
1280       ret->has_static_relocs = FALSE;
1281       ret->no_fn_stub = FALSE;
1282       ret->need_fn_stub = FALSE;
1283       ret->has_nonpic_branches = FALSE;
1284       ret->needs_lazy_stub = FALSE;
1285       ret->use_plt_entry = FALSE;
1286     }
1287
1288   return (struct bfd_hash_entry *) ret;
1289 }
1290
1291 /* Allocate MIPS ELF private object data.  */
1292
1293 bfd_boolean
1294 _bfd_mips_elf_mkobject (bfd *abfd)
1295 {
1296   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1297                                   MIPS_ELF_DATA);
1298 }
1299
1300 bfd_boolean
1301 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1302 {
1303   if (!sec->used_by_bfd)
1304     {
1305       struct _mips_elf_section_data *sdata;
1306       bfd_size_type amt = sizeof (*sdata);
1307
1308       sdata = bfd_zalloc (abfd, amt);
1309       if (sdata == NULL)
1310         return FALSE;
1311       sec->used_by_bfd = sdata;
1312     }
1313
1314   return _bfd_elf_new_section_hook (abfd, sec);
1315 }
1316 \f
1317 /* Read ECOFF debugging information from a .mdebug section into a
1318    ecoff_debug_info structure.  */
1319
1320 bfd_boolean
1321 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1322                                struct ecoff_debug_info *debug)
1323 {
1324   HDRR *symhdr;
1325   const struct ecoff_debug_swap *swap;
1326   char *ext_hdr;
1327
1328   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1329   memset (debug, 0, sizeof (*debug));
1330
1331   ext_hdr = bfd_malloc (swap->external_hdr_size);
1332   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1333     goto error_return;
1334
1335   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1336                                   swap->external_hdr_size))
1337     goto error_return;
1338
1339   symhdr = &debug->symbolic_header;
1340   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1341
1342   /* The symbolic header contains absolute file offsets and sizes to
1343      read.  */
1344 #define READ(ptr, offset, count, size, type)                            \
1345   if (symhdr->count == 0)                                               \
1346     debug->ptr = NULL;                                                  \
1347   else                                                                  \
1348     {                                                                   \
1349       bfd_size_type amt = (bfd_size_type) size * symhdr->count;         \
1350       debug->ptr = bfd_malloc (amt);                                    \
1351       if (debug->ptr == NULL)                                           \
1352         goto error_return;                                              \
1353       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0                \
1354           || bfd_bread (debug->ptr, amt, abfd) != amt)                  \
1355         goto error_return;                                              \
1356     }
1357
1358   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1359   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1360   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1361   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1362   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1363   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1364         union aux_ext *);
1365   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1366   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1367   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1368   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1369   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1370 #undef READ
1371
1372   debug->fdr = NULL;
1373
1374   return TRUE;
1375
1376  error_return:
1377   if (ext_hdr != NULL)
1378     free (ext_hdr);
1379   if (debug->line != NULL)
1380     free (debug->line);
1381   if (debug->external_dnr != NULL)
1382     free (debug->external_dnr);
1383   if (debug->external_pdr != NULL)
1384     free (debug->external_pdr);
1385   if (debug->external_sym != NULL)
1386     free (debug->external_sym);
1387   if (debug->external_opt != NULL)
1388     free (debug->external_opt);
1389   if (debug->external_aux != NULL)
1390     free (debug->external_aux);
1391   if (debug->ss != NULL)
1392     free (debug->ss);
1393   if (debug->ssext != NULL)
1394     free (debug->ssext);
1395   if (debug->external_fdr != NULL)
1396     free (debug->external_fdr);
1397   if (debug->external_rfd != NULL)
1398     free (debug->external_rfd);
1399   if (debug->external_ext != NULL)
1400     free (debug->external_ext);
1401   return FALSE;
1402 }
1403 \f
1404 /* Swap RPDR (runtime procedure table entry) for output.  */
1405
1406 static void
1407 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1408 {
1409   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1410   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1411   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1412   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1413   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1414   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1415
1416   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1417   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1418
1419   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1420 }
1421
1422 /* Create a runtime procedure table from the .mdebug section.  */
1423
1424 static bfd_boolean
1425 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1426                                  struct bfd_link_info *info, asection *s,
1427                                  struct ecoff_debug_info *debug)
1428 {
1429   const struct ecoff_debug_swap *swap;
1430   HDRR *hdr = &debug->symbolic_header;
1431   RPDR *rpdr, *rp;
1432   struct rpdr_ext *erp;
1433   void *rtproc;
1434   struct pdr_ext *epdr;
1435   struct sym_ext *esym;
1436   char *ss, **sv;
1437   char *str;
1438   bfd_size_type size;
1439   bfd_size_type count;
1440   unsigned long sindex;
1441   unsigned long i;
1442   PDR pdr;
1443   SYMR sym;
1444   const char *no_name_func = _("static procedure (no name)");
1445
1446   epdr = NULL;
1447   rpdr = NULL;
1448   esym = NULL;
1449   ss = NULL;
1450   sv = NULL;
1451
1452   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1453
1454   sindex = strlen (no_name_func) + 1;
1455   count = hdr->ipdMax;
1456   if (count > 0)
1457     {
1458       size = swap->external_pdr_size;
1459
1460       epdr = bfd_malloc (size * count);
1461       if (epdr == NULL)
1462         goto error_return;
1463
1464       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1465         goto error_return;
1466
1467       size = sizeof (RPDR);
1468       rp = rpdr = bfd_malloc (size * count);
1469       if (rpdr == NULL)
1470         goto error_return;
1471
1472       size = sizeof (char *);
1473       sv = bfd_malloc (size * count);
1474       if (sv == NULL)
1475         goto error_return;
1476
1477       count = hdr->isymMax;
1478       size = swap->external_sym_size;
1479       esym = bfd_malloc (size * count);
1480       if (esym == NULL)
1481         goto error_return;
1482
1483       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1484         goto error_return;
1485
1486       count = hdr->issMax;
1487       ss = bfd_malloc (count);
1488       if (ss == NULL)
1489         goto error_return;
1490       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1491         goto error_return;
1492
1493       count = hdr->ipdMax;
1494       for (i = 0; i < (unsigned long) count; i++, rp++)
1495         {
1496           (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1497           (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1498           rp->adr = sym.value;
1499           rp->regmask = pdr.regmask;
1500           rp->regoffset = pdr.regoffset;
1501           rp->fregmask = pdr.fregmask;
1502           rp->fregoffset = pdr.fregoffset;
1503           rp->frameoffset = pdr.frameoffset;
1504           rp->framereg = pdr.framereg;
1505           rp->pcreg = pdr.pcreg;
1506           rp->irpss = sindex;
1507           sv[i] = ss + sym.iss;
1508           sindex += strlen (sv[i]) + 1;
1509         }
1510     }
1511
1512   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1513   size = BFD_ALIGN (size, 16);
1514   rtproc = bfd_alloc (abfd, size);
1515   if (rtproc == NULL)
1516     {
1517       mips_elf_hash_table (info)->procedure_count = 0;
1518       goto error_return;
1519     }
1520
1521   mips_elf_hash_table (info)->procedure_count = count + 2;
1522
1523   erp = rtproc;
1524   memset (erp, 0, sizeof (struct rpdr_ext));
1525   erp++;
1526   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1527   strcpy (str, no_name_func);
1528   str += strlen (no_name_func) + 1;
1529   for (i = 0; i < count; i++)
1530     {
1531       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1532       strcpy (str, sv[i]);
1533       str += strlen (sv[i]) + 1;
1534     }
1535   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1536
1537   /* Set the size and contents of .rtproc section.  */
1538   s->size = size;
1539   s->contents = rtproc;
1540
1541   /* Skip this section later on (I don't think this currently
1542      matters, but someday it might).  */
1543   s->map_head.link_order = NULL;
1544
1545   if (epdr != NULL)
1546     free (epdr);
1547   if (rpdr != NULL)
1548     free (rpdr);
1549   if (esym != NULL)
1550     free (esym);
1551   if (ss != NULL)
1552     free (ss);
1553   if (sv != NULL)
1554     free (sv);
1555
1556   return TRUE;
1557
1558  error_return:
1559   if (epdr != NULL)
1560     free (epdr);
1561   if (rpdr != NULL)
1562     free (rpdr);
1563   if (esym != NULL)
1564     free (esym);
1565   if (ss != NULL)
1566     free (ss);
1567   if (sv != NULL)
1568     free (sv);
1569   return FALSE;
1570 }
1571 \f
1572 /* We're going to create a stub for H.  Create a symbol for the stub's
1573    value and size, to help make the disassembly easier to read.  */
1574
1575 static bfd_boolean
1576 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1577                              struct mips_elf_link_hash_entry *h,
1578                              const char *prefix, asection *s, bfd_vma value,
1579                              bfd_vma size)
1580 {
1581   struct bfd_link_hash_entry *bh;
1582   struct elf_link_hash_entry *elfh;
1583   char *name;
1584   bfd_boolean res;
1585
1586   if (ELF_ST_IS_MICROMIPS (h->root.other))
1587     value |= 1;
1588
1589   /* Create a new symbol.  */
1590   name = concat (prefix, h->root.root.root.string, NULL);
1591   bh = NULL;
1592   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1593                                           BSF_LOCAL, s, value, NULL,
1594                                           TRUE, FALSE, &bh);
1595   free (name);
1596   if (! res)
1597     return FALSE;
1598
1599   /* Make it a local function.  */
1600   elfh = (struct elf_link_hash_entry *) bh;
1601   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1602   elfh->size = size;
1603   elfh->forced_local = 1;
1604   return TRUE;
1605 }
1606
1607 /* We're about to redefine H.  Create a symbol to represent H's
1608    current value and size, to help make the disassembly easier
1609    to read.  */
1610
1611 static bfd_boolean
1612 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1613                                struct mips_elf_link_hash_entry *h,
1614                                const char *prefix)
1615 {
1616   struct bfd_link_hash_entry *bh;
1617   struct elf_link_hash_entry *elfh;
1618   char *name;
1619   asection *s;
1620   bfd_vma value;
1621   bfd_boolean res;
1622
1623   /* Read the symbol's value.  */
1624   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1625               || h->root.root.type == bfd_link_hash_defweak);
1626   s = h->root.root.u.def.section;
1627   value = h->root.root.u.def.value;
1628
1629   /* Create a new symbol.  */
1630   name = concat (prefix, h->root.root.root.string, NULL);
1631   bh = NULL;
1632   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1633                                           BSF_LOCAL, s, value, NULL,
1634                                           TRUE, FALSE, &bh);
1635   free (name);
1636   if (! res)
1637     return FALSE;
1638
1639   /* Make it local and copy the other attributes from H.  */
1640   elfh = (struct elf_link_hash_entry *) bh;
1641   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1642   elfh->other = h->root.other;
1643   elfh->size = h->root.size;
1644   elfh->forced_local = 1;
1645   return TRUE;
1646 }
1647
1648 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1649    function rather than to a hard-float stub.  */
1650
1651 static bfd_boolean
1652 section_allows_mips16_refs_p (asection *section)
1653 {
1654   const char *name;
1655
1656   name = bfd_get_section_name (section->owner, section);
1657   return (FN_STUB_P (name)
1658           || CALL_STUB_P (name)
1659           || CALL_FP_STUB_P (name)
1660           || strcmp (name, ".pdr") == 0);
1661 }
1662
1663 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1664    stub section of some kind.  Return the R_SYMNDX of the target
1665    function, or 0 if we can't decide which function that is.  */
1666
1667 static unsigned long
1668 mips16_stub_symndx (const struct elf_backend_data *bed,
1669                     asection *sec ATTRIBUTE_UNUSED,
1670                     const Elf_Internal_Rela *relocs,
1671                     const Elf_Internal_Rela *relend)
1672 {
1673   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1674   const Elf_Internal_Rela *rel;
1675
1676   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1677      one in a compound relocation.  */
1678   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1679     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1680       return ELF_R_SYM (sec->owner, rel->r_info);
1681
1682   /* Otherwise trust the first relocation, whatever its kind.  This is
1683      the traditional behavior.  */
1684   if (relocs < relend)
1685     return ELF_R_SYM (sec->owner, relocs->r_info);
1686
1687   return 0;
1688 }
1689
1690 /* Check the mips16 stubs for a particular symbol, and see if we can
1691    discard them.  */
1692
1693 static void
1694 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1695                              struct mips_elf_link_hash_entry *h)
1696 {
1697   /* Dynamic symbols must use the standard call interface, in case other
1698      objects try to call them.  */
1699   if (h->fn_stub != NULL
1700       && h->root.dynindx != -1)
1701     {
1702       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1703       h->need_fn_stub = TRUE;
1704     }
1705
1706   if (h->fn_stub != NULL
1707       && ! h->need_fn_stub)
1708     {
1709       /* We don't need the fn_stub; the only references to this symbol
1710          are 16 bit calls.  Clobber the size to 0 to prevent it from
1711          being included in the link.  */
1712       h->fn_stub->size = 0;
1713       h->fn_stub->flags &= ~SEC_RELOC;
1714       h->fn_stub->reloc_count = 0;
1715       h->fn_stub->flags |= SEC_EXCLUDE;
1716       h->fn_stub->output_section = bfd_abs_section_ptr;
1717     }
1718
1719   if (h->call_stub != NULL
1720       && ELF_ST_IS_MIPS16 (h->root.other))
1721     {
1722       /* We don't need the call_stub; this is a 16 bit function, so
1723          calls from other 16 bit functions are OK.  Clobber the size
1724          to 0 to prevent it from being included in the link.  */
1725       h->call_stub->size = 0;
1726       h->call_stub->flags &= ~SEC_RELOC;
1727       h->call_stub->reloc_count = 0;
1728       h->call_stub->flags |= SEC_EXCLUDE;
1729       h->call_stub->output_section = bfd_abs_section_ptr;
1730     }
1731
1732   if (h->call_fp_stub != NULL
1733       && ELF_ST_IS_MIPS16 (h->root.other))
1734     {
1735       /* We don't need the call_stub; this is a 16 bit function, so
1736          calls from other 16 bit functions are OK.  Clobber the size
1737          to 0 to prevent it from being included in the link.  */
1738       h->call_fp_stub->size = 0;
1739       h->call_fp_stub->flags &= ~SEC_RELOC;
1740       h->call_fp_stub->reloc_count = 0;
1741       h->call_fp_stub->flags |= SEC_EXCLUDE;
1742       h->call_fp_stub->output_section = bfd_abs_section_ptr;
1743     }
1744 }
1745
1746 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1747
1748 static hashval_t
1749 mips_elf_la25_stub_hash (const void *entry_)
1750 {
1751   const struct mips_elf_la25_stub *entry;
1752
1753   entry = (struct mips_elf_la25_stub *) entry_;
1754   return entry->h->root.root.u.def.section->id
1755     + entry->h->root.root.u.def.value;
1756 }
1757
1758 static int
1759 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1760 {
1761   const struct mips_elf_la25_stub *entry1, *entry2;
1762
1763   entry1 = (struct mips_elf_la25_stub *) entry1_;
1764   entry2 = (struct mips_elf_la25_stub *) entry2_;
1765   return ((entry1->h->root.root.u.def.section
1766            == entry2->h->root.root.u.def.section)
1767           && (entry1->h->root.root.u.def.value
1768               == entry2->h->root.root.u.def.value));
1769 }
1770
1771 /* Called by the linker to set up the la25 stub-creation code.  FN is
1772    the linker's implementation of add_stub_function.  Return true on
1773    success.  */
1774
1775 bfd_boolean
1776 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1777                           asection *(*fn) (const char *, asection *,
1778                                            asection *))
1779 {
1780   struct mips_elf_link_hash_table *htab;
1781
1782   htab = mips_elf_hash_table (info);
1783   if (htab == NULL)
1784     return FALSE;
1785
1786   htab->add_stub_section = fn;
1787   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1788                                       mips_elf_la25_stub_eq, NULL);
1789   if (htab->la25_stubs == NULL)
1790     return FALSE;
1791
1792   return TRUE;
1793 }
1794
1795 /* Return true if H is a locally-defined PIC function, in the sense
1796    that it or its fn_stub might need $25 to be valid on entry.
1797    Note that MIPS16 functions set up $gp using PC-relative instructions,
1798    so they themselves never need $25 to be valid.  Only non-MIPS16
1799    entry points are of interest here.  */
1800
1801 static bfd_boolean
1802 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1803 {
1804   return ((h->root.root.type == bfd_link_hash_defined
1805            || h->root.root.type == bfd_link_hash_defweak)
1806           && h->root.def_regular
1807           && !bfd_is_abs_section (h->root.root.u.def.section)
1808           && (!ELF_ST_IS_MIPS16 (h->root.other)
1809               || (h->fn_stub && h->need_fn_stub))
1810           && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1811               || ELF_ST_IS_MIPS_PIC (h->root.other)));
1812 }
1813
1814 /* Set *SEC to the input section that contains the target of STUB.
1815    Return the offset of the target from the start of that section.  */
1816
1817 static bfd_vma
1818 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1819                           asection **sec)
1820 {
1821   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1822     {
1823       BFD_ASSERT (stub->h->need_fn_stub);
1824       *sec = stub->h->fn_stub;
1825       return 0;
1826     }
1827   else
1828     {
1829       *sec = stub->h->root.root.u.def.section;
1830       return stub->h->root.root.u.def.value;
1831     }
1832 }
1833
1834 /* STUB describes an la25 stub that we have decided to implement
1835    by inserting an LUI/ADDIU pair before the target function.
1836    Create the section and redirect the function symbol to it.  */
1837
1838 static bfd_boolean
1839 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1840                          struct bfd_link_info *info)
1841 {
1842   struct mips_elf_link_hash_table *htab;
1843   char *name;
1844   asection *s, *input_section;
1845   unsigned int align;
1846
1847   htab = mips_elf_hash_table (info);
1848   if (htab == NULL)
1849     return FALSE;
1850
1851   /* Create a unique name for the new section.  */
1852   name = bfd_malloc (11 + sizeof (".text.stub."));
1853   if (name == NULL)
1854     return FALSE;
1855   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1856
1857   /* Create the section.  */
1858   mips_elf_get_la25_target (stub, &input_section);
1859   s = htab->add_stub_section (name, input_section,
1860                               input_section->output_section);
1861   if (s == NULL)
1862     return FALSE;
1863
1864   /* Make sure that any padding goes before the stub.  */
1865   align = input_section->alignment_power;
1866   if (!bfd_set_section_alignment (s->owner, s, align))
1867     return FALSE;
1868   if (align > 3)
1869     s->size = (1 << align) - 8;
1870
1871   /* Create a symbol for the stub.  */
1872   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1873   stub->stub_section = s;
1874   stub->offset = s->size;
1875
1876   /* Allocate room for it.  */
1877   s->size += 8;
1878   return TRUE;
1879 }
1880
1881 /* STUB describes an la25 stub that we have decided to implement
1882    with a separate trampoline.  Allocate room for it and redirect
1883    the function symbol to it.  */
1884
1885 static bfd_boolean
1886 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1887                               struct bfd_link_info *info)
1888 {
1889   struct mips_elf_link_hash_table *htab;
1890   asection *s;
1891
1892   htab = mips_elf_hash_table (info);
1893   if (htab == NULL)
1894     return FALSE;
1895
1896   /* Create a trampoline section, if we haven't already.  */
1897   s = htab->strampoline;
1898   if (s == NULL)
1899     {
1900       asection *input_section = stub->h->root.root.u.def.section;
1901       s = htab->add_stub_section (".text", NULL,
1902                                   input_section->output_section);
1903       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1904         return FALSE;
1905       htab->strampoline = s;
1906     }
1907
1908   /* Create a symbol for the stub.  */
1909   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1910   stub->stub_section = s;
1911   stub->offset = s->size;
1912
1913   /* Allocate room for it.  */
1914   s->size += 16;
1915   return TRUE;
1916 }
1917
1918 /* H describes a symbol that needs an la25 stub.  Make sure that an
1919    appropriate stub exists and point H at it.  */
1920
1921 static bfd_boolean
1922 mips_elf_add_la25_stub (struct bfd_link_info *info,
1923                         struct mips_elf_link_hash_entry *h)
1924 {
1925   struct mips_elf_link_hash_table *htab;
1926   struct mips_elf_la25_stub search, *stub;
1927   bfd_boolean use_trampoline_p;
1928   asection *s;
1929   bfd_vma value;
1930   void **slot;
1931
1932   /* Describe the stub we want.  */
1933   search.stub_section = NULL;
1934   search.offset = 0;
1935   search.h = h;
1936
1937   /* See if we've already created an equivalent stub.  */
1938   htab = mips_elf_hash_table (info);
1939   if (htab == NULL)
1940     return FALSE;
1941
1942   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1943   if (slot == NULL)
1944     return FALSE;
1945
1946   stub = (struct mips_elf_la25_stub *) *slot;
1947   if (stub != NULL)
1948     {
1949       /* We can reuse the existing stub.  */
1950       h->la25_stub = stub;
1951       return TRUE;
1952     }
1953
1954   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1955   stub = bfd_malloc (sizeof (search));
1956   if (stub == NULL)
1957     return FALSE;
1958   *stub = search;
1959   *slot = stub;
1960
1961   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1962      of the section and if we would need no more than 2 nops.  */
1963   value = mips_elf_get_la25_target (stub, &s);
1964   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1965
1966   h->la25_stub = stub;
1967   return (use_trampoline_p
1968           ? mips_elf_add_la25_trampoline (stub, info)
1969           : mips_elf_add_la25_intro (stub, info));
1970 }
1971
1972 /* A mips_elf_link_hash_traverse callback that is called before sizing
1973    sections.  DATA points to a mips_htab_traverse_info structure.  */
1974
1975 static bfd_boolean
1976 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1977 {
1978   struct mips_htab_traverse_info *hti;
1979
1980   hti = (struct mips_htab_traverse_info *) data;
1981   if (!bfd_link_relocatable (hti->info))
1982     mips_elf_check_mips16_stubs (hti->info, h);
1983
1984   if (mips_elf_local_pic_function_p (h))
1985     {
1986       /* PR 12845: If H is in a section that has been garbage
1987          collected it will have its output section set to *ABS*.  */
1988       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1989         return TRUE;
1990
1991       /* H is a function that might need $25 to be valid on entry.
1992          If we're creating a non-PIC relocatable object, mark H as
1993          being PIC.  If we're creating a non-relocatable object with
1994          non-PIC branches and jumps to H, make sure that H has an la25
1995          stub.  */
1996       if (bfd_link_relocatable (hti->info))
1997         {
1998           if (!PIC_OBJECT_P (hti->output_bfd))
1999             h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2000         }
2001       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2002         {
2003           hti->error = TRUE;
2004           return FALSE;
2005         }
2006     }
2007   return TRUE;
2008 }
2009 \f
2010 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2011    Most mips16 instructions are 16 bits, but these instructions
2012    are 32 bits.
2013
2014    The format of these instructions is:
2015
2016    +--------------+--------------------------------+
2017    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2018    +--------------+--------------------------------+
2019    |                Immediate  15:0                |
2020    +-----------------------------------------------+
2021
2022    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2023    Note that the immediate value in the first word is swapped.
2024
2025    When producing a relocatable object file, R_MIPS16_26 is
2026    handled mostly like R_MIPS_26.  In particular, the addend is
2027    stored as a straight 26-bit value in a 32-bit instruction.
2028    (gas makes life simpler for itself by never adjusting a
2029    R_MIPS16_26 reloc to be against a section, so the addend is
2030    always zero).  However, the 32 bit instruction is stored as 2
2031    16-bit values, rather than a single 32-bit value.  In a
2032    big-endian file, the result is the same; in a little-endian
2033    file, the two 16-bit halves of the 32 bit value are swapped.
2034    This is so that a disassembler can recognize the jal
2035    instruction.
2036
2037    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2038    instruction stored as two 16-bit values.  The addend A is the
2039    contents of the targ26 field.  The calculation is the same as
2040    R_MIPS_26.  When storing the calculated value, reorder the
2041    immediate value as shown above, and don't forget to store the
2042    value as two 16-bit values.
2043
2044    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2045    defined as
2046
2047    big-endian:
2048    +--------+----------------------+
2049    |        |                      |
2050    |        |    targ26-16         |
2051    |31    26|25                   0|
2052    +--------+----------------------+
2053
2054    little-endian:
2055    +----------+------+-------------+
2056    |          |      |             |
2057    |  sub1    |      |     sub2    |
2058    |0        9|10  15|16         31|
2059    +----------+--------------------+
2060    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2061    ((sub1 << 16) | sub2)).
2062
2063    When producing a relocatable object file, the calculation is
2064    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2065    When producing a fully linked file, the calculation is
2066    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2067    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2068
2069    The table below lists the other MIPS16 instruction relocations.
2070    Each one is calculated in the same way as the non-MIPS16 relocation
2071    given on the right, but using the extended MIPS16 layout of 16-bit
2072    immediate fields:
2073
2074         R_MIPS16_GPREL          R_MIPS_GPREL16
2075         R_MIPS16_GOT16          R_MIPS_GOT16
2076         R_MIPS16_CALL16         R_MIPS_CALL16
2077         R_MIPS16_HI16           R_MIPS_HI16
2078         R_MIPS16_LO16           R_MIPS_LO16
2079
2080    A typical instruction will have a format like this:
2081
2082    +--------------+--------------------------------+
2083    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2084    +--------------+--------------------------------+
2085    |    Major     |   rx   |   ry   |   Imm  4:0   |
2086    +--------------+--------------------------------+
2087
2088    EXTEND is the five bit value 11110.  Major is the instruction
2089    opcode.
2090
2091    All we need to do here is shuffle the bits appropriately.
2092    As above, the two 16-bit halves must be swapped on a
2093    little-endian system.  */
2094
2095 static inline bfd_boolean
2096 mips16_reloc_p (int r_type)
2097 {
2098   switch (r_type)
2099     {
2100     case R_MIPS16_26:
2101     case R_MIPS16_GPREL:
2102     case R_MIPS16_GOT16:
2103     case R_MIPS16_CALL16:
2104     case R_MIPS16_HI16:
2105     case R_MIPS16_LO16:
2106     case R_MIPS16_TLS_GD:
2107     case R_MIPS16_TLS_LDM:
2108     case R_MIPS16_TLS_DTPREL_HI16:
2109     case R_MIPS16_TLS_DTPREL_LO16:
2110     case R_MIPS16_TLS_GOTTPREL:
2111     case R_MIPS16_TLS_TPREL_HI16:
2112     case R_MIPS16_TLS_TPREL_LO16:
2113       return TRUE;
2114
2115     default:
2116       return FALSE;
2117     }
2118 }
2119
2120 /* Check if a microMIPS reloc.  */
2121
2122 static inline bfd_boolean
2123 micromips_reloc_p (unsigned int r_type)
2124 {
2125   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2126 }
2127
2128 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2129    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2130    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2131
2132 static inline bfd_boolean
2133 micromips_reloc_shuffle_p (unsigned int r_type)
2134 {
2135   return (micromips_reloc_p (r_type)
2136           && r_type != R_MICROMIPS_PC7_S1
2137           && r_type != R_MICROMIPS_PC10_S1);
2138 }
2139
2140 static inline bfd_boolean
2141 got16_reloc_p (int r_type)
2142 {
2143   return (r_type == R_MIPS_GOT16
2144           || r_type == R_MIPS16_GOT16
2145           || r_type == R_MICROMIPS_GOT16);
2146 }
2147
2148 static inline bfd_boolean
2149 call16_reloc_p (int r_type)
2150 {
2151   return (r_type == R_MIPS_CALL16
2152           || r_type == R_MIPS16_CALL16
2153           || r_type == R_MICROMIPS_CALL16);
2154 }
2155
2156 static inline bfd_boolean
2157 got_disp_reloc_p (unsigned int r_type)
2158 {
2159   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2160 }
2161
2162 static inline bfd_boolean
2163 got_page_reloc_p (unsigned int r_type)
2164 {
2165   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2166 }
2167
2168 static inline bfd_boolean
2169 got_lo16_reloc_p (unsigned int r_type)
2170 {
2171   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2172 }
2173
2174 static inline bfd_boolean
2175 call_hi16_reloc_p (unsigned int r_type)
2176 {
2177   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2178 }
2179
2180 static inline bfd_boolean
2181 call_lo16_reloc_p (unsigned int r_type)
2182 {
2183   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2184 }
2185
2186 static inline bfd_boolean
2187 hi16_reloc_p (int r_type)
2188 {
2189   return (r_type == R_MIPS_HI16
2190           || r_type == R_MIPS16_HI16
2191           || r_type == R_MICROMIPS_HI16
2192           || r_type == R_MIPS_PCHI16);
2193 }
2194
2195 static inline bfd_boolean
2196 lo16_reloc_p (int r_type)
2197 {
2198   return (r_type == R_MIPS_LO16
2199           || r_type == R_MIPS16_LO16
2200           || r_type == R_MICROMIPS_LO16
2201           || r_type == R_MIPS_PCLO16);
2202 }
2203
2204 static inline bfd_boolean
2205 mips16_call_reloc_p (int r_type)
2206 {
2207   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2208 }
2209
2210 static inline bfd_boolean
2211 jal_reloc_p (int r_type)
2212 {
2213   return (r_type == R_MIPS_26
2214           || r_type == R_MIPS16_26
2215           || r_type == R_MICROMIPS_26_S1);
2216 }
2217
2218 static inline bfd_boolean
2219 b_reloc_p (int r_type)
2220 {
2221   return (r_type == R_MIPS_PC26_S2
2222           || r_type == R_MIPS_PC21_S2
2223           || r_type == R_MIPS_PC16
2224           || r_type == R_MIPS_GNU_REL16_S2);
2225 }
2226
2227 static inline bfd_boolean
2228 aligned_pcrel_reloc_p (int r_type)
2229 {
2230   return (r_type == R_MIPS_PC18_S3
2231           || r_type == R_MIPS_PC19_S2);
2232 }
2233
2234 static inline bfd_boolean
2235 micromips_branch_reloc_p (int r_type)
2236 {
2237   return (r_type == R_MICROMIPS_26_S1
2238           || r_type == R_MICROMIPS_PC16_S1
2239           || r_type == R_MICROMIPS_PC10_S1
2240           || r_type == R_MICROMIPS_PC7_S1);
2241 }
2242
2243 static inline bfd_boolean
2244 tls_gd_reloc_p (unsigned int r_type)
2245 {
2246   return (r_type == R_MIPS_TLS_GD
2247           || r_type == R_MIPS16_TLS_GD
2248           || r_type == R_MICROMIPS_TLS_GD);
2249 }
2250
2251 static inline bfd_boolean
2252 tls_ldm_reloc_p (unsigned int r_type)
2253 {
2254   return (r_type == R_MIPS_TLS_LDM
2255           || r_type == R_MIPS16_TLS_LDM
2256           || r_type == R_MICROMIPS_TLS_LDM);
2257 }
2258
2259 static inline bfd_boolean
2260 tls_gottprel_reloc_p (unsigned int r_type)
2261 {
2262   return (r_type == R_MIPS_TLS_GOTTPREL
2263           || r_type == R_MIPS16_TLS_GOTTPREL
2264           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2265 }
2266
2267 void
2268 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2269                                bfd_boolean jal_shuffle, bfd_byte *data)
2270 {
2271   bfd_vma first, second, val;
2272
2273   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2274     return;
2275
2276   /* Pick up the first and second halfwords of the instruction.  */
2277   first = bfd_get_16 (abfd, data);
2278   second = bfd_get_16 (abfd, data + 2);
2279   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2280     val = first << 16 | second;
2281   else if (r_type != R_MIPS16_26)
2282     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2283            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2284   else
2285     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2286            | ((first & 0x1f) << 21) | second);
2287   bfd_put_32 (abfd, val, data);
2288 }
2289
2290 void
2291 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2292                              bfd_boolean jal_shuffle, bfd_byte *data)
2293 {
2294   bfd_vma first, second, val;
2295
2296   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2297     return;
2298
2299   val = bfd_get_32 (abfd, data);
2300   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2301     {
2302       second = val & 0xffff;
2303       first = val >> 16;
2304     }
2305   else if (r_type != R_MIPS16_26)
2306     {
2307       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2308       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2309     }
2310   else
2311     {
2312       second = val & 0xffff;
2313       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2314                | ((val >> 21) & 0x1f);
2315     }
2316   bfd_put_16 (abfd, second, data + 2);
2317   bfd_put_16 (abfd, first, data);
2318 }
2319
2320 bfd_reloc_status_type
2321 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2322                                arelent *reloc_entry, asection *input_section,
2323                                bfd_boolean relocatable, void *data, bfd_vma gp)
2324 {
2325   bfd_vma relocation;
2326   bfd_signed_vma val;
2327   bfd_reloc_status_type status;
2328
2329   if (bfd_is_com_section (symbol->section))
2330     relocation = 0;
2331   else
2332     relocation = symbol->value;
2333
2334   relocation += symbol->section->output_section->vma;
2335   relocation += symbol->section->output_offset;
2336
2337   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2338     return bfd_reloc_outofrange;
2339
2340   /* Set val to the offset into the section or symbol.  */
2341   val = reloc_entry->addend;
2342
2343   _bfd_mips_elf_sign_extend (val, 16);
2344
2345   /* Adjust val for the final section location and GP value.  If we
2346      are producing relocatable output, we don't want to do this for
2347      an external symbol.  */
2348   if (! relocatable
2349       || (symbol->flags & BSF_SECTION_SYM) != 0)
2350     val += relocation - gp;
2351
2352   if (reloc_entry->howto->partial_inplace)
2353     {
2354       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2355                                        (bfd_byte *) data
2356                                        + reloc_entry->address);
2357       if (status != bfd_reloc_ok)
2358         return status;
2359     }
2360   else
2361     reloc_entry->addend = val;
2362
2363   if (relocatable)
2364     reloc_entry->address += input_section->output_offset;
2365
2366   return bfd_reloc_ok;
2367 }
2368
2369 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2370    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2371    that contains the relocation field and DATA points to the start of
2372    INPUT_SECTION.  */
2373
2374 struct mips_hi16
2375 {
2376   struct mips_hi16 *next;
2377   bfd_byte *data;
2378   asection *input_section;
2379   arelent rel;
2380 };
2381
2382 /* FIXME: This should not be a static variable.  */
2383
2384 static struct mips_hi16 *mips_hi16_list;
2385
2386 /* A howto special_function for REL *HI16 relocations.  We can only
2387    calculate the correct value once we've seen the partnering
2388    *LO16 relocation, so just save the information for later.
2389
2390    The ABI requires that the *LO16 immediately follow the *HI16.
2391    However, as a GNU extension, we permit an arbitrary number of
2392    *HI16s to be associated with a single *LO16.  This significantly
2393    simplies the relocation handling in gcc.  */
2394
2395 bfd_reloc_status_type
2396 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2397                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2398                           asection *input_section, bfd *output_bfd,
2399                           char **error_message ATTRIBUTE_UNUSED)
2400 {
2401   struct mips_hi16 *n;
2402
2403   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2404     return bfd_reloc_outofrange;
2405
2406   n = bfd_malloc (sizeof *n);
2407   if (n == NULL)
2408     return bfd_reloc_outofrange;
2409
2410   n->next = mips_hi16_list;
2411   n->data = data;
2412   n->input_section = input_section;
2413   n->rel = *reloc_entry;
2414   mips_hi16_list = n;
2415
2416   if (output_bfd != NULL)
2417     reloc_entry->address += input_section->output_offset;
2418
2419   return bfd_reloc_ok;
2420 }
2421
2422 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2423    like any other 16-bit relocation when applied to global symbols, but is
2424    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2425
2426 bfd_reloc_status_type
2427 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2428                            void *data, asection *input_section,
2429                            bfd *output_bfd, char **error_message)
2430 {
2431   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2432       || bfd_is_und_section (bfd_get_section (symbol))
2433       || bfd_is_com_section (bfd_get_section (symbol)))
2434     /* The relocation is against a global symbol.  */
2435     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2436                                         input_section, output_bfd,
2437                                         error_message);
2438
2439   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2440                                    input_section, output_bfd, error_message);
2441 }
2442
2443 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2444    is a straightforward 16 bit inplace relocation, but we must deal with
2445    any partnering high-part relocations as well.  */
2446
2447 bfd_reloc_status_type
2448 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2449                           void *data, asection *input_section,
2450                           bfd *output_bfd, char **error_message)
2451 {
2452   bfd_vma vallo;
2453   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2454
2455   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2456     return bfd_reloc_outofrange;
2457
2458   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2459                                  location);
2460   vallo = bfd_get_32 (abfd, location);
2461   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2462                                location);
2463
2464   while (mips_hi16_list != NULL)
2465     {
2466       bfd_reloc_status_type ret;
2467       struct mips_hi16 *hi;
2468
2469       hi = mips_hi16_list;
2470
2471       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2472          want to install the addend in the same way as for a R_MIPS*_HI16
2473          relocation (with a rightshift of 16).  However, since GOT16
2474          relocations can also be used with global symbols, their howto
2475          has a rightshift of 0.  */
2476       if (hi->rel.howto->type == R_MIPS_GOT16)
2477         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2478       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2479         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2480       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2481         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2482
2483       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2484          carry or borrow will induce a change of +1 or -1 in the high part.  */
2485       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2486
2487       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2488                                          hi->input_section, output_bfd,
2489                                          error_message);
2490       if (ret != bfd_reloc_ok)
2491         return ret;
2492
2493       mips_hi16_list = hi->next;
2494       free (hi);
2495     }
2496
2497   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2498                                       input_section, output_bfd,
2499                                       error_message);
2500 }
2501
2502 /* A generic howto special_function.  This calculates and installs the
2503    relocation itself, thus avoiding the oft-discussed problems in
2504    bfd_perform_relocation and bfd_install_relocation.  */
2505
2506 bfd_reloc_status_type
2507 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2508                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2509                              asection *input_section, bfd *output_bfd,
2510                              char **error_message ATTRIBUTE_UNUSED)
2511 {
2512   bfd_signed_vma val;
2513   bfd_reloc_status_type status;
2514   bfd_boolean relocatable;
2515
2516   relocatable = (output_bfd != NULL);
2517
2518   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2519     return bfd_reloc_outofrange;
2520
2521   /* Build up the field adjustment in VAL.  */
2522   val = 0;
2523   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2524     {
2525       /* Either we're calculating the final field value or we have a
2526          relocation against a section symbol.  Add in the section's
2527          offset or address.  */
2528       val += symbol->section->output_section->vma;
2529       val += symbol->section->output_offset;
2530     }
2531
2532   if (!relocatable)
2533     {
2534       /* We're calculating the final field value.  Add in the symbol's value
2535          and, if pc-relative, subtract the address of the field itself.  */
2536       val += symbol->value;
2537       if (reloc_entry->howto->pc_relative)
2538         {
2539           val -= input_section->output_section->vma;
2540           val -= input_section->output_offset;
2541           val -= reloc_entry->address;
2542         }
2543     }
2544
2545   /* VAL is now the final adjustment.  If we're keeping this relocation
2546      in the output file, and if the relocation uses a separate addend,
2547      we just need to add VAL to that addend.  Otherwise we need to add
2548      VAL to the relocation field itself.  */
2549   if (relocatable && !reloc_entry->howto->partial_inplace)
2550     reloc_entry->addend += val;
2551   else
2552     {
2553       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2554
2555       /* Add in the separate addend, if any.  */
2556       val += reloc_entry->addend;
2557
2558       /* Add VAL to the relocation field.  */
2559       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2560                                      location);
2561       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2562                                        location);
2563       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2564                                    location);
2565
2566       if (status != bfd_reloc_ok)
2567         return status;
2568     }
2569
2570   if (relocatable)
2571     reloc_entry->address += input_section->output_offset;
2572
2573   return bfd_reloc_ok;
2574 }
2575 \f
2576 /* Swap an entry in a .gptab section.  Note that these routines rely
2577    on the equivalence of the two elements of the union.  */
2578
2579 static void
2580 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2581                               Elf32_gptab *in)
2582 {
2583   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2584   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2585 }
2586
2587 static void
2588 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2589                                Elf32_External_gptab *ex)
2590 {
2591   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2592   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2593 }
2594
2595 static void
2596 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2597                                 Elf32_External_compact_rel *ex)
2598 {
2599   H_PUT_32 (abfd, in->id1, ex->id1);
2600   H_PUT_32 (abfd, in->num, ex->num);
2601   H_PUT_32 (abfd, in->id2, ex->id2);
2602   H_PUT_32 (abfd, in->offset, ex->offset);
2603   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2604   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2605 }
2606
2607 static void
2608 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2609                            Elf32_External_crinfo *ex)
2610 {
2611   unsigned long l;
2612
2613   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2614        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2615        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2616        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2617   H_PUT_32 (abfd, l, ex->info);
2618   H_PUT_32 (abfd, in->konst, ex->konst);
2619   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2620 }
2621 \f
2622 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2623    routines swap this structure in and out.  They are used outside of
2624    BFD, so they are globally visible.  */
2625
2626 void
2627 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2628                                 Elf32_RegInfo *in)
2629 {
2630   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2631   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2632   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2633   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2634   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2635   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2636 }
2637
2638 void
2639 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2640                                  Elf32_External_RegInfo *ex)
2641 {
2642   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2643   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2644   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2645   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2646   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2647   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2648 }
2649
2650 /* In the 64 bit ABI, the .MIPS.options section holds register
2651    information in an Elf64_Reginfo structure.  These routines swap
2652    them in and out.  They are globally visible because they are used
2653    outside of BFD.  These routines are here so that gas can call them
2654    without worrying about whether the 64 bit ABI has been included.  */
2655
2656 void
2657 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2658                                 Elf64_Internal_RegInfo *in)
2659 {
2660   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2661   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2662   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2663   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2664   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2665   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2666   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2667 }
2668
2669 void
2670 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2671                                  Elf64_External_RegInfo *ex)
2672 {
2673   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2674   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2675   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2676   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2677   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2678   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2679   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2680 }
2681
2682 /* Swap in an options header.  */
2683
2684 void
2685 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2686                               Elf_Internal_Options *in)
2687 {
2688   in->kind = H_GET_8 (abfd, ex->kind);
2689   in->size = H_GET_8 (abfd, ex->size);
2690   in->section = H_GET_16 (abfd, ex->section);
2691   in->info = H_GET_32 (abfd, ex->info);
2692 }
2693
2694 /* Swap out an options header.  */
2695
2696 void
2697 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2698                                Elf_External_Options *ex)
2699 {
2700   H_PUT_8 (abfd, in->kind, ex->kind);
2701   H_PUT_8 (abfd, in->size, ex->size);
2702   H_PUT_16 (abfd, in->section, ex->section);
2703   H_PUT_32 (abfd, in->info, ex->info);
2704 }
2705
2706 /* Swap in an abiflags structure.  */
2707
2708 void
2709 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2710                                   const Elf_External_ABIFlags_v0 *ex,
2711                                   Elf_Internal_ABIFlags_v0 *in)
2712 {
2713   in->version = H_GET_16 (abfd, ex->version);
2714   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2715   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2716   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2717   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2718   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2719   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2720   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2721   in->ases = H_GET_32 (abfd, ex->ases);
2722   in->flags1 = H_GET_32 (abfd, ex->flags1);
2723   in->flags2 = H_GET_32 (abfd, ex->flags2);
2724 }
2725
2726 /* Swap out an abiflags structure.  */
2727
2728 void
2729 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2730                                    const Elf_Internal_ABIFlags_v0 *in,
2731                                    Elf_External_ABIFlags_v0 *ex)
2732 {
2733   H_PUT_16 (abfd, in->version, ex->version);
2734   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2735   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2736   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2737   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2738   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2739   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2740   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2741   H_PUT_32 (abfd, in->ases, ex->ases);
2742   H_PUT_32 (abfd, in->flags1, ex->flags1);
2743   H_PUT_32 (abfd, in->flags2, ex->flags2);
2744 }
2745 \f
2746 /* This function is called via qsort() to sort the dynamic relocation
2747    entries by increasing r_symndx value.  */
2748
2749 static int
2750 sort_dynamic_relocs (const void *arg1, const void *arg2)
2751 {
2752   Elf_Internal_Rela int_reloc1;
2753   Elf_Internal_Rela int_reloc2;
2754   int diff;
2755
2756   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2757   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2758
2759   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2760   if (diff != 0)
2761     return diff;
2762
2763   if (int_reloc1.r_offset < int_reloc2.r_offset)
2764     return -1;
2765   if (int_reloc1.r_offset > int_reloc2.r_offset)
2766     return 1;
2767   return 0;
2768 }
2769
2770 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2771
2772 static int
2773 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2774                         const void *arg2 ATTRIBUTE_UNUSED)
2775 {
2776 #ifdef BFD64
2777   Elf_Internal_Rela int_reloc1[3];
2778   Elf_Internal_Rela int_reloc2[3];
2779
2780   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2781     (reldyn_sorting_bfd, arg1, int_reloc1);
2782   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2783     (reldyn_sorting_bfd, arg2, int_reloc2);
2784
2785   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2786     return -1;
2787   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2788     return 1;
2789
2790   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2791     return -1;
2792   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2793     return 1;
2794   return 0;
2795 #else
2796   abort ();
2797 #endif
2798 }
2799
2800
2801 /* This routine is used to write out ECOFF debugging external symbol
2802    information.  It is called via mips_elf_link_hash_traverse.  The
2803    ECOFF external symbol information must match the ELF external
2804    symbol information.  Unfortunately, at this point we don't know
2805    whether a symbol is required by reloc information, so the two
2806    tables may wind up being different.  We must sort out the external
2807    symbol information before we can set the final size of the .mdebug
2808    section, and we must set the size of the .mdebug section before we
2809    can relocate any sections, and we can't know which symbols are
2810    required by relocation until we relocate the sections.
2811    Fortunately, it is relatively unlikely that any symbol will be
2812    stripped but required by a reloc.  In particular, it can not happen
2813    when generating a final executable.  */
2814
2815 static bfd_boolean
2816 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2817 {
2818   struct extsym_info *einfo = data;
2819   bfd_boolean strip;
2820   asection *sec, *output_section;
2821
2822   if (h->root.indx == -2)
2823     strip = FALSE;
2824   else if ((h->root.def_dynamic
2825             || h->root.ref_dynamic
2826             || h->root.type == bfd_link_hash_new)
2827            && !h->root.def_regular
2828            && !h->root.ref_regular)
2829     strip = TRUE;
2830   else if (einfo->info->strip == strip_all
2831            || (einfo->info->strip == strip_some
2832                && bfd_hash_lookup (einfo->info->keep_hash,
2833                                    h->root.root.root.string,
2834                                    FALSE, FALSE) == NULL))
2835     strip = TRUE;
2836   else
2837     strip = FALSE;
2838
2839   if (strip)
2840     return TRUE;
2841
2842   if (h->esym.ifd == -2)
2843     {
2844       h->esym.jmptbl = 0;
2845       h->esym.cobol_main = 0;
2846       h->esym.weakext = 0;
2847       h->esym.reserved = 0;
2848       h->esym.ifd = ifdNil;
2849       h->esym.asym.value = 0;
2850       h->esym.asym.st = stGlobal;
2851
2852       if (h->root.root.type == bfd_link_hash_undefined
2853           || h->root.root.type == bfd_link_hash_undefweak)
2854         {
2855           const char *name;
2856
2857           /* Use undefined class.  Also, set class and type for some
2858              special symbols.  */
2859           name = h->root.root.root.string;
2860           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2861               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2862             {
2863               h->esym.asym.sc = scData;
2864               h->esym.asym.st = stLabel;
2865               h->esym.asym.value = 0;
2866             }
2867           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2868             {
2869               h->esym.asym.sc = scAbs;
2870               h->esym.asym.st = stLabel;
2871               h->esym.asym.value =
2872                 mips_elf_hash_table (einfo->info)->procedure_count;
2873             }
2874           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2875             {
2876               h->esym.asym.sc = scAbs;
2877               h->esym.asym.st = stLabel;
2878               h->esym.asym.value = elf_gp (einfo->abfd);
2879             }
2880           else
2881             h->esym.asym.sc = scUndefined;
2882         }
2883       else if (h->root.root.type != bfd_link_hash_defined
2884           && h->root.root.type != bfd_link_hash_defweak)
2885         h->esym.asym.sc = scAbs;
2886       else
2887         {
2888           const char *name;
2889
2890           sec = h->root.root.u.def.section;
2891           output_section = sec->output_section;
2892
2893           /* When making a shared library and symbol h is the one from
2894              the another shared library, OUTPUT_SECTION may be null.  */
2895           if (output_section == NULL)
2896             h->esym.asym.sc = scUndefined;
2897           else
2898             {
2899               name = bfd_section_name (output_section->owner, output_section);
2900
2901               if (strcmp (name, ".text") == 0)
2902                 h->esym.asym.sc = scText;
2903               else if (strcmp (name, ".data") == 0)
2904                 h->esym.asym.sc = scData;
2905               else if (strcmp (name, ".sdata") == 0)
2906                 h->esym.asym.sc = scSData;
2907               else if (strcmp (name, ".rodata") == 0
2908                        || strcmp (name, ".rdata") == 0)
2909                 h->esym.asym.sc = scRData;
2910               else if (strcmp (name, ".bss") == 0)
2911                 h->esym.asym.sc = scBss;
2912               else if (strcmp (name, ".sbss") == 0)
2913                 h->esym.asym.sc = scSBss;
2914               else if (strcmp (name, ".init") == 0)
2915                 h->esym.asym.sc = scInit;
2916               else if (strcmp (name, ".fini") == 0)
2917                 h->esym.asym.sc = scFini;
2918               else
2919                 h->esym.asym.sc = scAbs;
2920             }
2921         }
2922
2923       h->esym.asym.reserved = 0;
2924       h->esym.asym.index = indexNil;
2925     }
2926
2927   if (h->root.root.type == bfd_link_hash_common)
2928     h->esym.asym.value = h->root.root.u.c.size;
2929   else if (h->root.root.type == bfd_link_hash_defined
2930            || h->root.root.type == bfd_link_hash_defweak)
2931     {
2932       if (h->esym.asym.sc == scCommon)
2933         h->esym.asym.sc = scBss;
2934       else if (h->esym.asym.sc == scSCommon)
2935         h->esym.asym.sc = scSBss;
2936
2937       sec = h->root.root.u.def.section;
2938       output_section = sec->output_section;
2939       if (output_section != NULL)
2940         h->esym.asym.value = (h->root.root.u.def.value
2941                               + sec->output_offset
2942                               + output_section->vma);
2943       else
2944         h->esym.asym.value = 0;
2945     }
2946   else
2947     {
2948       struct mips_elf_link_hash_entry *hd = h;
2949
2950       while (hd->root.root.type == bfd_link_hash_indirect)
2951         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2952
2953       if (hd->needs_lazy_stub)
2954         {
2955           BFD_ASSERT (hd->root.plt.plist != NULL);
2956           BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2957           /* Set type and value for a symbol with a function stub.  */
2958           h->esym.asym.st = stProc;
2959           sec = hd->root.root.u.def.section;
2960           if (sec == NULL)
2961             h->esym.asym.value = 0;
2962           else
2963             {
2964               output_section = sec->output_section;
2965               if (output_section != NULL)
2966                 h->esym.asym.value = (hd->root.plt.plist->stub_offset
2967                                       + sec->output_offset
2968                                       + output_section->vma);
2969               else
2970                 h->esym.asym.value = 0;
2971             }
2972         }
2973     }
2974
2975   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2976                                       h->root.root.root.string,
2977                                       &h->esym))
2978     {
2979       einfo->failed = TRUE;
2980       return FALSE;
2981     }
2982
2983   return TRUE;
2984 }
2985
2986 /* A comparison routine used to sort .gptab entries.  */
2987
2988 static int
2989 gptab_compare (const void *p1, const void *p2)
2990 {
2991   const Elf32_gptab *a1 = p1;
2992   const Elf32_gptab *a2 = p2;
2993
2994   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2995 }
2996 \f
2997 /* Functions to manage the got entry hash table.  */
2998
2999 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3000    hash number.  */
3001
3002 static INLINE hashval_t
3003 mips_elf_hash_bfd_vma (bfd_vma addr)
3004 {
3005 #ifdef BFD64
3006   return addr + (addr >> 32);
3007 #else
3008   return addr;
3009 #endif
3010 }
3011
3012 static hashval_t
3013 mips_elf_got_entry_hash (const void *entry_)
3014 {
3015   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3016
3017   return (entry->symndx
3018           + ((entry->tls_type == GOT_TLS_LDM) << 18)
3019           + (entry->tls_type == GOT_TLS_LDM ? 0
3020              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3021              : entry->symndx >= 0 ? (entry->abfd->id
3022                                      + mips_elf_hash_bfd_vma (entry->d.addend))
3023              : entry->d.h->root.root.root.hash));
3024 }
3025
3026 static int
3027 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3028 {
3029   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3030   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3031
3032   return (e1->symndx == e2->symndx
3033           && e1->tls_type == e2->tls_type
3034           && (e1->tls_type == GOT_TLS_LDM ? TRUE
3035               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3036               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3037                                    && e1->d.addend == e2->d.addend)
3038               : e2->abfd && e1->d.h == e2->d.h));
3039 }
3040
3041 static hashval_t
3042 mips_got_page_ref_hash (const void *ref_)
3043 {
3044   const struct mips_got_page_ref *ref;
3045
3046   ref = (const struct mips_got_page_ref *) ref_;
3047   return ((ref->symndx >= 0
3048            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3049            : ref->u.h->root.root.root.hash)
3050           + mips_elf_hash_bfd_vma (ref->addend));
3051 }
3052
3053 static int
3054 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3055 {
3056   const struct mips_got_page_ref *ref1, *ref2;
3057
3058   ref1 = (const struct mips_got_page_ref *) ref1_;
3059   ref2 = (const struct mips_got_page_ref *) ref2_;
3060   return (ref1->symndx == ref2->symndx
3061           && (ref1->symndx < 0
3062               ? ref1->u.h == ref2->u.h
3063               : ref1->u.abfd == ref2->u.abfd)
3064           && ref1->addend == ref2->addend);
3065 }
3066
3067 static hashval_t
3068 mips_got_page_entry_hash (const void *entry_)
3069 {
3070   const struct mips_got_page_entry *entry;
3071
3072   entry = (const struct mips_got_page_entry *) entry_;
3073   return entry->sec->id;
3074 }
3075
3076 static int
3077 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3078 {
3079   const struct mips_got_page_entry *entry1, *entry2;
3080
3081   entry1 = (const struct mips_got_page_entry *) entry1_;
3082   entry2 = (const struct mips_got_page_entry *) entry2_;
3083   return entry1->sec == entry2->sec;
3084 }
3085 \f
3086 /* Create and return a new mips_got_info structure.  */
3087
3088 static struct mips_got_info *
3089 mips_elf_create_got_info (bfd *abfd)
3090 {
3091   struct mips_got_info *g;
3092
3093   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3094   if (g == NULL)
3095     return NULL;
3096
3097   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3098                                     mips_elf_got_entry_eq, NULL);
3099   if (g->got_entries == NULL)
3100     return NULL;
3101
3102   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3103                                       mips_got_page_ref_eq, NULL);
3104   if (g->got_page_refs == NULL)
3105     return NULL;
3106
3107   return g;
3108 }
3109
3110 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3111    CREATE_P and if ABFD doesn't already have a GOT.  */
3112
3113 static struct mips_got_info *
3114 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3115 {
3116   struct mips_elf_obj_tdata *tdata;
3117
3118   if (!is_mips_elf (abfd))
3119     return NULL;
3120
3121   tdata = mips_elf_tdata (abfd);
3122   if (!tdata->got && create_p)
3123     tdata->got = mips_elf_create_got_info (abfd);
3124   return tdata->got;
3125 }
3126
3127 /* Record that ABFD should use output GOT G.  */
3128
3129 static void
3130 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3131 {
3132   struct mips_elf_obj_tdata *tdata;
3133
3134   BFD_ASSERT (is_mips_elf (abfd));
3135   tdata = mips_elf_tdata (abfd);
3136   if (tdata->got)
3137     {
3138       /* The GOT structure itself and the hash table entries are
3139          allocated to a bfd, but the hash tables aren't.  */
3140       htab_delete (tdata->got->got_entries);
3141       htab_delete (tdata->got->got_page_refs);
3142       if (tdata->got->got_page_entries)
3143         htab_delete (tdata->got->got_page_entries);
3144     }
3145   tdata->got = g;
3146 }
3147
3148 /* Return the dynamic relocation section.  If it doesn't exist, try to
3149    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3150    if creation fails.  */
3151
3152 static asection *
3153 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3154 {
3155   const char *dname;
3156   asection *sreloc;
3157   bfd *dynobj;
3158
3159   dname = MIPS_ELF_REL_DYN_NAME (info);
3160   dynobj = elf_hash_table (info)->dynobj;
3161   sreloc = bfd_get_linker_section (dynobj, dname);
3162   if (sreloc == NULL && create_p)
3163     {
3164       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3165                                                    (SEC_ALLOC
3166                                                     | SEC_LOAD
3167                                                     | SEC_HAS_CONTENTS
3168                                                     | SEC_IN_MEMORY
3169                                                     | SEC_LINKER_CREATED
3170                                                     | SEC_READONLY));
3171       if (sreloc == NULL
3172           || ! bfd_set_section_alignment (dynobj, sreloc,
3173                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3174         return NULL;
3175     }
3176   return sreloc;
3177 }
3178
3179 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3180
3181 static int
3182 mips_elf_reloc_tls_type (unsigned int r_type)
3183 {
3184   if (tls_gd_reloc_p (r_type))
3185     return GOT_TLS_GD;
3186
3187   if (tls_ldm_reloc_p (r_type))
3188     return GOT_TLS_LDM;
3189
3190   if (tls_gottprel_reloc_p (r_type))
3191     return GOT_TLS_IE;
3192
3193   return GOT_TLS_NONE;
3194 }
3195
3196 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3197
3198 static int
3199 mips_tls_got_entries (unsigned int type)
3200 {
3201   switch (type)
3202     {
3203     case GOT_TLS_GD:
3204     case GOT_TLS_LDM:
3205       return 2;
3206
3207     case GOT_TLS_IE:
3208       return 1;
3209
3210     case GOT_TLS_NONE:
3211       return 0;
3212     }
3213   abort ();
3214 }
3215
3216 /* Count the number of relocations needed for a TLS GOT entry, with
3217    access types from TLS_TYPE, and symbol H (or a local symbol if H
3218    is NULL).  */
3219
3220 static int
3221 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3222                      struct elf_link_hash_entry *h)
3223 {
3224   int indx = 0;
3225   bfd_boolean need_relocs = FALSE;
3226   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3227
3228   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3229       && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3230     indx = h->dynindx;
3231
3232   if ((bfd_link_pic (info) || indx != 0)
3233       && (h == NULL
3234           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3235           || h->root.type != bfd_link_hash_undefweak))
3236     need_relocs = TRUE;
3237
3238   if (!need_relocs)
3239     return 0;
3240
3241   switch (tls_type)
3242     {
3243     case GOT_TLS_GD:
3244       return indx != 0 ? 2 : 1;
3245
3246     case GOT_TLS_IE:
3247       return 1;
3248
3249     case GOT_TLS_LDM:
3250       return bfd_link_pic (info) ? 1 : 0;
3251
3252     default:
3253       return 0;
3254     }
3255 }
3256
3257 /* Add the number of GOT entries and TLS relocations required by ENTRY
3258    to G.  */
3259
3260 static void
3261 mips_elf_count_got_entry (struct bfd_link_info *info,
3262                           struct mips_got_info *g,
3263                           struct mips_got_entry *entry)
3264 {
3265   if (entry->tls_type)
3266     {
3267       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3268       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3269                                         entry->symndx < 0
3270                                         ? &entry->d.h->root : NULL);
3271     }
3272   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3273     g->local_gotno += 1;
3274   else
3275     g->global_gotno += 1;
3276 }
3277
3278 /* Output a simple dynamic relocation into SRELOC.  */
3279
3280 static void
3281 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3282                                     asection *sreloc,
3283                                     unsigned long reloc_index,
3284                                     unsigned long indx,
3285                                     int r_type,
3286                                     bfd_vma offset)
3287 {
3288   Elf_Internal_Rela rel[3];
3289
3290   memset (rel, 0, sizeof (rel));
3291
3292   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3293   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3294
3295   if (ABI_64_P (output_bfd))
3296     {
3297       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3298         (output_bfd, &rel[0],
3299          (sreloc->contents
3300           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3301     }
3302   else
3303     bfd_elf32_swap_reloc_out
3304       (output_bfd, &rel[0],
3305        (sreloc->contents
3306         + reloc_index * sizeof (Elf32_External_Rel)));
3307 }
3308
3309 /* Initialize a set of TLS GOT entries for one symbol.  */
3310
3311 static void
3312 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3313                                struct mips_got_entry *entry,
3314                                struct mips_elf_link_hash_entry *h,
3315                                bfd_vma value)
3316 {
3317   struct mips_elf_link_hash_table *htab;
3318   int indx;
3319   asection *sreloc, *sgot;
3320   bfd_vma got_offset, got_offset2;
3321   bfd_boolean need_relocs = FALSE;
3322
3323   htab = mips_elf_hash_table (info);
3324   if (htab == NULL)
3325     return;
3326
3327   sgot = htab->sgot;
3328
3329   indx = 0;
3330   if (h != NULL)
3331     {
3332       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3333
3334       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3335                                            &h->root)
3336           && (!bfd_link_pic (info)
3337               || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3338         indx = h->root.dynindx;
3339     }
3340
3341   if (entry->tls_initialized)
3342     return;
3343
3344   if ((bfd_link_pic (info) || indx != 0)
3345       && (h == NULL
3346           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3347           || h->root.type != bfd_link_hash_undefweak))
3348     need_relocs = TRUE;
3349
3350   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3351      be defined at all; assume that the value doesn't matter in that
3352      case.  Otherwise complain if we would use the value.  */
3353   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3354               || h->root.root.type == bfd_link_hash_undefweak);
3355
3356   /* Emit necessary relocations.  */
3357   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3358   got_offset = entry->gotidx;
3359
3360   switch (entry->tls_type)
3361     {
3362     case GOT_TLS_GD:
3363       /* General Dynamic.  */
3364       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3365
3366       if (need_relocs)
3367         {
3368           mips_elf_output_dynamic_relocation
3369             (abfd, sreloc, sreloc->reloc_count++, indx,
3370              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3371              sgot->output_offset + sgot->output_section->vma + got_offset);
3372
3373           if (indx)
3374             mips_elf_output_dynamic_relocation
3375               (abfd, sreloc, sreloc->reloc_count++, indx,
3376                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3377                sgot->output_offset + sgot->output_section->vma + got_offset2);
3378           else
3379             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3380                                sgot->contents + got_offset2);
3381         }
3382       else
3383         {
3384           MIPS_ELF_PUT_WORD (abfd, 1,
3385                              sgot->contents + got_offset);
3386           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3387                              sgot->contents + got_offset2);
3388         }
3389       break;
3390
3391     case GOT_TLS_IE:
3392       /* Initial Exec model.  */
3393       if (need_relocs)
3394         {
3395           if (indx == 0)
3396             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3397                                sgot->contents + got_offset);
3398           else
3399             MIPS_ELF_PUT_WORD (abfd, 0,
3400                                sgot->contents + got_offset);
3401
3402           mips_elf_output_dynamic_relocation
3403             (abfd, sreloc, sreloc->reloc_count++, indx,
3404              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3405              sgot->output_offset + sgot->output_section->vma + got_offset);
3406         }
3407       else
3408         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3409                            sgot->contents + got_offset);
3410       break;
3411
3412     case GOT_TLS_LDM:
3413       /* The initial offset is zero, and the LD offsets will include the
3414          bias by DTP_OFFSET.  */
3415       MIPS_ELF_PUT_WORD (abfd, 0,
3416                          sgot->contents + got_offset
3417                          + MIPS_ELF_GOT_SIZE (abfd));
3418
3419       if (!bfd_link_pic (info))
3420         MIPS_ELF_PUT_WORD (abfd, 1,
3421                            sgot->contents + got_offset);
3422       else
3423         mips_elf_output_dynamic_relocation
3424           (abfd, sreloc, sreloc->reloc_count++, indx,
3425            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3426            sgot->output_offset + sgot->output_section->vma + got_offset);
3427       break;
3428
3429     default:
3430       abort ();
3431     }
3432
3433   entry->tls_initialized = TRUE;
3434 }
3435
3436 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3437    for global symbol H.  .got.plt comes before the GOT, so the offset
3438    will be negative.  */
3439
3440 static bfd_vma
3441 mips_elf_gotplt_index (struct bfd_link_info *info,
3442                        struct elf_link_hash_entry *h)
3443 {
3444   bfd_vma got_address, got_value;
3445   struct mips_elf_link_hash_table *htab;
3446
3447   htab = mips_elf_hash_table (info);
3448   BFD_ASSERT (htab != NULL);
3449
3450   BFD_ASSERT (h->plt.plist != NULL);
3451   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3452
3453   /* Calculate the address of the associated .got.plt entry.  */
3454   got_address = (htab->sgotplt->output_section->vma
3455                  + htab->sgotplt->output_offset
3456                  + (h->plt.plist->gotplt_index
3457                     * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3458
3459   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3460   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3461                + htab->root.hgot->root.u.def.section->output_offset
3462                + htab->root.hgot->root.u.def.value);
3463
3464   return got_address - got_value;
3465 }
3466
3467 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3468    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3469    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3470    offset can be found.  */
3471
3472 static bfd_vma
3473 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3474                           bfd_vma value, unsigned long r_symndx,
3475                           struct mips_elf_link_hash_entry *h, int r_type)
3476 {
3477   struct mips_elf_link_hash_table *htab;
3478   struct mips_got_entry *entry;
3479
3480   htab = mips_elf_hash_table (info);
3481   BFD_ASSERT (htab != NULL);
3482
3483   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3484                                            r_symndx, h, r_type);
3485   if (!entry)
3486     return MINUS_ONE;
3487
3488   if (entry->tls_type)
3489     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3490   return entry->gotidx;
3491 }
3492
3493 /* Return the GOT index of global symbol H in the primary GOT.  */
3494
3495 static bfd_vma
3496 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3497                                    struct elf_link_hash_entry *h)
3498 {
3499   struct mips_elf_link_hash_table *htab;
3500   long global_got_dynindx;
3501   struct mips_got_info *g;
3502   bfd_vma got_index;
3503
3504   htab = mips_elf_hash_table (info);
3505   BFD_ASSERT (htab != NULL);
3506
3507   global_got_dynindx = 0;
3508   if (htab->global_gotsym != NULL)
3509     global_got_dynindx = htab->global_gotsym->dynindx;
3510
3511   /* Once we determine the global GOT entry with the lowest dynamic
3512      symbol table index, we must put all dynamic symbols with greater
3513      indices into the primary GOT.  That makes it easy to calculate the
3514      GOT offset.  */
3515   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3516   g = mips_elf_bfd_got (obfd, FALSE);
3517   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3518                * MIPS_ELF_GOT_SIZE (obfd));
3519   BFD_ASSERT (got_index < htab->sgot->size);
3520
3521   return got_index;
3522 }
3523
3524 /* Return the GOT index for the global symbol indicated by H, which is
3525    referenced by a relocation of type R_TYPE in IBFD.  */
3526
3527 static bfd_vma
3528 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3529                            struct elf_link_hash_entry *h, int r_type)
3530 {
3531   struct mips_elf_link_hash_table *htab;
3532   struct mips_got_info *g;
3533   struct mips_got_entry lookup, *entry;
3534   bfd_vma gotidx;
3535
3536   htab = mips_elf_hash_table (info);
3537   BFD_ASSERT (htab != NULL);
3538
3539   g = mips_elf_bfd_got (ibfd, FALSE);
3540   BFD_ASSERT (g);
3541
3542   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3543   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3544     return mips_elf_primary_global_got_index (obfd, info, h);
3545
3546   lookup.abfd = ibfd;
3547   lookup.symndx = -1;
3548   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3549   entry = htab_find (g->got_entries, &lookup);
3550   BFD_ASSERT (entry);
3551
3552   gotidx = entry->gotidx;
3553   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3554
3555   if (lookup.tls_type)
3556     {
3557       bfd_vma value = MINUS_ONE;
3558
3559       if ((h->root.type == bfd_link_hash_defined
3560            || h->root.type == bfd_link_hash_defweak)
3561           && h->root.u.def.section->output_section)
3562         value = (h->root.u.def.value
3563                  + h->root.u.def.section->output_offset
3564                  + h->root.u.def.section->output_section->vma);
3565
3566       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3567     }
3568   return gotidx;
3569 }
3570
3571 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3572    entries are supposed to be placed at small offsets in the GOT, i.e.,
3573    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3574    entry could be created.  If OFFSETP is nonnull, use it to return the
3575    offset of the GOT entry from VALUE.  */
3576
3577 static bfd_vma
3578 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3579                    bfd_vma value, bfd_vma *offsetp)
3580 {
3581   bfd_vma page, got_index;
3582   struct mips_got_entry *entry;
3583
3584   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3585   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3586                                            NULL, R_MIPS_GOT_PAGE);
3587
3588   if (!entry)
3589     return MINUS_ONE;
3590
3591   got_index = entry->gotidx;
3592
3593   if (offsetp)
3594     *offsetp = value - entry->d.address;
3595
3596   return got_index;
3597 }
3598
3599 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3600    EXTERNAL is true if the relocation was originally against a global
3601    symbol that binds locally.  */
3602
3603 static bfd_vma
3604 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3605                       bfd_vma value, bfd_boolean external)
3606 {
3607   struct mips_got_entry *entry;
3608
3609   /* GOT16 relocations against local symbols are followed by a LO16
3610      relocation; those against global symbols are not.  Thus if the
3611      symbol was originally local, the GOT16 relocation should load the
3612      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3613   if (! external)
3614     value = mips_elf_high (value) << 16;
3615
3616   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3617      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3618      same in all cases.  */
3619   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3620                                            NULL, R_MIPS_GOT16);
3621   if (entry)
3622     return entry->gotidx;
3623   else
3624     return MINUS_ONE;
3625 }
3626
3627 /* Returns the offset for the entry at the INDEXth position
3628    in the GOT.  */
3629
3630 static bfd_vma
3631 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3632                                 bfd *input_bfd, bfd_vma got_index)
3633 {
3634   struct mips_elf_link_hash_table *htab;
3635   asection *sgot;
3636   bfd_vma gp;
3637
3638   htab = mips_elf_hash_table (info);
3639   BFD_ASSERT (htab != NULL);
3640
3641   sgot = htab->sgot;
3642   gp = _bfd_get_gp_value (output_bfd)
3643     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3644
3645   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3646 }
3647
3648 /* Create and return a local GOT entry for VALUE, which was calculated
3649    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3650    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3651    instead.  */
3652
3653 static struct mips_got_entry *
3654 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3655                                  bfd *ibfd, bfd_vma value,
3656                                  unsigned long r_symndx,
3657                                  struct mips_elf_link_hash_entry *h,
3658                                  int r_type)
3659 {
3660   struct mips_got_entry lookup, *entry;
3661   void **loc;
3662   struct mips_got_info *g;
3663   struct mips_elf_link_hash_table *htab;
3664   bfd_vma gotidx;
3665
3666   htab = mips_elf_hash_table (info);
3667   BFD_ASSERT (htab != NULL);
3668
3669   g = mips_elf_bfd_got (ibfd, FALSE);
3670   if (g == NULL)
3671     {
3672       g = mips_elf_bfd_got (abfd, FALSE);
3673       BFD_ASSERT (g != NULL);
3674     }
3675
3676   /* This function shouldn't be called for symbols that live in the global
3677      area of the GOT.  */
3678   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3679
3680   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3681   if (lookup.tls_type)
3682     {
3683       lookup.abfd = ibfd;
3684       if (tls_ldm_reloc_p (r_type))
3685         {
3686           lookup.symndx = 0;
3687           lookup.d.addend = 0;
3688         }
3689       else if (h == NULL)
3690         {
3691           lookup.symndx = r_symndx;
3692           lookup.d.addend = 0;
3693         }
3694       else
3695         {
3696           lookup.symndx = -1;
3697           lookup.d.h = h;
3698         }
3699
3700       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3701       BFD_ASSERT (entry);
3702
3703       gotidx = entry->gotidx;
3704       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3705
3706       return entry;
3707     }
3708
3709   lookup.abfd = NULL;
3710   lookup.symndx = -1;
3711   lookup.d.address = value;
3712   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3713   if (!loc)
3714     return NULL;
3715
3716   entry = (struct mips_got_entry *) *loc;
3717   if (entry)
3718     return entry;
3719
3720   if (g->assigned_low_gotno > g->assigned_high_gotno)
3721     {
3722       /* We didn't allocate enough space in the GOT.  */
3723       (*_bfd_error_handler)
3724         (_("not enough GOT space for local GOT entries"));
3725       bfd_set_error (bfd_error_bad_value);
3726       return NULL;
3727     }
3728
3729   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3730   if (!entry)
3731     return NULL;
3732
3733   if (got16_reloc_p (r_type)
3734       || call16_reloc_p (r_type)
3735       || got_page_reloc_p (r_type)
3736       || got_disp_reloc_p (r_type))
3737     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3738   else
3739     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3740
3741   *entry = lookup;
3742   *loc = entry;
3743
3744   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3745
3746   /* These GOT entries need a dynamic relocation on VxWorks.  */
3747   if (htab->is_vxworks)
3748     {
3749       Elf_Internal_Rela outrel;
3750       asection *s;
3751       bfd_byte *rloc;
3752       bfd_vma got_address;
3753
3754       s = mips_elf_rel_dyn_section (info, FALSE);
3755       got_address = (htab->sgot->output_section->vma
3756                      + htab->sgot->output_offset
3757                      + entry->gotidx);
3758
3759       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3760       outrel.r_offset = got_address;
3761       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3762       outrel.r_addend = value;
3763       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3764     }
3765
3766   return entry;
3767 }
3768
3769 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3770    The number might be exact or a worst-case estimate, depending on how
3771    much information is available to elf_backend_omit_section_dynsym at
3772    the current linking stage.  */
3773
3774 static bfd_size_type
3775 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3776 {
3777   bfd_size_type count;
3778
3779   count = 0;
3780   if (bfd_link_pic (info)
3781       || elf_hash_table (info)->is_relocatable_executable)
3782     {
3783       asection *p;
3784       const struct elf_backend_data *bed;
3785
3786       bed = get_elf_backend_data (output_bfd);
3787       for (p = output_bfd->sections; p ; p = p->next)
3788         if ((p->flags & SEC_EXCLUDE) == 0
3789             && (p->flags & SEC_ALLOC) != 0
3790             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3791           ++count;
3792     }
3793   return count;
3794 }
3795
3796 /* Sort the dynamic symbol table so that symbols that need GOT entries
3797    appear towards the end.  */
3798
3799 static bfd_boolean
3800 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3801 {
3802   struct mips_elf_link_hash_table *htab;
3803   struct mips_elf_hash_sort_data hsd;
3804   struct mips_got_info *g;
3805
3806   if (elf_hash_table (info)->dynsymcount == 0)
3807     return TRUE;
3808
3809   htab = mips_elf_hash_table (info);
3810   BFD_ASSERT (htab != NULL);
3811
3812   g = htab->got_info;
3813   if (g == NULL)
3814     return TRUE;
3815
3816   hsd.low = NULL;
3817   hsd.max_unref_got_dynindx
3818     = hsd.min_got_dynindx
3819     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3820   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3821   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3822                                 elf_hash_table (info)),
3823                                mips_elf_sort_hash_table_f,
3824                                &hsd);
3825
3826   /* There should have been enough room in the symbol table to
3827      accommodate both the GOT and non-GOT symbols.  */
3828   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3829   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3830               == elf_hash_table (info)->dynsymcount);
3831   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3832               == g->global_gotno);
3833
3834   /* Now we know which dynamic symbol has the lowest dynamic symbol
3835      table index in the GOT.  */
3836   htab->global_gotsym = hsd.low;
3837
3838   return TRUE;
3839 }
3840
3841 /* If H needs a GOT entry, assign it the highest available dynamic
3842    index.  Otherwise, assign it the lowest available dynamic
3843    index.  */
3844
3845 static bfd_boolean
3846 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3847 {
3848   struct mips_elf_hash_sort_data *hsd = data;
3849
3850   /* Symbols without dynamic symbol table entries aren't interesting
3851      at all.  */
3852   if (h->root.dynindx == -1)
3853     return TRUE;
3854
3855   switch (h->global_got_area)
3856     {
3857     case GGA_NONE:
3858       h->root.dynindx = hsd->max_non_got_dynindx++;
3859       break;
3860
3861     case GGA_NORMAL:
3862       h->root.dynindx = --hsd->min_got_dynindx;
3863       hsd->low = (struct elf_link_hash_entry *) h;
3864       break;
3865
3866     case GGA_RELOC_ONLY:
3867       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3868         hsd->low = (struct elf_link_hash_entry *) h;
3869       h->root.dynindx = hsd->max_unref_got_dynindx++;
3870       break;
3871     }
3872
3873   return TRUE;
3874 }
3875
3876 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3877    (which is owned by the caller and shouldn't be added to the
3878    hash table directly).  */
3879
3880 static bfd_boolean
3881 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3882                            struct mips_got_entry *lookup)
3883 {
3884   struct mips_elf_link_hash_table *htab;
3885   struct mips_got_entry *entry;
3886   struct mips_got_info *g;
3887   void **loc, **bfd_loc;
3888
3889   /* Make sure there's a slot for this entry in the master GOT.  */
3890   htab = mips_elf_hash_table (info);
3891   g = htab->got_info;
3892   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3893   if (!loc)
3894     return FALSE;
3895
3896   /* Populate the entry if it isn't already.  */
3897   entry = (struct mips_got_entry *) *loc;
3898   if (!entry)
3899     {
3900       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3901       if (!entry)
3902         return FALSE;
3903
3904       lookup->tls_initialized = FALSE;
3905       lookup->gotidx = -1;
3906       *entry = *lookup;
3907       *loc = entry;
3908     }
3909
3910   /* Reuse the same GOT entry for the BFD's GOT.  */
3911   g = mips_elf_bfd_got (abfd, TRUE);
3912   if (!g)
3913     return FALSE;
3914
3915   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3916   if (!bfd_loc)
3917     return FALSE;
3918
3919   if (!*bfd_loc)
3920     *bfd_loc = entry;
3921   return TRUE;
3922 }
3923
3924 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3925    entry for it.  FOR_CALL is true if the caller is only interested in
3926    using the GOT entry for calls.  */
3927
3928 static bfd_boolean
3929 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3930                                    bfd *abfd, struct bfd_link_info *info,
3931                                    bfd_boolean for_call, int r_type)
3932 {
3933   struct mips_elf_link_hash_table *htab;
3934   struct mips_elf_link_hash_entry *hmips;
3935   struct mips_got_entry entry;
3936   unsigned char tls_type;
3937
3938   htab = mips_elf_hash_table (info);
3939   BFD_ASSERT (htab != NULL);
3940
3941   hmips = (struct mips_elf_link_hash_entry *) h;
3942   if (!for_call)
3943     hmips->got_only_for_calls = FALSE;
3944
3945   /* A global symbol in the GOT must also be in the dynamic symbol
3946      table.  */
3947   if (h->dynindx == -1)
3948     {
3949       switch (ELF_ST_VISIBILITY (h->other))
3950         {
3951         case STV_INTERNAL:
3952         case STV_HIDDEN:
3953           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3954           break;
3955         }
3956       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3957         return FALSE;
3958     }
3959
3960   tls_type = mips_elf_reloc_tls_type (r_type);
3961   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3962     hmips->global_got_area = GGA_NORMAL;
3963
3964   entry.abfd = abfd;
3965   entry.symndx = -1;
3966   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3967   entry.tls_type = tls_type;
3968   return mips_elf_record_got_entry (info, abfd, &entry);
3969 }
3970
3971 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3972    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3973
3974 static bfd_boolean
3975 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3976                                   struct bfd_link_info *info, int r_type)
3977 {
3978   struct mips_elf_link_hash_table *htab;
3979   struct mips_got_info *g;
3980   struct mips_got_entry entry;
3981
3982   htab = mips_elf_hash_table (info);
3983   BFD_ASSERT (htab != NULL);
3984
3985   g = htab->got_info;
3986   BFD_ASSERT (g != NULL);
3987
3988   entry.abfd = abfd;
3989   entry.symndx = symndx;
3990   entry.d.addend = addend;
3991   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3992   return mips_elf_record_got_entry (info, abfd, &entry);
3993 }
3994
3995 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3996    H is the symbol's hash table entry, or null if SYMNDX is local
3997    to ABFD.  */
3998
3999 static bfd_boolean
4000 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4001                               long symndx, struct elf_link_hash_entry *h,
4002                               bfd_signed_vma addend)
4003 {
4004   struct mips_elf_link_hash_table *htab;
4005   struct mips_got_info *g1, *g2;
4006   struct mips_got_page_ref lookup, *entry;
4007   void **loc, **bfd_loc;
4008
4009   htab = mips_elf_hash_table (info);
4010   BFD_ASSERT (htab != NULL);
4011
4012   g1 = htab->got_info;
4013   BFD_ASSERT (g1 != NULL);
4014
4015   if (h)
4016     {
4017       lookup.symndx = -1;
4018       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4019     }
4020   else
4021     {
4022       lookup.symndx = symndx;
4023       lookup.u.abfd = abfd;
4024     }
4025   lookup.addend = addend;
4026   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4027   if (loc == NULL)
4028     return FALSE;
4029
4030   entry = (struct mips_got_page_ref *) *loc;
4031   if (!entry)
4032     {
4033       entry = bfd_alloc (abfd, sizeof (*entry));
4034       if (!entry)
4035         return FALSE;
4036
4037       *entry = lookup;
4038       *loc = entry;
4039     }
4040
4041   /* Add the same entry to the BFD's GOT.  */
4042   g2 = mips_elf_bfd_got (abfd, TRUE);
4043   if (!g2)
4044     return FALSE;
4045
4046   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4047   if (!bfd_loc)
4048     return FALSE;
4049
4050   if (!*bfd_loc)
4051     *bfd_loc = entry;
4052
4053   return TRUE;
4054 }
4055
4056 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4057
4058 static void
4059 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4060                                        unsigned int n)
4061 {
4062   asection *s;
4063   struct mips_elf_link_hash_table *htab;
4064
4065   htab = mips_elf_hash_table (info);
4066   BFD_ASSERT (htab != NULL);
4067
4068   s = mips_elf_rel_dyn_section (info, FALSE);
4069   BFD_ASSERT (s != NULL);
4070
4071   if (htab->is_vxworks)
4072     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4073   else
4074     {
4075       if (s->size == 0)
4076         {
4077           /* Make room for a null element.  */
4078           s->size += MIPS_ELF_REL_SIZE (abfd);
4079           ++s->reloc_count;
4080         }
4081       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4082     }
4083 }
4084 \f
4085 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4086    mips_elf_traverse_got_arg structure.  Count the number of GOT
4087    entries and TLS relocs.  Set DATA->value to true if we need
4088    to resolve indirect or warning symbols and then recreate the GOT.  */
4089
4090 static int
4091 mips_elf_check_recreate_got (void **entryp, void *data)
4092 {
4093   struct mips_got_entry *entry;
4094   struct mips_elf_traverse_got_arg *arg;
4095
4096   entry = (struct mips_got_entry *) *entryp;
4097   arg = (struct mips_elf_traverse_got_arg *) data;
4098   if (entry->abfd != NULL && entry->symndx == -1)
4099     {
4100       struct mips_elf_link_hash_entry *h;
4101
4102       h = entry->d.h;
4103       if (h->root.root.type == bfd_link_hash_indirect
4104           || h->root.root.type == bfd_link_hash_warning)
4105         {
4106           arg->value = TRUE;
4107           return 0;
4108         }
4109     }
4110   mips_elf_count_got_entry (arg->info, arg->g, entry);
4111   return 1;
4112 }
4113
4114 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4115    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4116    converting entries for indirect and warning symbols into entries
4117    for the target symbol.  Set DATA->g to null on error.  */
4118
4119 static int
4120 mips_elf_recreate_got (void **entryp, void *data)
4121 {
4122   struct mips_got_entry new_entry, *entry;
4123   struct mips_elf_traverse_got_arg *arg;
4124   void **slot;
4125
4126   entry = (struct mips_got_entry *) *entryp;
4127   arg = (struct mips_elf_traverse_got_arg *) data;
4128   if (entry->abfd != NULL
4129       && entry->symndx == -1
4130       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4131           || entry->d.h->root.root.type == bfd_link_hash_warning))
4132     {
4133       struct mips_elf_link_hash_entry *h;
4134
4135       new_entry = *entry;
4136       entry = &new_entry;
4137       h = entry->d.h;
4138       do
4139         {
4140           BFD_ASSERT (h->global_got_area == GGA_NONE);
4141           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4142         }
4143       while (h->root.root.type == bfd_link_hash_indirect
4144              || h->root.root.type == bfd_link_hash_warning);
4145       entry->d.h = h;
4146     }
4147   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4148   if (slot == NULL)
4149     {
4150       arg->g = NULL;
4151       return 0;
4152     }
4153   if (*slot == NULL)
4154     {
4155       if (entry == &new_entry)
4156         {
4157           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4158           if (!entry)
4159             {
4160               arg->g = NULL;
4161               return 0;
4162             }
4163           *entry = new_entry;
4164         }
4165       *slot = entry;
4166       mips_elf_count_got_entry (arg->info, arg->g, entry);
4167     }
4168   return 1;
4169 }
4170
4171 /* Return the maximum number of GOT page entries required for RANGE.  */
4172
4173 static bfd_vma
4174 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4175 {
4176   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4177 }
4178
4179 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4180
4181 static bfd_boolean
4182 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4183                                 asection *sec, bfd_signed_vma addend)
4184 {
4185   struct mips_got_info *g = arg->g;
4186   struct mips_got_page_entry lookup, *entry;
4187   struct mips_got_page_range **range_ptr, *range;
4188   bfd_vma old_pages, new_pages;
4189   void **loc;
4190
4191   /* Find the mips_got_page_entry hash table entry for this section.  */
4192   lookup.sec = sec;
4193   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4194   if (loc == NULL)
4195     return FALSE;
4196
4197   /* Create a mips_got_page_entry if this is the first time we've
4198      seen the section.  */
4199   entry = (struct mips_got_page_entry *) *loc;
4200   if (!entry)
4201     {
4202       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4203       if (!entry)
4204         return FALSE;
4205
4206       entry->sec = sec;
4207       *loc = entry;
4208     }
4209
4210   /* Skip over ranges whose maximum extent cannot share a page entry
4211      with ADDEND.  */
4212   range_ptr = &entry->ranges;
4213   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4214     range_ptr = &(*range_ptr)->next;
4215
4216   /* If we scanned to the end of the list, or found a range whose
4217      minimum extent cannot share a page entry with ADDEND, create
4218      a new singleton range.  */
4219   range = *range_ptr;
4220   if (!range || addend < range->min_addend - 0xffff)
4221     {
4222       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4223       if (!range)
4224         return FALSE;
4225
4226       range->next = *range_ptr;
4227       range->min_addend = addend;
4228       range->max_addend = addend;
4229
4230       *range_ptr = range;
4231       entry->num_pages++;
4232       g->page_gotno++;
4233       return TRUE;
4234     }
4235
4236   /* Remember how many pages the old range contributed.  */
4237   old_pages = mips_elf_pages_for_range (range);
4238
4239   /* Update the ranges.  */
4240   if (addend < range->min_addend)
4241     range->min_addend = addend;
4242   else if (addend > range->max_addend)
4243     {
4244       if (range->next && addend >= range->next->min_addend - 0xffff)
4245         {
4246           old_pages += mips_elf_pages_for_range (range->next);
4247           range->max_addend = range->next->max_addend;
4248           range->next = range->next->next;
4249         }
4250       else
4251         range->max_addend = addend;
4252     }
4253
4254   /* Record any change in the total estimate.  */
4255   new_pages = mips_elf_pages_for_range (range);
4256   if (old_pages != new_pages)
4257     {
4258       entry->num_pages += new_pages - old_pages;
4259       g->page_gotno += new_pages - old_pages;
4260     }
4261
4262   return TRUE;
4263 }
4264
4265 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4266    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4267    whether the page reference described by *REFP needs a GOT page entry,
4268    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4269
4270 static bfd_boolean
4271 mips_elf_resolve_got_page_ref (void **refp, void *data)
4272 {
4273   struct mips_got_page_ref *ref;
4274   struct mips_elf_traverse_got_arg *arg;
4275   struct mips_elf_link_hash_table *htab;
4276   asection *sec;
4277   bfd_vma addend;
4278
4279   ref = (struct mips_got_page_ref *) *refp;
4280   arg = (struct mips_elf_traverse_got_arg *) data;
4281   htab = mips_elf_hash_table (arg->info);
4282
4283   if (ref->symndx < 0)
4284     {
4285       struct mips_elf_link_hash_entry *h;
4286
4287       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4288       h = ref->u.h;
4289       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4290         return 1;
4291
4292       /* Ignore undefined symbols; we'll issue an error later if
4293          appropriate.  */
4294       if (!((h->root.root.type == bfd_link_hash_defined
4295              || h->root.root.type == bfd_link_hash_defweak)
4296             && h->root.root.u.def.section))
4297         return 1;
4298
4299       sec = h->root.root.u.def.section;
4300       addend = h->root.root.u.def.value + ref->addend;
4301     }
4302   else
4303     {
4304       Elf_Internal_Sym *isym;
4305
4306       /* Read in the symbol.  */
4307       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4308                                     ref->symndx);
4309       if (isym == NULL)
4310         {
4311           arg->g = NULL;
4312           return 0;
4313         }
4314
4315       /* Get the associated input section.  */
4316       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4317       if (sec == NULL)
4318         {
4319           arg->g = NULL;
4320           return 0;
4321         }
4322
4323       /* If this is a mergable section, work out the section and offset
4324          of the merged data.  For section symbols, the addend specifies
4325          of the offset _of_ the first byte in the data, otherwise it
4326          specifies the offset _from_ the first byte.  */
4327       if (sec->flags & SEC_MERGE)
4328         {
4329           void *secinfo;
4330
4331           secinfo = elf_section_data (sec)->sec_info;
4332           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4333             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4334                                                  isym->st_value + ref->addend);
4335           else
4336             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4337                                                  isym->st_value) + ref->addend;
4338         }
4339       else
4340         addend = isym->st_value + ref->addend;
4341     }
4342   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4343     {
4344       arg->g = NULL;
4345       return 0;
4346     }
4347   return 1;
4348 }
4349
4350 /* If any entries in G->got_entries are for indirect or warning symbols,
4351    replace them with entries for the target symbol.  Convert g->got_page_refs
4352    into got_page_entry structures and estimate the number of page entries
4353    that they require.  */
4354
4355 static bfd_boolean
4356 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4357                                     struct mips_got_info *g)
4358 {
4359   struct mips_elf_traverse_got_arg tga;
4360   struct mips_got_info oldg;
4361
4362   oldg = *g;
4363
4364   tga.info = info;
4365   tga.g = g;
4366   tga.value = FALSE;
4367   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4368   if (tga.value)
4369     {
4370       *g = oldg;
4371       g->got_entries = htab_create (htab_size (oldg.got_entries),
4372                                     mips_elf_got_entry_hash,
4373                                     mips_elf_got_entry_eq, NULL);
4374       if (!g->got_entries)
4375         return FALSE;
4376
4377       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4378       if (!tga.g)
4379         return FALSE;
4380
4381       htab_delete (oldg.got_entries);
4382     }
4383
4384   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4385                                          mips_got_page_entry_eq, NULL);
4386   if (g->got_page_entries == NULL)
4387     return FALSE;
4388
4389   tga.info = info;
4390   tga.g = g;
4391   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4392
4393   return TRUE;
4394 }
4395
4396 /* Return true if a GOT entry for H should live in the local rather than
4397    global GOT area.  */
4398
4399 static bfd_boolean
4400 mips_use_local_got_p (struct bfd_link_info *info,
4401                       struct mips_elf_link_hash_entry *h)
4402 {
4403   /* Symbols that aren't in the dynamic symbol table must live in the
4404      local GOT.  This includes symbols that are completely undefined
4405      and which therefore don't bind locally.  We'll report undefined
4406      symbols later if appropriate.  */
4407   if (h->root.dynindx == -1)
4408     return TRUE;
4409
4410   /* Symbols that bind locally can (and in the case of forced-local
4411      symbols, must) live in the local GOT.  */
4412   if (h->got_only_for_calls
4413       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4414       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4415     return TRUE;
4416
4417   /* If this is an executable that must provide a definition of the symbol,
4418      either though PLTs or copy relocations, then that address should go in
4419      the local rather than global GOT.  */
4420   if (bfd_link_executable (info) && h->has_static_relocs)
4421     return TRUE;
4422
4423   return FALSE;
4424 }
4425
4426 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4427    link_info structure.  Decide whether the hash entry needs an entry in
4428    the global part of the primary GOT, setting global_got_area accordingly.
4429    Count the number of global symbols that are in the primary GOT only
4430    because they have relocations against them (reloc_only_gotno).  */
4431
4432 static int
4433 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4434 {
4435   struct bfd_link_info *info;
4436   struct mips_elf_link_hash_table *htab;
4437   struct mips_got_info *g;
4438
4439   info = (struct bfd_link_info *) data;
4440   htab = mips_elf_hash_table (info);
4441   g = htab->got_info;
4442   if (h->global_got_area != GGA_NONE)
4443     {
4444       /* Make a final decision about whether the symbol belongs in the
4445          local or global GOT.  */
4446       if (mips_use_local_got_p (info, h))
4447         /* The symbol belongs in the local GOT.  We no longer need this
4448            entry if it was only used for relocations; those relocations
4449            will be against the null or section symbol instead of H.  */
4450         h->global_got_area = GGA_NONE;
4451       else if (htab->is_vxworks
4452                && h->got_only_for_calls
4453                && h->root.plt.plist->mips_offset != MINUS_ONE)
4454         /* On VxWorks, calls can refer directly to the .got.plt entry;
4455            they don't need entries in the regular GOT.  .got.plt entries
4456            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4457         h->global_got_area = GGA_NONE;
4458       else if (h->global_got_area == GGA_RELOC_ONLY)
4459         {
4460           g->reloc_only_gotno++;
4461           g->global_gotno++;
4462         }
4463     }
4464   return 1;
4465 }
4466 \f
4467 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4468    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4469
4470 static int
4471 mips_elf_add_got_entry (void **entryp, void *data)
4472 {
4473   struct mips_got_entry *entry;
4474   struct mips_elf_traverse_got_arg *arg;
4475   void **slot;
4476
4477   entry = (struct mips_got_entry *) *entryp;
4478   arg = (struct mips_elf_traverse_got_arg *) data;
4479   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4480   if (!slot)
4481     {
4482       arg->g = NULL;
4483       return 0;
4484     }
4485   if (!*slot)
4486     {
4487       *slot = entry;
4488       mips_elf_count_got_entry (arg->info, arg->g, entry);
4489     }
4490   return 1;
4491 }
4492
4493 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4494    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4495
4496 static int
4497 mips_elf_add_got_page_entry (void **entryp, void *data)
4498 {
4499   struct mips_got_page_entry *entry;
4500   struct mips_elf_traverse_got_arg *arg;
4501   void **slot;
4502
4503   entry = (struct mips_got_page_entry *) *entryp;
4504   arg = (struct mips_elf_traverse_got_arg *) data;
4505   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4506   if (!slot)
4507     {
4508       arg->g = NULL;
4509       return 0;
4510     }
4511   if (!*slot)
4512     {
4513       *slot = entry;
4514       arg->g->page_gotno += entry->num_pages;
4515     }
4516   return 1;
4517 }
4518
4519 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4520    this would lead to overflow, 1 if they were merged successfully,
4521    and 0 if a merge failed due to lack of memory.  (These values are chosen
4522    so that nonnegative return values can be returned by a htab_traverse
4523    callback.)  */
4524
4525 static int
4526 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4527                          struct mips_got_info *to,
4528                          struct mips_elf_got_per_bfd_arg *arg)
4529 {
4530   struct mips_elf_traverse_got_arg tga;
4531   unsigned int estimate;
4532
4533   /* Work out how many page entries we would need for the combined GOT.  */
4534   estimate = arg->max_pages;
4535   if (estimate >= from->page_gotno + to->page_gotno)
4536     estimate = from->page_gotno + to->page_gotno;
4537
4538   /* And conservatively estimate how many local and TLS entries
4539      would be needed.  */
4540   estimate += from->local_gotno + to->local_gotno;
4541   estimate += from->tls_gotno + to->tls_gotno;
4542
4543   /* If we're merging with the primary got, any TLS relocations will
4544      come after the full set of global entries.  Otherwise estimate those
4545      conservatively as well.  */
4546   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4547     estimate += arg->global_count;
4548   else
4549     estimate += from->global_gotno + to->global_gotno;
4550
4551   /* Bail out if the combined GOT might be too big.  */
4552   if (estimate > arg->max_count)
4553     return -1;
4554
4555   /* Transfer the bfd's got information from FROM to TO.  */
4556   tga.info = arg->info;
4557   tga.g = to;
4558   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4559   if (!tga.g)
4560     return 0;
4561
4562   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4563   if (!tga.g)
4564     return 0;
4565
4566   mips_elf_replace_bfd_got (abfd, to);
4567   return 1;
4568 }
4569
4570 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4571    as possible of the primary got, since it doesn't require explicit
4572    dynamic relocations, but don't use bfds that would reference global
4573    symbols out of the addressable range.  Failing the primary got,
4574    attempt to merge with the current got, or finish the current got
4575    and then make make the new got current.  */
4576
4577 static bfd_boolean
4578 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4579                     struct mips_elf_got_per_bfd_arg *arg)
4580 {
4581   unsigned int estimate;
4582   int result;
4583
4584   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4585     return FALSE;
4586
4587   /* Work out the number of page, local and TLS entries.  */
4588   estimate = arg->max_pages;
4589   if (estimate > g->page_gotno)
4590     estimate = g->page_gotno;
4591   estimate += g->local_gotno + g->tls_gotno;
4592
4593   /* We place TLS GOT entries after both locals and globals.  The globals
4594      for the primary GOT may overflow the normal GOT size limit, so be
4595      sure not to merge a GOT which requires TLS with the primary GOT in that
4596      case.  This doesn't affect non-primary GOTs.  */
4597   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4598
4599   if (estimate <= arg->max_count)
4600     {
4601       /* If we don't have a primary GOT, use it as
4602          a starting point for the primary GOT.  */
4603       if (!arg->primary)
4604         {
4605           arg->primary = g;
4606           return TRUE;
4607         }
4608
4609       /* Try merging with the primary GOT.  */
4610       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4611       if (result >= 0)
4612         return result;
4613     }
4614
4615   /* If we can merge with the last-created got, do it.  */
4616   if (arg->current)
4617     {
4618       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4619       if (result >= 0)
4620         return result;
4621     }
4622
4623   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4624      fits; if it turns out that it doesn't, we'll get relocation
4625      overflows anyway.  */
4626   g->next = arg->current;
4627   arg->current = g;
4628
4629   return TRUE;
4630 }
4631
4632 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4633    to GOTIDX, duplicating the entry if it has already been assigned
4634    an index in a different GOT.  */
4635
4636 static bfd_boolean
4637 mips_elf_set_gotidx (void **entryp, long gotidx)
4638 {
4639   struct mips_got_entry *entry;
4640
4641   entry = (struct mips_got_entry *) *entryp;
4642   if (entry->gotidx > 0)
4643     {
4644       struct mips_got_entry *new_entry;
4645
4646       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4647       if (!new_entry)
4648         return FALSE;
4649
4650       *new_entry = *entry;
4651       *entryp = new_entry;
4652       entry = new_entry;
4653     }
4654   entry->gotidx = gotidx;
4655   return TRUE;
4656 }
4657
4658 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4659    mips_elf_traverse_got_arg in which DATA->value is the size of one
4660    GOT entry.  Set DATA->g to null on failure.  */
4661
4662 static int
4663 mips_elf_initialize_tls_index (void **entryp, void *data)
4664 {
4665   struct mips_got_entry *entry;
4666   struct mips_elf_traverse_got_arg *arg;
4667
4668   /* We're only interested in TLS symbols.  */
4669   entry = (struct mips_got_entry *) *entryp;
4670   if (entry->tls_type == GOT_TLS_NONE)
4671     return 1;
4672
4673   arg = (struct mips_elf_traverse_got_arg *) data;
4674   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4675     {
4676       arg->g = NULL;
4677       return 0;
4678     }
4679
4680   /* Account for the entries we've just allocated.  */
4681   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4682   return 1;
4683 }
4684
4685 /* A htab_traverse callback for GOT entries, where DATA points to a
4686    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4687    symbol to DATA->value.  */
4688
4689 static int
4690 mips_elf_set_global_got_area (void **entryp, void *data)
4691 {
4692   struct mips_got_entry *entry;
4693   struct mips_elf_traverse_got_arg *arg;
4694
4695   entry = (struct mips_got_entry *) *entryp;
4696   arg = (struct mips_elf_traverse_got_arg *) data;
4697   if (entry->abfd != NULL
4698       && entry->symndx == -1
4699       && entry->d.h->global_got_area != GGA_NONE)
4700     entry->d.h->global_got_area = arg->value;
4701   return 1;
4702 }
4703
4704 /* A htab_traverse callback for secondary GOT entries, where DATA points
4705    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4706    and record the number of relocations they require.  DATA->value is
4707    the size of one GOT entry.  Set DATA->g to null on failure.  */
4708
4709 static int
4710 mips_elf_set_global_gotidx (void **entryp, void *data)
4711 {
4712   struct mips_got_entry *entry;
4713   struct mips_elf_traverse_got_arg *arg;
4714
4715   entry = (struct mips_got_entry *) *entryp;
4716   arg = (struct mips_elf_traverse_got_arg *) data;
4717   if (entry->abfd != NULL
4718       && entry->symndx == -1
4719       && entry->d.h->global_got_area != GGA_NONE)
4720     {
4721       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4722         {
4723           arg->g = NULL;
4724           return 0;
4725         }
4726       arg->g->assigned_low_gotno += 1;
4727
4728       if (bfd_link_pic (arg->info)
4729           || (elf_hash_table (arg->info)->dynamic_sections_created
4730               && entry->d.h->root.def_dynamic
4731               && !entry->d.h->root.def_regular))
4732         arg->g->relocs += 1;
4733     }
4734
4735   return 1;
4736 }
4737
4738 /* A htab_traverse callback for GOT entries for which DATA is the
4739    bfd_link_info.  Forbid any global symbols from having traditional
4740    lazy-binding stubs.  */
4741
4742 static int
4743 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4744 {
4745   struct bfd_link_info *info;
4746   struct mips_elf_link_hash_table *htab;
4747   struct mips_got_entry *entry;
4748
4749   entry = (struct mips_got_entry *) *entryp;
4750   info = (struct bfd_link_info *) data;
4751   htab = mips_elf_hash_table (info);
4752   BFD_ASSERT (htab != NULL);
4753
4754   if (entry->abfd != NULL
4755       && entry->symndx == -1
4756       && entry->d.h->needs_lazy_stub)
4757     {
4758       entry->d.h->needs_lazy_stub = FALSE;
4759       htab->lazy_stub_count--;
4760     }
4761
4762   return 1;
4763 }
4764
4765 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4766    the primary GOT.  */
4767 static bfd_vma
4768 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4769 {
4770   if (!g->next)
4771     return 0;
4772
4773   g = mips_elf_bfd_got (ibfd, FALSE);
4774   if (! g)
4775     return 0;
4776
4777   BFD_ASSERT (g->next);
4778
4779   g = g->next;
4780
4781   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4782     * MIPS_ELF_GOT_SIZE (abfd);
4783 }
4784
4785 /* Turn a single GOT that is too big for 16-bit addressing into
4786    a sequence of GOTs, each one 16-bit addressable.  */
4787
4788 static bfd_boolean
4789 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4790                     asection *got, bfd_size_type pages)
4791 {
4792   struct mips_elf_link_hash_table *htab;
4793   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4794   struct mips_elf_traverse_got_arg tga;
4795   struct mips_got_info *g, *gg;
4796   unsigned int assign, needed_relocs;
4797   bfd *dynobj, *ibfd;
4798
4799   dynobj = elf_hash_table (info)->dynobj;
4800   htab = mips_elf_hash_table (info);
4801   BFD_ASSERT (htab != NULL);
4802
4803   g = htab->got_info;
4804
4805   got_per_bfd_arg.obfd = abfd;
4806   got_per_bfd_arg.info = info;
4807   got_per_bfd_arg.current = NULL;
4808   got_per_bfd_arg.primary = NULL;
4809   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4810                                 / MIPS_ELF_GOT_SIZE (abfd))
4811                                - htab->reserved_gotno);
4812   got_per_bfd_arg.max_pages = pages;
4813   /* The number of globals that will be included in the primary GOT.
4814      See the calls to mips_elf_set_global_got_area below for more
4815      information.  */
4816   got_per_bfd_arg.global_count = g->global_gotno;
4817
4818   /* Try to merge the GOTs of input bfds together, as long as they
4819      don't seem to exceed the maximum GOT size, choosing one of them
4820      to be the primary GOT.  */
4821   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4822     {
4823       gg = mips_elf_bfd_got (ibfd, FALSE);
4824       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4825         return FALSE;
4826     }
4827
4828   /* If we do not find any suitable primary GOT, create an empty one.  */
4829   if (got_per_bfd_arg.primary == NULL)
4830     g->next = mips_elf_create_got_info (abfd);
4831   else
4832     g->next = got_per_bfd_arg.primary;
4833   g->next->next = got_per_bfd_arg.current;
4834
4835   /* GG is now the master GOT, and G is the primary GOT.  */
4836   gg = g;
4837   g = g->next;
4838
4839   /* Map the output bfd to the primary got.  That's what we're going
4840      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4841      didn't mark in check_relocs, and we want a quick way to find it.
4842      We can't just use gg->next because we're going to reverse the
4843      list.  */
4844   mips_elf_replace_bfd_got (abfd, g);
4845
4846   /* Every symbol that is referenced in a dynamic relocation must be
4847      present in the primary GOT, so arrange for them to appear after
4848      those that are actually referenced.  */
4849   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4850   g->global_gotno = gg->global_gotno;
4851
4852   tga.info = info;
4853   tga.value = GGA_RELOC_ONLY;
4854   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4855   tga.value = GGA_NORMAL;
4856   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4857
4858   /* Now go through the GOTs assigning them offset ranges.
4859      [assigned_low_gotno, local_gotno[ will be set to the range of local
4860      entries in each GOT.  We can then compute the end of a GOT by
4861      adding local_gotno to global_gotno.  We reverse the list and make
4862      it circular since then we'll be able to quickly compute the
4863      beginning of a GOT, by computing the end of its predecessor.  To
4864      avoid special cases for the primary GOT, while still preserving
4865      assertions that are valid for both single- and multi-got links,
4866      we arrange for the main got struct to have the right number of
4867      global entries, but set its local_gotno such that the initial
4868      offset of the primary GOT is zero.  Remember that the primary GOT
4869      will become the last item in the circular linked list, so it
4870      points back to the master GOT.  */
4871   gg->local_gotno = -g->global_gotno;
4872   gg->global_gotno = g->global_gotno;
4873   gg->tls_gotno = 0;
4874   assign = 0;
4875   gg->next = gg;
4876
4877   do
4878     {
4879       struct mips_got_info *gn;
4880
4881       assign += htab->reserved_gotno;
4882       g->assigned_low_gotno = assign;
4883       g->local_gotno += assign;
4884       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4885       g->assigned_high_gotno = g->local_gotno - 1;
4886       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4887
4888       /* Take g out of the direct list, and push it onto the reversed
4889          list that gg points to.  g->next is guaranteed to be nonnull after
4890          this operation, as required by mips_elf_initialize_tls_index. */
4891       gn = g->next;
4892       g->next = gg->next;
4893       gg->next = g;
4894
4895       /* Set up any TLS entries.  We always place the TLS entries after
4896          all non-TLS entries.  */
4897       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4898       tga.g = g;
4899       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4900       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4901       if (!tga.g)
4902         return FALSE;
4903       BFD_ASSERT (g->tls_assigned_gotno == assign);
4904
4905       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4906       g = gn;
4907
4908       /* Forbid global symbols in every non-primary GOT from having
4909          lazy-binding stubs.  */
4910       if (g)
4911         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4912     }
4913   while (g);
4914
4915   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4916
4917   needed_relocs = 0;
4918   for (g = gg->next; g && g->next != gg; g = g->next)
4919     {
4920       unsigned int save_assign;
4921
4922       /* Assign offsets to global GOT entries and count how many
4923          relocations they need.  */
4924       save_assign = g->assigned_low_gotno;
4925       g->assigned_low_gotno = g->local_gotno;
4926       tga.info = info;
4927       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4928       tga.g = g;
4929       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4930       if (!tga.g)
4931         return FALSE;
4932       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4933       g->assigned_low_gotno = save_assign;
4934
4935       if (bfd_link_pic (info))
4936         {
4937           g->relocs += g->local_gotno - g->assigned_low_gotno;
4938           BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4939                       + g->next->global_gotno
4940                       + g->next->tls_gotno
4941                       + htab->reserved_gotno);
4942         }
4943       needed_relocs += g->relocs;
4944     }
4945   needed_relocs += g->relocs;
4946
4947   if (needed_relocs)
4948     mips_elf_allocate_dynamic_relocations (dynobj, info,
4949                                            needed_relocs);
4950
4951   return TRUE;
4952 }
4953
4954 \f
4955 /* Returns the first relocation of type r_type found, beginning with
4956    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4957
4958 static const Elf_Internal_Rela *
4959 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4960                           const Elf_Internal_Rela *relocation,
4961                           const Elf_Internal_Rela *relend)
4962 {
4963   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4964
4965   while (relocation < relend)
4966     {
4967       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4968           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4969         return relocation;
4970
4971       ++relocation;
4972     }
4973
4974   /* We didn't find it.  */
4975   return NULL;
4976 }
4977
4978 /* Return whether an input relocation is against a local symbol.  */
4979
4980 static bfd_boolean
4981 mips_elf_local_relocation_p (bfd *input_bfd,
4982                              const Elf_Internal_Rela *relocation,
4983                              asection **local_sections)
4984 {
4985   unsigned long r_symndx;
4986   Elf_Internal_Shdr *symtab_hdr;
4987   size_t extsymoff;
4988
4989   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4990   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4991   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4992
4993   if (r_symndx < extsymoff)
4994     return TRUE;
4995   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4996     return TRUE;
4997
4998   return FALSE;
4999 }
5000 \f
5001 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5002
5003 bfd_vma
5004 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5005 {
5006   if (value & ((bfd_vma) 1 << (bits - 1)))
5007     /* VALUE is negative.  */
5008     value |= ((bfd_vma) - 1) << bits;
5009
5010   return value;
5011 }
5012
5013 /* Return non-zero if the indicated VALUE has overflowed the maximum
5014    range expressible by a signed number with the indicated number of
5015    BITS.  */
5016
5017 static bfd_boolean
5018 mips_elf_overflow_p (bfd_vma value, int bits)
5019 {
5020   bfd_signed_vma svalue = (bfd_signed_vma) value;
5021
5022   if (svalue > (1 << (bits - 1)) - 1)
5023     /* The value is too big.  */
5024     return TRUE;
5025   else if (svalue < -(1 << (bits - 1)))
5026     /* The value is too small.  */
5027     return TRUE;
5028
5029   /* All is well.  */
5030   return FALSE;
5031 }
5032
5033 /* Calculate the %high function.  */
5034
5035 static bfd_vma
5036 mips_elf_high (bfd_vma value)
5037 {
5038   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5039 }
5040
5041 /* Calculate the %higher function.  */
5042
5043 static bfd_vma
5044 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5045 {
5046 #ifdef BFD64
5047   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5048 #else
5049   abort ();
5050   return MINUS_ONE;
5051 #endif
5052 }
5053
5054 /* Calculate the %highest function.  */
5055
5056 static bfd_vma
5057 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5058 {
5059 #ifdef BFD64
5060   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5061 #else
5062   abort ();
5063   return MINUS_ONE;
5064 #endif
5065 }
5066 \f
5067 /* Create the .compact_rel section.  */
5068
5069 static bfd_boolean
5070 mips_elf_create_compact_rel_section
5071   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5072 {
5073   flagword flags;
5074   register asection *s;
5075
5076   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5077     {
5078       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5079                | SEC_READONLY);
5080
5081       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5082       if (s == NULL
5083           || ! bfd_set_section_alignment (abfd, s,
5084                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5085         return FALSE;
5086
5087       s->size = sizeof (Elf32_External_compact_rel);
5088     }
5089
5090   return TRUE;
5091 }
5092
5093 /* Create the .got section to hold the global offset table.  */
5094
5095 static bfd_boolean
5096 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5097 {
5098   flagword flags;
5099   register asection *s;
5100   struct elf_link_hash_entry *h;
5101   struct bfd_link_hash_entry *bh;
5102   struct mips_elf_link_hash_table *htab;
5103
5104   htab = mips_elf_hash_table (info);
5105   BFD_ASSERT (htab != NULL);
5106
5107   /* This function may be called more than once.  */
5108   if (htab->sgot)
5109     return TRUE;
5110
5111   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5112            | SEC_LINKER_CREATED);
5113
5114   /* We have to use an alignment of 2**4 here because this is hardcoded
5115      in the function stub generation and in the linker script.  */
5116   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5117   if (s == NULL
5118       || ! bfd_set_section_alignment (abfd, s, 4))
5119     return FALSE;
5120   htab->sgot = s;
5121
5122   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5123      linker script because we don't want to define the symbol if we
5124      are not creating a global offset table.  */
5125   bh = NULL;
5126   if (! (_bfd_generic_link_add_one_symbol
5127          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5128           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5129     return FALSE;
5130
5131   h = (struct elf_link_hash_entry *) bh;
5132   h->non_elf = 0;
5133   h->def_regular = 1;
5134   h->type = STT_OBJECT;
5135   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5136   elf_hash_table (info)->hgot = h;
5137
5138   if (bfd_link_pic (info)
5139       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5140     return FALSE;
5141
5142   htab->got_info = mips_elf_create_got_info (abfd);
5143   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5144     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5145
5146   /* We also need a .got.plt section when generating PLTs.  */
5147   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5148                                           SEC_ALLOC | SEC_LOAD
5149                                           | SEC_HAS_CONTENTS
5150                                           | SEC_IN_MEMORY
5151                                           | SEC_LINKER_CREATED);
5152   if (s == NULL)
5153     return FALSE;
5154   htab->sgotplt = s;
5155
5156   return TRUE;
5157 }
5158 \f
5159 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5160    __GOTT_INDEX__ symbols.  These symbols are only special for
5161    shared objects; they are not used in executables.  */
5162
5163 static bfd_boolean
5164 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5165 {
5166   return (mips_elf_hash_table (info)->is_vxworks
5167           && bfd_link_pic (info)
5168           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5169               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5170 }
5171
5172 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5173    require an la25 stub.  See also mips_elf_local_pic_function_p,
5174    which determines whether the destination function ever requires a
5175    stub.  */
5176
5177 static bfd_boolean
5178 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5179                                      bfd_boolean target_is_16_bit_code_p)
5180 {
5181   /* We specifically ignore branches and jumps from EF_PIC objects,
5182      where the onus is on the compiler or programmer to perform any
5183      necessary initialization of $25.  Sometimes such initialization
5184      is unnecessary; for example, -mno-shared functions do not use
5185      the incoming value of $25, and may therefore be called directly.  */
5186   if (PIC_OBJECT_P (input_bfd))
5187     return FALSE;
5188
5189   switch (r_type)
5190     {
5191     case R_MIPS_26:
5192     case R_MIPS_PC16:
5193     case R_MIPS_PC21_S2:
5194     case R_MIPS_PC26_S2:
5195     case R_MICROMIPS_26_S1:
5196     case R_MICROMIPS_PC7_S1:
5197     case R_MICROMIPS_PC10_S1:
5198     case R_MICROMIPS_PC16_S1:
5199     case R_MICROMIPS_PC23_S2:
5200       return TRUE;
5201
5202     case R_MIPS16_26:
5203       return !target_is_16_bit_code_p;
5204
5205     default:
5206       return FALSE;
5207     }
5208 }
5209 \f
5210 /* Calculate the value produced by the RELOCATION (which comes from
5211    the INPUT_BFD).  The ADDEND is the addend to use for this
5212    RELOCATION; RELOCATION->R_ADDEND is ignored.
5213
5214    The result of the relocation calculation is stored in VALUEP.
5215    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5216    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5217
5218    This function returns bfd_reloc_continue if the caller need take no
5219    further action regarding this relocation, bfd_reloc_notsupported if
5220    something goes dramatically wrong, bfd_reloc_overflow if an
5221    overflow occurs, and bfd_reloc_ok to indicate success.  */
5222
5223 static bfd_reloc_status_type
5224 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5225                                asection *input_section,
5226                                struct bfd_link_info *info,
5227                                const Elf_Internal_Rela *relocation,
5228                                bfd_vma addend, reloc_howto_type *howto,
5229                                Elf_Internal_Sym *local_syms,
5230                                asection **local_sections, bfd_vma *valuep,
5231                                const char **namep,
5232                                bfd_boolean *cross_mode_jump_p,
5233                                bfd_boolean save_addend)
5234 {
5235   /* The eventual value we will return.  */
5236   bfd_vma value;
5237   /* The address of the symbol against which the relocation is
5238      occurring.  */
5239   bfd_vma symbol = 0;
5240   /* The final GP value to be used for the relocatable, executable, or
5241      shared object file being produced.  */
5242   bfd_vma gp;
5243   /* The place (section offset or address) of the storage unit being
5244      relocated.  */
5245   bfd_vma p;
5246   /* The value of GP used to create the relocatable object.  */
5247   bfd_vma gp0;
5248   /* The offset into the global offset table at which the address of
5249      the relocation entry symbol, adjusted by the addend, resides
5250      during execution.  */
5251   bfd_vma g = MINUS_ONE;
5252   /* The section in which the symbol referenced by the relocation is
5253      located.  */
5254   asection *sec = NULL;
5255   struct mips_elf_link_hash_entry *h = NULL;
5256   /* TRUE if the symbol referred to by this relocation is a local
5257      symbol.  */
5258   bfd_boolean local_p, was_local_p;
5259   /* TRUE if the symbol referred to by this relocation is a section
5260      symbol.  */
5261   bfd_boolean section_p = FALSE;
5262   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5263   bfd_boolean gp_disp_p = FALSE;
5264   /* TRUE if the symbol referred to by this relocation is
5265      "__gnu_local_gp".  */
5266   bfd_boolean gnu_local_gp_p = FALSE;
5267   Elf_Internal_Shdr *symtab_hdr;
5268   size_t extsymoff;
5269   unsigned long r_symndx;
5270   int r_type;
5271   /* TRUE if overflow occurred during the calculation of the
5272      relocation value.  */
5273   bfd_boolean overflowed_p;
5274   /* TRUE if this relocation refers to a MIPS16 function.  */
5275   bfd_boolean target_is_16_bit_code_p = FALSE;
5276   bfd_boolean target_is_micromips_code_p = FALSE;
5277   struct mips_elf_link_hash_table *htab;
5278   bfd *dynobj;
5279
5280   dynobj = elf_hash_table (info)->dynobj;
5281   htab = mips_elf_hash_table (info);
5282   BFD_ASSERT (htab != NULL);
5283
5284   /* Parse the relocation.  */
5285   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5286   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5287   p = (input_section->output_section->vma
5288        + input_section->output_offset
5289        + relocation->r_offset);
5290
5291   /* Assume that there will be no overflow.  */
5292   overflowed_p = FALSE;
5293
5294   /* Figure out whether or not the symbol is local, and get the offset
5295      used in the array of hash table entries.  */
5296   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5297   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5298                                          local_sections);
5299   was_local_p = local_p;
5300   if (! elf_bad_symtab (input_bfd))
5301     extsymoff = symtab_hdr->sh_info;
5302   else
5303     {
5304       /* The symbol table does not follow the rule that local symbols
5305          must come before globals.  */
5306       extsymoff = 0;
5307     }
5308
5309   /* Figure out the value of the symbol.  */
5310   if (local_p)
5311     {
5312       Elf_Internal_Sym *sym;
5313
5314       sym = local_syms + r_symndx;
5315       sec = local_sections[r_symndx];
5316
5317       section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5318
5319       symbol = sec->output_section->vma + sec->output_offset;
5320       if (!section_p || (sec->flags & SEC_MERGE))
5321         symbol += sym->st_value;
5322       if ((sec->flags & SEC_MERGE) && section_p)
5323         {
5324           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5325           addend -= symbol;
5326           addend += sec->output_section->vma + sec->output_offset;
5327         }
5328
5329       /* MIPS16/microMIPS text labels should be treated as odd.  */
5330       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5331         ++symbol;
5332
5333       /* Record the name of this symbol, for our caller.  */
5334       *namep = bfd_elf_string_from_elf_section (input_bfd,
5335                                                 symtab_hdr->sh_link,
5336                                                 sym->st_name);
5337       if (*namep == NULL || **namep == '\0')
5338         *namep = bfd_section_name (input_bfd, sec);
5339
5340       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5341       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5342     }
5343   else
5344     {
5345       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5346
5347       /* For global symbols we look up the symbol in the hash-table.  */
5348       h = ((struct mips_elf_link_hash_entry *)
5349            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5350       /* Find the real hash-table entry for this symbol.  */
5351       while (h->root.root.type == bfd_link_hash_indirect
5352              || h->root.root.type == bfd_link_hash_warning)
5353         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5354
5355       /* Record the name of this symbol, for our caller.  */
5356       *namep = h->root.root.root.string;
5357
5358       /* See if this is the special _gp_disp symbol.  Note that such a
5359          symbol must always be a global symbol.  */
5360       if (strcmp (*namep, "_gp_disp") == 0
5361           && ! NEWABI_P (input_bfd))
5362         {
5363           /* Relocations against _gp_disp are permitted only with
5364              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5365           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5366             return bfd_reloc_notsupported;
5367
5368           gp_disp_p = TRUE;
5369         }
5370       /* See if this is the special _gp symbol.  Note that such a
5371          symbol must always be a global symbol.  */
5372       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5373         gnu_local_gp_p = TRUE;
5374
5375
5376       /* If this symbol is defined, calculate its address.  Note that
5377          _gp_disp is a magic symbol, always implicitly defined by the
5378          linker, so it's inappropriate to check to see whether or not
5379          its defined.  */
5380       else if ((h->root.root.type == bfd_link_hash_defined
5381                 || h->root.root.type == bfd_link_hash_defweak)
5382                && h->root.root.u.def.section)
5383         {
5384           sec = h->root.root.u.def.section;
5385           if (sec->output_section)
5386             symbol = (h->root.root.u.def.value
5387                       + sec->output_section->vma
5388                       + sec->output_offset);
5389           else
5390             symbol = h->root.root.u.def.value;
5391         }
5392       else if (h->root.root.type == bfd_link_hash_undefweak)
5393         /* We allow relocations against undefined weak symbols, giving
5394            it the value zero, so that you can undefined weak functions
5395            and check to see if they exist by looking at their
5396            addresses.  */
5397         symbol = 0;
5398       else if (info->unresolved_syms_in_objects == RM_IGNORE
5399                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5400         symbol = 0;
5401       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5402                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5403         {
5404           /* If this is a dynamic link, we should have created a
5405              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5406              in in _bfd_mips_elf_create_dynamic_sections.
5407              Otherwise, we should define the symbol with a value of 0.
5408              FIXME: It should probably get into the symbol table
5409              somehow as well.  */
5410           BFD_ASSERT (! bfd_link_pic (info));
5411           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5412           symbol = 0;
5413         }
5414       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5415         {
5416           /* This is an optional symbol - an Irix specific extension to the
5417              ELF spec.  Ignore it for now.
5418              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5419              than simply ignoring them, but we do not handle this for now.
5420              For information see the "64-bit ELF Object File Specification"
5421              which is available from here:
5422              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5423           symbol = 0;
5424         }
5425       else
5426         {
5427           (*info->callbacks->undefined_symbol)
5428             (info, h->root.root.root.string, input_bfd,
5429              input_section, relocation->r_offset,
5430              (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5431              || ELF_ST_VISIBILITY (h->root.other));
5432           return bfd_reloc_undefined;
5433         }
5434
5435       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5436       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5437     }
5438
5439   /* If this is a reference to a 16-bit function with a stub, we need
5440      to redirect the relocation to the stub unless:
5441
5442      (a) the relocation is for a MIPS16 JAL;
5443
5444      (b) the relocation is for a MIPS16 PIC call, and there are no
5445          non-MIPS16 uses of the GOT slot; or
5446
5447      (c) the section allows direct references to MIPS16 functions.  */
5448   if (r_type != R_MIPS16_26
5449       && !bfd_link_relocatable (info)
5450       && ((h != NULL
5451            && h->fn_stub != NULL
5452            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5453           || (local_p
5454               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5455               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5456       && !section_allows_mips16_refs_p (input_section))
5457     {
5458       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5459          have already noticed that we were going to need the
5460          stub.  */
5461       if (local_p)
5462         {
5463           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5464           value = 0;
5465         }
5466       else
5467         {
5468           BFD_ASSERT (h->need_fn_stub);
5469           if (h->la25_stub)
5470             {
5471               /* If a LA25 header for the stub itself exists, point to the
5472                  prepended LUI/ADDIU sequence.  */
5473               sec = h->la25_stub->stub_section;
5474               value = h->la25_stub->offset;
5475             }
5476           else
5477             {
5478               sec = h->fn_stub;
5479               value = 0;
5480             }
5481         }
5482
5483       symbol = sec->output_section->vma + sec->output_offset + value;
5484       /* The target is 16-bit, but the stub isn't.  */
5485       target_is_16_bit_code_p = FALSE;
5486     }
5487   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5488      to a standard MIPS function, we need to redirect the call to the stub.
5489      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5490      indirect calls should use an indirect stub instead.  */
5491   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5492            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5493                || (local_p
5494                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5495                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5496            && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5497     {
5498       if (local_p)
5499         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5500       else
5501         {
5502           /* If both call_stub and call_fp_stub are defined, we can figure
5503              out which one to use by checking which one appears in the input
5504              file.  */
5505           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5506             {
5507               asection *o;
5508
5509               sec = NULL;
5510               for (o = input_bfd->sections; o != NULL; o = o->next)
5511                 {
5512                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5513                     {
5514                       sec = h->call_fp_stub;
5515                       break;
5516                     }
5517                 }
5518               if (sec == NULL)
5519                 sec = h->call_stub;
5520             }
5521           else if (h->call_stub != NULL)
5522             sec = h->call_stub;
5523           else
5524             sec = h->call_fp_stub;
5525         }
5526
5527       BFD_ASSERT (sec->size > 0);
5528       symbol = sec->output_section->vma + sec->output_offset;
5529     }
5530   /* If this is a direct call to a PIC function, redirect to the
5531      non-PIC stub.  */
5532   else if (h != NULL && h->la25_stub
5533            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5534                                                    target_is_16_bit_code_p))
5535     symbol = (h->la25_stub->stub_section->output_section->vma
5536               + h->la25_stub->stub_section->output_offset
5537               + h->la25_stub->offset);
5538   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5539      entry is used if a standard PLT entry has also been made.  In this
5540      case the symbol will have been set by mips_elf_set_plt_sym_value
5541      to point to the standard PLT entry, so redirect to the compressed
5542      one.  */
5543   else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
5544            && !bfd_link_relocatable (info)
5545            && h != NULL
5546            && h->use_plt_entry
5547            && h->root.plt.plist->comp_offset != MINUS_ONE
5548            && h->root.plt.plist->mips_offset != MINUS_ONE)
5549     {
5550       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5551
5552       sec = htab->splt;
5553       symbol = (sec->output_section->vma
5554                 + sec->output_offset
5555                 + htab->plt_header_size
5556                 + htab->plt_mips_offset
5557                 + h->root.plt.plist->comp_offset
5558                 + 1);
5559
5560       target_is_16_bit_code_p = !micromips_p;
5561       target_is_micromips_code_p = micromips_p;
5562     }
5563
5564   /* Make sure MIPS16 and microMIPS are not used together.  */
5565   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5566       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5567    {
5568       (*_bfd_error_handler)
5569         (_("MIPS16 and microMIPS functions cannot call each other"));
5570       return bfd_reloc_notsupported;
5571    }
5572
5573   /* Calls from 16-bit code to 32-bit code and vice versa require the
5574      mode change.  However, we can ignore calls to undefined weak symbols,
5575      which should never be executed at runtime.  This exception is important
5576      because the assembly writer may have "known" that any definition of the
5577      symbol would be 16-bit code, and that direct jumps were therefore
5578      acceptable.  */
5579   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5580                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5581                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5582                             || (r_type == R_MICROMIPS_26_S1
5583                                 && !target_is_micromips_code_p)
5584                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5585                                 && (target_is_16_bit_code_p
5586                                     || target_is_micromips_code_p))));
5587
5588   local_p = (h == NULL || mips_use_local_got_p (info, h));
5589
5590   gp0 = _bfd_get_gp_value (input_bfd);
5591   gp = _bfd_get_gp_value (abfd);
5592   if (htab->got_info)
5593     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5594
5595   if (gnu_local_gp_p)
5596     symbol = gp;
5597
5598   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5599      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5600      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5601   if (got_page_reloc_p (r_type) && !local_p)
5602     {
5603       r_type = (micromips_reloc_p (r_type)
5604                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5605       addend = 0;
5606     }
5607
5608   /* If we haven't already determined the GOT offset, and we're going
5609      to need it, get it now.  */
5610   switch (r_type)
5611     {
5612     case R_MIPS16_CALL16:
5613     case R_MIPS16_GOT16:
5614     case R_MIPS_CALL16:
5615     case R_MIPS_GOT16:
5616     case R_MIPS_GOT_DISP:
5617     case R_MIPS_GOT_HI16:
5618     case R_MIPS_CALL_HI16:
5619     case R_MIPS_GOT_LO16:
5620     case R_MIPS_CALL_LO16:
5621     case R_MICROMIPS_CALL16:
5622     case R_MICROMIPS_GOT16:
5623     case R_MICROMIPS_GOT_DISP:
5624     case R_MICROMIPS_GOT_HI16:
5625     case R_MICROMIPS_CALL_HI16:
5626     case R_MICROMIPS_GOT_LO16:
5627     case R_MICROMIPS_CALL_LO16:
5628     case R_MIPS_TLS_GD:
5629     case R_MIPS_TLS_GOTTPREL:
5630     case R_MIPS_TLS_LDM:
5631     case R_MIPS16_TLS_GD:
5632     case R_MIPS16_TLS_GOTTPREL:
5633     case R_MIPS16_TLS_LDM:
5634     case R_MICROMIPS_TLS_GD:
5635     case R_MICROMIPS_TLS_GOTTPREL:
5636     case R_MICROMIPS_TLS_LDM:
5637       /* Find the index into the GOT where this value is located.  */
5638       if (tls_ldm_reloc_p (r_type))
5639         {
5640           g = mips_elf_local_got_index (abfd, input_bfd, info,
5641                                         0, 0, NULL, r_type);
5642           if (g == MINUS_ONE)
5643             return bfd_reloc_outofrange;
5644         }
5645       else if (!local_p)
5646         {
5647           /* On VxWorks, CALL relocations should refer to the .got.plt
5648              entry, which is initialized to point at the PLT stub.  */
5649           if (htab->is_vxworks
5650               && (call_hi16_reloc_p (r_type)
5651                   || call_lo16_reloc_p (r_type)
5652                   || call16_reloc_p (r_type)))
5653             {
5654               BFD_ASSERT (addend == 0);
5655               BFD_ASSERT (h->root.needs_plt);
5656               g = mips_elf_gotplt_index (info, &h->root);
5657             }
5658           else
5659             {
5660               BFD_ASSERT (addend == 0);
5661               g = mips_elf_global_got_index (abfd, info, input_bfd,
5662                                              &h->root, r_type);
5663               if (!TLS_RELOC_P (r_type)
5664                   && !elf_hash_table (info)->dynamic_sections_created)
5665                 /* This is a static link.  We must initialize the GOT entry.  */
5666                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5667             }
5668         }
5669       else if (!htab->is_vxworks
5670                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5671         /* The calculation below does not involve "g".  */
5672         break;
5673       else
5674         {
5675           g = mips_elf_local_got_index (abfd, input_bfd, info,
5676                                         symbol + addend, r_symndx, h, r_type);
5677           if (g == MINUS_ONE)
5678             return bfd_reloc_outofrange;
5679         }
5680
5681       /* Convert GOT indices to actual offsets.  */
5682       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5683       break;
5684     }
5685
5686   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5687      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5688   if (h != NULL && is_gott_symbol (info, &h->root))
5689     {
5690       Elf_Internal_Rela outrel;
5691       bfd_byte *loc;
5692       asection *s;
5693
5694       s = mips_elf_rel_dyn_section (info, FALSE);
5695       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5696
5697       outrel.r_offset = (input_section->output_section->vma
5698                          + input_section->output_offset
5699                          + relocation->r_offset);
5700       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5701       outrel.r_addend = addend;
5702       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5703
5704       /* If we've written this relocation for a readonly section,
5705          we need to set DF_TEXTREL again, so that we do not delete the
5706          DT_TEXTREL tag.  */
5707       if (MIPS_ELF_READONLY_SECTION (input_section))
5708         info->flags |= DF_TEXTREL;
5709
5710       *valuep = 0;
5711       return bfd_reloc_ok;
5712     }
5713
5714   /* Figure out what kind of relocation is being performed.  */
5715   switch (r_type)
5716     {
5717     case R_MIPS_NONE:
5718       return bfd_reloc_continue;
5719
5720     case R_MIPS_16:
5721       if (howto->partial_inplace)
5722         addend = _bfd_mips_elf_sign_extend (addend, 16);
5723       value = symbol + addend;
5724       overflowed_p = mips_elf_overflow_p (value, 16);
5725       break;
5726
5727     case R_MIPS_32:
5728     case R_MIPS_REL32:
5729     case R_MIPS_64:
5730       if ((bfd_link_pic (info)
5731            || (htab->root.dynamic_sections_created
5732                && h != NULL
5733                && h->root.def_dynamic
5734                && !h->root.def_regular
5735                && !h->has_static_relocs))
5736           && r_symndx != STN_UNDEF
5737           && (h == NULL
5738               || h->root.root.type != bfd_link_hash_undefweak
5739               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5740           && (input_section->flags & SEC_ALLOC) != 0)
5741         {
5742           /* If we're creating a shared library, then we can't know
5743              where the symbol will end up.  So, we create a relocation
5744              record in the output, and leave the job up to the dynamic
5745              linker.  We must do the same for executable references to
5746              shared library symbols, unless we've decided to use copy
5747              relocs or PLTs instead.  */
5748           value = addend;
5749           if (!mips_elf_create_dynamic_relocation (abfd,
5750                                                    info,
5751                                                    relocation,
5752                                                    h,
5753                                                    sec,
5754                                                    symbol,
5755                                                    &value,
5756                                                    input_section))
5757             return bfd_reloc_undefined;
5758         }
5759       else
5760         {
5761           if (r_type != R_MIPS_REL32)
5762             value = symbol + addend;
5763           else
5764             value = addend;
5765         }
5766       value &= howto->dst_mask;
5767       break;
5768
5769     case R_MIPS_PC32:
5770       value = symbol + addend - p;
5771       value &= howto->dst_mask;
5772       break;
5773
5774     case R_MIPS16_26:
5775       /* The calculation for R_MIPS16_26 is just the same as for an
5776          R_MIPS_26.  It's only the storage of the relocated field into
5777          the output file that's different.  That's handled in
5778          mips_elf_perform_relocation.  So, we just fall through to the
5779          R_MIPS_26 case here.  */
5780     case R_MIPS_26:
5781     case R_MICROMIPS_26_S1:
5782       {
5783         unsigned int shift;
5784
5785         /* Shift is 2, unusually, for microMIPS JALX.  */
5786         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5787
5788         if (howto->partial_inplace && !section_p)
5789           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5790         else
5791           value = addend;
5792         value += symbol;
5793
5794         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5795            the correct ISA mode selector and bit 1 must be 0.  */
5796         if (*cross_mode_jump_p && (value & 3) != (r_type == R_MIPS_26))
5797           return bfd_reloc_outofrange;
5798
5799         value >>= shift;
5800         if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5801           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5802         value &= howto->dst_mask;
5803       }
5804       break;
5805
5806     case R_MIPS_TLS_DTPREL_HI16:
5807     case R_MIPS16_TLS_DTPREL_HI16:
5808     case R_MICROMIPS_TLS_DTPREL_HI16:
5809       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5810                & howto->dst_mask);
5811       break;
5812
5813     case R_MIPS_TLS_DTPREL_LO16:
5814     case R_MIPS_TLS_DTPREL32:
5815     case R_MIPS_TLS_DTPREL64:
5816     case R_MIPS16_TLS_DTPREL_LO16:
5817     case R_MICROMIPS_TLS_DTPREL_LO16:
5818       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5819       break;
5820
5821     case R_MIPS_TLS_TPREL_HI16:
5822     case R_MIPS16_TLS_TPREL_HI16:
5823     case R_MICROMIPS_TLS_TPREL_HI16:
5824       value = (mips_elf_high (addend + symbol - tprel_base (info))
5825                & howto->dst_mask);
5826       break;
5827
5828     case R_MIPS_TLS_TPREL_LO16:
5829     case R_MIPS_TLS_TPREL32:
5830     case R_MIPS_TLS_TPREL64:
5831     case R_MIPS16_TLS_TPREL_LO16:
5832     case R_MICROMIPS_TLS_TPREL_LO16:
5833       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5834       break;
5835
5836     case R_MIPS_HI16:
5837     case R_MIPS16_HI16:
5838     case R_MICROMIPS_HI16:
5839       if (!gp_disp_p)
5840         {
5841           value = mips_elf_high (addend + symbol);
5842           value &= howto->dst_mask;
5843         }
5844       else
5845         {
5846           /* For MIPS16 ABI code we generate this sequence
5847                 0: li      $v0,%hi(_gp_disp)
5848                 4: addiupc $v1,%lo(_gp_disp)
5849                 8: sll     $v0,16
5850                12: addu    $v0,$v1
5851                14: move    $gp,$v0
5852              So the offsets of hi and lo relocs are the same, but the
5853              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5854              ADDIUPC clears the low two bits of the instruction address,
5855              so the base is ($t9 + 4) & ~3.  */
5856           if (r_type == R_MIPS16_HI16)
5857             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5858           /* The microMIPS .cpload sequence uses the same assembly
5859              instructions as the traditional psABI version, but the
5860              incoming $t9 has the low bit set.  */
5861           else if (r_type == R_MICROMIPS_HI16)
5862             value = mips_elf_high (addend + gp - p - 1);
5863           else
5864             value = mips_elf_high (addend + gp - p);
5865           overflowed_p = mips_elf_overflow_p (value, 16);
5866         }
5867       break;
5868
5869     case R_MIPS_LO16:
5870     case R_MIPS16_LO16:
5871     case R_MICROMIPS_LO16:
5872     case R_MICROMIPS_HI0_LO16:
5873       if (!gp_disp_p)
5874         value = (symbol + addend) & howto->dst_mask;
5875       else
5876         {
5877           /* See the comment for R_MIPS16_HI16 above for the reason
5878              for this conditional.  */
5879           if (r_type == R_MIPS16_LO16)
5880             value = addend + gp - (p & ~(bfd_vma) 0x3);
5881           else if (r_type == R_MICROMIPS_LO16
5882                    || r_type == R_MICROMIPS_HI0_LO16)
5883             value = addend + gp - p + 3;
5884           else
5885             value = addend + gp - p + 4;
5886           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5887              for overflow.  But, on, say, IRIX5, relocations against
5888              _gp_disp are normally generated from the .cpload
5889              pseudo-op.  It generates code that normally looks like
5890              this:
5891
5892                lui    $gp,%hi(_gp_disp)
5893                addiu  $gp,$gp,%lo(_gp_disp)
5894                addu   $gp,$gp,$t9
5895
5896              Here $t9 holds the address of the function being called,
5897              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5898              relocation can easily overflow in this situation, but the
5899              R_MIPS_HI16 relocation will handle the overflow.
5900              Therefore, we consider this a bug in the MIPS ABI, and do
5901              not check for overflow here.  */
5902         }
5903       break;
5904
5905     case R_MIPS_LITERAL:
5906     case R_MICROMIPS_LITERAL:
5907       /* Because we don't merge literal sections, we can handle this
5908          just like R_MIPS_GPREL16.  In the long run, we should merge
5909          shared literals, and then we will need to additional work
5910          here.  */
5911
5912       /* Fall through.  */
5913
5914     case R_MIPS16_GPREL:
5915       /* The R_MIPS16_GPREL performs the same calculation as
5916          R_MIPS_GPREL16, but stores the relocated bits in a different
5917          order.  We don't need to do anything special here; the
5918          differences are handled in mips_elf_perform_relocation.  */
5919     case R_MIPS_GPREL16:
5920     case R_MICROMIPS_GPREL7_S2:
5921     case R_MICROMIPS_GPREL16:
5922       /* Only sign-extend the addend if it was extracted from the
5923          instruction.  If the addend was separate, leave it alone,
5924          otherwise we may lose significant bits.  */
5925       if (howto->partial_inplace)
5926         addend = _bfd_mips_elf_sign_extend (addend, 16);
5927       value = symbol + addend - gp;
5928       /* If the symbol was local, any earlier relocatable links will
5929          have adjusted its addend with the gp offset, so compensate
5930          for that now.  Don't do it for symbols forced local in this
5931          link, though, since they won't have had the gp offset applied
5932          to them before.  */
5933       if (was_local_p)
5934         value += gp0;
5935       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5936         overflowed_p = mips_elf_overflow_p (value, 16);
5937       break;
5938
5939     case R_MIPS16_GOT16:
5940     case R_MIPS16_CALL16:
5941     case R_MIPS_GOT16:
5942     case R_MIPS_CALL16:
5943     case R_MICROMIPS_GOT16:
5944     case R_MICROMIPS_CALL16:
5945       /* VxWorks does not have separate local and global semantics for
5946          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5947       if (!htab->is_vxworks && local_p)
5948         {
5949           value = mips_elf_got16_entry (abfd, input_bfd, info,
5950                                         symbol + addend, !was_local_p);
5951           if (value == MINUS_ONE)
5952             return bfd_reloc_outofrange;
5953           value
5954             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5955           overflowed_p = mips_elf_overflow_p (value, 16);
5956           break;
5957         }
5958
5959       /* Fall through.  */
5960
5961     case R_MIPS_TLS_GD:
5962     case R_MIPS_TLS_GOTTPREL:
5963     case R_MIPS_TLS_LDM:
5964     case R_MIPS_GOT_DISP:
5965     case R_MIPS16_TLS_GD:
5966     case R_MIPS16_TLS_GOTTPREL:
5967     case R_MIPS16_TLS_LDM:
5968     case R_MICROMIPS_TLS_GD:
5969     case R_MICROMIPS_TLS_GOTTPREL:
5970     case R_MICROMIPS_TLS_LDM:
5971     case R_MICROMIPS_GOT_DISP:
5972       value = g;
5973       overflowed_p = mips_elf_overflow_p (value, 16);
5974       break;
5975
5976     case R_MIPS_GPREL32:
5977       value = (addend + symbol + gp0 - gp);
5978       if (!save_addend)
5979         value &= howto->dst_mask;
5980       break;
5981
5982     case R_MIPS_PC16:
5983     case R_MIPS_GNU_REL16_S2:
5984       if (howto->partial_inplace)
5985         addend = _bfd_mips_elf_sign_extend (addend, 18);
5986
5987       if ((symbol + addend) & 3)
5988         return bfd_reloc_outofrange;
5989
5990       value = symbol + addend - p;
5991       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5992         overflowed_p = mips_elf_overflow_p (value, 18);
5993       value >>= howto->rightshift;
5994       value &= howto->dst_mask;
5995       break;
5996
5997     case R_MIPS_PC21_S2:
5998       if (howto->partial_inplace)
5999         addend = _bfd_mips_elf_sign_extend (addend, 23);
6000
6001       if ((symbol + addend) & 3)
6002         return bfd_reloc_outofrange;
6003
6004       value = symbol + addend - p;
6005       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6006         overflowed_p = mips_elf_overflow_p (value, 23);
6007       value >>= howto->rightshift;
6008       value &= howto->dst_mask;
6009       break;
6010
6011     case R_MIPS_PC26_S2:
6012       if (howto->partial_inplace)
6013         addend = _bfd_mips_elf_sign_extend (addend, 28);
6014
6015       if ((symbol + addend) & 3)
6016         return bfd_reloc_outofrange;
6017
6018       value = symbol + addend - p;
6019       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6020         overflowed_p = mips_elf_overflow_p (value, 28);
6021       value >>= howto->rightshift;
6022       value &= howto->dst_mask;
6023       break;
6024
6025     case R_MIPS_PC18_S3:
6026       if (howto->partial_inplace)
6027         addend = _bfd_mips_elf_sign_extend (addend, 21);
6028
6029       if ((symbol + addend) & 7)
6030         return bfd_reloc_outofrange;
6031
6032       value = symbol + addend - ((p | 7) ^ 7);
6033       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6034         overflowed_p = mips_elf_overflow_p (value, 21);
6035       value >>= howto->rightshift;
6036       value &= howto->dst_mask;
6037       break;
6038
6039     case R_MIPS_PC19_S2:
6040       if (howto->partial_inplace)
6041         addend = _bfd_mips_elf_sign_extend (addend, 21);
6042
6043       if ((symbol + addend) & 3)
6044         return bfd_reloc_outofrange;
6045
6046       value = symbol + addend - p;
6047       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6048         overflowed_p = mips_elf_overflow_p (value, 21);
6049       value >>= howto->rightshift;
6050       value &= howto->dst_mask;
6051       break;
6052
6053     case R_MIPS_PCHI16:
6054       value = mips_elf_high (symbol + addend - p);
6055       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6056         overflowed_p = mips_elf_overflow_p (value, 16);
6057       value &= howto->dst_mask;
6058       break;
6059
6060     case R_MIPS_PCLO16:
6061       if (howto->partial_inplace)
6062         addend = _bfd_mips_elf_sign_extend (addend, 16);
6063       value = symbol + addend - p;
6064       value &= howto->dst_mask;
6065       break;
6066
6067     case R_MICROMIPS_PC7_S1:
6068       if (howto->partial_inplace)
6069         addend = _bfd_mips_elf_sign_extend (addend, 8);
6070       value = symbol + addend - p;
6071       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6072         overflowed_p = mips_elf_overflow_p (value, 8);
6073       value >>= howto->rightshift;
6074       value &= howto->dst_mask;
6075       break;
6076
6077     case R_MICROMIPS_PC10_S1:
6078       if (howto->partial_inplace)
6079         addend = _bfd_mips_elf_sign_extend (addend, 11);
6080       value = symbol + addend - p;
6081       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6082         overflowed_p = mips_elf_overflow_p (value, 11);
6083       value >>= howto->rightshift;
6084       value &= howto->dst_mask;
6085       break;
6086
6087     case R_MICROMIPS_PC16_S1:
6088       if (howto->partial_inplace)
6089         addend = _bfd_mips_elf_sign_extend (addend, 17);
6090       value = symbol + addend - p;
6091       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6092         overflowed_p = mips_elf_overflow_p (value, 17);
6093       value >>= howto->rightshift;
6094       value &= howto->dst_mask;
6095       break;
6096
6097     case R_MICROMIPS_PC23_S2:
6098       if (howto->partial_inplace)
6099         addend = _bfd_mips_elf_sign_extend (addend, 25);
6100       value = symbol + addend - ((p | 3) ^ 3);
6101       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6102         overflowed_p = mips_elf_overflow_p (value, 25);
6103       value >>= howto->rightshift;
6104       value &= howto->dst_mask;
6105       break;
6106
6107     case R_MIPS_GOT_HI16:
6108     case R_MIPS_CALL_HI16:
6109     case R_MICROMIPS_GOT_HI16:
6110     case R_MICROMIPS_CALL_HI16:
6111       /* We're allowed to handle these two relocations identically.
6112          The dynamic linker is allowed to handle the CALL relocations
6113          differently by creating a lazy evaluation stub.  */
6114       value = g;
6115       value = mips_elf_high (value);
6116       value &= howto->dst_mask;
6117       break;
6118
6119     case R_MIPS_GOT_LO16:
6120     case R_MIPS_CALL_LO16:
6121     case R_MICROMIPS_GOT_LO16:
6122     case R_MICROMIPS_CALL_LO16:
6123       value = g & howto->dst_mask;
6124       break;
6125
6126     case R_MIPS_GOT_PAGE:
6127     case R_MICROMIPS_GOT_PAGE:
6128       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6129       if (value == MINUS_ONE)
6130         return bfd_reloc_outofrange;
6131       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6132       overflowed_p = mips_elf_overflow_p (value, 16);
6133       break;
6134
6135     case R_MIPS_GOT_OFST:
6136     case R_MICROMIPS_GOT_OFST:
6137       if (local_p)
6138         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6139       else
6140         value = addend;
6141       overflowed_p = mips_elf_overflow_p (value, 16);
6142       break;
6143
6144     case R_MIPS_SUB:
6145     case R_MICROMIPS_SUB:
6146       value = symbol - addend;
6147       value &= howto->dst_mask;
6148       break;
6149
6150     case R_MIPS_HIGHER:
6151     case R_MICROMIPS_HIGHER:
6152       value = mips_elf_higher (addend + symbol);
6153       value &= howto->dst_mask;
6154       break;
6155
6156     case R_MIPS_HIGHEST:
6157     case R_MICROMIPS_HIGHEST:
6158       value = mips_elf_highest (addend + symbol);
6159       value &= howto->dst_mask;
6160       break;
6161
6162     case R_MIPS_SCN_DISP:
6163     case R_MICROMIPS_SCN_DISP:
6164       value = symbol + addend - sec->output_offset;
6165       value &= howto->dst_mask;
6166       break;
6167
6168     case R_MIPS_JALR:
6169     case R_MICROMIPS_JALR:
6170       /* This relocation is only a hint.  In some cases, we optimize
6171          it into a bal instruction.  But we don't try to optimize
6172          when the symbol does not resolve locally.  */
6173       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6174         return bfd_reloc_continue;
6175       value = symbol + addend;
6176       break;
6177
6178     case R_MIPS_PJUMP:
6179     case R_MIPS_GNU_VTINHERIT:
6180     case R_MIPS_GNU_VTENTRY:
6181       /* We don't do anything with these at present.  */
6182       return bfd_reloc_continue;
6183
6184     default:
6185       /* An unrecognized relocation type.  */
6186       return bfd_reloc_notsupported;
6187     }
6188
6189   /* Store the VALUE for our caller.  */
6190   *valuep = value;
6191   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6192 }
6193
6194 /* Obtain the field relocated by RELOCATION.  */
6195
6196 static bfd_vma
6197 mips_elf_obtain_contents (reloc_howto_type *howto,
6198                           const Elf_Internal_Rela *relocation,
6199                           bfd *input_bfd, bfd_byte *contents)
6200 {
6201   bfd_vma x = 0;
6202   bfd_byte *location = contents + relocation->r_offset;
6203   unsigned int size = bfd_get_reloc_size (howto);
6204
6205   /* Obtain the bytes.  */
6206   if (size != 0)
6207     x = bfd_get (8 * size, input_bfd, location);
6208
6209   return x;
6210 }
6211
6212 /* It has been determined that the result of the RELOCATION is the
6213    VALUE.  Use HOWTO to place VALUE into the output file at the
6214    appropriate position.  The SECTION is the section to which the
6215    relocation applies.
6216    CROSS_MODE_JUMP_P is true if the relocation field
6217    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6218
6219    Returns FALSE if anything goes wrong.  */
6220
6221 static bfd_boolean
6222 mips_elf_perform_relocation (struct bfd_link_info *info,
6223                              reloc_howto_type *howto,
6224                              const Elf_Internal_Rela *relocation,
6225                              bfd_vma value, bfd *input_bfd,
6226                              asection *input_section, bfd_byte *contents,
6227                              bfd_boolean cross_mode_jump_p)
6228 {
6229   bfd_vma x;
6230   bfd_byte *location;
6231   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6232   unsigned int size;
6233
6234   /* Figure out where the relocation is occurring.  */
6235   location = contents + relocation->r_offset;
6236
6237   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6238
6239   /* Obtain the current value.  */
6240   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6241
6242   /* Clear the field we are setting.  */
6243   x &= ~howto->dst_mask;
6244
6245   /* Set the field.  */
6246   x |= (value & howto->dst_mask);
6247
6248   /* If required, turn JAL into JALX.  */
6249   if (cross_mode_jump_p && jal_reloc_p (r_type))
6250     {
6251       bfd_boolean ok;
6252       bfd_vma opcode = x >> 26;
6253       bfd_vma jalx_opcode;
6254
6255       /* Check to see if the opcode is already JAL or JALX.  */
6256       if (r_type == R_MIPS16_26)
6257         {
6258           ok = ((opcode == 0x6) || (opcode == 0x7));
6259           jalx_opcode = 0x7;
6260         }
6261       else if (r_type == R_MICROMIPS_26_S1)
6262         {
6263           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6264           jalx_opcode = 0x3c;
6265         }
6266       else
6267         {
6268           ok = ((opcode == 0x3) || (opcode == 0x1d));
6269           jalx_opcode = 0x1d;
6270         }
6271
6272       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6273          convert J or JALS to JALX.  */
6274       if (!ok)
6275         {
6276           info->callbacks->einfo
6277             (_("%X%H: Unsupported jump between ISA modes; "
6278                "consider recompiling with interlinking enabled\n"),
6279              input_bfd, input_section, relocation->r_offset);
6280           return TRUE;
6281         }
6282
6283       /* Make this the JALX opcode.  */
6284       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6285     }
6286
6287   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6288      range.  */
6289   if (!bfd_link_relocatable (info)
6290       && !cross_mode_jump_p
6291       && ((JAL_TO_BAL_P (input_bfd)
6292            && r_type == R_MIPS_26
6293            && (x >> 26) == 0x3)         /* jal addr */
6294           || (JALR_TO_BAL_P (input_bfd)
6295               && r_type == R_MIPS_JALR
6296               && x == 0x0320f809)       /* jalr t9 */
6297           || (JR_TO_B_P (input_bfd)
6298               && r_type == R_MIPS_JALR
6299               && x == 0x03200008)))     /* jr t9 */
6300     {
6301       bfd_vma addr;
6302       bfd_vma dest;
6303       bfd_signed_vma off;
6304
6305       addr = (input_section->output_section->vma
6306               + input_section->output_offset
6307               + relocation->r_offset
6308               + 4);
6309       if (r_type == R_MIPS_26)
6310         dest = (value << 2) | ((addr >> 28) << 28);
6311       else
6312         dest = value;
6313       off = dest - addr;
6314       if (off <= 0x1ffff && off >= -0x20000)
6315         {
6316           if (x == 0x03200008)  /* jr t9 */
6317             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6318           else
6319             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6320         }
6321     }
6322
6323   /* Put the value into the output.  */
6324   size = bfd_get_reloc_size (howto);
6325   if (size != 0)
6326     bfd_put (8 * size, input_bfd, x, location);
6327
6328   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6329                                location);
6330
6331   return TRUE;
6332 }
6333 \f
6334 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6335    is the original relocation, which is now being transformed into a
6336    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6337    caller should store the result in place of the original addend.  */
6338
6339 static bfd_boolean
6340 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6341                                     struct bfd_link_info *info,
6342                                     const Elf_Internal_Rela *rel,
6343                                     struct mips_elf_link_hash_entry *h,
6344                                     asection *sec, bfd_vma symbol,
6345                                     bfd_vma *addendp, asection *input_section)
6346 {
6347   Elf_Internal_Rela outrel[3];
6348   asection *sreloc;
6349   bfd *dynobj;
6350   int r_type;
6351   long indx;
6352   bfd_boolean defined_p;
6353   struct mips_elf_link_hash_table *htab;
6354
6355   htab = mips_elf_hash_table (info);
6356   BFD_ASSERT (htab != NULL);
6357
6358   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6359   dynobj = elf_hash_table (info)->dynobj;
6360   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6361   BFD_ASSERT (sreloc != NULL);
6362   BFD_ASSERT (sreloc->contents != NULL);
6363   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6364               < sreloc->size);
6365
6366   outrel[0].r_offset =
6367     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6368   if (ABI_64_P (output_bfd))
6369     {
6370       outrel[1].r_offset =
6371         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6372       outrel[2].r_offset =
6373         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6374     }
6375
6376   if (outrel[0].r_offset == MINUS_ONE)
6377     /* The relocation field has been deleted.  */
6378     return TRUE;
6379
6380   if (outrel[0].r_offset == MINUS_TWO)
6381     {
6382       /* The relocation field has been converted into a relative value of
6383          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6384          the field to be fully relocated, so add in the symbol's value.  */
6385       *addendp += symbol;
6386       return TRUE;
6387     }
6388
6389   /* We must now calculate the dynamic symbol table index to use
6390      in the relocation.  */
6391   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6392     {
6393       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6394       indx = h->root.dynindx;
6395       if (SGI_COMPAT (output_bfd))
6396         defined_p = h->root.def_regular;
6397       else
6398         /* ??? glibc's ld.so just adds the final GOT entry to the
6399            relocation field.  It therefore treats relocs against
6400            defined symbols in the same way as relocs against
6401            undefined symbols.  */
6402         defined_p = FALSE;
6403     }
6404   else
6405     {
6406       if (sec != NULL && bfd_is_abs_section (sec))
6407         indx = 0;
6408       else if (sec == NULL || sec->owner == NULL)
6409         {
6410           bfd_set_error (bfd_error_bad_value);
6411           return FALSE;
6412         }
6413       else
6414         {
6415           indx = elf_section_data (sec->output_section)->dynindx;
6416           if (indx == 0)
6417             {
6418               asection *osec = htab->root.text_index_section;
6419               indx = elf_section_data (osec)->dynindx;
6420             }
6421           if (indx == 0)
6422             abort ();
6423         }
6424
6425       /* Instead of generating a relocation using the section
6426          symbol, we may as well make it a fully relative
6427          relocation.  We want to avoid generating relocations to
6428          local symbols because we used to generate them
6429          incorrectly, without adding the original symbol value,
6430          which is mandated by the ABI for section symbols.  In
6431          order to give dynamic loaders and applications time to
6432          phase out the incorrect use, we refrain from emitting
6433          section-relative relocations.  It's not like they're
6434          useful, after all.  This should be a bit more efficient
6435          as well.  */
6436       /* ??? Although this behavior is compatible with glibc's ld.so,
6437          the ABI says that relocations against STN_UNDEF should have
6438          a symbol value of 0.  Irix rld honors this, so relocations
6439          against STN_UNDEF have no effect.  */
6440       if (!SGI_COMPAT (output_bfd))
6441         indx = 0;
6442       defined_p = TRUE;
6443     }
6444
6445   /* If the relocation was previously an absolute relocation and
6446      this symbol will not be referred to by the relocation, we must
6447      adjust it by the value we give it in the dynamic symbol table.
6448      Otherwise leave the job up to the dynamic linker.  */
6449   if (defined_p && r_type != R_MIPS_REL32)
6450     *addendp += symbol;
6451
6452   if (htab->is_vxworks)
6453     /* VxWorks uses non-relative relocations for this.  */
6454     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6455   else
6456     /* The relocation is always an REL32 relocation because we don't
6457        know where the shared library will wind up at load-time.  */
6458     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6459                                    R_MIPS_REL32);
6460
6461   /* For strict adherence to the ABI specification, we should
6462      generate a R_MIPS_64 relocation record by itself before the
6463      _REL32/_64 record as well, such that the addend is read in as
6464      a 64-bit value (REL32 is a 32-bit relocation, after all).
6465      However, since none of the existing ELF64 MIPS dynamic
6466      loaders seems to care, we don't waste space with these
6467      artificial relocations.  If this turns out to not be true,
6468      mips_elf_allocate_dynamic_relocation() should be tweaked so
6469      as to make room for a pair of dynamic relocations per
6470      invocation if ABI_64_P, and here we should generate an
6471      additional relocation record with R_MIPS_64 by itself for a
6472      NULL symbol before this relocation record.  */
6473   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6474                                  ABI_64_P (output_bfd)
6475                                  ? R_MIPS_64
6476                                  : R_MIPS_NONE);
6477   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6478
6479   /* Adjust the output offset of the relocation to reference the
6480      correct location in the output file.  */
6481   outrel[0].r_offset += (input_section->output_section->vma
6482                          + input_section->output_offset);
6483   outrel[1].r_offset += (input_section->output_section->vma
6484                          + input_section->output_offset);
6485   outrel[2].r_offset += (input_section->output_section->vma
6486                          + input_section->output_offset);
6487
6488   /* Put the relocation back out.  We have to use the special
6489      relocation outputter in the 64-bit case since the 64-bit
6490      relocation format is non-standard.  */
6491   if (ABI_64_P (output_bfd))
6492     {
6493       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6494         (output_bfd, &outrel[0],
6495          (sreloc->contents
6496           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6497     }
6498   else if (htab->is_vxworks)
6499     {
6500       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6501       outrel[0].r_addend = *addendp;
6502       bfd_elf32_swap_reloca_out
6503         (output_bfd, &outrel[0],
6504          (sreloc->contents
6505           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6506     }
6507   else
6508     bfd_elf32_swap_reloc_out
6509       (output_bfd, &outrel[0],
6510        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6511
6512   /* We've now added another relocation.  */
6513   ++sreloc->reloc_count;
6514
6515   /* Make sure the output section is writable.  The dynamic linker
6516      will be writing to it.  */
6517   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6518     |= SHF_WRITE;
6519
6520   /* On IRIX5, make an entry of compact relocation info.  */
6521   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6522     {
6523       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6524       bfd_byte *cr;
6525
6526       if (scpt)
6527         {
6528           Elf32_crinfo cptrel;
6529
6530           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6531           cptrel.vaddr = (rel->r_offset
6532                           + input_section->output_section->vma
6533                           + input_section->output_offset);
6534           if (r_type == R_MIPS_REL32)
6535             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6536           else
6537             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6538           mips_elf_set_cr_dist2to (cptrel, 0);
6539           cptrel.konst = *addendp;
6540
6541           cr = (scpt->contents
6542                 + sizeof (Elf32_External_compact_rel));
6543           mips_elf_set_cr_relvaddr (cptrel, 0);
6544           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6545                                      ((Elf32_External_crinfo *) cr
6546                                       + scpt->reloc_count));
6547           ++scpt->reloc_count;
6548         }
6549     }
6550
6551   /* If we've written this relocation for a readonly section,
6552      we need to set DF_TEXTREL again, so that we do not delete the
6553      DT_TEXTREL tag.  */
6554   if (MIPS_ELF_READONLY_SECTION (input_section))
6555     info->flags |= DF_TEXTREL;
6556
6557   return TRUE;
6558 }
6559 \f
6560 /* Return the MACH for a MIPS e_flags value.  */
6561
6562 unsigned long
6563 _bfd_elf_mips_mach (flagword flags)
6564 {
6565   switch (flags & EF_MIPS_MACH)
6566     {
6567     case E_MIPS_MACH_3900:
6568       return bfd_mach_mips3900;
6569
6570     case E_MIPS_MACH_4010:
6571       return bfd_mach_mips4010;
6572
6573     case E_MIPS_MACH_4100:
6574       return bfd_mach_mips4100;
6575
6576     case E_MIPS_MACH_4111:
6577       return bfd_mach_mips4111;
6578
6579     case E_MIPS_MACH_4120:
6580       return bfd_mach_mips4120;
6581
6582     case E_MIPS_MACH_4650:
6583       return bfd_mach_mips4650;
6584
6585     case E_MIPS_MACH_5400:
6586       return bfd_mach_mips5400;
6587
6588     case E_MIPS_MACH_5500:
6589       return bfd_mach_mips5500;
6590
6591     case E_MIPS_MACH_5900:
6592       return bfd_mach_mips5900;
6593
6594     case E_MIPS_MACH_9000:
6595       return bfd_mach_mips9000;
6596
6597     case E_MIPS_MACH_SB1:
6598       return bfd_mach_mips_sb1;
6599
6600     case E_MIPS_MACH_LS2E:
6601       return bfd_mach_mips_loongson_2e;
6602
6603     case E_MIPS_MACH_LS2F:
6604       return bfd_mach_mips_loongson_2f;
6605
6606     case E_MIPS_MACH_LS3A:
6607       return bfd_mach_mips_loongson_3a;
6608
6609     case E_MIPS_MACH_OCTEON3:
6610       return bfd_mach_mips_octeon3;
6611
6612     case E_MIPS_MACH_OCTEON2:
6613       return bfd_mach_mips_octeon2;
6614
6615     case E_MIPS_MACH_OCTEON:
6616       return bfd_mach_mips_octeon;
6617
6618     case E_MIPS_MACH_XLR:
6619       return bfd_mach_mips_xlr;
6620
6621     default:
6622       switch (flags & EF_MIPS_ARCH)
6623         {
6624         default:
6625         case E_MIPS_ARCH_1:
6626           return bfd_mach_mips3000;
6627
6628         case E_MIPS_ARCH_2:
6629           return bfd_mach_mips6000;
6630
6631         case E_MIPS_ARCH_3:
6632           return bfd_mach_mips4000;
6633
6634         case E_MIPS_ARCH_4:
6635           return bfd_mach_mips8000;
6636
6637         case E_MIPS_ARCH_5:
6638           return bfd_mach_mips5;
6639
6640         case E_MIPS_ARCH_32:
6641           return bfd_mach_mipsisa32;
6642
6643         case E_MIPS_ARCH_64:
6644           return bfd_mach_mipsisa64;
6645
6646         case E_MIPS_ARCH_32R2:
6647           return bfd_mach_mipsisa32r2;
6648
6649         case E_MIPS_ARCH_64R2:
6650           return bfd_mach_mipsisa64r2;
6651
6652         case E_MIPS_ARCH_32R6:
6653           return bfd_mach_mipsisa32r6;
6654
6655         case E_MIPS_ARCH_64R6:
6656           return bfd_mach_mipsisa64r6;
6657         }
6658     }
6659
6660   return 0;
6661 }
6662
6663 /* Return printable name for ABI.  */
6664
6665 static INLINE char *
6666 elf_mips_abi_name (bfd *abfd)
6667 {
6668   flagword flags;
6669
6670   flags = elf_elfheader (abfd)->e_flags;
6671   switch (flags & EF_MIPS_ABI)
6672     {
6673     case 0:
6674       if (ABI_N32_P (abfd))
6675         return "N32";
6676       else if (ABI_64_P (abfd))
6677         return "64";
6678       else
6679         return "none";
6680     case E_MIPS_ABI_O32:
6681       return "O32";
6682     case E_MIPS_ABI_O64:
6683       return "O64";
6684     case E_MIPS_ABI_EABI32:
6685       return "EABI32";
6686     case E_MIPS_ABI_EABI64:
6687       return "EABI64";
6688     default:
6689       return "unknown abi";
6690     }
6691 }
6692 \f
6693 /* MIPS ELF uses two common sections.  One is the usual one, and the
6694    other is for small objects.  All the small objects are kept
6695    together, and then referenced via the gp pointer, which yields
6696    faster assembler code.  This is what we use for the small common
6697    section.  This approach is copied from ecoff.c.  */
6698 static asection mips_elf_scom_section;
6699 static asymbol mips_elf_scom_symbol;
6700 static asymbol *mips_elf_scom_symbol_ptr;
6701
6702 /* MIPS ELF also uses an acommon section, which represents an
6703    allocated common symbol which may be overridden by a
6704    definition in a shared library.  */
6705 static asection mips_elf_acom_section;
6706 static asymbol mips_elf_acom_symbol;
6707 static asymbol *mips_elf_acom_symbol_ptr;
6708
6709 /* This is used for both the 32-bit and the 64-bit ABI.  */
6710
6711 void
6712 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6713 {
6714   elf_symbol_type *elfsym;
6715
6716   /* Handle the special MIPS section numbers that a symbol may use.  */
6717   elfsym = (elf_symbol_type *) asym;
6718   switch (elfsym->internal_elf_sym.st_shndx)
6719     {
6720     case SHN_MIPS_ACOMMON:
6721       /* This section is used in a dynamically linked executable file.
6722          It is an allocated common section.  The dynamic linker can
6723          either resolve these symbols to something in a shared
6724          library, or it can just leave them here.  For our purposes,
6725          we can consider these symbols to be in a new section.  */
6726       if (mips_elf_acom_section.name == NULL)
6727         {
6728           /* Initialize the acommon section.  */
6729           mips_elf_acom_section.name = ".acommon";
6730           mips_elf_acom_section.flags = SEC_ALLOC;
6731           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6732           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6733           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6734           mips_elf_acom_symbol.name = ".acommon";
6735           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6736           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6737           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6738         }
6739       asym->section = &mips_elf_acom_section;
6740       break;
6741
6742     case SHN_COMMON:
6743       /* Common symbols less than the GP size are automatically
6744          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6745       if (asym->value > elf_gp_size (abfd)
6746           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6747           || IRIX_COMPAT (abfd) == ict_irix6)
6748         break;
6749       /* Fall through.  */
6750     case SHN_MIPS_SCOMMON:
6751       if (mips_elf_scom_section.name == NULL)
6752         {
6753           /* Initialize the small common section.  */
6754           mips_elf_scom_section.name = ".scommon";
6755           mips_elf_scom_section.flags = SEC_IS_COMMON;
6756           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6757           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6758           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6759           mips_elf_scom_symbol.name = ".scommon";
6760           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6761           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6762           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6763         }
6764       asym->section = &mips_elf_scom_section;
6765       asym->value = elfsym->internal_elf_sym.st_size;
6766       break;
6767
6768     case SHN_MIPS_SUNDEFINED:
6769       asym->section = bfd_und_section_ptr;
6770       break;
6771
6772     case SHN_MIPS_TEXT:
6773       {
6774         asection *section = bfd_get_section_by_name (abfd, ".text");
6775
6776         if (section != NULL)
6777           {
6778             asym->section = section;
6779             /* MIPS_TEXT is a bit special, the address is not an offset
6780                to the base of the .text section.  So substract the section
6781                base address to make it an offset.  */
6782             asym->value -= section->vma;
6783           }
6784       }
6785       break;
6786
6787     case SHN_MIPS_DATA:
6788       {
6789         asection *section = bfd_get_section_by_name (abfd, ".data");
6790
6791         if (section != NULL)
6792           {
6793             asym->section = section;
6794             /* MIPS_DATA is a bit special, the address is not an offset
6795                to the base of the .data section.  So substract the section
6796                base address to make it an offset.  */
6797             asym->value -= section->vma;
6798           }
6799       }
6800       break;
6801     }
6802
6803   /* If this is an odd-valued function symbol, assume it's a MIPS16
6804      or microMIPS one.  */
6805   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6806       && (asym->value & 1) != 0)
6807     {
6808       asym->value--;
6809       if (MICROMIPS_P (abfd))
6810         elfsym->internal_elf_sym.st_other
6811           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6812       else
6813         elfsym->internal_elf_sym.st_other
6814           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6815     }
6816 }
6817 \f
6818 /* Implement elf_backend_eh_frame_address_size.  This differs from
6819    the default in the way it handles EABI64.
6820
6821    EABI64 was originally specified as an LP64 ABI, and that is what
6822    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6823    historically accepted the combination of -mabi=eabi and -mlong32,
6824    and this ILP32 variation has become semi-official over time.
6825    Both forms use elf32 and have pointer-sized FDE addresses.
6826
6827    If an EABI object was generated by GCC 4.0 or above, it will have
6828    an empty .gcc_compiled_longXX section, where XX is the size of longs
6829    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6830    have no special marking to distinguish them from LP64 objects.
6831
6832    We don't want users of the official LP64 ABI to be punished for the
6833    existence of the ILP32 variant, but at the same time, we don't want
6834    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6835    We therefore take the following approach:
6836
6837       - If ABFD contains a .gcc_compiled_longXX section, use it to
6838         determine the pointer size.
6839
6840       - Otherwise check the type of the first relocation.  Assume that
6841         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6842
6843       - Otherwise punt.
6844
6845    The second check is enough to detect LP64 objects generated by pre-4.0
6846    compilers because, in the kind of output generated by those compilers,
6847    the first relocation will be associated with either a CIE personality
6848    routine or an FDE start address.  Furthermore, the compilers never
6849    used a special (non-pointer) encoding for this ABI.
6850
6851    Checking the relocation type should also be safe because there is no
6852    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6853    did so.  */
6854
6855 unsigned int
6856 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6857 {
6858   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6859     return 8;
6860   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6861     {
6862       bfd_boolean long32_p, long64_p;
6863
6864       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6865       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6866       if (long32_p && long64_p)
6867         return 0;
6868       if (long32_p)
6869         return 4;
6870       if (long64_p)
6871         return 8;
6872
6873       if (sec->reloc_count > 0
6874           && elf_section_data (sec)->relocs != NULL
6875           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6876               == R_MIPS_64))
6877         return 8;
6878
6879       return 0;
6880     }
6881   return 4;
6882 }
6883 \f
6884 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6885    relocations against two unnamed section symbols to resolve to the
6886    same address.  For example, if we have code like:
6887
6888         lw      $4,%got_disp(.data)($gp)
6889         lw      $25,%got_disp(.text)($gp)
6890         jalr    $25
6891
6892    then the linker will resolve both relocations to .data and the program
6893    will jump there rather than to .text.
6894
6895    We can work around this problem by giving names to local section symbols.
6896    This is also what the MIPSpro tools do.  */
6897
6898 bfd_boolean
6899 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6900 {
6901   return SGI_COMPAT (abfd);
6902 }
6903 \f
6904 /* Work over a section just before writing it out.  This routine is
6905    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6906    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6907    a better way.  */
6908
6909 bfd_boolean
6910 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6911 {
6912   if (hdr->sh_type == SHT_MIPS_REGINFO
6913       && hdr->sh_size > 0)
6914     {
6915       bfd_byte buf[4];
6916
6917       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6918       BFD_ASSERT (hdr->contents == NULL);
6919
6920       if (bfd_seek (abfd,
6921                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6922                     SEEK_SET) != 0)
6923         return FALSE;
6924       H_PUT_32 (abfd, elf_gp (abfd), buf);
6925       if (bfd_bwrite (buf, 4, abfd) != 4)
6926         return FALSE;
6927     }
6928
6929   if (hdr->sh_type == SHT_MIPS_OPTIONS
6930       && hdr->bfd_section != NULL
6931       && mips_elf_section_data (hdr->bfd_section) != NULL
6932       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6933     {
6934       bfd_byte *contents, *l, *lend;
6935
6936       /* We stored the section contents in the tdata field in the
6937          set_section_contents routine.  We save the section contents
6938          so that we don't have to read them again.
6939          At this point we know that elf_gp is set, so we can look
6940          through the section contents to see if there is an
6941          ODK_REGINFO structure.  */
6942
6943       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6944       l = contents;
6945       lend = contents + hdr->sh_size;
6946       while (l + sizeof (Elf_External_Options) <= lend)
6947         {
6948           Elf_Internal_Options intopt;
6949
6950           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6951                                         &intopt);
6952           if (intopt.size < sizeof (Elf_External_Options))
6953             {
6954               (*_bfd_error_handler)
6955                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6956                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6957               break;
6958             }
6959           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6960             {
6961               bfd_byte buf[8];
6962
6963               if (bfd_seek (abfd,
6964                             (hdr->sh_offset
6965                              + (l - contents)
6966                              + sizeof (Elf_External_Options)
6967                              + (sizeof (Elf64_External_RegInfo) - 8)),
6968                              SEEK_SET) != 0)
6969                 return FALSE;
6970               H_PUT_64 (abfd, elf_gp (abfd), buf);
6971               if (bfd_bwrite (buf, 8, abfd) != 8)
6972                 return FALSE;
6973             }
6974           else if (intopt.kind == ODK_REGINFO)
6975             {
6976               bfd_byte buf[4];
6977
6978               if (bfd_seek (abfd,
6979                             (hdr->sh_offset
6980                              + (l - contents)
6981                              + sizeof (Elf_External_Options)
6982                              + (sizeof (Elf32_External_RegInfo) - 4)),
6983                             SEEK_SET) != 0)
6984                 return FALSE;
6985               H_PUT_32 (abfd, elf_gp (abfd), buf);
6986               if (bfd_bwrite (buf, 4, abfd) != 4)
6987                 return FALSE;
6988             }
6989           l += intopt.size;
6990         }
6991     }
6992
6993   if (hdr->bfd_section != NULL)
6994     {
6995       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6996
6997       /* .sbss is not handled specially here because the GNU/Linux
6998          prelinker can convert .sbss from NOBITS to PROGBITS and
6999          changing it back to NOBITS breaks the binary.  The entry in
7000          _bfd_mips_elf_special_sections will ensure the correct flags
7001          are set on .sbss if BFD creates it without reading it from an
7002          input file, and without special handling here the flags set
7003          on it in an input file will be followed.  */
7004       if (strcmp (name, ".sdata") == 0
7005           || strcmp (name, ".lit8") == 0
7006           || strcmp (name, ".lit4") == 0)
7007         hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7008       else if (strcmp (name, ".srdata") == 0)
7009         hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7010       else if (strcmp (name, ".compact_rel") == 0)
7011         hdr->sh_flags = 0;
7012       else if (strcmp (name, ".rtproc") == 0)
7013         {
7014           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7015             {
7016               unsigned int adjust;
7017
7018               adjust = hdr->sh_size % hdr->sh_addralign;
7019               if (adjust != 0)
7020                 hdr->sh_size += hdr->sh_addralign - adjust;
7021             }
7022         }
7023     }
7024
7025   return TRUE;
7026 }
7027
7028 /* Handle a MIPS specific section when reading an object file.  This
7029    is called when elfcode.h finds a section with an unknown type.
7030    This routine supports both the 32-bit and 64-bit ELF ABI.
7031
7032    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7033    how to.  */
7034
7035 bfd_boolean
7036 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7037                                  Elf_Internal_Shdr *hdr,
7038                                  const char *name,
7039                                  int shindex)
7040 {
7041   flagword flags = 0;
7042
7043   /* There ought to be a place to keep ELF backend specific flags, but
7044      at the moment there isn't one.  We just keep track of the
7045      sections by their name, instead.  Fortunately, the ABI gives
7046      suggested names for all the MIPS specific sections, so we will
7047      probably get away with this.  */
7048   switch (hdr->sh_type)
7049     {
7050     case SHT_MIPS_LIBLIST:
7051       if (strcmp (name, ".liblist") != 0)
7052         return FALSE;
7053       break;
7054     case SHT_MIPS_MSYM:
7055       if (strcmp (name, ".msym") != 0)
7056         return FALSE;
7057       break;
7058     case SHT_MIPS_CONFLICT:
7059       if (strcmp (name, ".conflict") != 0)
7060         return FALSE;
7061       break;
7062     case SHT_MIPS_GPTAB:
7063       if (! CONST_STRNEQ (name, ".gptab."))
7064         return FALSE;
7065       break;
7066     case SHT_MIPS_UCODE:
7067       if (strcmp (name, ".ucode") != 0)
7068         return FALSE;
7069       break;
7070     case SHT_MIPS_DEBUG:
7071       if (strcmp (name, ".mdebug") != 0)
7072         return FALSE;
7073       flags = SEC_DEBUGGING;
7074       break;
7075     case SHT_MIPS_REGINFO:
7076       if (strcmp (name, ".reginfo") != 0
7077           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7078         return FALSE;
7079       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7080       break;
7081     case SHT_MIPS_IFACE:
7082       if (strcmp (name, ".MIPS.interfaces") != 0)
7083         return FALSE;
7084       break;
7085     case SHT_MIPS_CONTENT:
7086       if (! CONST_STRNEQ (name, ".MIPS.content"))
7087         return FALSE;
7088       break;
7089     case SHT_MIPS_OPTIONS:
7090       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7091         return FALSE;
7092       break;
7093     case SHT_MIPS_ABIFLAGS:
7094       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7095         return FALSE;
7096       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7097       break;
7098     case SHT_MIPS_DWARF:
7099       if (! CONST_STRNEQ (name, ".debug_")
7100           && ! CONST_STRNEQ (name, ".zdebug_"))
7101         return FALSE;
7102       break;
7103     case SHT_MIPS_SYMBOL_LIB:
7104       if (strcmp (name, ".MIPS.symlib") != 0)
7105         return FALSE;
7106       break;
7107     case SHT_MIPS_EVENTS:
7108       if (! CONST_STRNEQ (name, ".MIPS.events")
7109           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7110         return FALSE;
7111       break;
7112     default:
7113       break;
7114     }
7115
7116   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7117     return FALSE;
7118
7119   if (flags)
7120     {
7121       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7122                                    (bfd_get_section_flags (abfd,
7123                                                            hdr->bfd_section)
7124                                     | flags)))
7125         return FALSE;
7126     }
7127
7128   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7129     {
7130       Elf_External_ABIFlags_v0 ext;
7131
7132       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7133                                       &ext, 0, sizeof ext))
7134         return FALSE;
7135       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7136                                         &mips_elf_tdata (abfd)->abiflags);
7137       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7138         return FALSE;
7139       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7140     }
7141
7142   /* FIXME: We should record sh_info for a .gptab section.  */
7143
7144   /* For a .reginfo section, set the gp value in the tdata information
7145      from the contents of this section.  We need the gp value while
7146      processing relocs, so we just get it now.  The .reginfo section
7147      is not used in the 64-bit MIPS ELF ABI.  */
7148   if (hdr->sh_type == SHT_MIPS_REGINFO)
7149     {
7150       Elf32_External_RegInfo ext;
7151       Elf32_RegInfo s;
7152
7153       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7154                                       &ext, 0, sizeof ext))
7155         return FALSE;
7156       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7157       elf_gp (abfd) = s.ri_gp_value;
7158     }
7159
7160   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7161      set the gp value based on what we find.  We may see both
7162      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7163      they should agree.  */
7164   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7165     {
7166       bfd_byte *contents, *l, *lend;
7167
7168       contents = bfd_malloc (hdr->sh_size);
7169       if (contents == NULL)
7170         return FALSE;
7171       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7172                                       0, hdr->sh_size))
7173         {
7174           free (contents);
7175           return FALSE;
7176         }
7177       l = contents;
7178       lend = contents + hdr->sh_size;
7179       while (l + sizeof (Elf_External_Options) <= lend)
7180         {
7181           Elf_Internal_Options intopt;
7182
7183           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7184                                         &intopt);
7185           if (intopt.size < sizeof (Elf_External_Options))
7186             {
7187               (*_bfd_error_handler)
7188                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7189                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7190               break;
7191             }
7192           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7193             {
7194               Elf64_Internal_RegInfo intreg;
7195
7196               bfd_mips_elf64_swap_reginfo_in
7197                 (abfd,
7198                  ((Elf64_External_RegInfo *)
7199                   (l + sizeof (Elf_External_Options))),
7200                  &intreg);
7201               elf_gp (abfd) = intreg.ri_gp_value;
7202             }
7203           else if (intopt.kind == ODK_REGINFO)
7204             {
7205               Elf32_RegInfo intreg;
7206
7207               bfd_mips_elf32_swap_reginfo_in
7208                 (abfd,
7209                  ((Elf32_External_RegInfo *)
7210                   (l + sizeof (Elf_External_Options))),
7211                  &intreg);
7212               elf_gp (abfd) = intreg.ri_gp_value;
7213             }
7214           l += intopt.size;
7215         }
7216       free (contents);
7217     }
7218
7219   return TRUE;
7220 }
7221
7222 /* Set the correct type for a MIPS ELF section.  We do this by the
7223    section name, which is a hack, but ought to work.  This routine is
7224    used by both the 32-bit and the 64-bit ABI.  */
7225
7226 bfd_boolean
7227 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7228 {
7229   const char *name = bfd_get_section_name (abfd, sec);
7230
7231   if (strcmp (name, ".liblist") == 0)
7232     {
7233       hdr->sh_type = SHT_MIPS_LIBLIST;
7234       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7235       /* The sh_link field is set in final_write_processing.  */
7236     }
7237   else if (strcmp (name, ".conflict") == 0)
7238     hdr->sh_type = SHT_MIPS_CONFLICT;
7239   else if (CONST_STRNEQ (name, ".gptab."))
7240     {
7241       hdr->sh_type = SHT_MIPS_GPTAB;
7242       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7243       /* The sh_info field is set in final_write_processing.  */
7244     }
7245   else if (strcmp (name, ".ucode") == 0)
7246     hdr->sh_type = SHT_MIPS_UCODE;
7247   else if (strcmp (name, ".mdebug") == 0)
7248     {
7249       hdr->sh_type = SHT_MIPS_DEBUG;
7250       /* In a shared object on IRIX 5.3, the .mdebug section has an
7251          entsize of 0.  FIXME: Does this matter?  */
7252       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7253         hdr->sh_entsize = 0;
7254       else
7255         hdr->sh_entsize = 1;
7256     }
7257   else if (strcmp (name, ".reginfo") == 0)
7258     {
7259       hdr->sh_type = SHT_MIPS_REGINFO;
7260       /* In a shared object on IRIX 5.3, the .reginfo section has an
7261          entsize of 0x18.  FIXME: Does this matter?  */
7262       if (SGI_COMPAT (abfd))
7263         {
7264           if ((abfd->flags & DYNAMIC) != 0)
7265             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7266           else
7267             hdr->sh_entsize = 1;
7268         }
7269       else
7270         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7271     }
7272   else if (SGI_COMPAT (abfd)
7273            && (strcmp (name, ".hash") == 0
7274                || strcmp (name, ".dynamic") == 0
7275                || strcmp (name, ".dynstr") == 0))
7276     {
7277       if (SGI_COMPAT (abfd))
7278         hdr->sh_entsize = 0;
7279 #if 0
7280       /* This isn't how the IRIX6 linker behaves.  */
7281       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7282 #endif
7283     }
7284   else if (strcmp (name, ".got") == 0
7285            || strcmp (name, ".srdata") == 0
7286            || strcmp (name, ".sdata") == 0
7287            || strcmp (name, ".sbss") == 0
7288            || strcmp (name, ".lit4") == 0
7289            || strcmp (name, ".lit8") == 0)
7290     hdr->sh_flags |= SHF_MIPS_GPREL;
7291   else if (strcmp (name, ".MIPS.interfaces") == 0)
7292     {
7293       hdr->sh_type = SHT_MIPS_IFACE;
7294       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7295     }
7296   else if (CONST_STRNEQ (name, ".MIPS.content"))
7297     {
7298       hdr->sh_type = SHT_MIPS_CONTENT;
7299       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7300       /* The sh_info field is set in final_write_processing.  */
7301     }
7302   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7303     {
7304       hdr->sh_type = SHT_MIPS_OPTIONS;
7305       hdr->sh_entsize = 1;
7306       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7307     }
7308   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7309     {
7310       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7311       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7312     }
7313   else if (CONST_STRNEQ (name, ".debug_")
7314            || CONST_STRNEQ (name, ".zdebug_"))
7315     {
7316       hdr->sh_type = SHT_MIPS_DWARF;
7317
7318       /* Irix facilities such as libexc expect a single .debug_frame
7319          per executable, the system ones have NOSTRIP set and the linker
7320          doesn't merge sections with different flags so ...  */
7321       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7322         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7323     }
7324   else if (strcmp (name, ".MIPS.symlib") == 0)
7325     {
7326       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7327       /* The sh_link and sh_info fields are set in
7328          final_write_processing.  */
7329     }
7330   else if (CONST_STRNEQ (name, ".MIPS.events")
7331            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7332     {
7333       hdr->sh_type = SHT_MIPS_EVENTS;
7334       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7335       /* The sh_link field is set in final_write_processing.  */
7336     }
7337   else if (strcmp (name, ".msym") == 0)
7338     {
7339       hdr->sh_type = SHT_MIPS_MSYM;
7340       hdr->sh_flags |= SHF_ALLOC;
7341       hdr->sh_entsize = 8;
7342     }
7343
7344   /* The generic elf_fake_sections will set up REL_HDR using the default
7345    kind of relocations.  We used to set up a second header for the
7346    non-default kind of relocations here, but only NewABI would use
7347    these, and the IRIX ld doesn't like resulting empty RELA sections.
7348    Thus we create those header only on demand now.  */
7349
7350   return TRUE;
7351 }
7352
7353 /* Given a BFD section, try to locate the corresponding ELF section
7354    index.  This is used by both the 32-bit and the 64-bit ABI.
7355    Actually, it's not clear to me that the 64-bit ABI supports these,
7356    but for non-PIC objects we will certainly want support for at least
7357    the .scommon section.  */
7358
7359 bfd_boolean
7360 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7361                                         asection *sec, int *retval)
7362 {
7363   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7364     {
7365       *retval = SHN_MIPS_SCOMMON;
7366       return TRUE;
7367     }
7368   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7369     {
7370       *retval = SHN_MIPS_ACOMMON;
7371       return TRUE;
7372     }
7373   return FALSE;
7374 }
7375 \f
7376 /* Hook called by the linker routine which adds symbols from an object
7377    file.  We must handle the special MIPS section numbers here.  */
7378
7379 bfd_boolean
7380 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7381                                Elf_Internal_Sym *sym, const char **namep,
7382                                flagword *flagsp ATTRIBUTE_UNUSED,
7383                                asection **secp, bfd_vma *valp)
7384 {
7385   if (SGI_COMPAT (abfd)
7386       && (abfd->flags & DYNAMIC) != 0
7387       && strcmp (*namep, "_rld_new_interface") == 0)
7388     {
7389       /* Skip IRIX5 rld entry name.  */
7390       *namep = NULL;
7391       return TRUE;
7392     }
7393
7394   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7395      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7396      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7397      a magic symbol resolved by the linker, we ignore this bogus definition
7398      of _gp_disp.  New ABI objects do not suffer from this problem so this
7399      is not done for them. */
7400   if (!NEWABI_P(abfd)
7401       && (sym->st_shndx == SHN_ABS)
7402       && (strcmp (*namep, "_gp_disp") == 0))
7403     {
7404       *namep = NULL;
7405       return TRUE;
7406     }
7407
7408   switch (sym->st_shndx)
7409     {
7410     case SHN_COMMON:
7411       /* Common symbols less than the GP size are automatically
7412          treated as SHN_MIPS_SCOMMON symbols.  */
7413       if (sym->st_size > elf_gp_size (abfd)
7414           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7415           || IRIX_COMPAT (abfd) == ict_irix6)
7416         break;
7417       /* Fall through.  */
7418     case SHN_MIPS_SCOMMON:
7419       *secp = bfd_make_section_old_way (abfd, ".scommon");
7420       (*secp)->flags |= SEC_IS_COMMON;
7421       *valp = sym->st_size;
7422       break;
7423
7424     case SHN_MIPS_TEXT:
7425       /* This section is used in a shared object.  */
7426       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7427         {
7428           asymbol *elf_text_symbol;
7429           asection *elf_text_section;
7430           bfd_size_type amt = sizeof (asection);
7431
7432           elf_text_section = bfd_zalloc (abfd, amt);
7433           if (elf_text_section == NULL)
7434             return FALSE;
7435
7436           amt = sizeof (asymbol);
7437           elf_text_symbol = bfd_zalloc (abfd, amt);
7438           if (elf_text_symbol == NULL)
7439             return FALSE;
7440
7441           /* Initialize the section.  */
7442
7443           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7444           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7445
7446           elf_text_section->symbol = elf_text_symbol;
7447           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7448
7449           elf_text_section->name = ".text";
7450           elf_text_section->flags = SEC_NO_FLAGS;
7451           elf_text_section->output_section = NULL;
7452           elf_text_section->owner = abfd;
7453           elf_text_symbol->name = ".text";
7454           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7455           elf_text_symbol->section = elf_text_section;
7456         }
7457       /* This code used to do *secp = bfd_und_section_ptr if
7458          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7459          so I took it out.  */
7460       *secp = mips_elf_tdata (abfd)->elf_text_section;
7461       break;
7462
7463     case SHN_MIPS_ACOMMON:
7464       /* Fall through. XXX Can we treat this as allocated data?  */
7465     case SHN_MIPS_DATA:
7466       /* This section is used in a shared object.  */
7467       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7468         {
7469           asymbol *elf_data_symbol;
7470           asection *elf_data_section;
7471           bfd_size_type amt = sizeof (asection);
7472
7473           elf_data_section = bfd_zalloc (abfd, amt);
7474           if (elf_data_section == NULL)
7475             return FALSE;
7476
7477           amt = sizeof (asymbol);
7478           elf_data_symbol = bfd_zalloc (abfd, amt);
7479           if (elf_data_symbol == NULL)
7480             return FALSE;
7481
7482           /* Initialize the section.  */
7483
7484           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7485           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7486
7487           elf_data_section->symbol = elf_data_symbol;
7488           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7489
7490           elf_data_section->name = ".data";
7491           elf_data_section->flags = SEC_NO_FLAGS;
7492           elf_data_section->output_section = NULL;
7493           elf_data_section->owner = abfd;
7494           elf_data_symbol->name = ".data";
7495           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7496           elf_data_symbol->section = elf_data_section;
7497         }
7498       /* This code used to do *secp = bfd_und_section_ptr if
7499          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7500          so I took it out.  */
7501       *secp = mips_elf_tdata (abfd)->elf_data_section;
7502       break;
7503
7504     case SHN_MIPS_SUNDEFINED:
7505       *secp = bfd_und_section_ptr;
7506       break;
7507     }
7508
7509   if (SGI_COMPAT (abfd)
7510       && ! bfd_link_pic (info)
7511       && info->output_bfd->xvec == abfd->xvec
7512       && strcmp (*namep, "__rld_obj_head") == 0)
7513     {
7514       struct elf_link_hash_entry *h;
7515       struct bfd_link_hash_entry *bh;
7516
7517       /* Mark __rld_obj_head as dynamic.  */
7518       bh = NULL;
7519       if (! (_bfd_generic_link_add_one_symbol
7520              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7521               get_elf_backend_data (abfd)->collect, &bh)))
7522         return FALSE;
7523
7524       h = (struct elf_link_hash_entry *) bh;
7525       h->non_elf = 0;
7526       h->def_regular = 1;
7527       h->type = STT_OBJECT;
7528
7529       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7530         return FALSE;
7531
7532       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7533       mips_elf_hash_table (info)->rld_symbol = h;
7534     }
7535
7536   /* If this is a mips16 text symbol, add 1 to the value to make it
7537      odd.  This will cause something like .word SYM to come up with
7538      the right value when it is loaded into the PC.  */
7539   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7540     ++*valp;
7541
7542   return TRUE;
7543 }
7544
7545 /* This hook function is called before the linker writes out a global
7546    symbol.  We mark symbols as small common if appropriate.  This is
7547    also where we undo the increment of the value for a mips16 symbol.  */
7548
7549 int
7550 _bfd_mips_elf_link_output_symbol_hook
7551   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7552    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7553    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7554 {
7555   /* If we see a common symbol, which implies a relocatable link, then
7556      if a symbol was small common in an input file, mark it as small
7557      common in the output file.  */
7558   if (sym->st_shndx == SHN_COMMON
7559       && strcmp (input_sec->name, ".scommon") == 0)
7560     sym->st_shndx = SHN_MIPS_SCOMMON;
7561
7562   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7563     sym->st_value &= ~1;
7564
7565   return 1;
7566 }
7567 \f
7568 /* Functions for the dynamic linker.  */
7569
7570 /* Create dynamic sections when linking against a dynamic object.  */
7571
7572 bfd_boolean
7573 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7574 {
7575   struct elf_link_hash_entry *h;
7576   struct bfd_link_hash_entry *bh;
7577   flagword flags;
7578   register asection *s;
7579   const char * const *namep;
7580   struct mips_elf_link_hash_table *htab;
7581
7582   htab = mips_elf_hash_table (info);
7583   BFD_ASSERT (htab != NULL);
7584
7585   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7586            | SEC_LINKER_CREATED | SEC_READONLY);
7587
7588   /* The psABI requires a read-only .dynamic section, but the VxWorks
7589      EABI doesn't.  */
7590   if (!htab->is_vxworks)
7591     {
7592       s = bfd_get_linker_section (abfd, ".dynamic");
7593       if (s != NULL)
7594         {
7595           if (! bfd_set_section_flags (abfd, s, flags))
7596             return FALSE;
7597         }
7598     }
7599
7600   /* We need to create .got section.  */
7601   if (!mips_elf_create_got_section (abfd, info))
7602     return FALSE;
7603
7604   if (! mips_elf_rel_dyn_section (info, TRUE))
7605     return FALSE;
7606
7607   /* Create .stub section.  */
7608   s = bfd_make_section_anyway_with_flags (abfd,
7609                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7610                                           flags | SEC_CODE);
7611   if (s == NULL
7612       || ! bfd_set_section_alignment (abfd, s,
7613                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7614     return FALSE;
7615   htab->sstubs = s;
7616
7617   if (!mips_elf_hash_table (info)->use_rld_obj_head
7618       && bfd_link_executable (info)
7619       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7620     {
7621       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7622                                               flags &~ (flagword) SEC_READONLY);
7623       if (s == NULL
7624           || ! bfd_set_section_alignment (abfd, s,
7625                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7626         return FALSE;
7627     }
7628
7629   /* On IRIX5, we adjust add some additional symbols and change the
7630      alignments of several sections.  There is no ABI documentation
7631      indicating that this is necessary on IRIX6, nor any evidence that
7632      the linker takes such action.  */
7633   if (IRIX_COMPAT (abfd) == ict_irix5)
7634     {
7635       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7636         {
7637           bh = NULL;
7638           if (! (_bfd_generic_link_add_one_symbol
7639                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7640                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7641             return FALSE;
7642
7643           h = (struct elf_link_hash_entry *) bh;
7644           h->non_elf = 0;
7645           h->def_regular = 1;
7646           h->type = STT_SECTION;
7647
7648           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7649             return FALSE;
7650         }
7651
7652       /* We need to create a .compact_rel section.  */
7653       if (SGI_COMPAT (abfd))
7654         {
7655           if (!mips_elf_create_compact_rel_section (abfd, info))
7656             return FALSE;
7657         }
7658
7659       /* Change alignments of some sections.  */
7660       s = bfd_get_linker_section (abfd, ".hash");
7661       if (s != NULL)
7662         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7663
7664       s = bfd_get_linker_section (abfd, ".dynsym");
7665       if (s != NULL)
7666         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7667
7668       s = bfd_get_linker_section (abfd, ".dynstr");
7669       if (s != NULL)
7670         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7671
7672       /* ??? */
7673       s = bfd_get_section_by_name (abfd, ".reginfo");
7674       if (s != NULL)
7675         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7676
7677       s = bfd_get_linker_section (abfd, ".dynamic");
7678       if (s != NULL)
7679         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7680     }
7681
7682   if (bfd_link_executable (info))
7683     {
7684       const char *name;
7685
7686       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7687       bh = NULL;
7688       if (!(_bfd_generic_link_add_one_symbol
7689             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7690              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7691         return FALSE;
7692
7693       h = (struct elf_link_hash_entry *) bh;
7694       h->non_elf = 0;
7695       h->def_regular = 1;
7696       h->type = STT_SECTION;
7697
7698       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7699         return FALSE;
7700
7701       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7702         {
7703           /* __rld_map is a four byte word located in the .data section
7704              and is filled in by the rtld to contain a pointer to
7705              the _r_debug structure. Its symbol value will be set in
7706              _bfd_mips_elf_finish_dynamic_symbol.  */
7707           s = bfd_get_linker_section (abfd, ".rld_map");
7708           BFD_ASSERT (s != NULL);
7709
7710           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7711           bh = NULL;
7712           if (!(_bfd_generic_link_add_one_symbol
7713                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7714                  get_elf_backend_data (abfd)->collect, &bh)))
7715             return FALSE;
7716
7717           h = (struct elf_link_hash_entry *) bh;
7718           h->non_elf = 0;
7719           h->def_regular = 1;
7720           h->type = STT_OBJECT;
7721
7722           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7723             return FALSE;
7724           mips_elf_hash_table (info)->rld_symbol = h;
7725         }
7726     }
7727
7728   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7729      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7730   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7731     return FALSE;
7732
7733   /* Cache the sections created above.  */
7734   htab->splt = bfd_get_linker_section (abfd, ".plt");
7735   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7736   if (htab->is_vxworks)
7737     {
7738       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7739       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7740     }
7741   else
7742     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7743   if (!htab->sdynbss
7744       || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7745       || !htab->srelplt
7746       || !htab->splt)
7747     abort ();
7748
7749   /* Do the usual VxWorks handling.  */
7750   if (htab->is_vxworks
7751       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7752     return FALSE;
7753
7754   return TRUE;
7755 }
7756 \f
7757 /* Return true if relocation REL against section SEC is a REL rather than
7758    RELA relocation.  RELOCS is the first relocation in the section and
7759    ABFD is the bfd that contains SEC.  */
7760
7761 static bfd_boolean
7762 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7763                            const Elf_Internal_Rela *relocs,
7764                            const Elf_Internal_Rela *rel)
7765 {
7766   Elf_Internal_Shdr *rel_hdr;
7767   const struct elf_backend_data *bed;
7768
7769   /* To determine which flavor of relocation this is, we depend on the
7770      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7771   rel_hdr = elf_section_data (sec)->rel.hdr;
7772   if (rel_hdr == NULL)
7773     return FALSE;
7774   bed = get_elf_backend_data (abfd);
7775   return ((size_t) (rel - relocs)
7776           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7777 }
7778
7779 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7780    HOWTO is the relocation's howto and CONTENTS points to the contents
7781    of the section that REL is against.  */
7782
7783 static bfd_vma
7784 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7785                           reloc_howto_type *howto, bfd_byte *contents)
7786 {
7787   bfd_byte *location;
7788   unsigned int r_type;
7789   bfd_vma addend;
7790   bfd_vma bytes;
7791
7792   r_type = ELF_R_TYPE (abfd, rel->r_info);
7793   location = contents + rel->r_offset;
7794
7795   /* Get the addend, which is stored in the input file.  */
7796   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7797   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7798   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7799
7800   addend = bytes & howto->src_mask;
7801
7802   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
7803      accordingly.  */
7804   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7805     addend <<= 1;
7806
7807   return addend;
7808 }
7809
7810 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7811    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7812    and update *ADDEND with the final addend.  Return true on success
7813    or false if the LO16 could not be found.  RELEND is the exclusive
7814    upper bound on the relocations for REL's section.  */
7815
7816 static bfd_boolean
7817 mips_elf_add_lo16_rel_addend (bfd *abfd,
7818                               const Elf_Internal_Rela *rel,
7819                               const Elf_Internal_Rela *relend,
7820                               bfd_byte *contents, bfd_vma *addend)
7821 {
7822   unsigned int r_type, lo16_type;
7823   const Elf_Internal_Rela *lo16_relocation;
7824   reloc_howto_type *lo16_howto;
7825   bfd_vma l;
7826
7827   r_type = ELF_R_TYPE (abfd, rel->r_info);
7828   if (mips16_reloc_p (r_type))
7829     lo16_type = R_MIPS16_LO16;
7830   else if (micromips_reloc_p (r_type))
7831     lo16_type = R_MICROMIPS_LO16;
7832   else if (r_type == R_MIPS_PCHI16)
7833     lo16_type = R_MIPS_PCLO16;
7834   else
7835     lo16_type = R_MIPS_LO16;
7836
7837   /* The combined value is the sum of the HI16 addend, left-shifted by
7838      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7839      code does a `lui' of the HI16 value, and then an `addiu' of the
7840      LO16 value.)
7841
7842      Scan ahead to find a matching LO16 relocation.
7843
7844      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7845      be immediately following.  However, for the IRIX6 ABI, the next
7846      relocation may be a composed relocation consisting of several
7847      relocations for the same address.  In that case, the R_MIPS_LO16
7848      relocation may occur as one of these.  We permit a similar
7849      extension in general, as that is useful for GCC.
7850
7851      In some cases GCC dead code elimination removes the LO16 but keeps
7852      the corresponding HI16.  This is strictly speaking a violation of
7853      the ABI but not immediately harmful.  */
7854   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7855   if (lo16_relocation == NULL)
7856     return FALSE;
7857
7858   /* Obtain the addend kept there.  */
7859   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7860   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7861
7862   l <<= lo16_howto->rightshift;
7863   l = _bfd_mips_elf_sign_extend (l, 16);
7864
7865   *addend <<= 16;
7866   *addend += l;
7867   return TRUE;
7868 }
7869
7870 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7871    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7872    already holds the contents if it is nonull on entry.  */
7873
7874 static bfd_boolean
7875 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7876 {
7877   if (*contents)
7878     return TRUE;
7879
7880   /* Get cached copy if it exists.  */
7881   if (elf_section_data (sec)->this_hdr.contents != NULL)
7882     {
7883       *contents = elf_section_data (sec)->this_hdr.contents;
7884       return TRUE;
7885     }
7886
7887   return bfd_malloc_and_get_section (abfd, sec, contents);
7888 }
7889
7890 /* Make a new PLT record to keep internal data.  */
7891
7892 static struct plt_entry *
7893 mips_elf_make_plt_record (bfd *abfd)
7894 {
7895   struct plt_entry *entry;
7896
7897   entry = bfd_zalloc (abfd, sizeof (*entry));
7898   if (entry == NULL)
7899     return NULL;
7900
7901   entry->stub_offset = MINUS_ONE;
7902   entry->mips_offset = MINUS_ONE;
7903   entry->comp_offset = MINUS_ONE;
7904   entry->gotplt_index = MINUS_ONE;
7905   return entry;
7906 }
7907
7908 /* Look through the relocs for a section during the first phase, and
7909    allocate space in the global offset table and record the need for
7910    standard MIPS and compressed procedure linkage table entries.  */
7911
7912 bfd_boolean
7913 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7914                             asection *sec, const Elf_Internal_Rela *relocs)
7915 {
7916   const char *name;
7917   bfd *dynobj;
7918   Elf_Internal_Shdr *symtab_hdr;
7919   struct elf_link_hash_entry **sym_hashes;
7920   size_t extsymoff;
7921   const Elf_Internal_Rela *rel;
7922   const Elf_Internal_Rela *rel_end;
7923   asection *sreloc;
7924   const struct elf_backend_data *bed;
7925   struct mips_elf_link_hash_table *htab;
7926   bfd_byte *contents;
7927   bfd_vma addend;
7928   reloc_howto_type *howto;
7929
7930   if (bfd_link_relocatable (info))
7931     return TRUE;
7932
7933   htab = mips_elf_hash_table (info);
7934   BFD_ASSERT (htab != NULL);
7935
7936   dynobj = elf_hash_table (info)->dynobj;
7937   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7938   sym_hashes = elf_sym_hashes (abfd);
7939   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7940
7941   bed = get_elf_backend_data (abfd);
7942   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7943
7944   /* Check for the mips16 stub sections.  */
7945
7946   name = bfd_get_section_name (abfd, sec);
7947   if (FN_STUB_P (name))
7948     {
7949       unsigned long r_symndx;
7950
7951       /* Look at the relocation information to figure out which symbol
7952          this is for.  */
7953
7954       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7955       if (r_symndx == 0)
7956         {
7957           (*_bfd_error_handler)
7958             (_("%B: Warning: cannot determine the target function for"
7959                " stub section `%s'"),
7960              abfd, name);
7961           bfd_set_error (bfd_error_bad_value);
7962           return FALSE;
7963         }
7964
7965       if (r_symndx < extsymoff
7966           || sym_hashes[r_symndx - extsymoff] == NULL)
7967         {
7968           asection *o;
7969
7970           /* This stub is for a local symbol.  This stub will only be
7971              needed if there is some relocation in this BFD, other
7972              than a 16 bit function call, which refers to this symbol.  */
7973           for (o = abfd->sections; o != NULL; o = o->next)
7974             {
7975               Elf_Internal_Rela *sec_relocs;
7976               const Elf_Internal_Rela *r, *rend;
7977
7978               /* We can ignore stub sections when looking for relocs.  */
7979               if ((o->flags & SEC_RELOC) == 0
7980                   || o->reloc_count == 0
7981                   || section_allows_mips16_refs_p (o))
7982                 continue;
7983
7984               sec_relocs
7985                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7986                                              info->keep_memory);
7987               if (sec_relocs == NULL)
7988                 return FALSE;
7989
7990               rend = sec_relocs + o->reloc_count;
7991               for (r = sec_relocs; r < rend; r++)
7992                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7993                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7994                   break;
7995
7996               if (elf_section_data (o)->relocs != sec_relocs)
7997                 free (sec_relocs);
7998
7999               if (r < rend)
8000                 break;
8001             }
8002
8003           if (o == NULL)
8004             {
8005               /* There is no non-call reloc for this stub, so we do
8006                  not need it.  Since this function is called before
8007                  the linker maps input sections to output sections, we
8008                  can easily discard it by setting the SEC_EXCLUDE
8009                  flag.  */
8010               sec->flags |= SEC_EXCLUDE;
8011               return TRUE;
8012             }
8013
8014           /* Record this stub in an array of local symbol stubs for
8015              this BFD.  */
8016           if (mips_elf_tdata (abfd)->local_stubs == NULL)
8017             {
8018               unsigned long symcount;
8019               asection **n;
8020               bfd_size_type amt;
8021
8022               if (elf_bad_symtab (abfd))
8023                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8024               else
8025                 symcount = symtab_hdr->sh_info;
8026               amt = symcount * sizeof (asection *);
8027               n = bfd_zalloc (abfd, amt);
8028               if (n == NULL)
8029                 return FALSE;
8030               mips_elf_tdata (abfd)->local_stubs = n;
8031             }
8032
8033           sec->flags |= SEC_KEEP;
8034           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8035
8036           /* We don't need to set mips16_stubs_seen in this case.
8037              That flag is used to see whether we need to look through
8038              the global symbol table for stubs.  We don't need to set
8039              it here, because we just have a local stub.  */
8040         }
8041       else
8042         {
8043           struct mips_elf_link_hash_entry *h;
8044
8045           h = ((struct mips_elf_link_hash_entry *)
8046                sym_hashes[r_symndx - extsymoff]);
8047
8048           while (h->root.root.type == bfd_link_hash_indirect
8049                  || h->root.root.type == bfd_link_hash_warning)
8050             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8051
8052           /* H is the symbol this stub is for.  */
8053
8054           /* If we already have an appropriate stub for this function, we
8055              don't need another one, so we can discard this one.  Since
8056              this function is called before the linker maps input sections
8057              to output sections, we can easily discard it by setting the
8058              SEC_EXCLUDE flag.  */
8059           if (h->fn_stub != NULL)
8060             {
8061               sec->flags |= SEC_EXCLUDE;
8062               return TRUE;
8063             }
8064
8065           sec->flags |= SEC_KEEP;
8066           h->fn_stub = sec;
8067           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8068         }
8069     }
8070   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8071     {
8072       unsigned long r_symndx;
8073       struct mips_elf_link_hash_entry *h;
8074       asection **loc;
8075
8076       /* Look at the relocation information to figure out which symbol
8077          this is for.  */
8078
8079       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8080       if (r_symndx == 0)
8081         {
8082           (*_bfd_error_handler)
8083             (_("%B: Warning: cannot determine the target function for"
8084                " stub section `%s'"),
8085              abfd, name);
8086           bfd_set_error (bfd_error_bad_value);
8087           return FALSE;
8088         }
8089
8090       if (r_symndx < extsymoff
8091           || sym_hashes[r_symndx - extsymoff] == NULL)
8092         {
8093           asection *o;
8094
8095           /* This stub is for a local symbol.  This stub will only be
8096              needed if there is some relocation (R_MIPS16_26) in this BFD
8097              that refers to this symbol.  */
8098           for (o = abfd->sections; o != NULL; o = o->next)
8099             {
8100               Elf_Internal_Rela *sec_relocs;
8101               const Elf_Internal_Rela *r, *rend;
8102
8103               /* We can ignore stub sections when looking for relocs.  */
8104               if ((o->flags & SEC_RELOC) == 0
8105                   || o->reloc_count == 0
8106                   || section_allows_mips16_refs_p (o))
8107                 continue;
8108
8109               sec_relocs
8110                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8111                                              info->keep_memory);
8112               if (sec_relocs == NULL)
8113                 return FALSE;
8114
8115               rend = sec_relocs + o->reloc_count;
8116               for (r = sec_relocs; r < rend; r++)
8117                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8118                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8119                     break;
8120
8121               if (elf_section_data (o)->relocs != sec_relocs)
8122                 free (sec_relocs);
8123
8124               if (r < rend)
8125                 break;
8126             }
8127
8128           if (o == NULL)
8129             {
8130               /* There is no non-call reloc for this stub, so we do
8131                  not need it.  Since this function is called before
8132                  the linker maps input sections to output sections, we
8133                  can easily discard it by setting the SEC_EXCLUDE
8134                  flag.  */
8135               sec->flags |= SEC_EXCLUDE;
8136               return TRUE;
8137             }
8138
8139           /* Record this stub in an array of local symbol call_stubs for
8140              this BFD.  */
8141           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8142             {
8143               unsigned long symcount;
8144               asection **n;
8145               bfd_size_type amt;
8146
8147               if (elf_bad_symtab (abfd))
8148                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8149               else
8150                 symcount = symtab_hdr->sh_info;
8151               amt = symcount * sizeof (asection *);
8152               n = bfd_zalloc (abfd, amt);
8153               if (n == NULL)
8154                 return FALSE;
8155               mips_elf_tdata (abfd)->local_call_stubs = n;
8156             }
8157
8158           sec->flags |= SEC_KEEP;
8159           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8160
8161           /* We don't need to set mips16_stubs_seen in this case.
8162              That flag is used to see whether we need to look through
8163              the global symbol table for stubs.  We don't need to set
8164              it here, because we just have a local stub.  */
8165         }
8166       else
8167         {
8168           h = ((struct mips_elf_link_hash_entry *)
8169                sym_hashes[r_symndx - extsymoff]);
8170
8171           /* H is the symbol this stub is for.  */
8172
8173           if (CALL_FP_STUB_P (name))
8174             loc = &h->call_fp_stub;
8175           else
8176             loc = &h->call_stub;
8177
8178           /* If we already have an appropriate stub for this function, we
8179              don't need another one, so we can discard this one.  Since
8180              this function is called before the linker maps input sections
8181              to output sections, we can easily discard it by setting the
8182              SEC_EXCLUDE flag.  */
8183           if (*loc != NULL)
8184             {
8185               sec->flags |= SEC_EXCLUDE;
8186               return TRUE;
8187             }
8188
8189           sec->flags |= SEC_KEEP;
8190           *loc = sec;
8191           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8192         }
8193     }
8194
8195   sreloc = NULL;
8196   contents = NULL;
8197   for (rel = relocs; rel < rel_end; ++rel)
8198     {
8199       unsigned long r_symndx;
8200       unsigned int r_type;
8201       struct elf_link_hash_entry *h;
8202       bfd_boolean can_make_dynamic_p;
8203       bfd_boolean call_reloc_p;
8204       bfd_boolean constrain_symbol_p;
8205
8206       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8207       r_type = ELF_R_TYPE (abfd, rel->r_info);
8208
8209       if (r_symndx < extsymoff)
8210         h = NULL;
8211       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8212         {
8213           (*_bfd_error_handler)
8214             (_("%B: Malformed reloc detected for section %s"),
8215              abfd, name);
8216           bfd_set_error (bfd_error_bad_value);
8217           return FALSE;
8218         }
8219       else
8220         {
8221           h = sym_hashes[r_symndx - extsymoff];
8222           if (h != NULL)
8223             {
8224               while (h->root.type == bfd_link_hash_indirect
8225                      || h->root.type == bfd_link_hash_warning)
8226                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8227
8228               /* PR15323, ref flags aren't set for references in the
8229                  same object.  */
8230               h->root.non_ir_ref = 1;
8231             }
8232         }
8233
8234       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8235          relocation into a dynamic one.  */
8236       can_make_dynamic_p = FALSE;
8237
8238       /* Set CALL_RELOC_P to true if the relocation is for a call,
8239          and if pointer equality therefore doesn't matter.  */
8240       call_reloc_p = FALSE;
8241
8242       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8243          into account when deciding how to define the symbol.
8244          Relocations in nonallocatable sections such as .pdr and
8245          .debug* should have no effect.  */
8246       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8247
8248       switch (r_type)
8249         {
8250         case R_MIPS_CALL16:
8251         case R_MIPS_CALL_HI16:
8252         case R_MIPS_CALL_LO16:
8253         case R_MIPS16_CALL16:
8254         case R_MICROMIPS_CALL16:
8255         case R_MICROMIPS_CALL_HI16:
8256         case R_MICROMIPS_CALL_LO16:
8257           call_reloc_p = TRUE;
8258           /* Fall through.  */
8259
8260         case R_MIPS_GOT16:
8261         case R_MIPS_GOT_HI16:
8262         case R_MIPS_GOT_LO16:
8263         case R_MIPS_GOT_PAGE:
8264         case R_MIPS_GOT_OFST:
8265         case R_MIPS_GOT_DISP:
8266         case R_MIPS_TLS_GOTTPREL:
8267         case R_MIPS_TLS_GD:
8268         case R_MIPS_TLS_LDM:
8269         case R_MIPS16_GOT16:
8270         case R_MIPS16_TLS_GOTTPREL:
8271         case R_MIPS16_TLS_GD:
8272         case R_MIPS16_TLS_LDM:
8273         case R_MICROMIPS_GOT16:
8274         case R_MICROMIPS_GOT_HI16:
8275         case R_MICROMIPS_GOT_LO16:
8276         case R_MICROMIPS_GOT_PAGE:
8277         case R_MICROMIPS_GOT_OFST:
8278         case R_MICROMIPS_GOT_DISP:
8279         case R_MICROMIPS_TLS_GOTTPREL:
8280         case R_MICROMIPS_TLS_GD:
8281         case R_MICROMIPS_TLS_LDM:
8282           if (dynobj == NULL)
8283             elf_hash_table (info)->dynobj = dynobj = abfd;
8284           if (!mips_elf_create_got_section (dynobj, info))
8285             return FALSE;
8286           if (htab->is_vxworks && !bfd_link_pic (info))
8287             {
8288               (*_bfd_error_handler)
8289                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8290                  abfd, (unsigned long) rel->r_offset);
8291               bfd_set_error (bfd_error_bad_value);
8292               return FALSE;
8293             }
8294           can_make_dynamic_p = TRUE;
8295           break;
8296
8297         case R_MIPS_NONE:
8298         case R_MIPS_JALR:
8299         case R_MICROMIPS_JALR:
8300           /* These relocations have empty fields and are purely there to
8301              provide link information.  The symbol value doesn't matter.  */
8302           constrain_symbol_p = FALSE;
8303           break;
8304
8305         case R_MIPS_GPREL16:
8306         case R_MIPS_GPREL32:
8307         case R_MIPS16_GPREL:
8308         case R_MICROMIPS_GPREL16:
8309           /* GP-relative relocations always resolve to a definition in a
8310              regular input file, ignoring the one-definition rule.  This is
8311              important for the GP setup sequence in NewABI code, which
8312              always resolves to a local function even if other relocations
8313              against the symbol wouldn't.  */
8314           constrain_symbol_p = FALSE;
8315           break;
8316
8317         case R_MIPS_32:
8318         case R_MIPS_REL32:
8319         case R_MIPS_64:
8320           /* In VxWorks executables, references to external symbols
8321              must be handled using copy relocs or PLT entries; it is not
8322              possible to convert this relocation into a dynamic one.
8323
8324              For executables that use PLTs and copy-relocs, we have a
8325              choice between converting the relocation into a dynamic
8326              one or using copy relocations or PLT entries.  It is
8327              usually better to do the former, unless the relocation is
8328              against a read-only section.  */
8329           if ((bfd_link_pic (info)
8330                || (h != NULL
8331                    && !htab->is_vxworks
8332                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8333                    && !(!info->nocopyreloc
8334                         && !PIC_OBJECT_P (abfd)
8335                         && MIPS_ELF_READONLY_SECTION (sec))))
8336               && (sec->flags & SEC_ALLOC) != 0)
8337             {
8338               can_make_dynamic_p = TRUE;
8339               if (dynobj == NULL)
8340                 elf_hash_table (info)->dynobj = dynobj = abfd;
8341             }
8342           break;
8343
8344         case R_MIPS_26:
8345         case R_MIPS_PC16:
8346         case R_MIPS_PC21_S2:
8347         case R_MIPS_PC26_S2:
8348         case R_MIPS16_26:
8349         case R_MICROMIPS_26_S1:
8350         case R_MICROMIPS_PC7_S1:
8351         case R_MICROMIPS_PC10_S1:
8352         case R_MICROMIPS_PC16_S1:
8353         case R_MICROMIPS_PC23_S2:
8354           call_reloc_p = TRUE;
8355           break;
8356         }
8357
8358       if (h)
8359         {
8360           if (constrain_symbol_p)
8361             {
8362               if (!can_make_dynamic_p)
8363                 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8364
8365               if (!call_reloc_p)
8366                 h->pointer_equality_needed = 1;
8367
8368               /* We must not create a stub for a symbol that has
8369                  relocations related to taking the function's address.
8370                  This doesn't apply to VxWorks, where CALL relocs refer
8371                  to a .got.plt entry instead of a normal .got entry.  */
8372               if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8373                 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8374             }
8375
8376           /* Relocations against the special VxWorks __GOTT_BASE__ and
8377              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8378              room for them in .rela.dyn.  */
8379           if (is_gott_symbol (info, h))
8380             {
8381               if (sreloc == NULL)
8382                 {
8383                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8384                   if (sreloc == NULL)
8385                     return FALSE;
8386                 }
8387               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8388               if (MIPS_ELF_READONLY_SECTION (sec))
8389                 /* We tell the dynamic linker that there are
8390                    relocations against the text segment.  */
8391                 info->flags |= DF_TEXTREL;
8392             }
8393         }
8394       else if (call_lo16_reloc_p (r_type)
8395                || got_lo16_reloc_p (r_type)
8396                || got_disp_reloc_p (r_type)
8397                || (got16_reloc_p (r_type) && htab->is_vxworks))
8398         {
8399           /* We may need a local GOT entry for this relocation.  We
8400              don't count R_MIPS_GOT_PAGE because we can estimate the
8401              maximum number of pages needed by looking at the size of
8402              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8403              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8404              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8405              R_MIPS_CALL_HI16 because these are always followed by an
8406              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8407           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8408                                                  rel->r_addend, info, r_type))
8409             return FALSE;
8410         }
8411
8412       if (h != NULL
8413           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8414                                                   ELF_ST_IS_MIPS16 (h->other)))
8415         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8416
8417       switch (r_type)
8418         {
8419         case R_MIPS_CALL16:
8420         case R_MIPS16_CALL16:
8421         case R_MICROMIPS_CALL16:
8422           if (h == NULL)
8423             {
8424               (*_bfd_error_handler)
8425                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8426                  abfd, (unsigned long) rel->r_offset);
8427               bfd_set_error (bfd_error_bad_value);
8428               return FALSE;
8429             }
8430           /* Fall through.  */
8431
8432         case R_MIPS_CALL_HI16:
8433         case R_MIPS_CALL_LO16:
8434         case R_MICROMIPS_CALL_HI16:
8435         case R_MICROMIPS_CALL_LO16:
8436           if (h != NULL)
8437             {
8438               /* Make sure there is room in the regular GOT to hold the
8439                  function's address.  We may eliminate it in favour of
8440                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8441               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8442                                                       r_type))
8443                 return FALSE;
8444
8445               /* We need a stub, not a plt entry for the undefined
8446                  function.  But we record it as if it needs plt.  See
8447                  _bfd_elf_adjust_dynamic_symbol.  */
8448               h->needs_plt = 1;
8449               h->type = STT_FUNC;
8450             }
8451           break;
8452
8453         case R_MIPS_GOT_PAGE:
8454         case R_MICROMIPS_GOT_PAGE:
8455         case R_MIPS16_GOT16:
8456         case R_MIPS_GOT16:
8457         case R_MIPS_GOT_HI16:
8458         case R_MIPS_GOT_LO16:
8459         case R_MICROMIPS_GOT16:
8460         case R_MICROMIPS_GOT_HI16:
8461         case R_MICROMIPS_GOT_LO16:
8462           if (!h || got_page_reloc_p (r_type))
8463             {
8464               /* This relocation needs (or may need, if h != NULL) a
8465                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8466                  know for sure until we know whether the symbol is
8467                  preemptible.  */
8468               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8469                 {
8470                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8471                     return FALSE;
8472                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8473                   addend = mips_elf_read_rel_addend (abfd, rel,
8474                                                      howto, contents);
8475                   if (got16_reloc_p (r_type))
8476                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8477                                                   contents, &addend);
8478                   else
8479                     addend <<= howto->rightshift;
8480                 }
8481               else
8482                 addend = rel->r_addend;
8483               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8484                                                  h, addend))
8485                 return FALSE;
8486
8487               if (h)
8488                 {
8489                   struct mips_elf_link_hash_entry *hmips =
8490                     (struct mips_elf_link_hash_entry *) h;
8491
8492                   /* This symbol is definitely not overridable.  */
8493                   if (hmips->root.def_regular
8494                       && ! (bfd_link_pic (info) && ! info->symbolic
8495                             && ! hmips->root.forced_local))
8496                     h = NULL;
8497                 }
8498             }
8499           /* If this is a global, overridable symbol, GOT_PAGE will
8500              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8501           /* Fall through.  */
8502
8503         case R_MIPS_GOT_DISP:
8504         case R_MICROMIPS_GOT_DISP:
8505           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8506                                                        FALSE, r_type))
8507             return FALSE;
8508           break;
8509
8510         case R_MIPS_TLS_GOTTPREL:
8511         case R_MIPS16_TLS_GOTTPREL:
8512         case R_MICROMIPS_TLS_GOTTPREL:
8513           if (bfd_link_pic (info))
8514             info->flags |= DF_STATIC_TLS;
8515           /* Fall through */
8516
8517         case R_MIPS_TLS_LDM:
8518         case R_MIPS16_TLS_LDM:
8519         case R_MICROMIPS_TLS_LDM:
8520           if (tls_ldm_reloc_p (r_type))
8521             {
8522               r_symndx = STN_UNDEF;
8523               h = NULL;
8524             }
8525           /* Fall through */
8526
8527         case R_MIPS_TLS_GD:
8528         case R_MIPS16_TLS_GD:
8529         case R_MICROMIPS_TLS_GD:
8530           /* This symbol requires a global offset table entry, or two
8531              for TLS GD relocations.  */
8532           if (h != NULL)
8533             {
8534               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8535                                                       FALSE, r_type))
8536                 return FALSE;
8537             }
8538           else
8539             {
8540               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8541                                                      rel->r_addend,
8542                                                      info, r_type))
8543                 return FALSE;
8544             }
8545           break;
8546
8547         case R_MIPS_32:
8548         case R_MIPS_REL32:
8549         case R_MIPS_64:
8550           /* In VxWorks executables, references to external symbols
8551              are handled using copy relocs or PLT stubs, so there's
8552              no need to add a .rela.dyn entry for this relocation.  */
8553           if (can_make_dynamic_p)
8554             {
8555               if (sreloc == NULL)
8556                 {
8557                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8558                   if (sreloc == NULL)
8559                     return FALSE;
8560                 }
8561               if (bfd_link_pic (info) && h == NULL)
8562                 {
8563                   /* When creating a shared object, we must copy these
8564                      reloc types into the output file as R_MIPS_REL32
8565                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8566                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8567                   if (MIPS_ELF_READONLY_SECTION (sec))
8568                     /* We tell the dynamic linker that there are
8569                        relocations against the text segment.  */
8570                     info->flags |= DF_TEXTREL;
8571                 }
8572               else
8573                 {
8574                   struct mips_elf_link_hash_entry *hmips;
8575
8576                   /* For a shared object, we must copy this relocation
8577                      unless the symbol turns out to be undefined and
8578                      weak with non-default visibility, in which case
8579                      it will be left as zero.
8580
8581                      We could elide R_MIPS_REL32 for locally binding symbols
8582                      in shared libraries, but do not yet do so.
8583
8584                      For an executable, we only need to copy this
8585                      reloc if the symbol is defined in a dynamic
8586                      object.  */
8587                   hmips = (struct mips_elf_link_hash_entry *) h;
8588                   ++hmips->possibly_dynamic_relocs;
8589                   if (MIPS_ELF_READONLY_SECTION (sec))
8590                     /* We need it to tell the dynamic linker if there
8591                        are relocations against the text segment.  */
8592                     hmips->readonly_reloc = TRUE;
8593                 }
8594             }
8595
8596           if (SGI_COMPAT (abfd))
8597             mips_elf_hash_table (info)->compact_rel_size +=
8598               sizeof (Elf32_External_crinfo);
8599           break;
8600
8601         case R_MIPS_26:
8602         case R_MIPS_GPREL16:
8603         case R_MIPS_LITERAL:
8604         case R_MIPS_GPREL32:
8605         case R_MICROMIPS_26_S1:
8606         case R_MICROMIPS_GPREL16:
8607         case R_MICROMIPS_LITERAL:
8608         case R_MICROMIPS_GPREL7_S2:
8609           if (SGI_COMPAT (abfd))
8610             mips_elf_hash_table (info)->compact_rel_size +=
8611               sizeof (Elf32_External_crinfo);
8612           break;
8613
8614           /* This relocation describes the C++ object vtable hierarchy.
8615              Reconstruct it for later use during GC.  */
8616         case R_MIPS_GNU_VTINHERIT:
8617           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8618             return FALSE;
8619           break;
8620
8621           /* This relocation describes which C++ vtable entries are actually
8622              used.  Record for later use during GC.  */
8623         case R_MIPS_GNU_VTENTRY:
8624           BFD_ASSERT (h != NULL);
8625           if (h != NULL
8626               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8627             return FALSE;
8628           break;
8629
8630         default:
8631           break;
8632         }
8633
8634       /* Record the need for a PLT entry.  At this point we don't know
8635          yet if we are going to create a PLT in the first place, but
8636          we only record whether the relocation requires a standard MIPS
8637          or a compressed code entry anyway.  If we don't make a PLT after
8638          all, then we'll just ignore these arrangements.  Likewise if
8639          a PLT entry is not created because the symbol is satisfied
8640          locally.  */
8641       if (h != NULL
8642           && jal_reloc_p (r_type)
8643           && !SYMBOL_CALLS_LOCAL (info, h))
8644         {
8645           if (h->plt.plist == NULL)
8646             h->plt.plist = mips_elf_make_plt_record (abfd);
8647           if (h->plt.plist == NULL)
8648             return FALSE;
8649
8650           if (r_type == R_MIPS_26)
8651             h->plt.plist->need_mips = TRUE;
8652           else
8653             h->plt.plist->need_comp = TRUE;
8654         }
8655
8656       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8657          if there is one.  We only need to handle global symbols here;
8658          we decide whether to keep or delete stubs for local symbols
8659          when processing the stub's relocations.  */
8660       if (h != NULL
8661           && !mips16_call_reloc_p (r_type)
8662           && !section_allows_mips16_refs_p (sec))
8663         {
8664           struct mips_elf_link_hash_entry *mh;
8665
8666           mh = (struct mips_elf_link_hash_entry *) h;
8667           mh->need_fn_stub = TRUE;
8668         }
8669
8670       /* Refuse some position-dependent relocations when creating a
8671          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8672          not PIC, but we can create dynamic relocations and the result
8673          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8674          combined with R_MIPS_GOT16.  */
8675       if (bfd_link_pic (info))
8676         {
8677           switch (r_type)
8678             {
8679             case R_MIPS16_HI16:
8680             case R_MIPS_HI16:
8681             case R_MIPS_HIGHER:
8682             case R_MIPS_HIGHEST:
8683             case R_MICROMIPS_HI16:
8684             case R_MICROMIPS_HIGHER:
8685             case R_MICROMIPS_HIGHEST:
8686               /* Don't refuse a high part relocation if it's against
8687                  no symbol (e.g. part of a compound relocation).  */
8688               if (r_symndx == STN_UNDEF)
8689                 break;
8690
8691               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8692                  and has a special meaning.  */
8693               if (!NEWABI_P (abfd) && h != NULL
8694                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8695                 break;
8696
8697               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8698               if (is_gott_symbol (info, h))
8699                 break;
8700
8701               /* FALLTHROUGH */
8702
8703             case R_MIPS16_26:
8704             case R_MIPS_26:
8705             case R_MICROMIPS_26_S1:
8706               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8707               (*_bfd_error_handler)
8708                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8709                  abfd, howto->name,
8710                  (h) ? h->root.root.string : "a local symbol");
8711               bfd_set_error (bfd_error_bad_value);
8712               return FALSE;
8713             default:
8714               break;
8715             }
8716         }
8717     }
8718
8719   return TRUE;
8720 }
8721 \f
8722 bfd_boolean
8723 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8724                          struct bfd_link_info *link_info,
8725                          bfd_boolean *again)
8726 {
8727   Elf_Internal_Rela *internal_relocs;
8728   Elf_Internal_Rela *irel, *irelend;
8729   Elf_Internal_Shdr *symtab_hdr;
8730   bfd_byte *contents = NULL;
8731   size_t extsymoff;
8732   bfd_boolean changed_contents = FALSE;
8733   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8734   Elf_Internal_Sym *isymbuf = NULL;
8735
8736   /* We are not currently changing any sizes, so only one pass.  */
8737   *again = FALSE;
8738
8739   if (bfd_link_relocatable (link_info))
8740     return TRUE;
8741
8742   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8743                                                link_info->keep_memory);
8744   if (internal_relocs == NULL)
8745     return TRUE;
8746
8747   irelend = internal_relocs + sec->reloc_count
8748     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8749   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8750   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8751
8752   for (irel = internal_relocs; irel < irelend; irel++)
8753     {
8754       bfd_vma symval;
8755       bfd_signed_vma sym_offset;
8756       unsigned int r_type;
8757       unsigned long r_symndx;
8758       asection *sym_sec;
8759       unsigned long instruction;
8760
8761       /* Turn jalr into bgezal, and jr into beq, if they're marked
8762          with a JALR relocation, that indicate where they jump to.
8763          This saves some pipeline bubbles.  */
8764       r_type = ELF_R_TYPE (abfd, irel->r_info);
8765       if (r_type != R_MIPS_JALR)
8766         continue;
8767
8768       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8769       /* Compute the address of the jump target.  */
8770       if (r_symndx >= extsymoff)
8771         {
8772           struct mips_elf_link_hash_entry *h
8773             = ((struct mips_elf_link_hash_entry *)
8774                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8775
8776           while (h->root.root.type == bfd_link_hash_indirect
8777                  || h->root.root.type == bfd_link_hash_warning)
8778             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8779
8780           /* If a symbol is undefined, or if it may be overridden,
8781              skip it.  */
8782           if (! ((h->root.root.type == bfd_link_hash_defined
8783                   || h->root.root.type == bfd_link_hash_defweak)
8784                  && h->root.root.u.def.section)
8785               || (bfd_link_pic (link_info) && ! link_info->symbolic
8786                   && !h->root.forced_local))
8787             continue;
8788
8789           sym_sec = h->root.root.u.def.section;
8790           if (sym_sec->output_section)
8791             symval = (h->root.root.u.def.value
8792                       + sym_sec->output_section->vma
8793                       + sym_sec->output_offset);
8794           else
8795             symval = h->root.root.u.def.value;
8796         }
8797       else
8798         {
8799           Elf_Internal_Sym *isym;
8800
8801           /* Read this BFD's symbols if we haven't done so already.  */
8802           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8803             {
8804               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8805               if (isymbuf == NULL)
8806                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8807                                                 symtab_hdr->sh_info, 0,
8808                                                 NULL, NULL, NULL);
8809               if (isymbuf == NULL)
8810                 goto relax_return;
8811             }
8812
8813           isym = isymbuf + r_symndx;
8814           if (isym->st_shndx == SHN_UNDEF)
8815             continue;
8816           else if (isym->st_shndx == SHN_ABS)
8817             sym_sec = bfd_abs_section_ptr;
8818           else if (isym->st_shndx == SHN_COMMON)
8819             sym_sec = bfd_com_section_ptr;
8820           else
8821             sym_sec
8822               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8823           symval = isym->st_value
8824             + sym_sec->output_section->vma
8825             + sym_sec->output_offset;
8826         }
8827
8828       /* Compute branch offset, from delay slot of the jump to the
8829          branch target.  */
8830       sym_offset = (symval + irel->r_addend)
8831         - (sec_start + irel->r_offset + 4);
8832
8833       /* Branch offset must be properly aligned.  */
8834       if ((sym_offset & 3) != 0)
8835         continue;
8836
8837       sym_offset >>= 2;
8838
8839       /* Check that it's in range.  */
8840       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8841         continue;
8842
8843       /* Get the section contents if we haven't done so already.  */
8844       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8845         goto relax_return;
8846
8847       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8848
8849       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8850       if ((instruction & 0xfc1fffff) == 0x0000f809)
8851         instruction = 0x04110000;
8852       /* If it was jr <reg>, turn it into b <target>.  */
8853       else if ((instruction & 0xfc1fffff) == 0x00000008)
8854         instruction = 0x10000000;
8855       else
8856         continue;
8857
8858       instruction |= (sym_offset & 0xffff);
8859       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8860       changed_contents = TRUE;
8861     }
8862
8863   if (contents != NULL
8864       && elf_section_data (sec)->this_hdr.contents != contents)
8865     {
8866       if (!changed_contents && !link_info->keep_memory)
8867         free (contents);
8868       else
8869         {
8870           /* Cache the section contents for elf_link_input_bfd.  */
8871           elf_section_data (sec)->this_hdr.contents = contents;
8872         }
8873     }
8874   return TRUE;
8875
8876  relax_return:
8877   if (contents != NULL
8878       && elf_section_data (sec)->this_hdr.contents != contents)
8879     free (contents);
8880   return FALSE;
8881 }
8882 \f
8883 /* Allocate space for global sym dynamic relocs.  */
8884
8885 static bfd_boolean
8886 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8887 {
8888   struct bfd_link_info *info = inf;
8889   bfd *dynobj;
8890   struct mips_elf_link_hash_entry *hmips;
8891   struct mips_elf_link_hash_table *htab;
8892
8893   htab = mips_elf_hash_table (info);
8894   BFD_ASSERT (htab != NULL);
8895
8896   dynobj = elf_hash_table (info)->dynobj;
8897   hmips = (struct mips_elf_link_hash_entry *) h;
8898
8899   /* VxWorks executables are handled elsewhere; we only need to
8900      allocate relocations in shared objects.  */
8901   if (htab->is_vxworks && !bfd_link_pic (info))
8902     return TRUE;
8903
8904   /* Ignore indirect symbols.  All relocations against such symbols
8905      will be redirected to the target symbol.  */
8906   if (h->root.type == bfd_link_hash_indirect)
8907     return TRUE;
8908
8909   /* If this symbol is defined in a dynamic object, or we are creating
8910      a shared library, we will need to copy any R_MIPS_32 or
8911      R_MIPS_REL32 relocs against it into the output file.  */
8912   if (! bfd_link_relocatable (info)
8913       && hmips->possibly_dynamic_relocs != 0
8914       && (h->root.type == bfd_link_hash_defweak
8915           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8916           || bfd_link_pic (info)))
8917     {
8918       bfd_boolean do_copy = TRUE;
8919
8920       if (h->root.type == bfd_link_hash_undefweak)
8921         {
8922           /* Do not copy relocations for undefined weak symbols with
8923              non-default visibility.  */
8924           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8925             do_copy = FALSE;
8926
8927           /* Make sure undefined weak symbols are output as a dynamic
8928              symbol in PIEs.  */
8929           else if (h->dynindx == -1 && !h->forced_local)
8930             {
8931               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8932                 return FALSE;
8933             }
8934         }
8935
8936       if (do_copy)
8937         {
8938           /* Even though we don't directly need a GOT entry for this symbol,
8939              the SVR4 psABI requires it to have a dynamic symbol table
8940              index greater that DT_MIPS_GOTSYM if there are dynamic
8941              relocations against it.
8942
8943              VxWorks does not enforce the same mapping between the GOT
8944              and the symbol table, so the same requirement does not
8945              apply there.  */
8946           if (!htab->is_vxworks)
8947             {
8948               if (hmips->global_got_area > GGA_RELOC_ONLY)
8949                 hmips->global_got_area = GGA_RELOC_ONLY;
8950               hmips->got_only_for_calls = FALSE;
8951             }
8952
8953           mips_elf_allocate_dynamic_relocations
8954             (dynobj, info, hmips->possibly_dynamic_relocs);
8955           if (hmips->readonly_reloc)
8956             /* We tell the dynamic linker that there are relocations
8957                against the text segment.  */
8958             info->flags |= DF_TEXTREL;
8959         }
8960     }
8961
8962   return TRUE;
8963 }
8964
8965 /* Adjust a symbol defined by a dynamic object and referenced by a
8966    regular object.  The current definition is in some section of the
8967    dynamic object, but we're not including those sections.  We have to
8968    change the definition to something the rest of the link can
8969    understand.  */
8970
8971 bfd_boolean
8972 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8973                                      struct elf_link_hash_entry *h)
8974 {
8975   bfd *dynobj;
8976   struct mips_elf_link_hash_entry *hmips;
8977   struct mips_elf_link_hash_table *htab;
8978
8979   htab = mips_elf_hash_table (info);
8980   BFD_ASSERT (htab != NULL);
8981
8982   dynobj = elf_hash_table (info)->dynobj;
8983   hmips = (struct mips_elf_link_hash_entry *) h;
8984
8985   /* Make sure we know what is going on here.  */
8986   BFD_ASSERT (dynobj != NULL
8987               && (h->needs_plt
8988                   || h->u.weakdef != NULL
8989                   || (h->def_dynamic
8990                       && h->ref_regular
8991                       && !h->def_regular)));
8992
8993   hmips = (struct mips_elf_link_hash_entry *) h;
8994
8995   /* If there are call relocations against an externally-defined symbol,
8996      see whether we can create a MIPS lazy-binding stub for it.  We can
8997      only do this if all references to the function are through call
8998      relocations, and in that case, the traditional lazy-binding stubs
8999      are much more efficient than PLT entries.
9000
9001      Traditional stubs are only available on SVR4 psABI-based systems;
9002      VxWorks always uses PLTs instead.  */
9003   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9004     {
9005       if (! elf_hash_table (info)->dynamic_sections_created)
9006         return TRUE;
9007
9008       /* If this symbol is not defined in a regular file, then set
9009          the symbol to the stub location.  This is required to make
9010          function pointers compare as equal between the normal
9011          executable and the shared library.  */
9012       if (!h->def_regular)
9013         {
9014           hmips->needs_lazy_stub = TRUE;
9015           htab->lazy_stub_count++;
9016           return TRUE;
9017         }
9018     }
9019   /* As above, VxWorks requires PLT entries for externally-defined
9020      functions that are only accessed through call relocations.
9021
9022      Both VxWorks and non-VxWorks targets also need PLT entries if there
9023      are static-only relocations against an externally-defined function.
9024      This can technically occur for shared libraries if there are
9025      branches to the symbol, although it is unlikely that this will be
9026      used in practice due to the short ranges involved.  It can occur
9027      for any relative or absolute relocation in executables; in that
9028      case, the PLT entry becomes the function's canonical address.  */
9029   else if (((h->needs_plt && !hmips->no_fn_stub)
9030             || (h->type == STT_FUNC && hmips->has_static_relocs))
9031            && htab->use_plts_and_copy_relocs
9032            && !SYMBOL_CALLS_LOCAL (info, h)
9033            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9034                 && h->root.type == bfd_link_hash_undefweak))
9035     {
9036       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9037       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9038
9039       /* If this is the first symbol to need a PLT entry, then make some
9040          basic setup.  Also work out PLT entry sizes.  We'll need them
9041          for PLT offset calculations.  */
9042       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9043         {
9044           BFD_ASSERT (htab->sgotplt->size == 0);
9045           BFD_ASSERT (htab->plt_got_index == 0);
9046
9047           /* If we're using the PLT additions to the psABI, each PLT
9048              entry is 16 bytes and the PLT0 entry is 32 bytes.
9049              Encourage better cache usage by aligning.  We do this
9050              lazily to avoid pessimizing traditional objects.  */
9051           if (!htab->is_vxworks
9052               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9053             return FALSE;
9054
9055           /* Make sure that .got.plt is word-aligned.  We do this lazily
9056              for the same reason as above.  */
9057           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9058                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9059             return FALSE;
9060
9061           /* On non-VxWorks targets, the first two entries in .got.plt
9062              are reserved.  */
9063           if (!htab->is_vxworks)
9064             htab->plt_got_index
9065               += (get_elf_backend_data (dynobj)->got_header_size
9066                   / MIPS_ELF_GOT_SIZE (dynobj));
9067
9068           /* On VxWorks, also allocate room for the header's
9069              .rela.plt.unloaded entries.  */
9070           if (htab->is_vxworks && !bfd_link_pic (info))
9071             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9072
9073           /* Now work out the sizes of individual PLT entries.  */
9074           if (htab->is_vxworks && bfd_link_pic (info))
9075             htab->plt_mips_entry_size
9076               = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9077           else if (htab->is_vxworks)
9078             htab->plt_mips_entry_size
9079               = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9080           else if (newabi_p)
9081             htab->plt_mips_entry_size
9082               = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9083           else if (!micromips_p)
9084             {
9085               htab->plt_mips_entry_size
9086                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9087               htab->plt_comp_entry_size
9088                 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9089             }
9090           else if (htab->insn32)
9091             {
9092               htab->plt_mips_entry_size
9093                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9094               htab->plt_comp_entry_size
9095                 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9096             }
9097           else
9098             {
9099               htab->plt_mips_entry_size
9100                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9101               htab->plt_comp_entry_size
9102                 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9103             }
9104         }
9105
9106       if (h->plt.plist == NULL)
9107         h->plt.plist = mips_elf_make_plt_record (dynobj);
9108       if (h->plt.plist == NULL)
9109         return FALSE;
9110
9111       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9112          n32 or n64, so always use a standard entry there.
9113
9114          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9115          all MIPS16 calls will go via that stub, and there is no benefit
9116          to having a MIPS16 entry.  And in the case of call_stub a
9117          standard entry actually has to be used as the stub ends with a J
9118          instruction.  */
9119       if (newabi_p
9120           || htab->is_vxworks
9121           || hmips->call_stub
9122           || hmips->call_fp_stub)
9123         {
9124           h->plt.plist->need_mips = TRUE;
9125           h->plt.plist->need_comp = FALSE;
9126         }
9127
9128       /* Otherwise, if there are no direct calls to the function, we
9129          have a free choice of whether to use standard or compressed
9130          entries.  Prefer microMIPS entries if the object is known to
9131          contain microMIPS code, so that it becomes possible to create
9132          pure microMIPS binaries.  Prefer standard entries otherwise,
9133          because MIPS16 ones are no smaller and are usually slower.  */
9134       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9135         {
9136           if (micromips_p)
9137             h->plt.plist->need_comp = TRUE;
9138           else
9139             h->plt.plist->need_mips = TRUE;
9140         }
9141
9142       if (h->plt.plist->need_mips)
9143         {
9144           h->plt.plist->mips_offset = htab->plt_mips_offset;
9145           htab->plt_mips_offset += htab->plt_mips_entry_size;
9146         }
9147       if (h->plt.plist->need_comp)
9148         {
9149           h->plt.plist->comp_offset = htab->plt_comp_offset;
9150           htab->plt_comp_offset += htab->plt_comp_entry_size;
9151         }
9152
9153       /* Reserve the corresponding .got.plt entry now too.  */
9154       h->plt.plist->gotplt_index = htab->plt_got_index++;
9155
9156       /* If the output file has no definition of the symbol, set the
9157          symbol's value to the address of the stub.  */
9158       if (!bfd_link_pic (info) && !h->def_regular)
9159         hmips->use_plt_entry = TRUE;
9160
9161       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9162       htab->srelplt->size += (htab->is_vxworks
9163                               ? MIPS_ELF_RELA_SIZE (dynobj)
9164                               : MIPS_ELF_REL_SIZE (dynobj));
9165
9166       /* Make room for the .rela.plt.unloaded relocations.  */
9167       if (htab->is_vxworks && !bfd_link_pic (info))
9168         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9169
9170       /* All relocations against this symbol that could have been made
9171          dynamic will now refer to the PLT entry instead.  */
9172       hmips->possibly_dynamic_relocs = 0;
9173
9174       return TRUE;
9175     }
9176
9177   /* If this is a weak symbol, and there is a real definition, the
9178      processor independent code will have arranged for us to see the
9179      real definition first, and we can just use the same value.  */
9180   if (h->u.weakdef != NULL)
9181     {
9182       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9183                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
9184       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9185       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9186       return TRUE;
9187     }
9188
9189   /* Otherwise, there is nothing further to do for symbols defined
9190      in regular objects.  */
9191   if (h->def_regular)
9192     return TRUE;
9193
9194   /* There's also nothing more to do if we'll convert all relocations
9195      against this symbol into dynamic relocations.  */
9196   if (!hmips->has_static_relocs)
9197     return TRUE;
9198
9199   /* We're now relying on copy relocations.  Complain if we have
9200      some that we can't convert.  */
9201   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9202     {
9203       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9204                                "dynamic symbol %s"),
9205                              h->root.root.string);
9206       bfd_set_error (bfd_error_bad_value);
9207       return FALSE;
9208     }
9209
9210   /* We must allocate the symbol in our .dynbss section, which will
9211      become part of the .bss section of the executable.  There will be
9212      an entry for this symbol in the .dynsym section.  The dynamic
9213      object will contain position independent code, so all references
9214      from the dynamic object to this symbol will go through the global
9215      offset table.  The dynamic linker will use the .dynsym entry to
9216      determine the address it must put in the global offset table, so
9217      both the dynamic object and the regular object will refer to the
9218      same memory location for the variable.  */
9219
9220   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9221     {
9222       if (htab->is_vxworks)
9223         htab->srelbss->size += sizeof (Elf32_External_Rela);
9224       else
9225         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9226       h->needs_copy = 1;
9227     }
9228
9229   /* All relocations against this symbol that could have been made
9230      dynamic will now refer to the local copy instead.  */
9231   hmips->possibly_dynamic_relocs = 0;
9232
9233   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9234 }
9235 \f
9236 /* This function is called after all the input files have been read,
9237    and the input sections have been assigned to output sections.  We
9238    check for any mips16 stub sections that we can discard.  */
9239
9240 bfd_boolean
9241 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9242                                     struct bfd_link_info *info)
9243 {
9244   asection *sect;
9245   struct mips_elf_link_hash_table *htab;
9246   struct mips_htab_traverse_info hti;
9247
9248   htab = mips_elf_hash_table (info);
9249   BFD_ASSERT (htab != NULL);
9250
9251   /* The .reginfo section has a fixed size.  */
9252   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9253   if (sect != NULL)
9254     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9255
9256   /* The .MIPS.abiflags section has a fixed size.  */
9257   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9258   if (sect != NULL)
9259     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9260
9261   hti.info = info;
9262   hti.output_bfd = output_bfd;
9263   hti.error = FALSE;
9264   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9265                                mips_elf_check_symbols, &hti);
9266   if (hti.error)
9267     return FALSE;
9268
9269   return TRUE;
9270 }
9271
9272 /* If the link uses a GOT, lay it out and work out its size.  */
9273
9274 static bfd_boolean
9275 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9276 {
9277   bfd *dynobj;
9278   asection *s;
9279   struct mips_got_info *g;
9280   bfd_size_type loadable_size = 0;
9281   bfd_size_type page_gotno;
9282   bfd *ibfd;
9283   struct mips_elf_traverse_got_arg tga;
9284   struct mips_elf_link_hash_table *htab;
9285
9286   htab = mips_elf_hash_table (info);
9287   BFD_ASSERT (htab != NULL);
9288
9289   s = htab->sgot;
9290   if (s == NULL)
9291     return TRUE;
9292
9293   dynobj = elf_hash_table (info)->dynobj;
9294   g = htab->got_info;
9295
9296   /* Allocate room for the reserved entries.  VxWorks always reserves
9297      3 entries; other objects only reserve 2 entries.  */
9298   BFD_ASSERT (g->assigned_low_gotno == 0);
9299   if (htab->is_vxworks)
9300     htab->reserved_gotno = 3;
9301   else
9302     htab->reserved_gotno = 2;
9303   g->local_gotno += htab->reserved_gotno;
9304   g->assigned_low_gotno = htab->reserved_gotno;
9305
9306   /* Decide which symbols need to go in the global part of the GOT and
9307      count the number of reloc-only GOT symbols.  */
9308   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9309
9310   if (!mips_elf_resolve_final_got_entries (info, g))
9311     return FALSE;
9312
9313   /* Calculate the total loadable size of the output.  That
9314      will give us the maximum number of GOT_PAGE entries
9315      required.  */
9316   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9317     {
9318       asection *subsection;
9319
9320       for (subsection = ibfd->sections;
9321            subsection;
9322            subsection = subsection->next)
9323         {
9324           if ((subsection->flags & SEC_ALLOC) == 0)
9325             continue;
9326           loadable_size += ((subsection->size + 0xf)
9327                             &~ (bfd_size_type) 0xf);
9328         }
9329     }
9330
9331   if (htab->is_vxworks)
9332     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9333        relocations against local symbols evaluate to "G", and the EABI does
9334        not include R_MIPS_GOT_PAGE.  */
9335     page_gotno = 0;
9336   else
9337     /* Assume there are two loadable segments consisting of contiguous
9338        sections.  Is 5 enough?  */
9339     page_gotno = (loadable_size >> 16) + 5;
9340
9341   /* Choose the smaller of the two page estimates; both are intended to be
9342      conservative.  */
9343   if (page_gotno > g->page_gotno)
9344     page_gotno = g->page_gotno;
9345
9346   g->local_gotno += page_gotno;
9347   g->assigned_high_gotno = g->local_gotno - 1;
9348
9349   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9350   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9351   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9352
9353   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9354      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9355      dynamic loader.  */
9356   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9357     {
9358       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9359         return FALSE;
9360     }
9361   else
9362     {
9363       /* Record that all bfds use G.  This also has the effect of freeing
9364          the per-bfd GOTs, which we no longer need.  */
9365       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9366         if (mips_elf_bfd_got (ibfd, FALSE))
9367           mips_elf_replace_bfd_got (ibfd, g);
9368       mips_elf_replace_bfd_got (output_bfd, g);
9369
9370       /* Set up TLS entries.  */
9371       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9372       tga.info = info;
9373       tga.g = g;
9374       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9375       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9376       if (!tga.g)
9377         return FALSE;
9378       BFD_ASSERT (g->tls_assigned_gotno
9379                   == g->global_gotno + g->local_gotno + g->tls_gotno);
9380
9381       /* Each VxWorks GOT entry needs an explicit relocation.  */
9382       if (htab->is_vxworks && bfd_link_pic (info))
9383         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9384
9385       /* Allocate room for the TLS relocations.  */
9386       if (g->relocs)
9387         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9388     }
9389
9390   return TRUE;
9391 }
9392
9393 /* Estimate the size of the .MIPS.stubs section.  */
9394
9395 static void
9396 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9397 {
9398   struct mips_elf_link_hash_table *htab;
9399   bfd_size_type dynsymcount;
9400
9401   htab = mips_elf_hash_table (info);
9402   BFD_ASSERT (htab != NULL);
9403
9404   if (htab->lazy_stub_count == 0)
9405     return;
9406
9407   /* IRIX rld assumes that a function stub isn't at the end of the .text
9408      section, so add a dummy entry to the end.  */
9409   htab->lazy_stub_count++;
9410
9411   /* Get a worst-case estimate of the number of dynamic symbols needed.
9412      At this point, dynsymcount does not account for section symbols
9413      and count_section_dynsyms may overestimate the number that will
9414      be needed.  */
9415   dynsymcount = (elf_hash_table (info)->dynsymcount
9416                  + count_section_dynsyms (output_bfd, info));
9417
9418   /* Determine the size of one stub entry.  There's no disadvantage
9419      from using microMIPS code here, so for the sake of pure-microMIPS
9420      binaries we prefer it whenever there's any microMIPS code in
9421      output produced at all.  This has a benefit of stubs being
9422      shorter by 4 bytes each too, unless in the insn32 mode.  */
9423   if (!MICROMIPS_P (output_bfd))
9424     htab->function_stub_size = (dynsymcount > 0x10000
9425                                 ? MIPS_FUNCTION_STUB_BIG_SIZE
9426                                 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9427   else if (htab->insn32)
9428     htab->function_stub_size = (dynsymcount > 0x10000
9429                                 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9430                                 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9431   else
9432     htab->function_stub_size = (dynsymcount > 0x10000
9433                                 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9434                                 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9435
9436   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9437 }
9438
9439 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9440    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9441    stub, allocate an entry in the stubs section.  */
9442
9443 static bfd_boolean
9444 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9445 {
9446   struct mips_htab_traverse_info *hti = data;
9447   struct mips_elf_link_hash_table *htab;
9448   struct bfd_link_info *info;
9449   bfd *output_bfd;
9450
9451   info = hti->info;
9452   output_bfd = hti->output_bfd;
9453   htab = mips_elf_hash_table (info);
9454   BFD_ASSERT (htab != NULL);
9455
9456   if (h->needs_lazy_stub)
9457     {
9458       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9459       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9460       bfd_vma isa_bit = micromips_p;
9461
9462       BFD_ASSERT (htab->root.dynobj != NULL);
9463       if (h->root.plt.plist == NULL)
9464         h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9465       if (h->root.plt.plist == NULL)
9466         {
9467           hti->error = TRUE;
9468           return FALSE;
9469         }
9470       h->root.root.u.def.section = htab->sstubs;
9471       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9472       h->root.plt.plist->stub_offset = htab->sstubs->size;
9473       h->root.other = other;
9474       htab->sstubs->size += htab->function_stub_size;
9475     }
9476   return TRUE;
9477 }
9478
9479 /* Allocate offsets in the stubs section to each symbol that needs one.
9480    Set the final size of the .MIPS.stub section.  */
9481
9482 static bfd_boolean
9483 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9484 {
9485   bfd *output_bfd = info->output_bfd;
9486   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9487   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9488   bfd_vma isa_bit = micromips_p;
9489   struct mips_elf_link_hash_table *htab;
9490   struct mips_htab_traverse_info hti;
9491   struct elf_link_hash_entry *h;
9492   bfd *dynobj;
9493
9494   htab = mips_elf_hash_table (info);
9495   BFD_ASSERT (htab != NULL);
9496
9497   if (htab->lazy_stub_count == 0)
9498     return TRUE;
9499
9500   htab->sstubs->size = 0;
9501   hti.info = info;
9502   hti.output_bfd = output_bfd;
9503   hti.error = FALSE;
9504   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9505   if (hti.error)
9506     return FALSE;
9507   htab->sstubs->size += htab->function_stub_size;
9508   BFD_ASSERT (htab->sstubs->size
9509               == htab->lazy_stub_count * htab->function_stub_size);
9510
9511   dynobj = elf_hash_table (info)->dynobj;
9512   BFD_ASSERT (dynobj != NULL);
9513   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9514   if (h == NULL)
9515     return FALSE;
9516   h->root.u.def.value = isa_bit;
9517   h->other = other;
9518   h->type = STT_FUNC;
9519
9520   return TRUE;
9521 }
9522
9523 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9524    bfd_link_info.  If H uses the address of a PLT entry as the value
9525    of the symbol, then set the entry in the symbol table now.  Prefer
9526    a standard MIPS PLT entry.  */
9527
9528 static bfd_boolean
9529 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9530 {
9531   struct bfd_link_info *info = data;
9532   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9533   struct mips_elf_link_hash_table *htab;
9534   unsigned int other;
9535   bfd_vma isa_bit;
9536   bfd_vma val;
9537
9538   htab = mips_elf_hash_table (info);
9539   BFD_ASSERT (htab != NULL);
9540
9541   if (h->use_plt_entry)
9542     {
9543       BFD_ASSERT (h->root.plt.plist != NULL);
9544       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9545                   || h->root.plt.plist->comp_offset != MINUS_ONE);
9546
9547       val = htab->plt_header_size;
9548       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9549         {
9550           isa_bit = 0;
9551           val += h->root.plt.plist->mips_offset;
9552           other = 0;
9553         }
9554       else
9555         {
9556           isa_bit = 1;
9557           val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9558           other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9559         }
9560       val += isa_bit;
9561       /* For VxWorks, point at the PLT load stub rather than the lazy
9562          resolution stub; this stub will become the canonical function
9563          address.  */
9564       if (htab->is_vxworks)
9565         val += 8;
9566
9567       h->root.root.u.def.section = htab->splt;
9568       h->root.root.u.def.value = val;
9569       h->root.other = other;
9570     }
9571
9572   return TRUE;
9573 }
9574
9575 /* Set the sizes of the dynamic sections.  */
9576
9577 bfd_boolean
9578 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9579                                      struct bfd_link_info *info)
9580 {
9581   bfd *dynobj;
9582   asection *s, *sreldyn;
9583   bfd_boolean reltext;
9584   struct mips_elf_link_hash_table *htab;
9585
9586   htab = mips_elf_hash_table (info);
9587   BFD_ASSERT (htab != NULL);
9588   dynobj = elf_hash_table (info)->dynobj;
9589   BFD_ASSERT (dynobj != NULL);
9590
9591   if (elf_hash_table (info)->dynamic_sections_created)
9592     {
9593       /* Set the contents of the .interp section to the interpreter.  */
9594       if (bfd_link_executable (info) && !info->nointerp)
9595         {
9596           s = bfd_get_linker_section (dynobj, ".interp");
9597           BFD_ASSERT (s != NULL);
9598           s->size
9599             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9600           s->contents
9601             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9602         }
9603
9604       /* Figure out the size of the PLT header if we know that we
9605          are using it.  For the sake of cache alignment always use
9606          a standard header whenever any standard entries are present
9607          even if microMIPS entries are present as well.  This also
9608          lets the microMIPS header rely on the value of $v0 only set
9609          by microMIPS entries, for a small size reduction.
9610
9611          Set symbol table entry values for symbols that use the
9612          address of their PLT entry now that we can calculate it.
9613
9614          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9615          haven't already in _bfd_elf_create_dynamic_sections.  */
9616       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9617         {
9618           bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9619                                      && !htab->plt_mips_offset);
9620           unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9621           bfd_vma isa_bit = micromips_p;
9622           struct elf_link_hash_entry *h;
9623           bfd_vma size;
9624
9625           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9626           BFD_ASSERT (htab->sgotplt->size == 0);
9627           BFD_ASSERT (htab->splt->size == 0);
9628
9629           if (htab->is_vxworks && bfd_link_pic (info))
9630             size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9631           else if (htab->is_vxworks)
9632             size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9633           else if (ABI_64_P (output_bfd))
9634             size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9635           else if (ABI_N32_P (output_bfd))
9636             size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9637           else if (!micromips_p)
9638             size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9639           else if (htab->insn32)
9640             size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9641           else
9642             size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9643
9644           htab->plt_header_is_comp = micromips_p;
9645           htab->plt_header_size = size;
9646           htab->splt->size = (size
9647                               + htab->plt_mips_offset
9648                               + htab->plt_comp_offset);
9649           htab->sgotplt->size = (htab->plt_got_index
9650                                  * MIPS_ELF_GOT_SIZE (dynobj));
9651
9652           mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9653
9654           if (htab->root.hplt == NULL)
9655             {
9656               h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9657                                                "_PROCEDURE_LINKAGE_TABLE_");
9658               htab->root.hplt = h;
9659               if (h == NULL)
9660                 return FALSE;
9661             }
9662
9663           h = htab->root.hplt;
9664           h->root.u.def.value = isa_bit;
9665           h->other = other;
9666           h->type = STT_FUNC;
9667         }
9668     }
9669
9670   /* Allocate space for global sym dynamic relocs.  */
9671   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9672
9673   mips_elf_estimate_stub_size (output_bfd, info);
9674
9675   if (!mips_elf_lay_out_got (output_bfd, info))
9676     return FALSE;
9677
9678   mips_elf_lay_out_lazy_stubs (info);
9679
9680   /* The check_relocs and adjust_dynamic_symbol entry points have
9681      determined the sizes of the various dynamic sections.  Allocate
9682      memory for them.  */
9683   reltext = FALSE;
9684   for (s = dynobj->sections; s != NULL; s = s->next)
9685     {
9686       const char *name;
9687
9688       /* It's OK to base decisions on the section name, because none
9689          of the dynobj section names depend upon the input files.  */
9690       name = bfd_get_section_name (dynobj, s);
9691
9692       if ((s->flags & SEC_LINKER_CREATED) == 0)
9693         continue;
9694
9695       if (CONST_STRNEQ (name, ".rel"))
9696         {
9697           if (s->size != 0)
9698             {
9699               const char *outname;
9700               asection *target;
9701
9702               /* If this relocation section applies to a read only
9703                  section, then we probably need a DT_TEXTREL entry.
9704                  If the relocation section is .rel(a).dyn, we always
9705                  assert a DT_TEXTREL entry rather than testing whether
9706                  there exists a relocation to a read only section or
9707                  not.  */
9708               outname = bfd_get_section_name (output_bfd,
9709                                               s->output_section);
9710               target = bfd_get_section_by_name (output_bfd, outname + 4);
9711               if ((target != NULL
9712                    && (target->flags & SEC_READONLY) != 0
9713                    && (target->flags & SEC_ALLOC) != 0)
9714                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9715                 reltext = TRUE;
9716
9717               /* We use the reloc_count field as a counter if we need
9718                  to copy relocs into the output file.  */
9719               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9720                 s->reloc_count = 0;
9721
9722               /* If combreloc is enabled, elf_link_sort_relocs() will
9723                  sort relocations, but in a different way than we do,
9724                  and before we're done creating relocations.  Also, it
9725                  will move them around between input sections'
9726                  relocation's contents, so our sorting would be
9727                  broken, so don't let it run.  */
9728               info->combreloc = 0;
9729             }
9730         }
9731       else if (bfd_link_executable (info)
9732                && ! mips_elf_hash_table (info)->use_rld_obj_head
9733                && CONST_STRNEQ (name, ".rld_map"))
9734         {
9735           /* We add a room for __rld_map.  It will be filled in by the
9736              rtld to contain a pointer to the _r_debug structure.  */
9737           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9738         }
9739       else if (SGI_COMPAT (output_bfd)
9740                && CONST_STRNEQ (name, ".compact_rel"))
9741         s->size += mips_elf_hash_table (info)->compact_rel_size;
9742       else if (s == htab->splt)
9743         {
9744           /* If the last PLT entry has a branch delay slot, allocate
9745              room for an extra nop to fill the delay slot.  This is
9746              for CPUs without load interlocking.  */
9747           if (! LOAD_INTERLOCKS_P (output_bfd)
9748               && ! htab->is_vxworks && s->size > 0)
9749             s->size += 4;
9750         }
9751       else if (! CONST_STRNEQ (name, ".init")
9752                && s != htab->sgot
9753                && s != htab->sgotplt
9754                && s != htab->sstubs
9755                && s != htab->sdynbss)
9756         {
9757           /* It's not one of our sections, so don't allocate space.  */
9758           continue;
9759         }
9760
9761       if (s->size == 0)
9762         {
9763           s->flags |= SEC_EXCLUDE;
9764           continue;
9765         }
9766
9767       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9768         continue;
9769
9770       /* Allocate memory for the section contents.  */
9771       s->contents = bfd_zalloc (dynobj, s->size);
9772       if (s->contents == NULL)
9773         {
9774           bfd_set_error (bfd_error_no_memory);
9775           return FALSE;
9776         }
9777     }
9778
9779   if (elf_hash_table (info)->dynamic_sections_created)
9780     {
9781       /* Add some entries to the .dynamic section.  We fill in the
9782          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9783          must add the entries now so that we get the correct size for
9784          the .dynamic section.  */
9785
9786       /* SGI object has the equivalence of DT_DEBUG in the
9787          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9788          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9789          may only look at the first one they see.  */
9790       if (!bfd_link_pic (info)
9791           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9792         return FALSE;
9793
9794       if (bfd_link_executable (info)
9795           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9796         return FALSE;
9797
9798       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9799          used by the debugger.  */
9800       if (bfd_link_executable (info)
9801           && !SGI_COMPAT (output_bfd)
9802           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9803         return FALSE;
9804
9805       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9806         info->flags |= DF_TEXTREL;
9807
9808       if ((info->flags & DF_TEXTREL) != 0)
9809         {
9810           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9811             return FALSE;
9812
9813           /* Clear the DF_TEXTREL flag.  It will be set again if we
9814              write out an actual text relocation; we may not, because
9815              at this point we do not know whether e.g. any .eh_frame
9816              absolute relocations have been converted to PC-relative.  */
9817           info->flags &= ~DF_TEXTREL;
9818         }
9819
9820       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9821         return FALSE;
9822
9823       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9824       if (htab->is_vxworks)
9825         {
9826           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9827              use any of the DT_MIPS_* tags.  */
9828           if (sreldyn && sreldyn->size > 0)
9829             {
9830               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9831                 return FALSE;
9832
9833               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9834                 return FALSE;
9835
9836               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9837                 return FALSE;
9838             }
9839         }
9840       else
9841         {
9842           if (sreldyn && sreldyn->size > 0)
9843             {
9844               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9845                 return FALSE;
9846
9847               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9848                 return FALSE;
9849
9850               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9851                 return FALSE;
9852             }
9853
9854           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9855             return FALSE;
9856
9857           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9858             return FALSE;
9859
9860           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9861             return FALSE;
9862
9863           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9864             return FALSE;
9865
9866           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9867             return FALSE;
9868
9869           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9870             return FALSE;
9871
9872           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9873             return FALSE;
9874
9875           if (IRIX_COMPAT (dynobj) == ict_irix5
9876               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9877             return FALSE;
9878
9879           if (IRIX_COMPAT (dynobj) == ict_irix6
9880               && (bfd_get_section_by_name
9881                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9882               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9883             return FALSE;
9884         }
9885       if (htab->splt->size > 0)
9886         {
9887           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9888             return FALSE;
9889
9890           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9891             return FALSE;
9892
9893           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9894             return FALSE;
9895
9896           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9897             return FALSE;
9898         }
9899       if (htab->is_vxworks
9900           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9901         return FALSE;
9902     }
9903
9904   return TRUE;
9905 }
9906 \f
9907 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9908    Adjust its R_ADDEND field so that it is correct for the output file.
9909    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9910    and sections respectively; both use symbol indexes.  */
9911
9912 static void
9913 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9914                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9915                         asection **local_sections, Elf_Internal_Rela *rel)
9916 {
9917   unsigned int r_type, r_symndx;
9918   Elf_Internal_Sym *sym;
9919   asection *sec;
9920
9921   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9922     {
9923       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9924       if (gprel16_reloc_p (r_type)
9925           || r_type == R_MIPS_GPREL32
9926           || literal_reloc_p (r_type))
9927         {
9928           rel->r_addend += _bfd_get_gp_value (input_bfd);
9929           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9930         }
9931
9932       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9933       sym = local_syms + r_symndx;
9934
9935       /* Adjust REL's addend to account for section merging.  */
9936       if (!bfd_link_relocatable (info))
9937         {
9938           sec = local_sections[r_symndx];
9939           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9940         }
9941
9942       /* This would normally be done by the rela_normal code in elflink.c.  */
9943       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9944         rel->r_addend += local_sections[r_symndx]->output_offset;
9945     }
9946 }
9947
9948 /* Handle relocations against symbols from removed linkonce sections,
9949    or sections discarded by a linker script.  We use this wrapper around
9950    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9951    on 64-bit ELF targets.  In this case for any relocation handled, which
9952    always be the first in a triplet, the remaining two have to be processed
9953    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9954    index referred by the first reloc that applies to all the three and the
9955    remaining two never refer to an object symbol.  And it is the final
9956    relocation (the last non-null one) that determines the output field of
9957    the whole relocation so retrieve the corresponding howto structure for
9958    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9959
9960    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9961    and therefore requires to be pasted in a loop.  It also defines a block
9962    and does not protect any of its arguments, hence the extra brackets.  */
9963
9964 static void
9965 mips_reloc_against_discarded_section (bfd *output_bfd,
9966                                       struct bfd_link_info *info,
9967                                       bfd *input_bfd, asection *input_section,
9968                                       Elf_Internal_Rela **rel,
9969                                       const Elf_Internal_Rela **relend,
9970                                       bfd_boolean rel_reloc,
9971                                       reloc_howto_type *howto,
9972                                       bfd_byte *contents)
9973 {
9974   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9975   int count = bed->s->int_rels_per_ext_rel;
9976   unsigned int r_type;
9977   int i;
9978
9979   for (i = count - 1; i > 0; i--)
9980     {
9981       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9982       if (r_type != R_MIPS_NONE)
9983         {
9984           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9985           break;
9986         }
9987     }
9988   do
9989     {
9990        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9991                                         (*rel), count, (*relend),
9992                                         howto, i, contents);
9993     }
9994   while (0);
9995 }
9996
9997 /* Relocate a MIPS ELF section.  */
9998
9999 bfd_boolean
10000 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10001                                 bfd *input_bfd, asection *input_section,
10002                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
10003                                 Elf_Internal_Sym *local_syms,
10004                                 asection **local_sections)
10005 {
10006   Elf_Internal_Rela *rel;
10007   const Elf_Internal_Rela *relend;
10008   bfd_vma addend = 0;
10009   bfd_boolean use_saved_addend_p = FALSE;
10010   const struct elf_backend_data *bed;
10011
10012   bed = get_elf_backend_data (output_bfd);
10013   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10014   for (rel = relocs; rel < relend; ++rel)
10015     {
10016       const char *name;
10017       bfd_vma value = 0;
10018       reloc_howto_type *howto;
10019       bfd_boolean cross_mode_jump_p = FALSE;
10020       /* TRUE if the relocation is a RELA relocation, rather than a
10021          REL relocation.  */
10022       bfd_boolean rela_relocation_p = TRUE;
10023       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10024       const char *msg;
10025       unsigned long r_symndx;
10026       asection *sec;
10027       Elf_Internal_Shdr *symtab_hdr;
10028       struct elf_link_hash_entry *h;
10029       bfd_boolean rel_reloc;
10030
10031       rel_reloc = (NEWABI_P (input_bfd)
10032                    && mips_elf_rel_relocation_p (input_bfd, input_section,
10033                                                  relocs, rel));
10034       /* Find the relocation howto for this relocation.  */
10035       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10036
10037       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10038       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10039       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10040         {
10041           sec = local_sections[r_symndx];
10042           h = NULL;
10043         }
10044       else
10045         {
10046           unsigned long extsymoff;
10047
10048           extsymoff = 0;
10049           if (!elf_bad_symtab (input_bfd))
10050             extsymoff = symtab_hdr->sh_info;
10051           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10052           while (h->root.type == bfd_link_hash_indirect
10053                  || h->root.type == bfd_link_hash_warning)
10054             h = (struct elf_link_hash_entry *) h->root.u.i.link;
10055
10056           sec = NULL;
10057           if (h->root.type == bfd_link_hash_defined
10058               || h->root.type == bfd_link_hash_defweak)
10059             sec = h->root.u.def.section;
10060         }
10061
10062       if (sec != NULL && discarded_section (sec))
10063         {
10064           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10065                                                 input_section, &rel, &relend,
10066                                                 rel_reloc, howto, contents);
10067           continue;
10068         }
10069
10070       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10071         {
10072           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10073              64-bit code, but make sure all their addresses are in the
10074              lowermost or uppermost 32-bit section of the 64-bit address
10075              space.  Thus, when they use an R_MIPS_64 they mean what is
10076              usually meant by R_MIPS_32, with the exception that the
10077              stored value is sign-extended to 64 bits.  */
10078           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10079
10080           /* On big-endian systems, we need to lie about the position
10081              of the reloc.  */
10082           if (bfd_big_endian (input_bfd))
10083             rel->r_offset += 4;
10084         }
10085
10086       if (!use_saved_addend_p)
10087         {
10088           /* If these relocations were originally of the REL variety,
10089              we must pull the addend out of the field that will be
10090              relocated.  Otherwise, we simply use the contents of the
10091              RELA relocation.  */
10092           if (mips_elf_rel_relocation_p (input_bfd, input_section,
10093                                          relocs, rel))
10094             {
10095               rela_relocation_p = FALSE;
10096               addend = mips_elf_read_rel_addend (input_bfd, rel,
10097                                                  howto, contents);
10098               if (hi16_reloc_p (r_type)
10099                   || (got16_reloc_p (r_type)
10100                       && mips_elf_local_relocation_p (input_bfd, rel,
10101                                                       local_sections)))
10102                 {
10103                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10104                                                      contents, &addend))
10105                     {
10106                       if (h)
10107                         name = h->root.root.string;
10108                       else
10109                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10110                                                  local_syms + r_symndx,
10111                                                  sec);
10112                       (*_bfd_error_handler)
10113                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10114                          input_bfd, input_section, name, howto->name,
10115                          rel->r_offset);
10116                     }
10117                 }
10118               else
10119                 addend <<= howto->rightshift;
10120             }
10121           else
10122             addend = rel->r_addend;
10123           mips_elf_adjust_addend (output_bfd, info, input_bfd,
10124                                   local_syms, local_sections, rel);
10125         }
10126
10127       if (bfd_link_relocatable (info))
10128         {
10129           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10130               && bfd_big_endian (input_bfd))
10131             rel->r_offset -= 4;
10132
10133           if (!rela_relocation_p && rel->r_addend)
10134             {
10135               addend += rel->r_addend;
10136               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10137                 addend = mips_elf_high (addend);
10138               else if (r_type == R_MIPS_HIGHER)
10139                 addend = mips_elf_higher (addend);
10140               else if (r_type == R_MIPS_HIGHEST)
10141                 addend = mips_elf_highest (addend);
10142               else
10143                 addend >>= howto->rightshift;
10144
10145               /* We use the source mask, rather than the destination
10146                  mask because the place to which we are writing will be
10147                  source of the addend in the final link.  */
10148               addend &= howto->src_mask;
10149
10150               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10151                 /* See the comment above about using R_MIPS_64 in the 32-bit
10152                    ABI.  Here, we need to update the addend.  It would be
10153                    possible to get away with just using the R_MIPS_32 reloc
10154                    but for endianness.  */
10155                 {
10156                   bfd_vma sign_bits;
10157                   bfd_vma low_bits;
10158                   bfd_vma high_bits;
10159
10160                   if (addend & ((bfd_vma) 1 << 31))
10161 #ifdef BFD64
10162                     sign_bits = ((bfd_vma) 1 << 32) - 1;
10163 #else
10164                     sign_bits = -1;
10165 #endif
10166                   else
10167                     sign_bits = 0;
10168
10169                   /* If we don't know that we have a 64-bit type,
10170                      do two separate stores.  */
10171                   if (bfd_big_endian (input_bfd))
10172                     {
10173                       /* Store the sign-bits (which are most significant)
10174                          first.  */
10175                       low_bits = sign_bits;
10176                       high_bits = addend;
10177                     }
10178                   else
10179                     {
10180                       low_bits = addend;
10181                       high_bits = sign_bits;
10182                     }
10183                   bfd_put_32 (input_bfd, low_bits,
10184                               contents + rel->r_offset);
10185                   bfd_put_32 (input_bfd, high_bits,
10186                               contents + rel->r_offset + 4);
10187                   continue;
10188                 }
10189
10190               if (! mips_elf_perform_relocation (info, howto, rel, addend,
10191                                                  input_bfd, input_section,
10192                                                  contents, FALSE))
10193                 return FALSE;
10194             }
10195
10196           /* Go on to the next relocation.  */
10197           continue;
10198         }
10199
10200       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10201          relocations for the same offset.  In that case we are
10202          supposed to treat the output of each relocation as the addend
10203          for the next.  */
10204       if (rel + 1 < relend
10205           && rel->r_offset == rel[1].r_offset
10206           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10207         use_saved_addend_p = TRUE;
10208       else
10209         use_saved_addend_p = FALSE;
10210
10211       /* Figure out what value we are supposed to relocate.  */
10212       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10213                                              input_section, info, rel,
10214                                              addend, howto, local_syms,
10215                                              local_sections, &value,
10216                                              &name, &cross_mode_jump_p,
10217                                              use_saved_addend_p))
10218         {
10219         case bfd_reloc_continue:
10220           /* There's nothing to do.  */
10221           continue;
10222
10223         case bfd_reloc_undefined:
10224           /* mips_elf_calculate_relocation already called the
10225              undefined_symbol callback.  There's no real point in
10226              trying to perform the relocation at this point, so we
10227              just skip ahead to the next relocation.  */
10228           continue;
10229
10230         case bfd_reloc_notsupported:
10231           msg = _("internal error: unsupported relocation error");
10232           info->callbacks->warning
10233             (info, msg, name, input_bfd, input_section, rel->r_offset);
10234           return FALSE;
10235
10236         case bfd_reloc_overflow:
10237           if (use_saved_addend_p)
10238             /* Ignore overflow until we reach the last relocation for
10239                a given location.  */
10240             ;
10241           else
10242             {
10243               struct mips_elf_link_hash_table *htab;
10244
10245               htab = mips_elf_hash_table (info);
10246               BFD_ASSERT (htab != NULL);
10247               BFD_ASSERT (name != NULL);
10248               if (!htab->small_data_overflow_reported
10249                   && (gprel16_reloc_p (howto->type)
10250                       || literal_reloc_p (howto->type)))
10251                 {
10252                   msg = _("small-data section exceeds 64KB;"
10253                           " lower small-data size limit (see option -G)");
10254
10255                   htab->small_data_overflow_reported = TRUE;
10256                   (*info->callbacks->einfo) ("%P: %s\n", msg);
10257                 }
10258               (*info->callbacks->reloc_overflow)
10259                 (info, NULL, name, howto->name, (bfd_vma) 0,
10260                  input_bfd, input_section, rel->r_offset);
10261             }
10262           break;
10263
10264         case bfd_reloc_ok:
10265           break;
10266
10267         case bfd_reloc_outofrange:
10268           msg = NULL;
10269           if (jal_reloc_p (howto->type))
10270             msg = _("JALX to a non-word-aligned address");
10271           else if (b_reloc_p (howto->type))
10272             msg = _("Branch to a non-instruction-aligned address");
10273           else if (aligned_pcrel_reloc_p (howto->type))
10274             msg = _("PC-relative load from unaligned address");
10275           if (msg)
10276             {
10277               info->callbacks->einfo
10278                 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10279               break;
10280             }
10281           /* Fall through.  */
10282
10283         default:
10284           abort ();
10285           break;
10286         }
10287
10288       /* If we've got another relocation for the address, keep going
10289          until we reach the last one.  */
10290       if (use_saved_addend_p)
10291         {
10292           addend = value;
10293           continue;
10294         }
10295
10296       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10297         /* See the comment above about using R_MIPS_64 in the 32-bit
10298            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10299            that calculated the right value.  Now, however, we
10300            sign-extend the 32-bit result to 64-bits, and store it as a
10301            64-bit value.  We are especially generous here in that we
10302            go to extreme lengths to support this usage on systems with
10303            only a 32-bit VMA.  */
10304         {
10305           bfd_vma sign_bits;
10306           bfd_vma low_bits;
10307           bfd_vma high_bits;
10308
10309           if (value & ((bfd_vma) 1 << 31))
10310 #ifdef BFD64
10311             sign_bits = ((bfd_vma) 1 << 32) - 1;
10312 #else
10313             sign_bits = -1;
10314 #endif
10315           else
10316             sign_bits = 0;
10317
10318           /* If we don't know that we have a 64-bit type,
10319              do two separate stores.  */
10320           if (bfd_big_endian (input_bfd))
10321             {
10322               /* Undo what we did above.  */
10323               rel->r_offset -= 4;
10324               /* Store the sign-bits (which are most significant)
10325                  first.  */
10326               low_bits = sign_bits;
10327               high_bits = value;
10328             }
10329           else
10330             {
10331               low_bits = value;
10332               high_bits = sign_bits;
10333             }
10334           bfd_put_32 (input_bfd, low_bits,
10335                       contents + rel->r_offset);
10336           bfd_put_32 (input_bfd, high_bits,
10337                       contents + rel->r_offset + 4);
10338           continue;
10339         }
10340
10341       /* Actually perform the relocation.  */
10342       if (! mips_elf_perform_relocation (info, howto, rel, value,
10343                                          input_bfd, input_section,
10344                                          contents, cross_mode_jump_p))
10345         return FALSE;
10346     }
10347
10348   return TRUE;
10349 }
10350 \f
10351 /* A function that iterates over each entry in la25_stubs and fills
10352    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10353
10354 static int
10355 mips_elf_create_la25_stub (void **slot, void *data)
10356 {
10357   struct mips_htab_traverse_info *hti;
10358   struct mips_elf_link_hash_table *htab;
10359   struct mips_elf_la25_stub *stub;
10360   asection *s;
10361   bfd_byte *loc;
10362   bfd_vma offset, target, target_high, target_low;
10363
10364   stub = (struct mips_elf_la25_stub *) *slot;
10365   hti = (struct mips_htab_traverse_info *) data;
10366   htab = mips_elf_hash_table (hti->info);
10367   BFD_ASSERT (htab != NULL);
10368
10369   /* Create the section contents, if we haven't already.  */
10370   s = stub->stub_section;
10371   loc = s->contents;
10372   if (loc == NULL)
10373     {
10374       loc = bfd_malloc (s->size);
10375       if (loc == NULL)
10376         {
10377           hti->error = TRUE;
10378           return FALSE;
10379         }
10380       s->contents = loc;
10381     }
10382
10383   /* Work out where in the section this stub should go.  */
10384   offset = stub->offset;
10385
10386   /* Work out the target address.  */
10387   target = mips_elf_get_la25_target (stub, &s);
10388   target += s->output_section->vma + s->output_offset;
10389
10390   target_high = ((target + 0x8000) >> 16) & 0xffff;
10391   target_low = (target & 0xffff);
10392
10393   if (stub->stub_section != htab->strampoline)
10394     {
10395       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10396          of the section and write the two instructions at the end.  */
10397       memset (loc, 0, offset);
10398       loc += offset;
10399       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10400         {
10401           bfd_put_micromips_32 (hti->output_bfd,
10402                                 LA25_LUI_MICROMIPS (target_high),
10403                                 loc);
10404           bfd_put_micromips_32 (hti->output_bfd,
10405                                 LA25_ADDIU_MICROMIPS (target_low),
10406                                 loc + 4);
10407         }
10408       else
10409         {
10410           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10411           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10412         }
10413     }
10414   else
10415     {
10416       /* This is trampoline.  */
10417       loc += offset;
10418       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10419         {
10420           bfd_put_micromips_32 (hti->output_bfd,
10421                                 LA25_LUI_MICROMIPS (target_high), loc);
10422           bfd_put_micromips_32 (hti->output_bfd,
10423                                 LA25_J_MICROMIPS (target), loc + 4);
10424           bfd_put_micromips_32 (hti->output_bfd,
10425                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10426           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10427         }
10428       else
10429         {
10430           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10431           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10432           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10433           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10434         }
10435     }
10436   return TRUE;
10437 }
10438
10439 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10440    adjust it appropriately now.  */
10441
10442 static void
10443 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10444                                       const char *name, Elf_Internal_Sym *sym)
10445 {
10446   /* The linker script takes care of providing names and values for
10447      these, but we must place them into the right sections.  */
10448   static const char* const text_section_symbols[] = {
10449     "_ftext",
10450     "_etext",
10451     "__dso_displacement",
10452     "__elf_header",
10453     "__program_header_table",
10454     NULL
10455   };
10456
10457   static const char* const data_section_symbols[] = {
10458     "_fdata",
10459     "_edata",
10460     "_end",
10461     "_fbss",
10462     NULL
10463   };
10464
10465   const char* const *p;
10466   int i;
10467
10468   for (i = 0; i < 2; ++i)
10469     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10470          *p;
10471          ++p)
10472       if (strcmp (*p, name) == 0)
10473         {
10474           /* All of these symbols are given type STT_SECTION by the
10475              IRIX6 linker.  */
10476           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10477           sym->st_other = STO_PROTECTED;
10478
10479           /* The IRIX linker puts these symbols in special sections.  */
10480           if (i == 0)
10481             sym->st_shndx = SHN_MIPS_TEXT;
10482           else
10483             sym->st_shndx = SHN_MIPS_DATA;
10484
10485           break;
10486         }
10487 }
10488
10489 /* Finish up dynamic symbol handling.  We set the contents of various
10490    dynamic sections here.  */
10491
10492 bfd_boolean
10493 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10494                                      struct bfd_link_info *info,
10495                                      struct elf_link_hash_entry *h,
10496                                      Elf_Internal_Sym *sym)
10497 {
10498   bfd *dynobj;
10499   asection *sgot;
10500   struct mips_got_info *g, *gg;
10501   const char *name;
10502   int idx;
10503   struct mips_elf_link_hash_table *htab;
10504   struct mips_elf_link_hash_entry *hmips;
10505
10506   htab = mips_elf_hash_table (info);
10507   BFD_ASSERT (htab != NULL);
10508   dynobj = elf_hash_table (info)->dynobj;
10509   hmips = (struct mips_elf_link_hash_entry *) h;
10510
10511   BFD_ASSERT (!htab->is_vxworks);
10512
10513   if (h->plt.plist != NULL
10514       && (h->plt.plist->mips_offset != MINUS_ONE
10515           || h->plt.plist->comp_offset != MINUS_ONE))
10516     {
10517       /* We've decided to create a PLT entry for this symbol.  */
10518       bfd_byte *loc;
10519       bfd_vma header_address, got_address;
10520       bfd_vma got_address_high, got_address_low, load;
10521       bfd_vma got_index;
10522       bfd_vma isa_bit;
10523
10524       got_index = h->plt.plist->gotplt_index;
10525
10526       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10527       BFD_ASSERT (h->dynindx != -1);
10528       BFD_ASSERT (htab->splt != NULL);
10529       BFD_ASSERT (got_index != MINUS_ONE);
10530       BFD_ASSERT (!h->def_regular);
10531
10532       /* Calculate the address of the PLT header.  */
10533       isa_bit = htab->plt_header_is_comp;
10534       header_address = (htab->splt->output_section->vma
10535                         + htab->splt->output_offset + isa_bit);
10536
10537       /* Calculate the address of the .got.plt entry.  */
10538       got_address = (htab->sgotplt->output_section->vma
10539                      + htab->sgotplt->output_offset
10540                      + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10541
10542       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10543       got_address_low = got_address & 0xffff;
10544
10545       /* Initially point the .got.plt entry at the PLT header.  */
10546       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10547       if (ABI_64_P (output_bfd))
10548         bfd_put_64 (output_bfd, header_address, loc);
10549       else
10550         bfd_put_32 (output_bfd, header_address, loc);
10551
10552       /* Now handle the PLT itself.  First the standard entry (the order
10553          does not matter, we just have to pick one).  */
10554       if (h->plt.plist->mips_offset != MINUS_ONE)
10555         {
10556           const bfd_vma *plt_entry;
10557           bfd_vma plt_offset;
10558
10559           plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10560
10561           BFD_ASSERT (plt_offset <= htab->splt->size);
10562
10563           /* Find out where the .plt entry should go.  */
10564           loc = htab->splt->contents + plt_offset;
10565
10566           /* Pick the load opcode.  */
10567           load = MIPS_ELF_LOAD_WORD (output_bfd);
10568
10569           /* Fill in the PLT entry itself.  */
10570
10571           if (MIPSR6_P (output_bfd))
10572             plt_entry = mipsr6_exec_plt_entry;
10573           else
10574             plt_entry = mips_exec_plt_entry;
10575           bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10576           bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10577                       loc + 4);
10578
10579           if (! LOAD_INTERLOCKS_P (output_bfd))
10580             {
10581               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10582               bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10583             }
10584           else
10585             {
10586               bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10587               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10588                           loc + 12);
10589             }
10590         }
10591
10592       /* Now the compressed entry.  They come after any standard ones.  */
10593       if (h->plt.plist->comp_offset != MINUS_ONE)
10594         {
10595           bfd_vma plt_offset;
10596
10597           plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10598                         + h->plt.plist->comp_offset);
10599
10600           BFD_ASSERT (plt_offset <= htab->splt->size);
10601
10602           /* Find out where the .plt entry should go.  */
10603           loc = htab->splt->contents + plt_offset;
10604
10605           /* Fill in the PLT entry itself.  */
10606           if (!MICROMIPS_P (output_bfd))
10607             {
10608               const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10609
10610               bfd_put_16 (output_bfd, plt_entry[0], loc);
10611               bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10612               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10613               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10614               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10615               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10616               bfd_put_32 (output_bfd, got_address, loc + 12);
10617             }
10618           else if (htab->insn32)
10619             {
10620               const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10621
10622               bfd_put_16 (output_bfd, plt_entry[0], loc);
10623               bfd_put_16 (output_bfd, got_address_high, loc + 2);
10624               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10625               bfd_put_16 (output_bfd, got_address_low, loc + 6);
10626               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10627               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10628               bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10629               bfd_put_16 (output_bfd, got_address_low, loc + 14);
10630             }
10631           else
10632             {
10633               const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10634               bfd_signed_vma gotpc_offset;
10635               bfd_vma loc_address;
10636
10637               BFD_ASSERT (got_address % 4 == 0);
10638
10639               loc_address = (htab->splt->output_section->vma
10640                              + htab->splt->output_offset + plt_offset);
10641               gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10642
10643               /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10644               if (gotpc_offset + 0x1000000 >= 0x2000000)
10645                 {
10646                   (*_bfd_error_handler)
10647                     (_("%B: `%A' offset of %ld from `%A' "
10648                        "beyond the range of ADDIUPC"),
10649                      output_bfd,
10650                      htab->sgotplt->output_section,
10651                      htab->splt->output_section,
10652                      (long) gotpc_offset);
10653                   bfd_set_error (bfd_error_no_error);
10654                   return FALSE;
10655                 }
10656               bfd_put_16 (output_bfd,
10657                           plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10658               bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10659               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10660               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10661               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10662               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10663             }
10664         }
10665
10666       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10667       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10668                                           got_index - 2, h->dynindx,
10669                                           R_MIPS_JUMP_SLOT, got_address);
10670
10671       /* We distinguish between PLT entries and lazy-binding stubs by
10672          giving the former an st_other value of STO_MIPS_PLT.  Set the
10673          flag and leave the value if there are any relocations in the
10674          binary where pointer equality matters.  */
10675       sym->st_shndx = SHN_UNDEF;
10676       if (h->pointer_equality_needed)
10677         sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10678       else
10679         {
10680           sym->st_value = 0;
10681           sym->st_other = 0;
10682         }
10683     }
10684
10685   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10686     {
10687       /* We've decided to create a lazy-binding stub.  */
10688       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10689       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10690       bfd_vma stub_size = htab->function_stub_size;
10691       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10692       bfd_vma isa_bit = micromips_p;
10693       bfd_vma stub_big_size;
10694
10695       if (!micromips_p)
10696         stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10697       else if (htab->insn32)
10698         stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10699       else
10700         stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10701
10702       /* This symbol has a stub.  Set it up.  */
10703
10704       BFD_ASSERT (h->dynindx != -1);
10705
10706       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10707
10708       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10709          sign extension at runtime in the stub, resulting in a negative
10710          index value.  */
10711       if (h->dynindx & ~0x7fffffff)
10712         return FALSE;
10713
10714       /* Fill the stub.  */
10715       if (micromips_p)
10716         {
10717           idx = 0;
10718           bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10719                                 stub + idx);
10720           idx += 4;
10721           if (htab->insn32)
10722             {
10723               bfd_put_micromips_32 (output_bfd,
10724                                     STUB_MOVE32_MICROMIPS, stub + idx);
10725               idx += 4;
10726             }
10727           else
10728             {
10729               bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10730               idx += 2;
10731             }
10732           if (stub_size == stub_big_size)
10733             {
10734               long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10735
10736               bfd_put_micromips_32 (output_bfd,
10737                                     STUB_LUI_MICROMIPS (dynindx_hi),
10738                                     stub + idx);
10739               idx += 4;
10740             }
10741           if (htab->insn32)
10742             {
10743               bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10744                                     stub + idx);
10745               idx += 4;
10746             }
10747           else
10748             {
10749               bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10750               idx += 2;
10751             }
10752
10753           /* If a large stub is not required and sign extension is not a
10754              problem, then use legacy code in the stub.  */
10755           if (stub_size == stub_big_size)
10756             bfd_put_micromips_32 (output_bfd,
10757                                   STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10758                                   stub + idx);
10759           else if (h->dynindx & ~0x7fff)
10760             bfd_put_micromips_32 (output_bfd,
10761                                   STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10762                                   stub + idx);
10763           else
10764             bfd_put_micromips_32 (output_bfd,
10765                                   STUB_LI16S_MICROMIPS (output_bfd,
10766                                                         h->dynindx),
10767                                   stub + idx);
10768         }
10769       else
10770         {
10771           idx = 0;
10772           bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10773           idx += 4;
10774           bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10775           idx += 4;
10776           if (stub_size == stub_big_size)
10777             {
10778               bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10779                           stub + idx);
10780               idx += 4;
10781             }
10782           bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10783           idx += 4;
10784
10785           /* If a large stub is not required and sign extension is not a
10786              problem, then use legacy code in the stub.  */
10787           if (stub_size == stub_big_size)
10788             bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10789                         stub + idx);
10790           else if (h->dynindx & ~0x7fff)
10791             bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10792                         stub + idx);
10793           else
10794             bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10795                         stub + idx);
10796         }
10797
10798       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10799       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10800               stub, stub_size);
10801
10802       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10803          only for the referenced symbol.  */
10804       sym->st_shndx = SHN_UNDEF;
10805
10806       /* The run-time linker uses the st_value field of the symbol
10807          to reset the global offset table entry for this external
10808          to its stub address when unlinking a shared object.  */
10809       sym->st_value = (htab->sstubs->output_section->vma
10810                        + htab->sstubs->output_offset
10811                        + h->plt.plist->stub_offset
10812                        + isa_bit);
10813       sym->st_other = other;
10814     }
10815
10816   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10817      refer to the stub, since only the stub uses the standard calling
10818      conventions.  */
10819   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10820     {
10821       BFD_ASSERT (hmips->need_fn_stub);
10822       sym->st_value = (hmips->fn_stub->output_section->vma
10823                        + hmips->fn_stub->output_offset);
10824       sym->st_size = hmips->fn_stub->size;
10825       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10826     }
10827
10828   BFD_ASSERT (h->dynindx != -1
10829               || h->forced_local);
10830
10831   sgot = htab->sgot;
10832   g = htab->got_info;
10833   BFD_ASSERT (g != NULL);
10834
10835   /* Run through the global symbol table, creating GOT entries for all
10836      the symbols that need them.  */
10837   if (hmips->global_got_area != GGA_NONE)
10838     {
10839       bfd_vma offset;
10840       bfd_vma value;
10841
10842       value = sym->st_value;
10843       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10844       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10845     }
10846
10847   if (hmips->global_got_area != GGA_NONE && g->next)
10848     {
10849       struct mips_got_entry e, *p;
10850       bfd_vma entry;
10851       bfd_vma offset;
10852
10853       gg = g;
10854
10855       e.abfd = output_bfd;
10856       e.symndx = -1;
10857       e.d.h = hmips;
10858       e.tls_type = GOT_TLS_NONE;
10859
10860       for (g = g->next; g->next != gg; g = g->next)
10861         {
10862           if (g->got_entries
10863               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10864                                                            &e)))
10865             {
10866               offset = p->gotidx;
10867               BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10868               if (bfd_link_pic (info)
10869                   || (elf_hash_table (info)->dynamic_sections_created
10870                       && p->d.h != NULL
10871                       && p->d.h->root.def_dynamic
10872                       && !p->d.h->root.def_regular))
10873                 {
10874                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10875                      the various compatibility problems, it's easier to mock
10876                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10877                      mips_elf_create_dynamic_relocation to calculate the
10878                      appropriate addend.  */
10879                   Elf_Internal_Rela rel[3];
10880
10881                   memset (rel, 0, sizeof (rel));
10882                   if (ABI_64_P (output_bfd))
10883                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10884                   else
10885                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10886                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10887
10888                   entry = 0;
10889                   if (! (mips_elf_create_dynamic_relocation
10890                          (output_bfd, info, rel,
10891                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10892                     return FALSE;
10893                 }
10894               else
10895                 entry = sym->st_value;
10896               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10897             }
10898         }
10899     }
10900
10901   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10902   name = h->root.root.string;
10903   if (h == elf_hash_table (info)->hdynamic
10904       || h == elf_hash_table (info)->hgot)
10905     sym->st_shndx = SHN_ABS;
10906   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10907            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10908     {
10909       sym->st_shndx = SHN_ABS;
10910       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10911       sym->st_value = 1;
10912     }
10913   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10914     {
10915       sym->st_shndx = SHN_ABS;
10916       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10917       sym->st_value = elf_gp (output_bfd);
10918     }
10919   else if (SGI_COMPAT (output_bfd))
10920     {
10921       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10922           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10923         {
10924           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10925           sym->st_other = STO_PROTECTED;
10926           sym->st_value = 0;
10927           sym->st_shndx = SHN_MIPS_DATA;
10928         }
10929       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10930         {
10931           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10932           sym->st_other = STO_PROTECTED;
10933           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10934           sym->st_shndx = SHN_ABS;
10935         }
10936       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10937         {
10938           if (h->type == STT_FUNC)
10939             sym->st_shndx = SHN_MIPS_TEXT;
10940           else if (h->type == STT_OBJECT)
10941             sym->st_shndx = SHN_MIPS_DATA;
10942         }
10943     }
10944
10945   /* Emit a copy reloc, if needed.  */
10946   if (h->needs_copy)
10947     {
10948       asection *s;
10949       bfd_vma symval;
10950
10951       BFD_ASSERT (h->dynindx != -1);
10952       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10953
10954       s = mips_elf_rel_dyn_section (info, FALSE);
10955       symval = (h->root.u.def.section->output_section->vma
10956                 + h->root.u.def.section->output_offset
10957                 + h->root.u.def.value);
10958       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10959                                           h->dynindx, R_MIPS_COPY, symval);
10960     }
10961
10962   /* Handle the IRIX6-specific symbols.  */
10963   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10964     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10965
10966   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10967      to treat compressed symbols like any other.  */
10968   if (ELF_ST_IS_MIPS16 (sym->st_other))
10969     {
10970       BFD_ASSERT (sym->st_value & 1);
10971       sym->st_other -= STO_MIPS16;
10972     }
10973   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10974     {
10975       BFD_ASSERT (sym->st_value & 1);
10976       sym->st_other -= STO_MICROMIPS;
10977     }
10978
10979   return TRUE;
10980 }
10981
10982 /* Likewise, for VxWorks.  */
10983
10984 bfd_boolean
10985 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10986                                          struct bfd_link_info *info,
10987                                          struct elf_link_hash_entry *h,
10988                                          Elf_Internal_Sym *sym)
10989 {
10990   bfd *dynobj;
10991   asection *sgot;
10992   struct mips_got_info *g;
10993   struct mips_elf_link_hash_table *htab;
10994   struct mips_elf_link_hash_entry *hmips;
10995
10996   htab = mips_elf_hash_table (info);
10997   BFD_ASSERT (htab != NULL);
10998   dynobj = elf_hash_table (info)->dynobj;
10999   hmips = (struct mips_elf_link_hash_entry *) h;
11000
11001   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11002     {
11003       bfd_byte *loc;
11004       bfd_vma plt_address, got_address, got_offset, branch_offset;
11005       Elf_Internal_Rela rel;
11006       static const bfd_vma *plt_entry;
11007       bfd_vma gotplt_index;
11008       bfd_vma plt_offset;
11009
11010       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11011       gotplt_index = h->plt.plist->gotplt_index;
11012
11013       BFD_ASSERT (h->dynindx != -1);
11014       BFD_ASSERT (htab->splt != NULL);
11015       BFD_ASSERT (gotplt_index != MINUS_ONE);
11016       BFD_ASSERT (plt_offset <= htab->splt->size);
11017
11018       /* Calculate the address of the .plt entry.  */
11019       plt_address = (htab->splt->output_section->vma
11020                      + htab->splt->output_offset
11021                      + plt_offset);
11022
11023       /* Calculate the address of the .got.plt entry.  */
11024       got_address = (htab->sgotplt->output_section->vma
11025                      + htab->sgotplt->output_offset
11026                      + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11027
11028       /* Calculate the offset of the .got.plt entry from
11029          _GLOBAL_OFFSET_TABLE_.  */
11030       got_offset = mips_elf_gotplt_index (info, h);
11031
11032       /* Calculate the offset for the branch at the start of the PLT
11033          entry.  The branch jumps to the beginning of .plt.  */
11034       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11035
11036       /* Fill in the initial value of the .got.plt entry.  */
11037       bfd_put_32 (output_bfd, plt_address,
11038                   (htab->sgotplt->contents
11039                    + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11040
11041       /* Find out where the .plt entry should go.  */
11042       loc = htab->splt->contents + plt_offset;
11043
11044       if (bfd_link_pic (info))
11045         {
11046           plt_entry = mips_vxworks_shared_plt_entry;
11047           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11048           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11049         }
11050       else
11051         {
11052           bfd_vma got_address_high, got_address_low;
11053
11054           plt_entry = mips_vxworks_exec_plt_entry;
11055           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11056           got_address_low = got_address & 0xffff;
11057
11058           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11059           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11060           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11061           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11062           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11063           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11064           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11065           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11066
11067           loc = (htab->srelplt2->contents
11068                  + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11069
11070           /* Emit a relocation for the .got.plt entry.  */
11071           rel.r_offset = got_address;
11072           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11073           rel.r_addend = plt_offset;
11074           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11075
11076           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11077           loc += sizeof (Elf32_External_Rela);
11078           rel.r_offset = plt_address + 8;
11079           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11080           rel.r_addend = got_offset;
11081           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11082
11083           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11084           loc += sizeof (Elf32_External_Rela);
11085           rel.r_offset += 4;
11086           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11087           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11088         }
11089
11090       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11091       loc = (htab->srelplt->contents
11092              + gotplt_index * sizeof (Elf32_External_Rela));
11093       rel.r_offset = got_address;
11094       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11095       rel.r_addend = 0;
11096       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11097
11098       if (!h->def_regular)
11099         sym->st_shndx = SHN_UNDEF;
11100     }
11101
11102   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11103
11104   sgot = htab->sgot;
11105   g = htab->got_info;
11106   BFD_ASSERT (g != NULL);
11107
11108   /* See if this symbol has an entry in the GOT.  */
11109   if (hmips->global_got_area != GGA_NONE)
11110     {
11111       bfd_vma offset;
11112       Elf_Internal_Rela outrel;
11113       bfd_byte *loc;
11114       asection *s;
11115
11116       /* Install the symbol value in the GOT.   */
11117       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11118       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11119
11120       /* Add a dynamic relocation for it.  */
11121       s = mips_elf_rel_dyn_section (info, FALSE);
11122       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11123       outrel.r_offset = (sgot->output_section->vma
11124                          + sgot->output_offset
11125                          + offset);
11126       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11127       outrel.r_addend = 0;
11128       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11129     }
11130
11131   /* Emit a copy reloc, if needed.  */
11132   if (h->needs_copy)
11133     {
11134       Elf_Internal_Rela rel;
11135
11136       BFD_ASSERT (h->dynindx != -1);
11137
11138       rel.r_offset = (h->root.u.def.section->output_section->vma
11139                       + h->root.u.def.section->output_offset
11140                       + h->root.u.def.value);
11141       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11142       rel.r_addend = 0;
11143       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11144                                  htab->srelbss->contents
11145                                  + (htab->srelbss->reloc_count
11146                                     * sizeof (Elf32_External_Rela)));
11147       ++htab->srelbss->reloc_count;
11148     }
11149
11150   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11151   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11152     sym->st_value &= ~1;
11153
11154   return TRUE;
11155 }
11156
11157 /* Write out a plt0 entry to the beginning of .plt.  */
11158
11159 static bfd_boolean
11160 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11161 {
11162   bfd_byte *loc;
11163   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11164   static const bfd_vma *plt_entry;
11165   struct mips_elf_link_hash_table *htab;
11166
11167   htab = mips_elf_hash_table (info);
11168   BFD_ASSERT (htab != NULL);
11169
11170   if (ABI_64_P (output_bfd))
11171     plt_entry = mips_n64_exec_plt0_entry;
11172   else if (ABI_N32_P (output_bfd))
11173     plt_entry = mips_n32_exec_plt0_entry;
11174   else if (!htab->plt_header_is_comp)
11175     plt_entry = mips_o32_exec_plt0_entry;
11176   else if (htab->insn32)
11177     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11178   else
11179     plt_entry = micromips_o32_exec_plt0_entry;
11180
11181   /* Calculate the value of .got.plt.  */
11182   gotplt_value = (htab->sgotplt->output_section->vma
11183                   + htab->sgotplt->output_offset);
11184   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11185   gotplt_value_low = gotplt_value & 0xffff;
11186
11187   /* The PLT sequence is not safe for N64 if .got.plt's address can
11188      not be loaded in two instructions.  */
11189   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11190               || ~(gotplt_value | 0x7fffffff) == 0);
11191
11192   /* Install the PLT header.  */
11193   loc = htab->splt->contents;
11194   if (plt_entry == micromips_o32_exec_plt0_entry)
11195     {
11196       bfd_vma gotpc_offset;
11197       bfd_vma loc_address;
11198       size_t i;
11199
11200       BFD_ASSERT (gotplt_value % 4 == 0);
11201
11202       loc_address = (htab->splt->output_section->vma
11203                      + htab->splt->output_offset);
11204       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11205
11206       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11207       if (gotpc_offset + 0x1000000 >= 0x2000000)
11208         {
11209           (*_bfd_error_handler)
11210             (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11211              output_bfd,
11212              htab->sgotplt->output_section,
11213              htab->splt->output_section,
11214              (long) gotpc_offset);
11215           bfd_set_error (bfd_error_no_error);
11216           return FALSE;
11217         }
11218       bfd_put_16 (output_bfd,
11219                   plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11220       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11221       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11222         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11223     }
11224   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11225     {
11226       size_t i;
11227
11228       bfd_put_16 (output_bfd, plt_entry[0], loc);
11229       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11230       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11231       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11232       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11233       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11234       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11235         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11236     }
11237   else
11238     {
11239       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11240       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11241       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11242       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11243       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11244       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11245       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11246       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11247     }
11248
11249   return TRUE;
11250 }
11251
11252 /* Install the PLT header for a VxWorks executable and finalize the
11253    contents of .rela.plt.unloaded.  */
11254
11255 static void
11256 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11257 {
11258   Elf_Internal_Rela rela;
11259   bfd_byte *loc;
11260   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11261   static const bfd_vma *plt_entry;
11262   struct mips_elf_link_hash_table *htab;
11263
11264   htab = mips_elf_hash_table (info);
11265   BFD_ASSERT (htab != NULL);
11266
11267   plt_entry = mips_vxworks_exec_plt0_entry;
11268
11269   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11270   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11271                + htab->root.hgot->root.u.def.section->output_offset
11272                + htab->root.hgot->root.u.def.value);
11273
11274   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11275   got_value_low = got_value & 0xffff;
11276
11277   /* Calculate the address of the PLT header.  */
11278   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11279
11280   /* Install the PLT header.  */
11281   loc = htab->splt->contents;
11282   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11283   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11284   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11285   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11286   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11287   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11288
11289   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11290   loc = htab->srelplt2->contents;
11291   rela.r_offset = plt_address;
11292   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11293   rela.r_addend = 0;
11294   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11295   loc += sizeof (Elf32_External_Rela);
11296
11297   /* Output the relocation for the following addiu of
11298      %lo(_GLOBAL_OFFSET_TABLE_).  */
11299   rela.r_offset += 4;
11300   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11301   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11302   loc += sizeof (Elf32_External_Rela);
11303
11304   /* Fix up the remaining relocations.  They may have the wrong
11305      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11306      in which symbols were output.  */
11307   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11308     {
11309       Elf_Internal_Rela rel;
11310
11311       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11312       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11313       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11314       loc += sizeof (Elf32_External_Rela);
11315
11316       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11317       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11318       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11319       loc += sizeof (Elf32_External_Rela);
11320
11321       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11322       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11323       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11324       loc += sizeof (Elf32_External_Rela);
11325     }
11326 }
11327
11328 /* Install the PLT header for a VxWorks shared library.  */
11329
11330 static void
11331 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11332 {
11333   unsigned int i;
11334   struct mips_elf_link_hash_table *htab;
11335
11336   htab = mips_elf_hash_table (info);
11337   BFD_ASSERT (htab != NULL);
11338
11339   /* We just need to copy the entry byte-by-byte.  */
11340   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11341     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11342                 htab->splt->contents + i * 4);
11343 }
11344
11345 /* Finish up the dynamic sections.  */
11346
11347 bfd_boolean
11348 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11349                                        struct bfd_link_info *info)
11350 {
11351   bfd *dynobj;
11352   asection *sdyn;
11353   asection *sgot;
11354   struct mips_got_info *gg, *g;
11355   struct mips_elf_link_hash_table *htab;
11356
11357   htab = mips_elf_hash_table (info);
11358   BFD_ASSERT (htab != NULL);
11359
11360   dynobj = elf_hash_table (info)->dynobj;
11361
11362   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11363
11364   sgot = htab->sgot;
11365   gg = htab->got_info;
11366
11367   if (elf_hash_table (info)->dynamic_sections_created)
11368     {
11369       bfd_byte *b;
11370       int dyn_to_skip = 0, dyn_skipped = 0;
11371
11372       BFD_ASSERT (sdyn != NULL);
11373       BFD_ASSERT (gg != NULL);
11374
11375       g = mips_elf_bfd_got (output_bfd, FALSE);
11376       BFD_ASSERT (g != NULL);
11377
11378       for (b = sdyn->contents;
11379            b < sdyn->contents + sdyn->size;
11380            b += MIPS_ELF_DYN_SIZE (dynobj))
11381         {
11382           Elf_Internal_Dyn dyn;
11383           const char *name;
11384           size_t elemsize;
11385           asection *s;
11386           bfd_boolean swap_out_p;
11387
11388           /* Read in the current dynamic entry.  */
11389           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11390
11391           /* Assume that we're going to modify it and write it out.  */
11392           swap_out_p = TRUE;
11393
11394           switch (dyn.d_tag)
11395             {
11396             case DT_RELENT:
11397               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11398               break;
11399
11400             case DT_RELAENT:
11401               BFD_ASSERT (htab->is_vxworks);
11402               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11403               break;
11404
11405             case DT_STRSZ:
11406               /* Rewrite DT_STRSZ.  */
11407               dyn.d_un.d_val =
11408                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11409               break;
11410
11411             case DT_PLTGOT:
11412               s = htab->sgot;
11413               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11414               break;
11415
11416             case DT_MIPS_PLTGOT:
11417               s = htab->sgotplt;
11418               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11419               break;
11420
11421             case DT_MIPS_RLD_VERSION:
11422               dyn.d_un.d_val = 1; /* XXX */
11423               break;
11424
11425             case DT_MIPS_FLAGS:
11426               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11427               break;
11428
11429             case DT_MIPS_TIME_STAMP:
11430               {
11431                 time_t t;
11432                 time (&t);
11433                 dyn.d_un.d_val = t;
11434               }
11435               break;
11436
11437             case DT_MIPS_ICHECKSUM:
11438               /* XXX FIXME: */
11439               swap_out_p = FALSE;
11440               break;
11441
11442             case DT_MIPS_IVERSION:
11443               /* XXX FIXME: */
11444               swap_out_p = FALSE;
11445               break;
11446
11447             case DT_MIPS_BASE_ADDRESS:
11448               s = output_bfd->sections;
11449               BFD_ASSERT (s != NULL);
11450               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11451               break;
11452
11453             case DT_MIPS_LOCAL_GOTNO:
11454               dyn.d_un.d_val = g->local_gotno;
11455               break;
11456
11457             case DT_MIPS_UNREFEXTNO:
11458               /* The index into the dynamic symbol table which is the
11459                  entry of the first external symbol that is not
11460                  referenced within the same object.  */
11461               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11462               break;
11463
11464             case DT_MIPS_GOTSYM:
11465               if (htab->global_gotsym)
11466                 {
11467                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
11468                   break;
11469                 }
11470               /* In case if we don't have global got symbols we default
11471                  to setting DT_MIPS_GOTSYM to the same value as
11472                  DT_MIPS_SYMTABNO, so we just fall through.  */
11473
11474             case DT_MIPS_SYMTABNO:
11475               name = ".dynsym";
11476               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11477               s = bfd_get_linker_section (dynobj, name);
11478
11479               if (s != NULL)
11480                 dyn.d_un.d_val = s->size / elemsize;
11481               else
11482                 dyn.d_un.d_val = 0;
11483               break;
11484
11485             case DT_MIPS_HIPAGENO:
11486               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11487               break;
11488
11489             case DT_MIPS_RLD_MAP:
11490               {
11491                 struct elf_link_hash_entry *h;
11492                 h = mips_elf_hash_table (info)->rld_symbol;
11493                 if (!h)
11494                   {
11495                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11496                     swap_out_p = FALSE;
11497                     break;
11498                   }
11499                 s = h->root.u.def.section;
11500
11501                 /* The MIPS_RLD_MAP tag stores the absolute address of the
11502                    debug pointer.  */
11503                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11504                                   + h->root.u.def.value);
11505               }
11506               break;
11507
11508             case DT_MIPS_RLD_MAP_REL:
11509               {
11510                 struct elf_link_hash_entry *h;
11511                 bfd_vma dt_addr, rld_addr;
11512                 h = mips_elf_hash_table (info)->rld_symbol;
11513                 if (!h)
11514                   {
11515                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11516                     swap_out_p = FALSE;
11517                     break;
11518                   }
11519                 s = h->root.u.def.section;
11520
11521                 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11522                    pointer, relative to the address of the tag.  */
11523                 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11524                            + (b - sdyn->contents));
11525                 rld_addr = (s->output_section->vma + s->output_offset
11526                             + h->root.u.def.value);
11527                 dyn.d_un.d_ptr = rld_addr - dt_addr;
11528               }
11529               break;
11530
11531             case DT_MIPS_OPTIONS:
11532               s = (bfd_get_section_by_name
11533                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11534               dyn.d_un.d_ptr = s->vma;
11535               break;
11536
11537             case DT_RELASZ:
11538               BFD_ASSERT (htab->is_vxworks);
11539               /* The count does not include the JUMP_SLOT relocations.  */
11540               if (htab->srelplt)
11541                 dyn.d_un.d_val -= htab->srelplt->size;
11542               break;
11543
11544             case DT_PLTREL:
11545               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11546               if (htab->is_vxworks)
11547                 dyn.d_un.d_val = DT_RELA;
11548               else
11549                 dyn.d_un.d_val = DT_REL;
11550               break;
11551
11552             case DT_PLTRELSZ:
11553               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11554               dyn.d_un.d_val = htab->srelplt->size;
11555               break;
11556
11557             case DT_JMPREL:
11558               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11559               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11560                                 + htab->srelplt->output_offset);
11561               break;
11562
11563             case DT_TEXTREL:
11564               /* If we didn't need any text relocations after all, delete
11565                  the dynamic tag.  */
11566               if (!(info->flags & DF_TEXTREL))
11567                 {
11568                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11569                   swap_out_p = FALSE;
11570                 }
11571               break;
11572
11573             case DT_FLAGS:
11574               /* If we didn't need any text relocations after all, clear
11575                  DF_TEXTREL from DT_FLAGS.  */
11576               if (!(info->flags & DF_TEXTREL))
11577                 dyn.d_un.d_val &= ~DF_TEXTREL;
11578               else
11579                 swap_out_p = FALSE;
11580               break;
11581
11582             default:
11583               swap_out_p = FALSE;
11584               if (htab->is_vxworks
11585                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11586                 swap_out_p = TRUE;
11587               break;
11588             }
11589
11590           if (swap_out_p || dyn_skipped)
11591             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11592               (dynobj, &dyn, b - dyn_skipped);
11593
11594           if (dyn_to_skip)
11595             {
11596               dyn_skipped += dyn_to_skip;
11597               dyn_to_skip = 0;
11598             }
11599         }
11600
11601       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11602       if (dyn_skipped > 0)
11603         memset (b - dyn_skipped, 0, dyn_skipped);
11604     }
11605
11606   if (sgot != NULL && sgot->size > 0
11607       && !bfd_is_abs_section (sgot->output_section))
11608     {
11609       if (htab->is_vxworks)
11610         {
11611           /* The first entry of the global offset table points to the
11612              ".dynamic" section.  The second is initialized by the
11613              loader and contains the shared library identifier.
11614              The third is also initialized by the loader and points
11615              to the lazy resolution stub.  */
11616           MIPS_ELF_PUT_WORD (output_bfd,
11617                              sdyn->output_offset + sdyn->output_section->vma,
11618                              sgot->contents);
11619           MIPS_ELF_PUT_WORD (output_bfd, 0,
11620                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11621           MIPS_ELF_PUT_WORD (output_bfd, 0,
11622                              sgot->contents
11623                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11624         }
11625       else
11626         {
11627           /* The first entry of the global offset table will be filled at
11628              runtime. The second entry will be used by some runtime loaders.
11629              This isn't the case of IRIX rld.  */
11630           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11631           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11632                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11633         }
11634
11635       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11636          = MIPS_ELF_GOT_SIZE (output_bfd);
11637     }
11638
11639   /* Generate dynamic relocations for the non-primary gots.  */
11640   if (gg != NULL && gg->next)
11641     {
11642       Elf_Internal_Rela rel[3];
11643       bfd_vma addend = 0;
11644
11645       memset (rel, 0, sizeof (rel));
11646       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11647
11648       for (g = gg->next; g->next != gg; g = g->next)
11649         {
11650           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11651             + g->next->tls_gotno;
11652
11653           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11654                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11655           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11656                              sgot->contents
11657                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11658
11659           if (! bfd_link_pic (info))
11660             continue;
11661
11662           for (; got_index < g->local_gotno; got_index++)
11663             {
11664               if (got_index >= g->assigned_low_gotno
11665                   && got_index <= g->assigned_high_gotno)
11666                 continue;
11667
11668               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11669                 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11670               if (!(mips_elf_create_dynamic_relocation
11671                     (output_bfd, info, rel, NULL,
11672                      bfd_abs_section_ptr,
11673                      0, &addend, sgot)))
11674                 return FALSE;
11675               BFD_ASSERT (addend == 0);
11676             }
11677         }
11678     }
11679
11680   /* The generation of dynamic relocations for the non-primary gots
11681      adds more dynamic relocations.  We cannot count them until
11682      here.  */
11683
11684   if (elf_hash_table (info)->dynamic_sections_created)
11685     {
11686       bfd_byte *b;
11687       bfd_boolean swap_out_p;
11688
11689       BFD_ASSERT (sdyn != NULL);
11690
11691       for (b = sdyn->contents;
11692            b < sdyn->contents + sdyn->size;
11693            b += MIPS_ELF_DYN_SIZE (dynobj))
11694         {
11695           Elf_Internal_Dyn dyn;
11696           asection *s;
11697
11698           /* Read in the current dynamic entry.  */
11699           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11700
11701           /* Assume that we're going to modify it and write it out.  */
11702           swap_out_p = TRUE;
11703
11704           switch (dyn.d_tag)
11705             {
11706             case DT_RELSZ:
11707               /* Reduce DT_RELSZ to account for any relocations we
11708                  decided not to make.  This is for the n64 irix rld,
11709                  which doesn't seem to apply any relocations if there
11710                  are trailing null entries.  */
11711               s = mips_elf_rel_dyn_section (info, FALSE);
11712               dyn.d_un.d_val = (s->reloc_count
11713                                 * (ABI_64_P (output_bfd)
11714                                    ? sizeof (Elf64_Mips_External_Rel)
11715                                    : sizeof (Elf32_External_Rel)));
11716               /* Adjust the section size too.  Tools like the prelinker
11717                  can reasonably expect the values to the same.  */
11718               elf_section_data (s->output_section)->this_hdr.sh_size
11719                 = dyn.d_un.d_val;
11720               break;
11721
11722             default:
11723               swap_out_p = FALSE;
11724               break;
11725             }
11726
11727           if (swap_out_p)
11728             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11729               (dynobj, &dyn, b);
11730         }
11731     }
11732
11733   {
11734     asection *s;
11735     Elf32_compact_rel cpt;
11736
11737     if (SGI_COMPAT (output_bfd))
11738       {
11739         /* Write .compact_rel section out.  */
11740         s = bfd_get_linker_section (dynobj, ".compact_rel");
11741         if (s != NULL)
11742           {
11743             cpt.id1 = 1;
11744             cpt.num = s->reloc_count;
11745             cpt.id2 = 2;
11746             cpt.offset = (s->output_section->filepos
11747                           + sizeof (Elf32_External_compact_rel));
11748             cpt.reserved0 = 0;
11749             cpt.reserved1 = 0;
11750             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11751                                             ((Elf32_External_compact_rel *)
11752                                              s->contents));
11753
11754             /* Clean up a dummy stub function entry in .text.  */
11755             if (htab->sstubs != NULL)
11756               {
11757                 file_ptr dummy_offset;
11758
11759                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11760                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11761                 memset (htab->sstubs->contents + dummy_offset, 0,
11762                         htab->function_stub_size);
11763               }
11764           }
11765       }
11766
11767     /* The psABI says that the dynamic relocations must be sorted in
11768        increasing order of r_symndx.  The VxWorks EABI doesn't require
11769        this, and because the code below handles REL rather than RELA
11770        relocations, using it for VxWorks would be outright harmful.  */
11771     if (!htab->is_vxworks)
11772       {
11773         s = mips_elf_rel_dyn_section (info, FALSE);
11774         if (s != NULL
11775             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11776           {
11777             reldyn_sorting_bfd = output_bfd;
11778
11779             if (ABI_64_P (output_bfd))
11780               qsort ((Elf64_External_Rel *) s->contents + 1,
11781                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11782                      sort_dynamic_relocs_64);
11783             else
11784               qsort ((Elf32_External_Rel *) s->contents + 1,
11785                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
11786                      sort_dynamic_relocs);
11787           }
11788       }
11789   }
11790
11791   if (htab->splt && htab->splt->size > 0)
11792     {
11793       if (htab->is_vxworks)
11794         {
11795           if (bfd_link_pic (info))
11796             mips_vxworks_finish_shared_plt (output_bfd, info);
11797           else
11798             mips_vxworks_finish_exec_plt (output_bfd, info);
11799         }
11800       else
11801         {
11802           BFD_ASSERT (!bfd_link_pic (info));
11803           if (!mips_finish_exec_plt (output_bfd, info))
11804             return FALSE;
11805         }
11806     }
11807   return TRUE;
11808 }
11809
11810
11811 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11812
11813 static void
11814 mips_set_isa_flags (bfd *abfd)
11815 {
11816   flagword val;
11817
11818   switch (bfd_get_mach (abfd))
11819     {
11820     default:
11821     case bfd_mach_mips3000:
11822       val = E_MIPS_ARCH_1;
11823       break;
11824
11825     case bfd_mach_mips3900:
11826       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11827       break;
11828
11829     case bfd_mach_mips6000:
11830       val = E_MIPS_ARCH_2;
11831       break;
11832
11833     case bfd_mach_mips4000:
11834     case bfd_mach_mips4300:
11835     case bfd_mach_mips4400:
11836     case bfd_mach_mips4600:
11837       val = E_MIPS_ARCH_3;
11838       break;
11839
11840     case bfd_mach_mips4010:
11841       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11842       break;
11843
11844     case bfd_mach_mips4100:
11845       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11846       break;
11847
11848     case bfd_mach_mips4111:
11849       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11850       break;
11851
11852     case bfd_mach_mips4120:
11853       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11854       break;
11855
11856     case bfd_mach_mips4650:
11857       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11858       break;
11859
11860     case bfd_mach_mips5400:
11861       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11862       break;
11863
11864     case bfd_mach_mips5500:
11865       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11866       break;
11867
11868     case bfd_mach_mips5900:
11869       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11870       break;
11871
11872     case bfd_mach_mips9000:
11873       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11874       break;
11875
11876     case bfd_mach_mips5000:
11877     case bfd_mach_mips7000:
11878     case bfd_mach_mips8000:
11879     case bfd_mach_mips10000:
11880     case bfd_mach_mips12000:
11881     case bfd_mach_mips14000:
11882     case bfd_mach_mips16000:
11883       val = E_MIPS_ARCH_4;
11884       break;
11885
11886     case bfd_mach_mips5:
11887       val = E_MIPS_ARCH_5;
11888       break;
11889
11890     case bfd_mach_mips_loongson_2e:
11891       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11892       break;
11893
11894     case bfd_mach_mips_loongson_2f:
11895       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11896       break;
11897
11898     case bfd_mach_mips_sb1:
11899       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11900       break;
11901
11902     case bfd_mach_mips_loongson_3a:
11903       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11904       break;
11905
11906     case bfd_mach_mips_octeon:
11907     case bfd_mach_mips_octeonp:
11908       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11909       break;
11910
11911     case bfd_mach_mips_octeon3:
11912       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11913       break;
11914
11915     case bfd_mach_mips_xlr:
11916       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11917       break;
11918
11919     case bfd_mach_mips_octeon2:
11920       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11921       break;
11922
11923     case bfd_mach_mipsisa32:
11924       val = E_MIPS_ARCH_32;
11925       break;
11926
11927     case bfd_mach_mipsisa64:
11928       val = E_MIPS_ARCH_64;
11929       break;
11930
11931     case bfd_mach_mipsisa32r2:
11932     case bfd_mach_mipsisa32r3:
11933     case bfd_mach_mipsisa32r5:
11934       val = E_MIPS_ARCH_32R2;
11935       break;
11936
11937     case bfd_mach_mipsisa64r2:
11938     case bfd_mach_mipsisa64r3:
11939     case bfd_mach_mipsisa64r5:
11940       val = E_MIPS_ARCH_64R2;
11941       break;
11942
11943     case bfd_mach_mipsisa32r6:
11944       val = E_MIPS_ARCH_32R6;
11945       break;
11946
11947     case bfd_mach_mipsisa64r6:
11948       val = E_MIPS_ARCH_64R6;
11949       break;
11950     }
11951   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11952   elf_elfheader (abfd)->e_flags |= val;
11953
11954 }
11955
11956
11957 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11958    Don't do so for code sections.  We want to keep ordering of HI16/LO16
11959    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
11960    relocs to be sorted.  */
11961
11962 bfd_boolean
11963 _bfd_mips_elf_sort_relocs_p (asection *sec)
11964 {
11965   return (sec->flags & SEC_CODE) == 0;
11966 }
11967
11968
11969 /* The final processing done just before writing out a MIPS ELF object
11970    file.  This gets the MIPS architecture right based on the machine
11971    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11972
11973 void
11974 _bfd_mips_elf_final_write_processing (bfd *abfd,
11975                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11976 {
11977   unsigned int i;
11978   Elf_Internal_Shdr **hdrpp;
11979   const char *name;
11980   asection *sec;
11981
11982   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11983      is nonzero.  This is for compatibility with old objects, which used
11984      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11985   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11986     mips_set_isa_flags (abfd);
11987
11988   /* Set the sh_info field for .gptab sections and other appropriate
11989      info for each special section.  */
11990   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11991        i < elf_numsections (abfd);
11992        i++, hdrpp++)
11993     {
11994       switch ((*hdrpp)->sh_type)
11995         {
11996         case SHT_MIPS_MSYM:
11997         case SHT_MIPS_LIBLIST:
11998           sec = bfd_get_section_by_name (abfd, ".dynstr");
11999           if (sec != NULL)
12000             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12001           break;
12002
12003         case SHT_MIPS_GPTAB:
12004           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12005           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12006           BFD_ASSERT (name != NULL
12007                       && CONST_STRNEQ (name, ".gptab."));
12008           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12009           BFD_ASSERT (sec != NULL);
12010           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12011           break;
12012
12013         case SHT_MIPS_CONTENT:
12014           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12015           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12016           BFD_ASSERT (name != NULL
12017                       && CONST_STRNEQ (name, ".MIPS.content"));
12018           sec = bfd_get_section_by_name (abfd,
12019                                          name + sizeof ".MIPS.content" - 1);
12020           BFD_ASSERT (sec != NULL);
12021           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12022           break;
12023
12024         case SHT_MIPS_SYMBOL_LIB:
12025           sec = bfd_get_section_by_name (abfd, ".dynsym");
12026           if (sec != NULL)
12027             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12028           sec = bfd_get_section_by_name (abfd, ".liblist");
12029           if (sec != NULL)
12030             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12031           break;
12032
12033         case SHT_MIPS_EVENTS:
12034           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12035           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12036           BFD_ASSERT (name != NULL);
12037           if (CONST_STRNEQ (name, ".MIPS.events"))
12038             sec = bfd_get_section_by_name (abfd,
12039                                            name + sizeof ".MIPS.events" - 1);
12040           else
12041             {
12042               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12043               sec = bfd_get_section_by_name (abfd,
12044                                              (name
12045                                               + sizeof ".MIPS.post_rel" - 1));
12046             }
12047           BFD_ASSERT (sec != NULL);
12048           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12049           break;
12050
12051         }
12052     }
12053 }
12054 \f
12055 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12056    segments.  */
12057
12058 int
12059 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12060                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
12061 {
12062   asection *s;
12063   int ret = 0;
12064
12065   /* See if we need a PT_MIPS_REGINFO segment.  */
12066   s = bfd_get_section_by_name (abfd, ".reginfo");
12067   if (s && (s->flags & SEC_LOAD))
12068     ++ret;
12069
12070   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12071   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12072     ++ret;
12073
12074   /* See if we need a PT_MIPS_OPTIONS segment.  */
12075   if (IRIX_COMPAT (abfd) == ict_irix6
12076       && bfd_get_section_by_name (abfd,
12077                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12078     ++ret;
12079
12080   /* See if we need a PT_MIPS_RTPROC segment.  */
12081   if (IRIX_COMPAT (abfd) == ict_irix5
12082       && bfd_get_section_by_name (abfd, ".dynamic")
12083       && bfd_get_section_by_name (abfd, ".mdebug"))
12084     ++ret;
12085
12086   /* Allocate a PT_NULL header in dynamic objects.  See
12087      _bfd_mips_elf_modify_segment_map for details.  */
12088   if (!SGI_COMPAT (abfd)
12089       && bfd_get_section_by_name (abfd, ".dynamic"))
12090     ++ret;
12091
12092   return ret;
12093 }
12094
12095 /* Modify the segment map for an IRIX5 executable.  */
12096
12097 bfd_boolean
12098 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12099                                   struct bfd_link_info *info)
12100 {
12101   asection *s;
12102   struct elf_segment_map *m, **pm;
12103   bfd_size_type amt;
12104
12105   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12106      segment.  */
12107   s = bfd_get_section_by_name (abfd, ".reginfo");
12108   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12109     {
12110       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12111         if (m->p_type == PT_MIPS_REGINFO)
12112           break;
12113       if (m == NULL)
12114         {
12115           amt = sizeof *m;
12116           m = bfd_zalloc (abfd, amt);
12117           if (m == NULL)
12118             return FALSE;
12119
12120           m->p_type = PT_MIPS_REGINFO;
12121           m->count = 1;
12122           m->sections[0] = s;
12123
12124           /* We want to put it after the PHDR and INTERP segments.  */
12125           pm = &elf_seg_map (abfd);
12126           while (*pm != NULL
12127                  && ((*pm)->p_type == PT_PHDR
12128                      || (*pm)->p_type == PT_INTERP))
12129             pm = &(*pm)->next;
12130
12131           m->next = *pm;
12132           *pm = m;
12133         }
12134     }
12135
12136   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12137      segment.  */
12138   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12139   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12140     {
12141       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12142         if (m->p_type == PT_MIPS_ABIFLAGS)
12143           break;
12144       if (m == NULL)
12145         {
12146           amt = sizeof *m;
12147           m = bfd_zalloc (abfd, amt);
12148           if (m == NULL)
12149             return FALSE;
12150
12151           m->p_type = PT_MIPS_ABIFLAGS;
12152           m->count = 1;
12153           m->sections[0] = s;
12154
12155           /* We want to put it after the PHDR and INTERP segments.  */
12156           pm = &elf_seg_map (abfd);
12157           while (*pm != NULL
12158                  && ((*pm)->p_type == PT_PHDR
12159                      || (*pm)->p_type == PT_INTERP))
12160             pm = &(*pm)->next;
12161
12162           m->next = *pm;
12163           *pm = m;
12164         }
12165     }
12166
12167   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12168      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12169      PT_MIPS_OPTIONS segment immediately following the program header
12170      table.  */
12171   if (NEWABI_P (abfd)
12172       /* On non-IRIX6 new abi, we'll have already created a segment
12173          for this section, so don't create another.  I'm not sure this
12174          is not also the case for IRIX 6, but I can't test it right
12175          now.  */
12176       && IRIX_COMPAT (abfd) == ict_irix6)
12177     {
12178       for (s = abfd->sections; s; s = s->next)
12179         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12180           break;
12181
12182       if (s)
12183         {
12184           struct elf_segment_map *options_segment;
12185
12186           pm = &elf_seg_map (abfd);
12187           while (*pm != NULL
12188                  && ((*pm)->p_type == PT_PHDR
12189                      || (*pm)->p_type == PT_INTERP))
12190             pm = &(*pm)->next;
12191
12192           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12193             {
12194               amt = sizeof (struct elf_segment_map);
12195               options_segment = bfd_zalloc (abfd, amt);
12196               options_segment->next = *pm;
12197               options_segment->p_type = PT_MIPS_OPTIONS;
12198               options_segment->p_flags = PF_R;
12199               options_segment->p_flags_valid = TRUE;
12200               options_segment->count = 1;
12201               options_segment->sections[0] = s;
12202               *pm = options_segment;
12203             }
12204         }
12205     }
12206   else
12207     {
12208       if (IRIX_COMPAT (abfd) == ict_irix5)
12209         {
12210           /* If there are .dynamic and .mdebug sections, we make a room
12211              for the RTPROC header.  FIXME: Rewrite without section names.  */
12212           if (bfd_get_section_by_name (abfd, ".interp") == NULL
12213               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12214               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12215             {
12216               for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12217                 if (m->p_type == PT_MIPS_RTPROC)
12218                   break;
12219               if (m == NULL)
12220                 {
12221                   amt = sizeof *m;
12222                   m = bfd_zalloc (abfd, amt);
12223                   if (m == NULL)
12224                     return FALSE;
12225
12226                   m->p_type = PT_MIPS_RTPROC;
12227
12228                   s = bfd_get_section_by_name (abfd, ".rtproc");
12229                   if (s == NULL)
12230                     {
12231                       m->count = 0;
12232                       m->p_flags = 0;
12233                       m->p_flags_valid = 1;
12234                     }
12235                   else
12236                     {
12237                       m->count = 1;
12238                       m->sections[0] = s;
12239                     }
12240
12241                   /* We want to put it after the DYNAMIC segment.  */
12242                   pm = &elf_seg_map (abfd);
12243                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12244                     pm = &(*pm)->next;
12245                   if (*pm != NULL)
12246                     pm = &(*pm)->next;
12247
12248                   m->next = *pm;
12249                   *pm = m;
12250                 }
12251             }
12252         }
12253       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12254          .dynstr, .dynsym, and .hash sections, and everything in
12255          between.  */
12256       for (pm = &elf_seg_map (abfd); *pm != NULL;
12257            pm = &(*pm)->next)
12258         if ((*pm)->p_type == PT_DYNAMIC)
12259           break;
12260       m = *pm;
12261       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12262          glibc's dynamic linker has traditionally derived the number of
12263          tags from the p_filesz field, and sometimes allocates stack
12264          arrays of that size.  An overly-big PT_DYNAMIC segment can
12265          be actively harmful in such cases.  Making PT_DYNAMIC contain
12266          other sections can also make life hard for the prelinker,
12267          which might move one of the other sections to a different
12268          PT_LOAD segment.  */
12269       if (SGI_COMPAT (abfd)
12270           && m != NULL
12271           && m->count == 1
12272           && strcmp (m->sections[0]->name, ".dynamic") == 0)
12273         {
12274           static const char *sec_names[] =
12275           {
12276             ".dynamic", ".dynstr", ".dynsym", ".hash"
12277           };
12278           bfd_vma low, high;
12279           unsigned int i, c;
12280           struct elf_segment_map *n;
12281
12282           low = ~(bfd_vma) 0;
12283           high = 0;
12284           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12285             {
12286               s = bfd_get_section_by_name (abfd, sec_names[i]);
12287               if (s != NULL && (s->flags & SEC_LOAD) != 0)
12288                 {
12289                   bfd_size_type sz;
12290
12291                   if (low > s->vma)
12292                     low = s->vma;
12293                   sz = s->size;
12294                   if (high < s->vma + sz)
12295                     high = s->vma + sz;
12296                 }
12297             }
12298
12299           c = 0;
12300           for (s = abfd->sections; s != NULL; s = s->next)
12301             if ((s->flags & SEC_LOAD) != 0
12302                 && s->vma >= low
12303                 && s->vma + s->size <= high)
12304               ++c;
12305
12306           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12307           n = bfd_zalloc (abfd, amt);
12308           if (n == NULL)
12309             return FALSE;
12310           *n = *m;
12311           n->count = c;
12312
12313           i = 0;
12314           for (s = abfd->sections; s != NULL; s = s->next)
12315             {
12316               if ((s->flags & SEC_LOAD) != 0
12317                   && s->vma >= low
12318                   && s->vma + s->size <= high)
12319                 {
12320                   n->sections[i] = s;
12321                   ++i;
12322                 }
12323             }
12324
12325           *pm = n;
12326         }
12327     }
12328
12329   /* Allocate a spare program header in dynamic objects so that tools
12330      like the prelinker can add an extra PT_LOAD entry.
12331
12332      If the prelinker needs to make room for a new PT_LOAD entry, its
12333      standard procedure is to move the first (read-only) sections into
12334      the new (writable) segment.  However, the MIPS ABI requires
12335      .dynamic to be in a read-only segment, and the section will often
12336      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12337
12338      Although the prelinker could in principle move .dynamic to a
12339      writable segment, it seems better to allocate a spare program
12340      header instead, and avoid the need to move any sections.
12341      There is a long tradition of allocating spare dynamic tags,
12342      so allocating a spare program header seems like a natural
12343      extension.
12344
12345      If INFO is NULL, we may be copying an already prelinked binary
12346      with objcopy or strip, so do not add this header.  */
12347   if (info != NULL
12348       && !SGI_COMPAT (abfd)
12349       && bfd_get_section_by_name (abfd, ".dynamic"))
12350     {
12351       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12352         if ((*pm)->p_type == PT_NULL)
12353           break;
12354       if (*pm == NULL)
12355         {
12356           m = bfd_zalloc (abfd, sizeof (*m));
12357           if (m == NULL)
12358             return FALSE;
12359
12360           m->p_type = PT_NULL;
12361           *pm = m;
12362         }
12363     }
12364
12365   return TRUE;
12366 }
12367 \f
12368 /* Return the section that should be marked against GC for a given
12369    relocation.  */
12370
12371 asection *
12372 _bfd_mips_elf_gc_mark_hook (asection *sec,
12373                             struct bfd_link_info *info,
12374                             Elf_Internal_Rela *rel,
12375                             struct elf_link_hash_entry *h,
12376                             Elf_Internal_Sym *sym)
12377 {
12378   /* ??? Do mips16 stub sections need to be handled special?  */
12379
12380   if (h != NULL)
12381     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12382       {
12383       case R_MIPS_GNU_VTINHERIT:
12384       case R_MIPS_GNU_VTENTRY:
12385         return NULL;
12386       }
12387
12388   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12389 }
12390
12391 /* Update the got entry reference counts for the section being removed.  */
12392
12393 bfd_boolean
12394 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12395                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
12396                              asection *sec ATTRIBUTE_UNUSED,
12397                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12398 {
12399 #if 0
12400   Elf_Internal_Shdr *symtab_hdr;
12401   struct elf_link_hash_entry **sym_hashes;
12402   bfd_signed_vma *local_got_refcounts;
12403   const Elf_Internal_Rela *rel, *relend;
12404   unsigned long r_symndx;
12405   struct elf_link_hash_entry *h;
12406
12407   if (bfd_link_relocatable (info))
12408     return TRUE;
12409
12410   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12411   sym_hashes = elf_sym_hashes (abfd);
12412   local_got_refcounts = elf_local_got_refcounts (abfd);
12413
12414   relend = relocs + sec->reloc_count;
12415   for (rel = relocs; rel < relend; rel++)
12416     switch (ELF_R_TYPE (abfd, rel->r_info))
12417       {
12418       case R_MIPS16_GOT16:
12419       case R_MIPS16_CALL16:
12420       case R_MIPS_GOT16:
12421       case R_MIPS_CALL16:
12422       case R_MIPS_CALL_HI16:
12423       case R_MIPS_CALL_LO16:
12424       case R_MIPS_GOT_HI16:
12425       case R_MIPS_GOT_LO16:
12426       case R_MIPS_GOT_DISP:
12427       case R_MIPS_GOT_PAGE:
12428       case R_MIPS_GOT_OFST:
12429       case R_MICROMIPS_GOT16:
12430       case R_MICROMIPS_CALL16:
12431       case R_MICROMIPS_CALL_HI16:
12432       case R_MICROMIPS_CALL_LO16:
12433       case R_MICROMIPS_GOT_HI16:
12434       case R_MICROMIPS_GOT_LO16:
12435       case R_MICROMIPS_GOT_DISP:
12436       case R_MICROMIPS_GOT_PAGE:
12437       case R_MICROMIPS_GOT_OFST:
12438         /* ??? It would seem that the existing MIPS code does no sort
12439            of reference counting or whatnot on its GOT and PLT entries,
12440            so it is not possible to garbage collect them at this time.  */
12441         break;
12442
12443       default:
12444         break;
12445       }
12446 #endif
12447
12448   return TRUE;
12449 }
12450
12451 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12452
12453 bfd_boolean
12454 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12455                                       elf_gc_mark_hook_fn gc_mark_hook)
12456 {
12457   bfd *sub;
12458
12459   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12460
12461   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12462     {
12463       asection *o;
12464
12465       if (! is_mips_elf (sub))
12466         continue;
12467
12468       for (o = sub->sections; o != NULL; o = o->next)
12469         if (!o->gc_mark
12470             && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12471                  (bfd_get_section_name (sub, o)))
12472           {
12473             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12474               return FALSE;
12475           }
12476     }
12477
12478   return TRUE;
12479 }
12480 \f
12481 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12482    hiding the old indirect symbol.  Process additional relocation
12483    information.  Also called for weakdefs, in which case we just let
12484    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12485
12486 void
12487 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12488                                     struct elf_link_hash_entry *dir,
12489                                     struct elf_link_hash_entry *ind)
12490 {
12491   struct mips_elf_link_hash_entry *dirmips, *indmips;
12492
12493   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12494
12495   dirmips = (struct mips_elf_link_hash_entry *) dir;
12496   indmips = (struct mips_elf_link_hash_entry *) ind;
12497   /* Any absolute non-dynamic relocations against an indirect or weak
12498      definition will be against the target symbol.  */
12499   if (indmips->has_static_relocs)
12500     dirmips->has_static_relocs = TRUE;
12501
12502   if (ind->root.type != bfd_link_hash_indirect)
12503     return;
12504
12505   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12506   if (indmips->readonly_reloc)
12507     dirmips->readonly_reloc = TRUE;
12508   if (indmips->no_fn_stub)
12509     dirmips->no_fn_stub = TRUE;
12510   if (indmips->fn_stub)
12511     {
12512       dirmips->fn_stub = indmips->fn_stub;
12513       indmips->fn_stub = NULL;
12514     }
12515   if (indmips->need_fn_stub)
12516     {
12517       dirmips->need_fn_stub = TRUE;
12518       indmips->need_fn_stub = FALSE;
12519     }
12520   if (indmips->call_stub)
12521     {
12522       dirmips->call_stub = indmips->call_stub;
12523       indmips->call_stub = NULL;
12524     }
12525   if (indmips->call_fp_stub)
12526     {
12527       dirmips->call_fp_stub = indmips->call_fp_stub;
12528       indmips->call_fp_stub = NULL;
12529     }
12530   if (indmips->global_got_area < dirmips->global_got_area)
12531     dirmips->global_got_area = indmips->global_got_area;
12532   if (indmips->global_got_area < GGA_NONE)
12533     indmips->global_got_area = GGA_NONE;
12534   if (indmips->has_nonpic_branches)
12535     dirmips->has_nonpic_branches = TRUE;
12536 }
12537 \f
12538 #define PDR_SIZE 32
12539
12540 bfd_boolean
12541 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12542                             struct bfd_link_info *info)
12543 {
12544   asection *o;
12545   bfd_boolean ret = FALSE;
12546   unsigned char *tdata;
12547   size_t i, skip;
12548
12549   o = bfd_get_section_by_name (abfd, ".pdr");
12550   if (! o)
12551     return FALSE;
12552   if (o->size == 0)
12553     return FALSE;
12554   if (o->size % PDR_SIZE != 0)
12555     return FALSE;
12556   if (o->output_section != NULL
12557       && bfd_is_abs_section (o->output_section))
12558     return FALSE;
12559
12560   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12561   if (! tdata)
12562     return FALSE;
12563
12564   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12565                                             info->keep_memory);
12566   if (!cookie->rels)
12567     {
12568       free (tdata);
12569       return FALSE;
12570     }
12571
12572   cookie->rel = cookie->rels;
12573   cookie->relend = cookie->rels + o->reloc_count;
12574
12575   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12576     {
12577       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12578         {
12579           tdata[i] = 1;
12580           skip ++;
12581         }
12582     }
12583
12584   if (skip != 0)
12585     {
12586       mips_elf_section_data (o)->u.tdata = tdata;
12587       if (o->rawsize == 0)
12588         o->rawsize = o->size;
12589       o->size -= skip * PDR_SIZE;
12590       ret = TRUE;
12591     }
12592   else
12593     free (tdata);
12594
12595   if (! info->keep_memory)
12596     free (cookie->rels);
12597
12598   return ret;
12599 }
12600
12601 bfd_boolean
12602 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12603 {
12604   if (strcmp (sec->name, ".pdr") == 0)
12605     return TRUE;
12606   return FALSE;
12607 }
12608
12609 bfd_boolean
12610 _bfd_mips_elf_write_section (bfd *output_bfd,
12611                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12612                              asection *sec, bfd_byte *contents)
12613 {
12614   bfd_byte *to, *from, *end;
12615   int i;
12616
12617   if (strcmp (sec->name, ".pdr") != 0)
12618     return FALSE;
12619
12620   if (mips_elf_section_data (sec)->u.tdata == NULL)
12621     return FALSE;
12622
12623   to = contents;
12624   end = contents + sec->size;
12625   for (from = contents, i = 0;
12626        from < end;
12627        from += PDR_SIZE, i++)
12628     {
12629       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12630         continue;
12631       if (to != from)
12632         memcpy (to, from, PDR_SIZE);
12633       to += PDR_SIZE;
12634     }
12635   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12636                             sec->output_offset, sec->size);
12637   return TRUE;
12638 }
12639 \f
12640 /* microMIPS code retains local labels for linker relaxation.  Omit them
12641    from output by default for clarity.  */
12642
12643 bfd_boolean
12644 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12645 {
12646   return _bfd_elf_is_local_label_name (abfd, sym->name);
12647 }
12648
12649 /* MIPS ELF uses a special find_nearest_line routine in order the
12650    handle the ECOFF debugging information.  */
12651
12652 struct mips_elf_find_line
12653 {
12654   struct ecoff_debug_info d;
12655   struct ecoff_find_line i;
12656 };
12657
12658 bfd_boolean
12659 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12660                                  asection *section, bfd_vma offset,
12661                                  const char **filename_ptr,
12662                                  const char **functionname_ptr,
12663                                  unsigned int *line_ptr,
12664                                  unsigned int *discriminator_ptr)
12665 {
12666   asection *msec;
12667
12668   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12669                                      filename_ptr, functionname_ptr,
12670                                      line_ptr, discriminator_ptr,
12671                                      dwarf_debug_sections,
12672                                      ABI_64_P (abfd) ? 8 : 0,
12673                                      &elf_tdata (abfd)->dwarf2_find_line_info))
12674     return TRUE;
12675
12676   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12677                                      filename_ptr, functionname_ptr,
12678                                      line_ptr))
12679     return TRUE;
12680
12681   msec = bfd_get_section_by_name (abfd, ".mdebug");
12682   if (msec != NULL)
12683     {
12684       flagword origflags;
12685       struct mips_elf_find_line *fi;
12686       const struct ecoff_debug_swap * const swap =
12687         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12688
12689       /* If we are called during a link, mips_elf_final_link may have
12690          cleared the SEC_HAS_CONTENTS field.  We force it back on here
12691          if appropriate (which it normally will be).  */
12692       origflags = msec->flags;
12693       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12694         msec->flags |= SEC_HAS_CONTENTS;
12695
12696       fi = mips_elf_tdata (abfd)->find_line_info;
12697       if (fi == NULL)
12698         {
12699           bfd_size_type external_fdr_size;
12700           char *fraw_src;
12701           char *fraw_end;
12702           struct fdr *fdr_ptr;
12703           bfd_size_type amt = sizeof (struct mips_elf_find_line);
12704
12705           fi = bfd_zalloc (abfd, amt);
12706           if (fi == NULL)
12707             {
12708               msec->flags = origflags;
12709               return FALSE;
12710             }
12711
12712           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12713             {
12714               msec->flags = origflags;
12715               return FALSE;
12716             }
12717
12718           /* Swap in the FDR information.  */
12719           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12720           fi->d.fdr = bfd_alloc (abfd, amt);
12721           if (fi->d.fdr == NULL)
12722             {
12723               msec->flags = origflags;
12724               return FALSE;
12725             }
12726           external_fdr_size = swap->external_fdr_size;
12727           fdr_ptr = fi->d.fdr;
12728           fraw_src = (char *) fi->d.external_fdr;
12729           fraw_end = (fraw_src
12730                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
12731           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12732             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12733
12734           mips_elf_tdata (abfd)->find_line_info = fi;
12735
12736           /* Note that we don't bother to ever free this information.
12737              find_nearest_line is either called all the time, as in
12738              objdump -l, so the information should be saved, or it is
12739              rarely called, as in ld error messages, so the memory
12740              wasted is unimportant.  Still, it would probably be a
12741              good idea for free_cached_info to throw it away.  */
12742         }
12743
12744       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12745                                   &fi->i, filename_ptr, functionname_ptr,
12746                                   line_ptr))
12747         {
12748           msec->flags = origflags;
12749           return TRUE;
12750         }
12751
12752       msec->flags = origflags;
12753     }
12754
12755   /* Fall back on the generic ELF find_nearest_line routine.  */
12756
12757   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12758                                      filename_ptr, functionname_ptr,
12759                                      line_ptr, discriminator_ptr);
12760 }
12761
12762 bfd_boolean
12763 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12764                                  const char **filename_ptr,
12765                                  const char **functionname_ptr,
12766                                  unsigned int *line_ptr)
12767 {
12768   bfd_boolean found;
12769   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12770                                          functionname_ptr, line_ptr,
12771                                          & elf_tdata (abfd)->dwarf2_find_line_info);
12772   return found;
12773 }
12774
12775 \f
12776 /* When are writing out the .options or .MIPS.options section,
12777    remember the bytes we are writing out, so that we can install the
12778    GP value in the section_processing routine.  */
12779
12780 bfd_boolean
12781 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12782                                     const void *location,
12783                                     file_ptr offset, bfd_size_type count)
12784 {
12785   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12786     {
12787       bfd_byte *c;
12788
12789       if (elf_section_data (section) == NULL)
12790         {
12791           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12792           section->used_by_bfd = bfd_zalloc (abfd, amt);
12793           if (elf_section_data (section) == NULL)
12794             return FALSE;
12795         }
12796       c = mips_elf_section_data (section)->u.tdata;
12797       if (c == NULL)
12798         {
12799           c = bfd_zalloc (abfd, section->size);
12800           if (c == NULL)
12801             return FALSE;
12802           mips_elf_section_data (section)->u.tdata = c;
12803         }
12804
12805       memcpy (c + offset, location, count);
12806     }
12807
12808   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12809                                         count);
12810 }
12811
12812 /* This is almost identical to bfd_generic_get_... except that some
12813    MIPS relocations need to be handled specially.  Sigh.  */
12814
12815 bfd_byte *
12816 _bfd_elf_mips_get_relocated_section_contents
12817   (bfd *abfd,
12818    struct bfd_link_info *link_info,
12819    struct bfd_link_order *link_order,
12820    bfd_byte *data,
12821    bfd_boolean relocatable,
12822    asymbol **symbols)
12823 {
12824   /* Get enough memory to hold the stuff */
12825   bfd *input_bfd = link_order->u.indirect.section->owner;
12826   asection *input_section = link_order->u.indirect.section;
12827   bfd_size_type sz;
12828
12829   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12830   arelent **reloc_vector = NULL;
12831   long reloc_count;
12832
12833   if (reloc_size < 0)
12834     goto error_return;
12835
12836   reloc_vector = bfd_malloc (reloc_size);
12837   if (reloc_vector == NULL && reloc_size != 0)
12838     goto error_return;
12839
12840   /* read in the section */
12841   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12842   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12843     goto error_return;
12844
12845   reloc_count = bfd_canonicalize_reloc (input_bfd,
12846                                         input_section,
12847                                         reloc_vector,
12848                                         symbols);
12849   if (reloc_count < 0)
12850     goto error_return;
12851
12852   if (reloc_count > 0)
12853     {
12854       arelent **parent;
12855       /* for mips */
12856       int gp_found;
12857       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
12858
12859       {
12860         struct bfd_hash_entry *h;
12861         struct bfd_link_hash_entry *lh;
12862         /* Skip all this stuff if we aren't mixing formats.  */
12863         if (abfd && input_bfd
12864             && abfd->xvec == input_bfd->xvec)
12865           lh = 0;
12866         else
12867           {
12868             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12869             lh = (struct bfd_link_hash_entry *) h;
12870           }
12871       lookup:
12872         if (lh)
12873           {
12874             switch (lh->type)
12875               {
12876               case bfd_link_hash_undefined:
12877               case bfd_link_hash_undefweak:
12878               case bfd_link_hash_common:
12879                 gp_found = 0;
12880                 break;
12881               case bfd_link_hash_defined:
12882               case bfd_link_hash_defweak:
12883                 gp_found = 1;
12884                 gp = lh->u.def.value;
12885                 break;
12886               case bfd_link_hash_indirect:
12887               case bfd_link_hash_warning:
12888                 lh = lh->u.i.link;
12889                 /* @@FIXME  ignoring warning for now */
12890                 goto lookup;
12891               case bfd_link_hash_new:
12892               default:
12893                 abort ();
12894               }
12895           }
12896         else
12897           gp_found = 0;
12898       }
12899       /* end mips */
12900       for (parent = reloc_vector; *parent != NULL; parent++)
12901         {
12902           char *error_message = NULL;
12903           bfd_reloc_status_type r;
12904
12905           /* Specific to MIPS: Deal with relocation types that require
12906              knowing the gp of the output bfd.  */
12907           asymbol *sym = *(*parent)->sym_ptr_ptr;
12908
12909           /* If we've managed to find the gp and have a special
12910              function for the relocation then go ahead, else default
12911              to the generic handling.  */
12912           if (gp_found
12913               && (*parent)->howto->special_function
12914               == _bfd_mips_elf32_gprel16_reloc)
12915             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12916                                                input_section, relocatable,
12917                                                data, gp);
12918           else
12919             r = bfd_perform_relocation (input_bfd, *parent, data,
12920                                         input_section,
12921                                         relocatable ? abfd : NULL,
12922                                         &error_message);
12923
12924           if (relocatable)
12925             {
12926               asection *os = input_section->output_section;
12927
12928               /* A partial link, so keep the relocs */
12929               os->orelocation[os->reloc_count] = *parent;
12930               os->reloc_count++;
12931             }
12932
12933           if (r != bfd_reloc_ok)
12934             {
12935               switch (r)
12936                 {
12937                 case bfd_reloc_undefined:
12938                   (*link_info->callbacks->undefined_symbol)
12939                     (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12940                      input_bfd, input_section, (*parent)->address, TRUE);
12941                   break;
12942                 case bfd_reloc_dangerous:
12943                   BFD_ASSERT (error_message != NULL);
12944                   (*link_info->callbacks->reloc_dangerous)
12945                     (link_info, error_message,
12946                      input_bfd, input_section, (*parent)->address);
12947                   break;
12948                 case bfd_reloc_overflow:
12949                   (*link_info->callbacks->reloc_overflow)
12950                     (link_info, NULL,
12951                      bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12952                      (*parent)->howto->name, (*parent)->addend,
12953                      input_bfd, input_section, (*parent)->address);
12954                   break;
12955                 case bfd_reloc_outofrange:
12956                 default:
12957                   abort ();
12958                   break;
12959                 }
12960
12961             }
12962         }
12963     }
12964   if (reloc_vector != NULL)
12965     free (reloc_vector);
12966   return data;
12967
12968 error_return:
12969   if (reloc_vector != NULL)
12970     free (reloc_vector);
12971   return NULL;
12972 }
12973 \f
12974 static bfd_boolean
12975 mips_elf_relax_delete_bytes (bfd *abfd,
12976                              asection *sec, bfd_vma addr, int count)
12977 {
12978   Elf_Internal_Shdr *symtab_hdr;
12979   unsigned int sec_shndx;
12980   bfd_byte *contents;
12981   Elf_Internal_Rela *irel, *irelend;
12982   Elf_Internal_Sym *isym;
12983   Elf_Internal_Sym *isymend;
12984   struct elf_link_hash_entry **sym_hashes;
12985   struct elf_link_hash_entry **end_hashes;
12986   struct elf_link_hash_entry **start_hashes;
12987   unsigned int symcount;
12988
12989   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12990   contents = elf_section_data (sec)->this_hdr.contents;
12991
12992   irel = elf_section_data (sec)->relocs;
12993   irelend = irel + sec->reloc_count;
12994
12995   /* Actually delete the bytes.  */
12996   memmove (contents + addr, contents + addr + count,
12997            (size_t) (sec->size - addr - count));
12998   sec->size -= count;
12999
13000   /* Adjust all the relocs.  */
13001   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13002     {
13003       /* Get the new reloc address.  */
13004       if (irel->r_offset > addr)
13005         irel->r_offset -= count;
13006     }
13007
13008   BFD_ASSERT (addr % 2 == 0);
13009   BFD_ASSERT (count % 2 == 0);
13010
13011   /* Adjust the local symbols defined in this section.  */
13012   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13013   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13014   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13015     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13016       isym->st_value -= count;
13017
13018   /* Now adjust the global symbols defined in this section.  */
13019   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13020               - symtab_hdr->sh_info);
13021   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13022   end_hashes = sym_hashes + symcount;
13023
13024   for (; sym_hashes < end_hashes; sym_hashes++)
13025     {
13026       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13027
13028       if ((sym_hash->root.type == bfd_link_hash_defined
13029            || sym_hash->root.type == bfd_link_hash_defweak)
13030           && sym_hash->root.u.def.section == sec)
13031         {
13032           bfd_vma value = sym_hash->root.u.def.value;
13033
13034           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13035             value &= MINUS_TWO;
13036           if (value > addr)
13037             sym_hash->root.u.def.value -= count;
13038         }
13039     }
13040
13041   return TRUE;
13042 }
13043
13044
13045 /* Opcodes needed for microMIPS relaxation as found in
13046    opcodes/micromips-opc.c.  */
13047
13048 struct opcode_descriptor {
13049   unsigned long match;
13050   unsigned long mask;
13051 };
13052
13053 /* The $ra register aka $31.  */
13054
13055 #define RA 31
13056
13057 /* 32-bit instruction format register fields.  */
13058
13059 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13060 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13061
13062 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13063
13064 #define OP16_VALID_REG(r) \
13065   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13066
13067
13068 /* 32-bit and 16-bit branches.  */
13069
13070 static const struct opcode_descriptor b_insns_32[] = {
13071   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13072   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13073   { 0, 0 }  /* End marker for find_match().  */
13074 };
13075
13076 static const struct opcode_descriptor bc_insn_32 =
13077   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
13078
13079 static const struct opcode_descriptor bz_insn_32 =
13080   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
13081
13082 static const struct opcode_descriptor bzal_insn_32 =
13083   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
13084
13085 static const struct opcode_descriptor beq_insn_32 =
13086   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
13087
13088 static const struct opcode_descriptor b_insn_16 =
13089   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
13090
13091 static const struct opcode_descriptor bz_insn_16 =
13092   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
13093
13094
13095 /* 32-bit and 16-bit branch EQ and NE zero.  */
13096
13097 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13098    eq and second the ne.  This convention is used when replacing a
13099    32-bit BEQ/BNE with the 16-bit version.  */
13100
13101 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13102
13103 static const struct opcode_descriptor bz_rs_insns_32[] = {
13104   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
13105   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
13106   { 0, 0 }  /* End marker for find_match().  */
13107 };
13108
13109 static const struct opcode_descriptor bz_rt_insns_32[] = {
13110   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
13111   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
13112   { 0, 0 }  /* End marker for find_match().  */
13113 };
13114
13115 static const struct opcode_descriptor bzc_insns_32[] = {
13116   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
13117   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
13118   { 0, 0 }  /* End marker for find_match().  */
13119 };
13120
13121 static const struct opcode_descriptor bz_insns_16[] = {
13122   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
13123   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
13124   { 0, 0 }  /* End marker for find_match().  */
13125 };
13126
13127 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13128
13129 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13130 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13131
13132
13133 /* 32-bit instructions with a delay slot.  */
13134
13135 static const struct opcode_descriptor jal_insn_32_bd16 =
13136   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
13137
13138 static const struct opcode_descriptor jal_insn_32_bd32 =
13139   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
13140
13141 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13142   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
13143
13144 static const struct opcode_descriptor j_insn_32 =
13145   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
13146
13147 static const struct opcode_descriptor jalr_insn_32 =
13148   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
13149
13150 /* This table can be compacted, because no opcode replacement is made.  */
13151
13152 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13153   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
13154
13155   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
13156   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
13157
13158   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
13159   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
13160   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
13161   { 0, 0 }  /* End marker for find_match().  */
13162 };
13163
13164 /* This table can be compacted, because no opcode replacement is made.  */
13165
13166 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13167   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
13168
13169   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
13170   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
13171   { 0, 0 }  /* End marker for find_match().  */
13172 };
13173
13174
13175 /* 16-bit instructions with a delay slot.  */
13176
13177 static const struct opcode_descriptor jalr_insn_16_bd16 =
13178   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
13179
13180 static const struct opcode_descriptor jalr_insn_16_bd32 =
13181   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
13182
13183 static const struct opcode_descriptor jr_insn_16 =
13184   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
13185
13186 #define JR16_REG(opcode) ((opcode) & 0x1f)
13187
13188 /* This table can be compacted, because no opcode replacement is made.  */
13189
13190 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13191   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
13192
13193   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
13194   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
13195   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
13196   { 0, 0 }  /* End marker for find_match().  */
13197 };
13198
13199
13200 /* LUI instruction.  */
13201
13202 static const struct opcode_descriptor lui_insn =
13203  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
13204
13205
13206 /* ADDIU instruction.  */
13207
13208 static const struct opcode_descriptor addiu_insn =
13209   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
13210
13211 static const struct opcode_descriptor addiupc_insn =
13212   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
13213
13214 #define ADDIUPC_REG_FIELD(r) \
13215   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13216
13217
13218 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13219
13220 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13221    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13222 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13223 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13224
13225 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13226 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13227
13228 static const struct opcode_descriptor move_insns_32[] = {
13229   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13230   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13231   { 0, 0 }  /* End marker for find_match().  */
13232 };
13233
13234 static const struct opcode_descriptor move_insn_16 =
13235   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
13236
13237
13238 /* NOP instructions.  */
13239
13240 static const struct opcode_descriptor nop_insn_32 =
13241   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
13242
13243 static const struct opcode_descriptor nop_insn_16 =
13244   { /* "nop",   "",             */ 0x0c00,     0xffff };
13245
13246
13247 /* Instruction match support.  */
13248
13249 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13250
13251 static int
13252 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13253 {
13254   unsigned long indx;
13255
13256   for (indx = 0; insn[indx].mask != 0; indx++)
13257     if (MATCH (opcode, insn[indx]))
13258       return indx;
13259
13260   return -1;
13261 }
13262
13263
13264 /* Branch and delay slot decoding support.  */
13265
13266 /* If PTR points to what *might* be a 16-bit branch or jump, then
13267    return the minimum length of its delay slot, otherwise return 0.
13268    Non-zero results are not definitive as we might be checking against
13269    the second half of another instruction.  */
13270
13271 static int
13272 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13273 {
13274   unsigned long opcode;
13275   int bdsize;
13276
13277   opcode = bfd_get_16 (abfd, ptr);
13278   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13279     /* 16-bit branch/jump with a 32-bit delay slot.  */
13280     bdsize = 4;
13281   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13282            || find_match (opcode, ds_insns_16_bd16) >= 0)
13283     /* 16-bit branch/jump with a 16-bit delay slot.  */
13284     bdsize = 2;
13285   else
13286     /* No delay slot.  */
13287     bdsize = 0;
13288
13289   return bdsize;
13290 }
13291
13292 /* If PTR points to what *might* be a 32-bit branch or jump, then
13293    return the minimum length of its delay slot, otherwise return 0.
13294    Non-zero results are not definitive as we might be checking against
13295    the second half of another instruction.  */
13296
13297 static int
13298 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13299 {
13300   unsigned long opcode;
13301   int bdsize;
13302
13303   opcode = bfd_get_micromips_32 (abfd, ptr);
13304   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13305     /* 32-bit branch/jump with a 32-bit delay slot.  */
13306     bdsize = 4;
13307   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13308     /* 32-bit branch/jump with a 16-bit delay slot.  */
13309     bdsize = 2;
13310   else
13311     /* No delay slot.  */
13312     bdsize = 0;
13313
13314   return bdsize;
13315 }
13316
13317 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13318    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13319
13320 static bfd_boolean
13321 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13322 {
13323   unsigned long opcode;
13324
13325   opcode = bfd_get_16 (abfd, ptr);
13326   if (MATCH (opcode, b_insn_16)
13327                                                 /* B16  */
13328       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13329                                                 /* JR16  */
13330       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13331                                                 /* BEQZ16, BNEZ16  */
13332       || (MATCH (opcode, jalr_insn_16_bd32)
13333                                                 /* JALR16  */
13334           && reg != JR16_REG (opcode) && reg != RA))
13335     return TRUE;
13336
13337   return FALSE;
13338 }
13339
13340 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13341    then return TRUE, otherwise FALSE.  */
13342
13343 static bfd_boolean
13344 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13345 {
13346   unsigned long opcode;
13347
13348   opcode = bfd_get_micromips_32 (abfd, ptr);
13349   if (MATCH (opcode, j_insn_32)
13350                                                 /* J  */
13351       || MATCH (opcode, bc_insn_32)
13352                                                 /* BC1F, BC1T, BC2F, BC2T  */
13353       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13354                                                 /* JAL, JALX  */
13355       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13356                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
13357       || (MATCH (opcode, bzal_insn_32)
13358                                                 /* BGEZAL, BLTZAL  */
13359           && reg != OP32_SREG (opcode) && reg != RA)
13360       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13361                                                 /* JALR, JALR.HB, BEQ, BNE  */
13362           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13363     return TRUE;
13364
13365   return FALSE;
13366 }
13367
13368 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13369    IRELEND) at OFFSET indicate that there must be a compact branch there,
13370    then return TRUE, otherwise FALSE.  */
13371
13372 static bfd_boolean
13373 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13374                      const Elf_Internal_Rela *internal_relocs,
13375                      const Elf_Internal_Rela *irelend)
13376 {
13377   const Elf_Internal_Rela *irel;
13378   unsigned long opcode;
13379
13380   opcode = bfd_get_micromips_32 (abfd, ptr);
13381   if (find_match (opcode, bzc_insns_32) < 0)
13382     return FALSE;
13383
13384   for (irel = internal_relocs; irel < irelend; irel++)
13385     if (irel->r_offset == offset
13386         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13387       return TRUE;
13388
13389   return FALSE;
13390 }
13391
13392 /* Bitsize checking.  */
13393 #define IS_BITSIZE(val, N)                                              \
13394   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
13395     - (1ULL << ((N) - 1))) == (val))
13396
13397 \f
13398 bfd_boolean
13399 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13400                              struct bfd_link_info *link_info,
13401                              bfd_boolean *again)
13402 {
13403   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13404   Elf_Internal_Shdr *symtab_hdr;
13405   Elf_Internal_Rela *internal_relocs;
13406   Elf_Internal_Rela *irel, *irelend;
13407   bfd_byte *contents = NULL;
13408   Elf_Internal_Sym *isymbuf = NULL;
13409
13410   /* Assume nothing changes.  */
13411   *again = FALSE;
13412
13413   /* We don't have to do anything for a relocatable link, if
13414      this section does not have relocs, or if this is not a
13415      code section.  */
13416
13417   if (bfd_link_relocatable (link_info)
13418       || (sec->flags & SEC_RELOC) == 0
13419       || sec->reloc_count == 0
13420       || (sec->flags & SEC_CODE) == 0)
13421     return TRUE;
13422
13423   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13424
13425   /* Get a copy of the native relocations.  */
13426   internal_relocs = (_bfd_elf_link_read_relocs
13427                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13428                       link_info->keep_memory));
13429   if (internal_relocs == NULL)
13430     goto error_return;
13431
13432   /* Walk through them looking for relaxing opportunities.  */
13433   irelend = internal_relocs + sec->reloc_count;
13434   for (irel = internal_relocs; irel < irelend; irel++)
13435     {
13436       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13437       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13438       bfd_boolean target_is_micromips_code_p;
13439       unsigned long opcode;
13440       bfd_vma symval;
13441       bfd_vma pcrval;
13442       bfd_byte *ptr;
13443       int fndopc;
13444
13445       /* The number of bytes to delete for relaxation and from where
13446          to delete these bytes starting at irel->r_offset.  */
13447       int delcnt = 0;
13448       int deloff = 0;
13449
13450       /* If this isn't something that can be relaxed, then ignore
13451          this reloc.  */
13452       if (r_type != R_MICROMIPS_HI16
13453           && r_type != R_MICROMIPS_PC16_S1
13454           && r_type != R_MICROMIPS_26_S1)
13455         continue;
13456
13457       /* Get the section contents if we haven't done so already.  */
13458       if (contents == NULL)
13459         {
13460           /* Get cached copy if it exists.  */
13461           if (elf_section_data (sec)->this_hdr.contents != NULL)
13462             contents = elf_section_data (sec)->this_hdr.contents;
13463           /* Go get them off disk.  */
13464           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13465             goto error_return;
13466         }
13467       ptr = contents + irel->r_offset;
13468
13469       /* Read this BFD's local symbols if we haven't done so already.  */
13470       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13471         {
13472           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13473           if (isymbuf == NULL)
13474             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13475                                             symtab_hdr->sh_info, 0,
13476                                             NULL, NULL, NULL);
13477           if (isymbuf == NULL)
13478             goto error_return;
13479         }
13480
13481       /* Get the value of the symbol referred to by the reloc.  */
13482       if (r_symndx < symtab_hdr->sh_info)
13483         {
13484           /* A local symbol.  */
13485           Elf_Internal_Sym *isym;
13486           asection *sym_sec;
13487
13488           isym = isymbuf + r_symndx;
13489           if (isym->st_shndx == SHN_UNDEF)
13490             sym_sec = bfd_und_section_ptr;
13491           else if (isym->st_shndx == SHN_ABS)
13492             sym_sec = bfd_abs_section_ptr;
13493           else if (isym->st_shndx == SHN_COMMON)
13494             sym_sec = bfd_com_section_ptr;
13495           else
13496             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13497           symval = (isym->st_value
13498                     + sym_sec->output_section->vma
13499                     + sym_sec->output_offset);
13500           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13501         }
13502       else
13503         {
13504           unsigned long indx;
13505           struct elf_link_hash_entry *h;
13506
13507           /* An external symbol.  */
13508           indx = r_symndx - symtab_hdr->sh_info;
13509           h = elf_sym_hashes (abfd)[indx];
13510           BFD_ASSERT (h != NULL);
13511
13512           if (h->root.type != bfd_link_hash_defined
13513               && h->root.type != bfd_link_hash_defweak)
13514             /* This appears to be a reference to an undefined
13515                symbol.  Just ignore it -- it will be caught by the
13516                regular reloc processing.  */
13517             continue;
13518
13519           symval = (h->root.u.def.value
13520                     + h->root.u.def.section->output_section->vma
13521                     + h->root.u.def.section->output_offset);
13522           target_is_micromips_code_p = (!h->needs_plt
13523                                         && ELF_ST_IS_MICROMIPS (h->other));
13524         }
13525
13526
13527       /* For simplicity of coding, we are going to modify the
13528          section contents, the section relocs, and the BFD symbol
13529          table.  We must tell the rest of the code not to free up this
13530          information.  It would be possible to instead create a table
13531          of changes which have to be made, as is done in coff-mips.c;
13532          that would be more work, but would require less memory when
13533          the linker is run.  */
13534
13535       /* Only 32-bit instructions relaxed.  */
13536       if (irel->r_offset + 4 > sec->size)
13537         continue;
13538
13539       opcode = bfd_get_micromips_32 (abfd, ptr);
13540
13541       /* This is the pc-relative distance from the instruction the
13542          relocation is applied to, to the symbol referred.  */
13543       pcrval = (symval
13544                 - (sec->output_section->vma + sec->output_offset)
13545                 - irel->r_offset);
13546
13547       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13548          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13549          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13550
13551            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13552
13553          where pcrval has first to be adjusted to apply against the LO16
13554          location (we make the adjustment later on, when we have figured
13555          out the offset).  */
13556       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13557         {
13558           bfd_boolean bzc = FALSE;
13559           unsigned long nextopc;
13560           unsigned long reg;
13561           bfd_vma offset;
13562
13563           /* Give up if the previous reloc was a HI16 against this symbol
13564              too.  */
13565           if (irel > internal_relocs
13566               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13567               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13568             continue;
13569
13570           /* Or if the next reloc is not a LO16 against this symbol.  */
13571           if (irel + 1 >= irelend
13572               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13573               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13574             continue;
13575
13576           /* Or if the second next reloc is a LO16 against this symbol too.  */
13577           if (irel + 2 >= irelend
13578               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13579               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13580             continue;
13581
13582           /* See if the LUI instruction *might* be in a branch delay slot.
13583              We check whether what looks like a 16-bit branch or jump is
13584              actually an immediate argument to a compact branch, and let
13585              it through if so.  */
13586           if (irel->r_offset >= 2
13587               && check_br16_dslot (abfd, ptr - 2)
13588               && !(irel->r_offset >= 4
13589                    && (bzc = check_relocated_bzc (abfd,
13590                                                   ptr - 4, irel->r_offset - 4,
13591                                                   internal_relocs, irelend))))
13592             continue;
13593           if (irel->r_offset >= 4
13594               && !bzc
13595               && check_br32_dslot (abfd, ptr - 4))
13596             continue;
13597
13598           reg = OP32_SREG (opcode);
13599
13600           /* We only relax adjacent instructions or ones separated with
13601              a branch or jump that has a delay slot.  The branch or jump
13602              must not fiddle with the register used to hold the address.
13603              Subtract 4 for the LUI itself.  */
13604           offset = irel[1].r_offset - irel[0].r_offset;
13605           switch (offset - 4)
13606             {
13607             case 0:
13608               break;
13609             case 2:
13610               if (check_br16 (abfd, ptr + 4, reg))
13611                 break;
13612               continue;
13613             case 4:
13614               if (check_br32 (abfd, ptr + 4, reg))
13615                 break;
13616               continue;
13617             default:
13618               continue;
13619             }
13620
13621           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13622
13623           /* Give up unless the same register is used with both
13624              relocations.  */
13625           if (OP32_SREG (nextopc) != reg)
13626             continue;
13627
13628           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13629              and rounding up to take masking of the two LSBs into account.  */
13630           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13631
13632           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13633           if (IS_BITSIZE (symval, 16))
13634             {
13635               /* Fix the relocation's type.  */
13636               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13637
13638               /* Instructions using R_MICROMIPS_LO16 have the base or
13639                  source register in bits 20:16.  This register becomes $0
13640                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13641               nextopc &= ~0x001f0000;
13642               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13643                           contents + irel[1].r_offset);
13644             }
13645
13646           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13647              We add 4 to take LUI deletion into account while checking
13648              the PC-relative distance.  */
13649           else if (symval % 4 == 0
13650                    && IS_BITSIZE (pcrval + 4, 25)
13651                    && MATCH (nextopc, addiu_insn)
13652                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13653                    && OP16_VALID_REG (OP32_TREG (nextopc)))
13654             {
13655               /* Fix the relocation's type.  */
13656               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13657
13658               /* Replace ADDIU with the ADDIUPC version.  */
13659               nextopc = (addiupc_insn.match
13660                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13661
13662               bfd_put_micromips_32 (abfd, nextopc,
13663                                     contents + irel[1].r_offset);
13664             }
13665
13666           /* Can't do anything, give up, sigh...  */
13667           else
13668             continue;
13669
13670           /* Fix the relocation's type.  */
13671           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13672
13673           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13674           delcnt = 4;
13675           deloff = 0;
13676         }
13677
13678       /* Compact branch relaxation -- due to the multitude of macros
13679          employed by the compiler/assembler, compact branches are not
13680          always generated.  Obviously, this can/will be fixed elsewhere,
13681          but there is no drawback in double checking it here.  */
13682       else if (r_type == R_MICROMIPS_PC16_S1
13683                && irel->r_offset + 5 < sec->size
13684                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13685                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13686                && ((!insn32
13687                     && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13688                                         nop_insn_16) ? 2 : 0))
13689                    || (irel->r_offset + 7 < sec->size
13690                        && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13691                                                                  ptr + 4),
13692                                            nop_insn_32) ? 4 : 0))))
13693         {
13694           unsigned long reg;
13695
13696           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13697
13698           /* Replace BEQZ/BNEZ with the compact version.  */
13699           opcode = (bzc_insns_32[fndopc].match
13700                     | BZC32_REG_FIELD (reg)
13701                     | (opcode & 0xffff));               /* Addend value.  */
13702
13703           bfd_put_micromips_32 (abfd, opcode, ptr);
13704
13705           /* Delete the delay slot NOP: two or four bytes from
13706              irel->offset + 4; delcnt has already been set above.  */
13707           deloff = 4;
13708         }
13709
13710       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13711          to check the distance from the next instruction, so subtract 2.  */
13712       else if (!insn32
13713                && r_type == R_MICROMIPS_PC16_S1
13714                && IS_BITSIZE (pcrval - 2, 11)
13715                && find_match (opcode, b_insns_32) >= 0)
13716         {
13717           /* Fix the relocation's type.  */
13718           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13719
13720           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13721           bfd_put_16 (abfd,
13722                       (b_insn_16.match
13723                        | (opcode & 0x3ff)),             /* Addend value.  */
13724                       ptr);
13725
13726           /* Delete 2 bytes from irel->r_offset + 2.  */
13727           delcnt = 2;
13728           deloff = 2;
13729         }
13730
13731       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13732          to check the distance from the next instruction, so subtract 2.  */
13733       else if (!insn32
13734                && r_type == R_MICROMIPS_PC16_S1
13735                && IS_BITSIZE (pcrval - 2, 8)
13736                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13737                     && OP16_VALID_REG (OP32_SREG (opcode)))
13738                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13739                        && OP16_VALID_REG (OP32_TREG (opcode)))))
13740         {
13741           unsigned long reg;
13742
13743           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13744
13745           /* Fix the relocation's type.  */
13746           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13747
13748           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13749           bfd_put_16 (abfd,
13750                       (bz_insns_16[fndopc].match
13751                        | BZ16_REG_FIELD (reg)
13752                        | (opcode & 0x7f)),              /* Addend value.  */
13753                       ptr);
13754
13755           /* Delete 2 bytes from irel->r_offset + 2.  */
13756           delcnt = 2;
13757           deloff = 2;
13758         }
13759
13760       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13761       else if (!insn32
13762                && r_type == R_MICROMIPS_26_S1
13763                && target_is_micromips_code_p
13764                && irel->r_offset + 7 < sec->size
13765                && MATCH (opcode, jal_insn_32_bd32))
13766         {
13767           unsigned long n32opc;
13768           bfd_boolean relaxed = FALSE;
13769
13770           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13771
13772           if (MATCH (n32opc, nop_insn_32))
13773             {
13774               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13775               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13776
13777               relaxed = TRUE;
13778             }
13779           else if (find_match (n32opc, move_insns_32) >= 0)
13780             {
13781               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13782               bfd_put_16 (abfd,
13783                           (move_insn_16.match
13784                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13785                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13786                           ptr + 4);
13787
13788               relaxed = TRUE;
13789             }
13790           /* Other 32-bit instructions relaxable to 16-bit
13791              instructions will be handled here later.  */
13792
13793           if (relaxed)
13794             {
13795               /* JAL with 32-bit delay slot that is changed to a JALS
13796                  with 16-bit delay slot.  */
13797               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13798
13799               /* Delete 2 bytes from irel->r_offset + 6.  */
13800               delcnt = 2;
13801               deloff = 6;
13802             }
13803         }
13804
13805       if (delcnt != 0)
13806         {
13807           /* Note that we've changed the relocs, section contents, etc.  */
13808           elf_section_data (sec)->relocs = internal_relocs;
13809           elf_section_data (sec)->this_hdr.contents = contents;
13810           symtab_hdr->contents = (unsigned char *) isymbuf;
13811
13812           /* Delete bytes depending on the delcnt and deloff.  */
13813           if (!mips_elf_relax_delete_bytes (abfd, sec,
13814                                             irel->r_offset + deloff, delcnt))
13815             goto error_return;
13816
13817           /* That will change things, so we should relax again.
13818              Note that this is not required, and it may be slow.  */
13819           *again = TRUE;
13820         }
13821     }
13822
13823   if (isymbuf != NULL
13824       && symtab_hdr->contents != (unsigned char *) isymbuf)
13825     {
13826       if (! link_info->keep_memory)
13827         free (isymbuf);
13828       else
13829         {
13830           /* Cache the symbols for elf_link_input_bfd.  */
13831           symtab_hdr->contents = (unsigned char *) isymbuf;
13832         }
13833     }
13834
13835   if (contents != NULL
13836       && elf_section_data (sec)->this_hdr.contents != contents)
13837     {
13838       if (! link_info->keep_memory)
13839         free (contents);
13840       else
13841         {
13842           /* Cache the section contents for elf_link_input_bfd.  */
13843           elf_section_data (sec)->this_hdr.contents = contents;
13844         }
13845     }
13846
13847   if (internal_relocs != NULL
13848       && elf_section_data (sec)->relocs != internal_relocs)
13849     free (internal_relocs);
13850
13851   return TRUE;
13852
13853  error_return:
13854   if (isymbuf != NULL
13855       && symtab_hdr->contents != (unsigned char *) isymbuf)
13856     free (isymbuf);
13857   if (contents != NULL
13858       && elf_section_data (sec)->this_hdr.contents != contents)
13859     free (contents);
13860   if (internal_relocs != NULL
13861       && elf_section_data (sec)->relocs != internal_relocs)
13862     free (internal_relocs);
13863
13864   return FALSE;
13865 }
13866 \f
13867 /* Create a MIPS ELF linker hash table.  */
13868
13869 struct bfd_link_hash_table *
13870 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13871 {
13872   struct mips_elf_link_hash_table *ret;
13873   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13874
13875   ret = bfd_zmalloc (amt);
13876   if (ret == NULL)
13877     return NULL;
13878
13879   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13880                                       mips_elf_link_hash_newfunc,
13881                                       sizeof (struct mips_elf_link_hash_entry),
13882                                       MIPS_ELF_DATA))
13883     {
13884       free (ret);
13885       return NULL;
13886     }
13887   ret->root.init_plt_refcount.plist = NULL;
13888   ret->root.init_plt_offset.plist = NULL;
13889
13890   return &ret->root.root;
13891 }
13892
13893 /* Likewise, but indicate that the target is VxWorks.  */
13894
13895 struct bfd_link_hash_table *
13896 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13897 {
13898   struct bfd_link_hash_table *ret;
13899
13900   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13901   if (ret)
13902     {
13903       struct mips_elf_link_hash_table *htab;
13904
13905       htab = (struct mips_elf_link_hash_table *) ret;
13906       htab->use_plts_and_copy_relocs = TRUE;
13907       htab->is_vxworks = TRUE;
13908     }
13909   return ret;
13910 }
13911
13912 /* A function that the linker calls if we are allowed to use PLTs
13913    and copy relocs.  */
13914
13915 void
13916 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13917 {
13918   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13919 }
13920
13921 /* A function that the linker calls to select between all or only
13922    32-bit microMIPS instructions.  */
13923
13924 void
13925 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13926 {
13927   mips_elf_hash_table (info)->insn32 = on;
13928 }
13929 \f
13930 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13931
13932 struct mips_mach_extension
13933 {
13934   unsigned long extension, base;
13935 };
13936
13937
13938 /* An array describing how BFD machines relate to one another.  The entries
13939    are ordered topologically with MIPS I extensions listed last.  */
13940
13941 static const struct mips_mach_extension mips_mach_extensions[] =
13942 {
13943   /* MIPS64r2 extensions.  */
13944   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
13945   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13946   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13947   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13948   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
13949
13950   /* MIPS64 extensions.  */
13951   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13952   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13953   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13954
13955   /* MIPS V extensions.  */
13956   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13957
13958   /* R10000 extensions.  */
13959   { bfd_mach_mips12000, bfd_mach_mips10000 },
13960   { bfd_mach_mips14000, bfd_mach_mips10000 },
13961   { bfd_mach_mips16000, bfd_mach_mips10000 },
13962
13963   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13964      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13965      better to allow vr5400 and vr5500 code to be merged anyway, since
13966      many libraries will just use the core ISA.  Perhaps we could add
13967      some sort of ASE flag if this ever proves a problem.  */
13968   { bfd_mach_mips5500, bfd_mach_mips5400 },
13969   { bfd_mach_mips5400, bfd_mach_mips5000 },
13970
13971   /* MIPS IV extensions.  */
13972   { bfd_mach_mips5, bfd_mach_mips8000 },
13973   { bfd_mach_mips10000, bfd_mach_mips8000 },
13974   { bfd_mach_mips5000, bfd_mach_mips8000 },
13975   { bfd_mach_mips7000, bfd_mach_mips8000 },
13976   { bfd_mach_mips9000, bfd_mach_mips8000 },
13977
13978   /* VR4100 extensions.  */
13979   { bfd_mach_mips4120, bfd_mach_mips4100 },
13980   { bfd_mach_mips4111, bfd_mach_mips4100 },
13981
13982   /* MIPS III extensions.  */
13983   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13984   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13985   { bfd_mach_mips8000, bfd_mach_mips4000 },
13986   { bfd_mach_mips4650, bfd_mach_mips4000 },
13987   { bfd_mach_mips4600, bfd_mach_mips4000 },
13988   { bfd_mach_mips4400, bfd_mach_mips4000 },
13989   { bfd_mach_mips4300, bfd_mach_mips4000 },
13990   { bfd_mach_mips4100, bfd_mach_mips4000 },
13991   { bfd_mach_mips4010, bfd_mach_mips4000 },
13992   { bfd_mach_mips5900, bfd_mach_mips4000 },
13993
13994   /* MIPS32 extensions.  */
13995   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13996
13997   /* MIPS II extensions.  */
13998   { bfd_mach_mips4000, bfd_mach_mips6000 },
13999   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14000
14001   /* MIPS I extensions.  */
14002   { bfd_mach_mips6000, bfd_mach_mips3000 },
14003   { bfd_mach_mips3900, bfd_mach_mips3000 }
14004 };
14005
14006 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14007
14008 static bfd_boolean
14009 mips_mach_extends_p (unsigned long base, unsigned long extension)
14010 {
14011   size_t i;
14012
14013   if (extension == base)
14014     return TRUE;
14015
14016   if (base == bfd_mach_mipsisa32
14017       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14018     return TRUE;
14019
14020   if (base == bfd_mach_mipsisa32r2
14021       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14022     return TRUE;
14023
14024   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14025     if (extension == mips_mach_extensions[i].extension)
14026       {
14027         extension = mips_mach_extensions[i].base;
14028         if (extension == base)
14029           return TRUE;
14030       }
14031
14032   return FALSE;
14033 }
14034
14035 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14036
14037 static unsigned long
14038 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14039 {
14040   switch (isa_ext)
14041     {
14042     case AFL_EXT_3900:        return bfd_mach_mips3900;
14043     case AFL_EXT_4010:        return bfd_mach_mips4010;
14044     case AFL_EXT_4100:        return bfd_mach_mips4100;
14045     case AFL_EXT_4111:        return bfd_mach_mips4111;
14046     case AFL_EXT_4120:        return bfd_mach_mips4120;
14047     case AFL_EXT_4650:        return bfd_mach_mips4650;
14048     case AFL_EXT_5400:        return bfd_mach_mips5400;
14049     case AFL_EXT_5500:        return bfd_mach_mips5500;
14050     case AFL_EXT_5900:        return bfd_mach_mips5900;
14051     case AFL_EXT_10000:       return bfd_mach_mips10000;
14052     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14053     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14054     case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14055     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14056     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14057     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14058     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14059     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14060     default:                  return bfd_mach_mips3000;
14061     }
14062 }
14063
14064 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14065
14066 unsigned int
14067 bfd_mips_isa_ext (bfd *abfd)
14068 {
14069   switch (bfd_get_mach (abfd))
14070     {
14071     case bfd_mach_mips3900:         return AFL_EXT_3900;
14072     case bfd_mach_mips4010:         return AFL_EXT_4010;
14073     case bfd_mach_mips4100:         return AFL_EXT_4100;
14074     case bfd_mach_mips4111:         return AFL_EXT_4111;
14075     case bfd_mach_mips4120:         return AFL_EXT_4120;
14076     case bfd_mach_mips4650:         return AFL_EXT_4650;
14077     case bfd_mach_mips5400:         return AFL_EXT_5400;
14078     case bfd_mach_mips5500:         return AFL_EXT_5500;
14079     case bfd_mach_mips5900:         return AFL_EXT_5900;
14080     case bfd_mach_mips10000:        return AFL_EXT_10000;
14081     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14082     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14083     case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14084     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14085     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14086     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14087     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14088     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14089     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14090     default:                        return 0;
14091     }
14092 }
14093
14094 /* Encode ISA level and revision as a single value.  */
14095 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14096
14097 /* Decode a single value into level and revision.  */
14098 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14099 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14100
14101 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14102
14103 static void
14104 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14105 {
14106   int new_isa = 0;
14107   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14108     {
14109     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14110     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14111     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14112     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14113     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14114     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14115     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14116     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14117     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14118     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14119     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14120     default:
14121       (*_bfd_error_handler)
14122         (_("%B: Unknown architecture %s"),
14123          abfd, bfd_printable_name (abfd));
14124     }
14125
14126   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14127     {
14128       abiflags->isa_level = ISA_LEVEL (new_isa);
14129       abiflags->isa_rev = ISA_REV (new_isa);
14130     }
14131
14132   /* Update the isa_ext if ABFD describes a further extension.  */
14133   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14134                            bfd_get_mach (abfd)))
14135     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14136 }
14137
14138 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14139
14140 static bfd_boolean
14141 mips_32bit_flags_p (flagword flags)
14142 {
14143   return ((flags & EF_MIPS_32BITMODE) != 0
14144           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14145           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14146           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14147           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14148           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14149           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14150           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14151 }
14152
14153 /* Infer the content of the ABI flags based on the elf header.  */
14154
14155 static void
14156 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14157 {
14158   obj_attribute *in_attr;
14159
14160   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14161   update_mips_abiflags_isa (abfd, abiflags);
14162
14163   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14164     abiflags->gpr_size = AFL_REG_32;
14165   else
14166     abiflags->gpr_size = AFL_REG_64;
14167
14168   abiflags->cpr1_size = AFL_REG_NONE;
14169
14170   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14171   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14172
14173   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14174       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14175       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14176           && abiflags->gpr_size == AFL_REG_32))
14177     abiflags->cpr1_size = AFL_REG_32;
14178   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14179            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14180            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14181     abiflags->cpr1_size = AFL_REG_64;
14182
14183   abiflags->cpr2_size = AFL_REG_NONE;
14184
14185   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14186     abiflags->ases |= AFL_ASE_MDMX;
14187   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14188     abiflags->ases |= AFL_ASE_MIPS16;
14189   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14190     abiflags->ases |= AFL_ASE_MICROMIPS;
14191
14192   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14193       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14194       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14195       && abiflags->isa_level >= 32
14196       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14197     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14198 }
14199
14200 /* We need to use a special link routine to handle the .reginfo and
14201    the .mdebug sections.  We need to merge all instances of these
14202    sections together, not write them all out sequentially.  */
14203
14204 bfd_boolean
14205 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14206 {
14207   asection *o;
14208   struct bfd_link_order *p;
14209   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14210   asection *rtproc_sec, *abiflags_sec;
14211   Elf32_RegInfo reginfo;
14212   struct ecoff_debug_info debug;
14213   struct mips_htab_traverse_info hti;
14214   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14215   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14216   HDRR *symhdr = &debug.symbolic_header;
14217   void *mdebug_handle = NULL;
14218   asection *s;
14219   EXTR esym;
14220   unsigned int i;
14221   bfd_size_type amt;
14222   struct mips_elf_link_hash_table *htab;
14223
14224   static const char * const secname[] =
14225   {
14226     ".text", ".init", ".fini", ".data",
14227     ".rodata", ".sdata", ".sbss", ".bss"
14228   };
14229   static const int sc[] =
14230   {
14231     scText, scInit, scFini, scData,
14232     scRData, scSData, scSBss, scBss
14233   };
14234
14235   /* Sort the dynamic symbols so that those with GOT entries come after
14236      those without.  */
14237   htab = mips_elf_hash_table (info);
14238   BFD_ASSERT (htab != NULL);
14239
14240   if (!mips_elf_sort_hash_table (abfd, info))
14241     return FALSE;
14242
14243   /* Create any scheduled LA25 stubs.  */
14244   hti.info = info;
14245   hti.output_bfd = abfd;
14246   hti.error = FALSE;
14247   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14248   if (hti.error)
14249     return FALSE;
14250
14251   /* Get a value for the GP register.  */
14252   if (elf_gp (abfd) == 0)
14253     {
14254       struct bfd_link_hash_entry *h;
14255
14256       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14257       if (h != NULL && h->type == bfd_link_hash_defined)
14258         elf_gp (abfd) = (h->u.def.value
14259                          + h->u.def.section->output_section->vma
14260                          + h->u.def.section->output_offset);
14261       else if (htab->is_vxworks
14262                && (h = bfd_link_hash_lookup (info->hash,
14263                                              "_GLOBAL_OFFSET_TABLE_",
14264                                              FALSE, FALSE, TRUE))
14265                && h->type == bfd_link_hash_defined)
14266         elf_gp (abfd) = (h->u.def.section->output_section->vma
14267                          + h->u.def.section->output_offset
14268                          + h->u.def.value);
14269       else if (bfd_link_relocatable (info))
14270         {
14271           bfd_vma lo = MINUS_ONE;
14272
14273           /* Find the GP-relative section with the lowest offset.  */
14274           for (o = abfd->sections; o != NULL; o = o->next)
14275             if (o->vma < lo
14276                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14277               lo = o->vma;
14278
14279           /* And calculate GP relative to that.  */
14280           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14281         }
14282       else
14283         {
14284           /* If the relocate_section function needs to do a reloc
14285              involving the GP value, it should make a reloc_dangerous
14286              callback to warn that GP is not defined.  */
14287         }
14288     }
14289
14290   /* Go through the sections and collect the .reginfo and .mdebug
14291      information.  */
14292   abiflags_sec = NULL;
14293   reginfo_sec = NULL;
14294   mdebug_sec = NULL;
14295   gptab_data_sec = NULL;
14296   gptab_bss_sec = NULL;
14297   for (o = abfd->sections; o != NULL; o = o->next)
14298     {
14299       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14300         {
14301           /* We have found the .MIPS.abiflags section in the output file.
14302              Look through all the link_orders comprising it and remove them.
14303              The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14304           for (p = o->map_head.link_order; p != NULL; p = p->next)
14305             {
14306               asection *input_section;
14307
14308               if (p->type != bfd_indirect_link_order)
14309                 {
14310                   if (p->type == bfd_data_link_order)
14311                     continue;
14312                   abort ();
14313                 }
14314
14315               input_section = p->u.indirect.section;
14316
14317               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14318                  elf_link_input_bfd ignores this section.  */
14319               input_section->flags &= ~SEC_HAS_CONTENTS;
14320             }
14321
14322           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14323           BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14324
14325           /* Skip this section later on (I don't think this currently
14326              matters, but someday it might).  */
14327           o->map_head.link_order = NULL;
14328
14329           abiflags_sec = o;
14330         }
14331
14332       if (strcmp (o->name, ".reginfo") == 0)
14333         {
14334           memset (&reginfo, 0, sizeof reginfo);
14335
14336           /* We have found the .reginfo section in the output file.
14337              Look through all the link_orders comprising it and merge
14338              the information together.  */
14339           for (p = o->map_head.link_order; p != NULL; p = p->next)
14340             {
14341               asection *input_section;
14342               bfd *input_bfd;
14343               Elf32_External_RegInfo ext;
14344               Elf32_RegInfo sub;
14345
14346               if (p->type != bfd_indirect_link_order)
14347                 {
14348                   if (p->type == bfd_data_link_order)
14349                     continue;
14350                   abort ();
14351                 }
14352
14353               input_section = p->u.indirect.section;
14354               input_bfd = input_section->owner;
14355
14356               if (! bfd_get_section_contents (input_bfd, input_section,
14357                                               &ext, 0, sizeof ext))
14358                 return FALSE;
14359
14360               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14361
14362               reginfo.ri_gprmask |= sub.ri_gprmask;
14363               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14364               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14365               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14366               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14367
14368               /* ri_gp_value is set by the function
14369                  mips_elf32_section_processing when the section is
14370                  finally written out.  */
14371
14372               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14373                  elf_link_input_bfd ignores this section.  */
14374               input_section->flags &= ~SEC_HAS_CONTENTS;
14375             }
14376
14377           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14378           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14379
14380           /* Skip this section later on (I don't think this currently
14381              matters, but someday it might).  */
14382           o->map_head.link_order = NULL;
14383
14384           reginfo_sec = o;
14385         }
14386
14387       if (strcmp (o->name, ".mdebug") == 0)
14388         {
14389           struct extsym_info einfo;
14390           bfd_vma last;
14391
14392           /* We have found the .mdebug section in the output file.
14393              Look through all the link_orders comprising it and merge
14394              the information together.  */
14395           symhdr->magic = swap->sym_magic;
14396           /* FIXME: What should the version stamp be?  */
14397           symhdr->vstamp = 0;
14398           symhdr->ilineMax = 0;
14399           symhdr->cbLine = 0;
14400           symhdr->idnMax = 0;
14401           symhdr->ipdMax = 0;
14402           symhdr->isymMax = 0;
14403           symhdr->ioptMax = 0;
14404           symhdr->iauxMax = 0;
14405           symhdr->issMax = 0;
14406           symhdr->issExtMax = 0;
14407           symhdr->ifdMax = 0;
14408           symhdr->crfd = 0;
14409           symhdr->iextMax = 0;
14410
14411           /* We accumulate the debugging information itself in the
14412              debug_info structure.  */
14413           debug.line = NULL;
14414           debug.external_dnr = NULL;
14415           debug.external_pdr = NULL;
14416           debug.external_sym = NULL;
14417           debug.external_opt = NULL;
14418           debug.external_aux = NULL;
14419           debug.ss = NULL;
14420           debug.ssext = debug.ssext_end = NULL;
14421           debug.external_fdr = NULL;
14422           debug.external_rfd = NULL;
14423           debug.external_ext = debug.external_ext_end = NULL;
14424
14425           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14426           if (mdebug_handle == NULL)
14427             return FALSE;
14428
14429           esym.jmptbl = 0;
14430           esym.cobol_main = 0;
14431           esym.weakext = 0;
14432           esym.reserved = 0;
14433           esym.ifd = ifdNil;
14434           esym.asym.iss = issNil;
14435           esym.asym.st = stLocal;
14436           esym.asym.reserved = 0;
14437           esym.asym.index = indexNil;
14438           last = 0;
14439           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14440             {
14441               esym.asym.sc = sc[i];
14442               s = bfd_get_section_by_name (abfd, secname[i]);
14443               if (s != NULL)
14444                 {
14445                   esym.asym.value = s->vma;
14446                   last = s->vma + s->size;
14447                 }
14448               else
14449                 esym.asym.value = last;
14450               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14451                                                  secname[i], &esym))
14452                 return FALSE;
14453             }
14454
14455           for (p = o->map_head.link_order; p != NULL; p = p->next)
14456             {
14457               asection *input_section;
14458               bfd *input_bfd;
14459               const struct ecoff_debug_swap *input_swap;
14460               struct ecoff_debug_info input_debug;
14461               char *eraw_src;
14462               char *eraw_end;
14463
14464               if (p->type != bfd_indirect_link_order)
14465                 {
14466                   if (p->type == bfd_data_link_order)
14467                     continue;
14468                   abort ();
14469                 }
14470
14471               input_section = p->u.indirect.section;
14472               input_bfd = input_section->owner;
14473
14474               if (!is_mips_elf (input_bfd))
14475                 {
14476                   /* I don't know what a non MIPS ELF bfd would be
14477                      doing with a .mdebug section, but I don't really
14478                      want to deal with it.  */
14479                   continue;
14480                 }
14481
14482               input_swap = (get_elf_backend_data (input_bfd)
14483                             ->elf_backend_ecoff_debug_swap);
14484
14485               BFD_ASSERT (p->size == input_section->size);
14486
14487               /* The ECOFF linking code expects that we have already
14488                  read in the debugging information and set up an
14489                  ecoff_debug_info structure, so we do that now.  */
14490               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14491                                                    &input_debug))
14492                 return FALSE;
14493
14494               if (! (bfd_ecoff_debug_accumulate
14495                      (mdebug_handle, abfd, &debug, swap, input_bfd,
14496                       &input_debug, input_swap, info)))
14497                 return FALSE;
14498
14499               /* Loop through the external symbols.  For each one with
14500                  interesting information, try to find the symbol in
14501                  the linker global hash table and save the information
14502                  for the output external symbols.  */
14503               eraw_src = input_debug.external_ext;
14504               eraw_end = (eraw_src
14505                           + (input_debug.symbolic_header.iextMax
14506                              * input_swap->external_ext_size));
14507               for (;
14508                    eraw_src < eraw_end;
14509                    eraw_src += input_swap->external_ext_size)
14510                 {
14511                   EXTR ext;
14512                   const char *name;
14513                   struct mips_elf_link_hash_entry *h;
14514
14515                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14516                   if (ext.asym.sc == scNil
14517                       || ext.asym.sc == scUndefined
14518                       || ext.asym.sc == scSUndefined)
14519                     continue;
14520
14521                   name = input_debug.ssext + ext.asym.iss;
14522                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14523                                                  name, FALSE, FALSE, TRUE);
14524                   if (h == NULL || h->esym.ifd != -2)
14525                     continue;
14526
14527                   if (ext.ifd != -1)
14528                     {
14529                       BFD_ASSERT (ext.ifd
14530                                   < input_debug.symbolic_header.ifdMax);
14531                       ext.ifd = input_debug.ifdmap[ext.ifd];
14532                     }
14533
14534                   h->esym = ext;
14535                 }
14536
14537               /* Free up the information we just read.  */
14538               free (input_debug.line);
14539               free (input_debug.external_dnr);
14540               free (input_debug.external_pdr);
14541               free (input_debug.external_sym);
14542               free (input_debug.external_opt);
14543               free (input_debug.external_aux);
14544               free (input_debug.ss);
14545               free (input_debug.ssext);
14546               free (input_debug.external_fdr);
14547               free (input_debug.external_rfd);
14548               free (input_debug.external_ext);
14549
14550               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14551                  elf_link_input_bfd ignores this section.  */
14552               input_section->flags &= ~SEC_HAS_CONTENTS;
14553             }
14554
14555           if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14556             {
14557               /* Create .rtproc section.  */
14558               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14559               if (rtproc_sec == NULL)
14560                 {
14561                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14562                                     | SEC_LINKER_CREATED | SEC_READONLY);
14563
14564                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14565                                                                    ".rtproc",
14566                                                                    flags);
14567                   if (rtproc_sec == NULL
14568                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14569                     return FALSE;
14570                 }
14571
14572               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14573                                                      info, rtproc_sec,
14574                                                      &debug))
14575                 return FALSE;
14576             }
14577
14578           /* Build the external symbol information.  */
14579           einfo.abfd = abfd;
14580           einfo.info = info;
14581           einfo.debug = &debug;
14582           einfo.swap = swap;
14583           einfo.failed = FALSE;
14584           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14585                                        mips_elf_output_extsym, &einfo);
14586           if (einfo.failed)
14587             return FALSE;
14588
14589           /* Set the size of the .mdebug section.  */
14590           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14591
14592           /* Skip this section later on (I don't think this currently
14593              matters, but someday it might).  */
14594           o->map_head.link_order = NULL;
14595
14596           mdebug_sec = o;
14597         }
14598
14599       if (CONST_STRNEQ (o->name, ".gptab."))
14600         {
14601           const char *subname;
14602           unsigned int c;
14603           Elf32_gptab *tab;
14604           Elf32_External_gptab *ext_tab;
14605           unsigned int j;
14606
14607           /* The .gptab.sdata and .gptab.sbss sections hold
14608              information describing how the small data area would
14609              change depending upon the -G switch.  These sections
14610              not used in executables files.  */
14611           if (! bfd_link_relocatable (info))
14612             {
14613               for (p = o->map_head.link_order; p != NULL; p = p->next)
14614                 {
14615                   asection *input_section;
14616
14617                   if (p->type != bfd_indirect_link_order)
14618                     {
14619                       if (p->type == bfd_data_link_order)
14620                         continue;
14621                       abort ();
14622                     }
14623
14624                   input_section = p->u.indirect.section;
14625
14626                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
14627                      elf_link_input_bfd ignores this section.  */
14628                   input_section->flags &= ~SEC_HAS_CONTENTS;
14629                 }
14630
14631               /* Skip this section later on (I don't think this
14632                  currently matters, but someday it might).  */
14633               o->map_head.link_order = NULL;
14634
14635               /* Really remove the section.  */
14636               bfd_section_list_remove (abfd, o);
14637               --abfd->section_count;
14638
14639               continue;
14640             }
14641
14642           /* There is one gptab for initialized data, and one for
14643              uninitialized data.  */
14644           if (strcmp (o->name, ".gptab.sdata") == 0)
14645             gptab_data_sec = o;
14646           else if (strcmp (o->name, ".gptab.sbss") == 0)
14647             gptab_bss_sec = o;
14648           else
14649             {
14650               (*_bfd_error_handler)
14651                 (_("%s: illegal section name `%s'"),
14652                  bfd_get_filename (abfd), o->name);
14653               bfd_set_error (bfd_error_nonrepresentable_section);
14654               return FALSE;
14655             }
14656
14657           /* The linker script always combines .gptab.data and
14658              .gptab.sdata into .gptab.sdata, and likewise for
14659              .gptab.bss and .gptab.sbss.  It is possible that there is
14660              no .sdata or .sbss section in the output file, in which
14661              case we must change the name of the output section.  */
14662           subname = o->name + sizeof ".gptab" - 1;
14663           if (bfd_get_section_by_name (abfd, subname) == NULL)
14664             {
14665               if (o == gptab_data_sec)
14666                 o->name = ".gptab.data";
14667               else
14668                 o->name = ".gptab.bss";
14669               subname = o->name + sizeof ".gptab" - 1;
14670               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14671             }
14672
14673           /* Set up the first entry.  */
14674           c = 1;
14675           amt = c * sizeof (Elf32_gptab);
14676           tab = bfd_malloc (amt);
14677           if (tab == NULL)
14678             return FALSE;
14679           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14680           tab[0].gt_header.gt_unused = 0;
14681
14682           /* Combine the input sections.  */
14683           for (p = o->map_head.link_order; p != NULL; p = p->next)
14684             {
14685               asection *input_section;
14686               bfd *input_bfd;
14687               bfd_size_type size;
14688               unsigned long last;
14689               bfd_size_type gpentry;
14690
14691               if (p->type != bfd_indirect_link_order)
14692                 {
14693                   if (p->type == bfd_data_link_order)
14694                     continue;
14695                   abort ();
14696                 }
14697
14698               input_section = p->u.indirect.section;
14699               input_bfd = input_section->owner;
14700
14701               /* Combine the gptab entries for this input section one
14702                  by one.  We know that the input gptab entries are
14703                  sorted by ascending -G value.  */
14704               size = input_section->size;
14705               last = 0;
14706               for (gpentry = sizeof (Elf32_External_gptab);
14707                    gpentry < size;
14708                    gpentry += sizeof (Elf32_External_gptab))
14709                 {
14710                   Elf32_External_gptab ext_gptab;
14711                   Elf32_gptab int_gptab;
14712                   unsigned long val;
14713                   unsigned long add;
14714                   bfd_boolean exact;
14715                   unsigned int look;
14716
14717                   if (! (bfd_get_section_contents
14718                          (input_bfd, input_section, &ext_gptab, gpentry,
14719                           sizeof (Elf32_External_gptab))))
14720                     {
14721                       free (tab);
14722                       return FALSE;
14723                     }
14724
14725                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14726                                                 &int_gptab);
14727                   val = int_gptab.gt_entry.gt_g_value;
14728                   add = int_gptab.gt_entry.gt_bytes - last;
14729
14730                   exact = FALSE;
14731                   for (look = 1; look < c; look++)
14732                     {
14733                       if (tab[look].gt_entry.gt_g_value >= val)
14734                         tab[look].gt_entry.gt_bytes += add;
14735
14736                       if (tab[look].gt_entry.gt_g_value == val)
14737                         exact = TRUE;
14738                     }
14739
14740                   if (! exact)
14741                     {
14742                       Elf32_gptab *new_tab;
14743                       unsigned int max;
14744
14745                       /* We need a new table entry.  */
14746                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14747                       new_tab = bfd_realloc (tab, amt);
14748                       if (new_tab == NULL)
14749                         {
14750                           free (tab);
14751                           return FALSE;
14752                         }
14753                       tab = new_tab;
14754                       tab[c].gt_entry.gt_g_value = val;
14755                       tab[c].gt_entry.gt_bytes = add;
14756
14757                       /* Merge in the size for the next smallest -G
14758                          value, since that will be implied by this new
14759                          value.  */
14760                       max = 0;
14761                       for (look = 1; look < c; look++)
14762                         {
14763                           if (tab[look].gt_entry.gt_g_value < val
14764                               && (max == 0
14765                                   || (tab[look].gt_entry.gt_g_value
14766                                       > tab[max].gt_entry.gt_g_value)))
14767                             max = look;
14768                         }
14769                       if (max != 0)
14770                         tab[c].gt_entry.gt_bytes +=
14771                           tab[max].gt_entry.gt_bytes;
14772
14773                       ++c;
14774                     }
14775
14776                   last = int_gptab.gt_entry.gt_bytes;
14777                 }
14778
14779               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14780                  elf_link_input_bfd ignores this section.  */
14781               input_section->flags &= ~SEC_HAS_CONTENTS;
14782             }
14783
14784           /* The table must be sorted by -G value.  */
14785           if (c > 2)
14786             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14787
14788           /* Swap out the table.  */
14789           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14790           ext_tab = bfd_alloc (abfd, amt);
14791           if (ext_tab == NULL)
14792             {
14793               free (tab);
14794               return FALSE;
14795             }
14796
14797           for (j = 0; j < c; j++)
14798             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14799           free (tab);
14800
14801           o->size = c * sizeof (Elf32_External_gptab);
14802           o->contents = (bfd_byte *) ext_tab;
14803
14804           /* Skip this section later on (I don't think this currently
14805              matters, but someday it might).  */
14806           o->map_head.link_order = NULL;
14807         }
14808     }
14809
14810   /* Invoke the regular ELF backend linker to do all the work.  */
14811   if (!bfd_elf_final_link (abfd, info))
14812     return FALSE;
14813
14814   /* Now write out the computed sections.  */
14815
14816   if (abiflags_sec != NULL)
14817     {
14818       Elf_External_ABIFlags_v0 ext;
14819       Elf_Internal_ABIFlags_v0 *abiflags;
14820
14821       abiflags = &mips_elf_tdata (abfd)->abiflags;
14822
14823       /* Set up the abiflags if no valid input sections were found.  */
14824       if (!mips_elf_tdata (abfd)->abiflags_valid)
14825         {
14826           infer_mips_abiflags (abfd, abiflags);
14827           mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14828         }
14829       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14830       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14831         return FALSE;
14832     }
14833
14834   if (reginfo_sec != NULL)
14835     {
14836       Elf32_External_RegInfo ext;
14837
14838       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14839       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14840         return FALSE;
14841     }
14842
14843   if (mdebug_sec != NULL)
14844     {
14845       BFD_ASSERT (abfd->output_has_begun);
14846       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14847                                                swap, info,
14848                                                mdebug_sec->filepos))
14849         return FALSE;
14850
14851       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14852     }
14853
14854   if (gptab_data_sec != NULL)
14855     {
14856       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14857                                       gptab_data_sec->contents,
14858                                       0, gptab_data_sec->size))
14859         return FALSE;
14860     }
14861
14862   if (gptab_bss_sec != NULL)
14863     {
14864       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14865                                       gptab_bss_sec->contents,
14866                                       0, gptab_bss_sec->size))
14867         return FALSE;
14868     }
14869
14870   if (SGI_COMPAT (abfd))
14871     {
14872       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14873       if (rtproc_sec != NULL)
14874         {
14875           if (! bfd_set_section_contents (abfd, rtproc_sec,
14876                                           rtproc_sec->contents,
14877                                           0, rtproc_sec->size))
14878             return FALSE;
14879         }
14880     }
14881
14882   return TRUE;
14883 }
14884 \f
14885 /* Merge object file header flags from IBFD into OBFD.  Raise an error
14886    if there are conflicting settings.  */
14887
14888 static bfd_boolean
14889 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
14890 {
14891   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
14892   flagword old_flags;
14893   flagword new_flags;
14894   bfd_boolean ok;
14895
14896   new_flags = elf_elfheader (ibfd)->e_flags;
14897   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14898   old_flags = elf_elfheader (obfd)->e_flags;
14899
14900   /* Check flag compatibility.  */
14901
14902   new_flags &= ~EF_MIPS_NOREORDER;
14903   old_flags &= ~EF_MIPS_NOREORDER;
14904
14905   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14906      doesn't seem to matter.  */
14907   new_flags &= ~EF_MIPS_XGOT;
14908   old_flags &= ~EF_MIPS_XGOT;
14909
14910   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14911      just be able to ignore this.  */
14912   new_flags &= ~EF_MIPS_UCODE;
14913   old_flags &= ~EF_MIPS_UCODE;
14914
14915   /* DSOs should only be linked with CPIC code.  */
14916   if ((ibfd->flags & DYNAMIC) != 0)
14917     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14918
14919   if (new_flags == old_flags)
14920     return TRUE;
14921
14922   ok = TRUE;
14923
14924   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14925       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14926     {
14927       (*_bfd_error_handler)
14928         (_("%B: warning: linking abicalls files with non-abicalls files"),
14929          ibfd);
14930       ok = TRUE;
14931     }
14932
14933   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14934     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14935   if (! (new_flags & EF_MIPS_PIC))
14936     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14937
14938   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14939   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14940
14941   /* Compare the ISAs.  */
14942   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14943     {
14944       (*_bfd_error_handler)
14945         (_("%B: linking 32-bit code with 64-bit code"),
14946          ibfd);
14947       ok = FALSE;
14948     }
14949   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14950     {
14951       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14952       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14953         {
14954           /* Copy the architecture info from IBFD to OBFD.  Also copy
14955              the 32-bit flag (if set) so that we continue to recognise
14956              OBFD as a 32-bit binary.  */
14957           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14958           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14959           elf_elfheader (obfd)->e_flags
14960             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14961
14962           /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
14963           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
14964
14965           /* Copy across the ABI flags if OBFD doesn't use them
14966              and if that was what caused us to treat IBFD as 32-bit.  */
14967           if ((old_flags & EF_MIPS_ABI) == 0
14968               && mips_32bit_flags_p (new_flags)
14969               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14970             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14971         }
14972       else
14973         {
14974           /* The ISAs aren't compatible.  */
14975           (*_bfd_error_handler)
14976             (_("%B: linking %s module with previous %s modules"),
14977              ibfd,
14978              bfd_printable_name (ibfd),
14979              bfd_printable_name (obfd));
14980           ok = FALSE;
14981         }
14982     }
14983
14984   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14985   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14986
14987   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14988      does set EI_CLASS differently from any 32-bit ABI.  */
14989   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14990       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14991           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14992     {
14993       /* Only error if both are set (to different values).  */
14994       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14995           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14996               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14997         {
14998           (*_bfd_error_handler)
14999             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15000              ibfd,
15001              elf_mips_abi_name (ibfd),
15002              elf_mips_abi_name (obfd));
15003           ok = FALSE;
15004         }
15005       new_flags &= ~EF_MIPS_ABI;
15006       old_flags &= ~EF_MIPS_ABI;
15007     }
15008
15009   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15010      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15011   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15012     {
15013       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15014       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15015       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15016       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15017       int micro_mis = old_m16 && new_micro;
15018       int m16_mis = old_micro && new_m16;
15019
15020       if (m16_mis || micro_mis)
15021         {
15022           (*_bfd_error_handler)
15023             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15024              ibfd,
15025              m16_mis ? "MIPS16" : "microMIPS",
15026              m16_mis ? "microMIPS" : "MIPS16");
15027           ok = FALSE;
15028         }
15029
15030       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15031
15032       new_flags &= ~ EF_MIPS_ARCH_ASE;
15033       old_flags &= ~ EF_MIPS_ARCH_ASE;
15034     }
15035
15036   /* Compare NaN encodings.  */
15037   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15038     {
15039       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15040                           ibfd,
15041                           (new_flags & EF_MIPS_NAN2008
15042                            ? "-mnan=2008" : "-mnan=legacy"),
15043                           (old_flags & EF_MIPS_NAN2008
15044                            ? "-mnan=2008" : "-mnan=legacy"));
15045       ok = FALSE;
15046       new_flags &= ~EF_MIPS_NAN2008;
15047       old_flags &= ~EF_MIPS_NAN2008;
15048     }
15049
15050   /* Compare FP64 state.  */
15051   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15052     {
15053       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15054                           ibfd,
15055                           (new_flags & EF_MIPS_FP64
15056                            ? "-mfp64" : "-mfp32"),
15057                           (old_flags & EF_MIPS_FP64
15058                            ? "-mfp64" : "-mfp32"));
15059       ok = FALSE;
15060       new_flags &= ~EF_MIPS_FP64;
15061       old_flags &= ~EF_MIPS_FP64;
15062     }
15063
15064   /* Warn about any other mismatches */
15065   if (new_flags != old_flags)
15066     {
15067       (*_bfd_error_handler)
15068         (_("%B: uses different e_flags (0x%lx) fields than previous modules "
15069            "(0x%lx)"),
15070          ibfd, (unsigned long) new_flags,
15071          (unsigned long) old_flags);
15072       ok = FALSE;
15073     }
15074
15075   return ok;
15076 }
15077
15078 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15079    there are conflicting attributes.  */
15080 static bfd_boolean
15081 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15082 {
15083   obj_attribute *in_attr;
15084   obj_attribute *out_attr;
15085   bfd *abi_fp_bfd;
15086   bfd *abi_msa_bfd;
15087
15088   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15089   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15090   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15091     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15092
15093   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15094   if (!abi_msa_bfd
15095       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15096     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15097
15098   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15099     {
15100       /* This is the first object.  Copy the attributes.  */
15101       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15102
15103       /* Use the Tag_null value to indicate the attributes have been
15104          initialized.  */
15105       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15106
15107       return TRUE;
15108     }
15109
15110   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15111      non-conflicting ones.  */
15112   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15113   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15114     {
15115       int out_fp, in_fp;
15116
15117       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15118       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15119       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15120       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15121         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15122       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15123                && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15124                    || in_fp == Val_GNU_MIPS_ABI_FP_64
15125                    || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15126         {
15127           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15128           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15129         }
15130       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15131                && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15132                    || out_fp == Val_GNU_MIPS_ABI_FP_64
15133                    || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15134         /* Keep the current setting.  */;
15135       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15136                && in_fp == Val_GNU_MIPS_ABI_FP_64)
15137         {
15138           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15139           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15140         }
15141       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15142                && out_fp == Val_GNU_MIPS_ABI_FP_64)
15143         /* Keep the current setting.  */;
15144       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15145         {
15146           const char *out_string, *in_string;
15147
15148           out_string = _bfd_mips_fp_abi_string (out_fp);
15149           in_string = _bfd_mips_fp_abi_string (in_fp);
15150           /* First warn about cases involving unrecognised ABIs.  */
15151           if (!out_string && !in_string)
15152             _bfd_error_handler
15153               (_("Warning: %B uses unknown floating point ABI %d "
15154                  "(set by %B), %B uses unknown floating point ABI %d"),
15155                obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15156           else if (!out_string)
15157             _bfd_error_handler
15158               (_("Warning: %B uses unknown floating point ABI %d "
15159                  "(set by %B), %B uses %s"),
15160                obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15161           else if (!in_string)
15162             _bfd_error_handler
15163               (_("Warning: %B uses %s (set by %B), "
15164                  "%B uses unknown floating point ABI %d"),
15165                obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15166           else
15167             {
15168               /* If one of the bfds is soft-float, the other must be
15169                  hard-float.  The exact choice of hard-float ABI isn't
15170                  really relevant to the error message.  */
15171               if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15172                 out_string = "-mhard-float";
15173               else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15174                 in_string = "-mhard-float";
15175               _bfd_error_handler
15176                 (_("Warning: %B uses %s (set by %B), %B uses %s"),
15177                  obfd, abi_fp_bfd, ibfd, out_string, in_string);
15178             }
15179         }
15180     }
15181
15182   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15183      non-conflicting ones.  */
15184   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15185     {
15186       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15187       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15188         out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15189       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15190         switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15191           {
15192           case Val_GNU_MIPS_ABI_MSA_128:
15193             _bfd_error_handler
15194               (_("Warning: %B uses %s (set by %B), "
15195                  "%B uses unknown MSA ABI %d"),
15196                obfd, abi_msa_bfd, ibfd,
15197                "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15198             break;
15199
15200           default:
15201             switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15202               {
15203               case Val_GNU_MIPS_ABI_MSA_128:
15204                 _bfd_error_handler
15205                   (_("Warning: %B uses unknown MSA ABI %d "
15206                      "(set by %B), %B uses %s"),
15207                      obfd, abi_msa_bfd, ibfd,
15208                      out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15209                   break;
15210
15211               default:
15212                 _bfd_error_handler
15213                   (_("Warning: %B uses unknown MSA ABI %d "
15214                      "(set by %B), %B uses unknown MSA ABI %d"),
15215                    obfd, abi_msa_bfd, ibfd,
15216                    out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15217                    in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15218                 break;
15219               }
15220           }
15221     }
15222
15223   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15224   return _bfd_elf_merge_object_attributes (ibfd, obfd);
15225 }
15226
15227 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15228    there are conflicting settings.  */
15229
15230 static bfd_boolean
15231 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15232 {
15233   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15234   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15235   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15236
15237   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15238   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15239
15240 #define max(a, b) ((a) > (b) ? (a) : (b))
15241   /* Merge abiflags.  */
15242   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15243                                        in_tdata->abiflags.isa_level);
15244   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15245                                      in_tdata->abiflags.isa_rev);
15246   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15247                                       in_tdata->abiflags.gpr_size);
15248   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15249                                        in_tdata->abiflags.cpr1_size);
15250   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15251                                        in_tdata->abiflags.cpr2_size);
15252 #undef max
15253   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15254   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15255
15256   return TRUE;
15257 }
15258
15259 /* Merge backend specific data from an object file to the output
15260    object file when linking.  */
15261
15262 bfd_boolean
15263 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15264 {
15265   struct mips_elf_obj_tdata *out_tdata;
15266   struct mips_elf_obj_tdata *in_tdata;
15267   bfd_boolean null_input_bfd = TRUE;
15268   asection *sec;
15269   bfd_boolean ok;
15270
15271   /* Check if we have the same endianness.  */
15272   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15273     {
15274       (*_bfd_error_handler)
15275         (_("%B: endianness incompatible with that of the selected emulation"),
15276          ibfd);
15277       return FALSE;
15278     }
15279
15280   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15281     return TRUE;
15282
15283   in_tdata = mips_elf_tdata (ibfd);
15284   out_tdata = mips_elf_tdata (obfd);
15285
15286   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15287     {
15288       (*_bfd_error_handler)
15289         (_("%B: ABI is incompatible with that of the selected emulation"),
15290          ibfd);
15291       return FALSE;
15292     }
15293
15294   /* Check to see if the input BFD actually contains any sections.  If not,
15295      then it has no attributes, and its flags may not have been initialized
15296      either, but it cannot actually cause any incompatibility.  */
15297   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15298     {
15299       /* Ignore synthetic sections and empty .text, .data and .bss sections
15300          which are automatically generated by gas.  Also ignore fake
15301          (s)common sections, since merely defining a common symbol does
15302          not affect compatibility.  */
15303       if ((sec->flags & SEC_IS_COMMON) == 0
15304           && strcmp (sec->name, ".reginfo")
15305           && strcmp (sec->name, ".mdebug")
15306           && (sec->size != 0
15307               || (strcmp (sec->name, ".text")
15308                   && strcmp (sec->name, ".data")
15309                   && strcmp (sec->name, ".bss"))))
15310         {
15311           null_input_bfd = FALSE;
15312           break;
15313         }
15314     }
15315   if (null_input_bfd)
15316     return TRUE;
15317
15318   /* Populate abiflags using existing information.  */
15319   if (in_tdata->abiflags_valid)
15320     {
15321       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15322       Elf_Internal_ABIFlags_v0 in_abiflags;
15323       Elf_Internal_ABIFlags_v0 abiflags;
15324
15325       /* Set up the FP ABI attribute from the abiflags if it is not already
15326          set.  */
15327       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15328         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15329
15330       infer_mips_abiflags (ibfd, &abiflags);
15331       in_abiflags = in_tdata->abiflags;
15332
15333       /* It is not possible to infer the correct ISA revision
15334          for R3 or R5 so drop down to R2 for the checks.  */
15335       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15336         in_abiflags.isa_rev = 2;
15337
15338       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15339           < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15340         (*_bfd_error_handler)
15341           (_("%B: warning: Inconsistent ISA between e_flags and "
15342              ".MIPS.abiflags"), ibfd);
15343       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15344           && in_abiflags.fp_abi != abiflags.fp_abi)
15345         (*_bfd_error_handler)
15346           (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15347              ".MIPS.abiflags"), ibfd);
15348       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15349         (*_bfd_error_handler)
15350           (_("%B: warning: Inconsistent ASEs between e_flags and "
15351              ".MIPS.abiflags"), ibfd);
15352       /* The isa_ext is allowed to be an extension of what can be inferred
15353          from e_flags.  */
15354       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15355                                 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15356         (*_bfd_error_handler)
15357           (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15358              ".MIPS.abiflags"), ibfd);
15359       if (in_abiflags.flags2 != 0)
15360         (*_bfd_error_handler)
15361           (_("%B: warning: Unexpected flag in the flags2 field of "
15362              ".MIPS.abiflags (0x%lx)"), ibfd,
15363            (unsigned long) in_abiflags.flags2);
15364     }
15365   else
15366     {
15367       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15368       in_tdata->abiflags_valid = TRUE;
15369     }
15370
15371   if (!out_tdata->abiflags_valid)
15372     {
15373       /* Copy input abiflags if output abiflags are not already valid.  */
15374       out_tdata->abiflags = in_tdata->abiflags;
15375       out_tdata->abiflags_valid = TRUE;
15376     }
15377
15378   if (! elf_flags_init (obfd))
15379     {
15380       elf_flags_init (obfd) = TRUE;
15381       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15382       elf_elfheader (obfd)->e_ident[EI_CLASS]
15383         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15384
15385       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15386           && (bfd_get_arch_info (obfd)->the_default
15387               || mips_mach_extends_p (bfd_get_mach (obfd),
15388                                       bfd_get_mach (ibfd))))
15389         {
15390           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15391                                    bfd_get_mach (ibfd)))
15392             return FALSE;
15393
15394           /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15395           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15396         }
15397
15398       ok = TRUE;
15399     }
15400   else
15401     ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15402
15403   ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15404
15405   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15406
15407   if (!ok)
15408     {
15409       bfd_set_error (bfd_error_bad_value);
15410       return FALSE;
15411     }
15412
15413   return TRUE;
15414 }
15415
15416 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15417
15418 bfd_boolean
15419 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15420 {
15421   BFD_ASSERT (!elf_flags_init (abfd)
15422               || elf_elfheader (abfd)->e_flags == flags);
15423
15424   elf_elfheader (abfd)->e_flags = flags;
15425   elf_flags_init (abfd) = TRUE;
15426   return TRUE;
15427 }
15428
15429 char *
15430 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15431 {
15432   switch (dtag)
15433     {
15434     default: return "";
15435     case DT_MIPS_RLD_VERSION:
15436       return "MIPS_RLD_VERSION";
15437     case DT_MIPS_TIME_STAMP:
15438       return "MIPS_TIME_STAMP";
15439     case DT_MIPS_ICHECKSUM:
15440       return "MIPS_ICHECKSUM";
15441     case DT_MIPS_IVERSION:
15442       return "MIPS_IVERSION";
15443     case DT_MIPS_FLAGS:
15444       return "MIPS_FLAGS";
15445     case DT_MIPS_BASE_ADDRESS:
15446       return "MIPS_BASE_ADDRESS";
15447     case DT_MIPS_MSYM:
15448       return "MIPS_MSYM";
15449     case DT_MIPS_CONFLICT:
15450       return "MIPS_CONFLICT";
15451     case DT_MIPS_LIBLIST:
15452       return "MIPS_LIBLIST";
15453     case DT_MIPS_LOCAL_GOTNO:
15454       return "MIPS_LOCAL_GOTNO";
15455     case DT_MIPS_CONFLICTNO:
15456       return "MIPS_CONFLICTNO";
15457     case DT_MIPS_LIBLISTNO:
15458       return "MIPS_LIBLISTNO";
15459     case DT_MIPS_SYMTABNO:
15460       return "MIPS_SYMTABNO";
15461     case DT_MIPS_UNREFEXTNO:
15462       return "MIPS_UNREFEXTNO";
15463     case DT_MIPS_GOTSYM:
15464       return "MIPS_GOTSYM";
15465     case DT_MIPS_HIPAGENO:
15466       return "MIPS_HIPAGENO";
15467     case DT_MIPS_RLD_MAP:
15468       return "MIPS_RLD_MAP";
15469     case DT_MIPS_RLD_MAP_REL:
15470       return "MIPS_RLD_MAP_REL";
15471     case DT_MIPS_DELTA_CLASS:
15472       return "MIPS_DELTA_CLASS";
15473     case DT_MIPS_DELTA_CLASS_NO:
15474       return "MIPS_DELTA_CLASS_NO";
15475     case DT_MIPS_DELTA_INSTANCE:
15476       return "MIPS_DELTA_INSTANCE";
15477     case DT_MIPS_DELTA_INSTANCE_NO:
15478       return "MIPS_DELTA_INSTANCE_NO";
15479     case DT_MIPS_DELTA_RELOC:
15480       return "MIPS_DELTA_RELOC";
15481     case DT_MIPS_DELTA_RELOC_NO:
15482       return "MIPS_DELTA_RELOC_NO";
15483     case DT_MIPS_DELTA_SYM:
15484       return "MIPS_DELTA_SYM";
15485     case DT_MIPS_DELTA_SYM_NO:
15486       return "MIPS_DELTA_SYM_NO";
15487     case DT_MIPS_DELTA_CLASSSYM:
15488       return "MIPS_DELTA_CLASSSYM";
15489     case DT_MIPS_DELTA_CLASSSYM_NO:
15490       return "MIPS_DELTA_CLASSSYM_NO";
15491     case DT_MIPS_CXX_FLAGS:
15492       return "MIPS_CXX_FLAGS";
15493     case DT_MIPS_PIXIE_INIT:
15494       return "MIPS_PIXIE_INIT";
15495     case DT_MIPS_SYMBOL_LIB:
15496       return "MIPS_SYMBOL_LIB";
15497     case DT_MIPS_LOCALPAGE_GOTIDX:
15498       return "MIPS_LOCALPAGE_GOTIDX";
15499     case DT_MIPS_LOCAL_GOTIDX:
15500       return "MIPS_LOCAL_GOTIDX";
15501     case DT_MIPS_HIDDEN_GOTIDX:
15502       return "MIPS_HIDDEN_GOTIDX";
15503     case DT_MIPS_PROTECTED_GOTIDX:
15504       return "MIPS_PROTECTED_GOT_IDX";
15505     case DT_MIPS_OPTIONS:
15506       return "MIPS_OPTIONS";
15507     case DT_MIPS_INTERFACE:
15508       return "MIPS_INTERFACE";
15509     case DT_MIPS_DYNSTR_ALIGN:
15510       return "DT_MIPS_DYNSTR_ALIGN";
15511     case DT_MIPS_INTERFACE_SIZE:
15512       return "DT_MIPS_INTERFACE_SIZE";
15513     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15514       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15515     case DT_MIPS_PERF_SUFFIX:
15516       return "DT_MIPS_PERF_SUFFIX";
15517     case DT_MIPS_COMPACT_SIZE:
15518       return "DT_MIPS_COMPACT_SIZE";
15519     case DT_MIPS_GP_VALUE:
15520       return "DT_MIPS_GP_VALUE";
15521     case DT_MIPS_AUX_DYNAMIC:
15522       return "DT_MIPS_AUX_DYNAMIC";
15523     case DT_MIPS_PLTGOT:
15524       return "DT_MIPS_PLTGOT";
15525     case DT_MIPS_RWPLT:
15526       return "DT_MIPS_RWPLT";
15527     }
15528 }
15529
15530 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15531    not known.  */
15532
15533 const char *
15534 _bfd_mips_fp_abi_string (int fp)
15535 {
15536   switch (fp)
15537     {
15538       /* These strings aren't translated because they're simply
15539          option lists.  */
15540     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15541       return "-mdouble-float";
15542
15543     case Val_GNU_MIPS_ABI_FP_SINGLE:
15544       return "-msingle-float";
15545
15546     case Val_GNU_MIPS_ABI_FP_SOFT:
15547       return "-msoft-float";
15548
15549     case Val_GNU_MIPS_ABI_FP_OLD_64:
15550       return _("-mips32r2 -mfp64 (12 callee-saved)");
15551
15552     case Val_GNU_MIPS_ABI_FP_XX:
15553       return "-mfpxx";
15554
15555     case Val_GNU_MIPS_ABI_FP_64:
15556       return "-mgp32 -mfp64";
15557
15558     case Val_GNU_MIPS_ABI_FP_64A:
15559       return "-mgp32 -mfp64 -mno-odd-spreg";
15560
15561     default:
15562       return 0;
15563     }
15564 }
15565
15566 static void
15567 print_mips_ases (FILE *file, unsigned int mask)
15568 {
15569   if (mask & AFL_ASE_DSP)
15570     fputs ("\n\tDSP ASE", file);
15571   if (mask & AFL_ASE_DSPR2)
15572     fputs ("\n\tDSP R2 ASE", file);
15573   if (mask & AFL_ASE_DSPR3)
15574     fputs ("\n\tDSP R3 ASE", file);
15575   if (mask & AFL_ASE_EVA)
15576     fputs ("\n\tEnhanced VA Scheme", file);
15577   if (mask & AFL_ASE_MCU)
15578     fputs ("\n\tMCU (MicroController) ASE", file);
15579   if (mask & AFL_ASE_MDMX)
15580     fputs ("\n\tMDMX ASE", file);
15581   if (mask & AFL_ASE_MIPS3D)
15582     fputs ("\n\tMIPS-3D ASE", file);
15583   if (mask & AFL_ASE_MT)
15584     fputs ("\n\tMT ASE", file);
15585   if (mask & AFL_ASE_SMARTMIPS)
15586     fputs ("\n\tSmartMIPS ASE", file);
15587   if (mask & AFL_ASE_VIRT)
15588     fputs ("\n\tVZ ASE", file);
15589   if (mask & AFL_ASE_MSA)
15590     fputs ("\n\tMSA ASE", file);
15591   if (mask & AFL_ASE_MIPS16)
15592     fputs ("\n\tMIPS16 ASE", file);
15593   if (mask & AFL_ASE_MICROMIPS)
15594     fputs ("\n\tMICROMIPS ASE", file);
15595   if (mask & AFL_ASE_XPA)
15596     fputs ("\n\tXPA ASE", file);
15597   if (mask == 0)
15598     fprintf (file, "\n\t%s", _("None"));
15599   else if ((mask & ~AFL_ASE_MASK) != 0)
15600     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15601 }
15602
15603 static void
15604 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15605 {
15606   switch (isa_ext)
15607     {
15608     case 0:
15609       fputs (_("None"), file);
15610       break;
15611     case AFL_EXT_XLR:
15612       fputs ("RMI XLR", file);
15613       break;
15614     case AFL_EXT_OCTEON3:
15615       fputs ("Cavium Networks Octeon3", file);
15616       break;
15617     case AFL_EXT_OCTEON2:
15618       fputs ("Cavium Networks Octeon2", file);
15619       break;
15620     case AFL_EXT_OCTEONP:
15621       fputs ("Cavium Networks OcteonP", file);
15622       break;
15623     case AFL_EXT_LOONGSON_3A:
15624       fputs ("Loongson 3A", file);
15625       break;
15626     case AFL_EXT_OCTEON:
15627       fputs ("Cavium Networks Octeon", file);
15628       break;
15629     case AFL_EXT_5900:
15630       fputs ("Toshiba R5900", file);
15631       break;
15632     case AFL_EXT_4650:
15633       fputs ("MIPS R4650", file);
15634       break;
15635     case AFL_EXT_4010:
15636       fputs ("LSI R4010", file);
15637       break;
15638     case AFL_EXT_4100:
15639       fputs ("NEC VR4100", file);
15640       break;
15641     case AFL_EXT_3900:
15642       fputs ("Toshiba R3900", file);
15643       break;
15644     case AFL_EXT_10000:
15645       fputs ("MIPS R10000", file);
15646       break;
15647     case AFL_EXT_SB1:
15648       fputs ("Broadcom SB-1", file);
15649       break;
15650     case AFL_EXT_4111:
15651       fputs ("NEC VR4111/VR4181", file);
15652       break;
15653     case AFL_EXT_4120:
15654       fputs ("NEC VR4120", file);
15655       break;
15656     case AFL_EXT_5400:
15657       fputs ("NEC VR5400", file);
15658       break;
15659     case AFL_EXT_5500:
15660       fputs ("NEC VR5500", file);
15661       break;
15662     case AFL_EXT_LOONGSON_2E:
15663       fputs ("ST Microelectronics Loongson 2E", file);
15664       break;
15665     case AFL_EXT_LOONGSON_2F:
15666       fputs ("ST Microelectronics Loongson 2F", file);
15667       break;
15668     default:
15669       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15670       break;
15671     }
15672 }
15673
15674 static void
15675 print_mips_fp_abi_value (FILE *file, int val)
15676 {
15677   switch (val)
15678     {
15679     case Val_GNU_MIPS_ABI_FP_ANY:
15680       fprintf (file, _("Hard or soft float\n"));
15681       break;
15682     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15683       fprintf (file, _("Hard float (double precision)\n"));
15684       break;
15685     case Val_GNU_MIPS_ABI_FP_SINGLE:
15686       fprintf (file, _("Hard float (single precision)\n"));
15687       break;
15688     case Val_GNU_MIPS_ABI_FP_SOFT:
15689       fprintf (file, _("Soft float\n"));
15690       break;
15691     case Val_GNU_MIPS_ABI_FP_OLD_64:
15692       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15693       break;
15694     case Val_GNU_MIPS_ABI_FP_XX:
15695       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15696       break;
15697     case Val_GNU_MIPS_ABI_FP_64:
15698       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15699       break;
15700     case Val_GNU_MIPS_ABI_FP_64A:
15701       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15702       break;
15703     default:
15704       fprintf (file, "??? (%d)\n", val);
15705       break;
15706     }
15707 }
15708
15709 static int
15710 get_mips_reg_size (int reg_size)
15711 {
15712   return (reg_size == AFL_REG_NONE) ? 0
15713          : (reg_size == AFL_REG_32) ? 32
15714          : (reg_size == AFL_REG_64) ? 64
15715          : (reg_size == AFL_REG_128) ? 128
15716          : -1;
15717 }
15718
15719 bfd_boolean
15720 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15721 {
15722   FILE *file = ptr;
15723
15724   BFD_ASSERT (abfd != NULL && ptr != NULL);
15725
15726   /* Print normal ELF private data.  */
15727   _bfd_elf_print_private_bfd_data (abfd, ptr);
15728
15729   /* xgettext:c-format */
15730   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15731
15732   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15733     fprintf (file, _(" [abi=O32]"));
15734   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15735     fprintf (file, _(" [abi=O64]"));
15736   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15737     fprintf (file, _(" [abi=EABI32]"));
15738   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15739     fprintf (file, _(" [abi=EABI64]"));
15740   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15741     fprintf (file, _(" [abi unknown]"));
15742   else if (ABI_N32_P (abfd))
15743     fprintf (file, _(" [abi=N32]"));
15744   else if (ABI_64_P (abfd))
15745     fprintf (file, _(" [abi=64]"));
15746   else
15747     fprintf (file, _(" [no abi set]"));
15748
15749   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15750     fprintf (file, " [mips1]");
15751   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15752     fprintf (file, " [mips2]");
15753   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15754     fprintf (file, " [mips3]");
15755   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15756     fprintf (file, " [mips4]");
15757   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15758     fprintf (file, " [mips5]");
15759   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15760     fprintf (file, " [mips32]");
15761   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15762     fprintf (file, " [mips64]");
15763   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15764     fprintf (file, " [mips32r2]");
15765   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15766     fprintf (file, " [mips64r2]");
15767   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15768     fprintf (file, " [mips32r6]");
15769   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15770     fprintf (file, " [mips64r6]");
15771   else
15772     fprintf (file, _(" [unknown ISA]"));
15773
15774   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15775     fprintf (file, " [mdmx]");
15776
15777   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15778     fprintf (file, " [mips16]");
15779
15780   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15781     fprintf (file, " [micromips]");
15782
15783   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15784     fprintf (file, " [nan2008]");
15785
15786   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15787     fprintf (file, " [old fp64]");
15788
15789   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15790     fprintf (file, " [32bitmode]");
15791   else
15792     fprintf (file, _(" [not 32bitmode]"));
15793
15794   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15795     fprintf (file, " [noreorder]");
15796
15797   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15798     fprintf (file, " [PIC]");
15799
15800   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15801     fprintf (file, " [CPIC]");
15802
15803   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15804     fprintf (file, " [XGOT]");
15805
15806   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15807     fprintf (file, " [UCODE]");
15808
15809   fputc ('\n', file);
15810
15811   if (mips_elf_tdata (abfd)->abiflags_valid)
15812     {
15813       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15814       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15815       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15816       if (abiflags->isa_rev > 1)
15817         fprintf (file, "r%d", abiflags->isa_rev);
15818       fprintf (file, "\nGPR size: %d",
15819                get_mips_reg_size (abiflags->gpr_size));
15820       fprintf (file, "\nCPR1 size: %d",
15821                get_mips_reg_size (abiflags->cpr1_size));
15822       fprintf (file, "\nCPR2 size: %d",
15823                get_mips_reg_size (abiflags->cpr2_size));
15824       fputs ("\nFP ABI: ", file);
15825       print_mips_fp_abi_value (file, abiflags->fp_abi);
15826       fputs ("ISA Extension: ", file);
15827       print_mips_isa_ext (file, abiflags->isa_ext);
15828       fputs ("\nASEs:", file);
15829       print_mips_ases (file, abiflags->ases);
15830       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15831       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15832       fputc ('\n', file);
15833     }
15834
15835   return TRUE;
15836 }
15837
15838 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15839 {
15840   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15841   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15842   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15843   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15844   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15845   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15846   { NULL,                     0,  0, 0,              0 }
15847 };
15848
15849 /* Merge non visibility st_other attributes.  Ensure that the
15850    STO_OPTIONAL flag is copied into h->other, even if this is not a
15851    definiton of the symbol.  */
15852 void
15853 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15854                                       const Elf_Internal_Sym *isym,
15855                                       bfd_boolean definition,
15856                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
15857 {
15858   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15859     {
15860       unsigned char other;
15861
15862       other = (definition ? isym->st_other : h->other);
15863       other &= ~ELF_ST_VISIBILITY (-1);
15864       h->other = other | ELF_ST_VISIBILITY (h->other);
15865     }
15866
15867   if (!definition
15868       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15869     h->other |= STO_OPTIONAL;
15870 }
15871
15872 /* Decide whether an undefined symbol is special and can be ignored.
15873    This is the case for OPTIONAL symbols on IRIX.  */
15874 bfd_boolean
15875 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15876 {
15877   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15878 }
15879
15880 bfd_boolean
15881 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15882 {
15883   return (sym->st_shndx == SHN_COMMON
15884           || sym->st_shndx == SHN_MIPS_ACOMMON
15885           || sym->st_shndx == SHN_MIPS_SCOMMON);
15886 }
15887
15888 /* Return address for Ith PLT stub in section PLT, for relocation REL
15889    or (bfd_vma) -1 if it should not be included.  */
15890
15891 bfd_vma
15892 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15893                            const arelent *rel ATTRIBUTE_UNUSED)
15894 {
15895   return (plt->vma
15896           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15897           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15898 }
15899
15900 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15901    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15902    and .got.plt and also the slots may be of a different size each we walk
15903    the PLT manually fetching instructions and matching them against known
15904    patterns.  To make things easier standard MIPS slots, if any, always come
15905    first.  As we don't create proper ELF symbols we use the UDATA.I member
15906    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15907    with the ST_OTHER member of the ELF symbol.  */
15908
15909 long
15910 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15911                                     long symcount ATTRIBUTE_UNUSED,
15912                                     asymbol **syms ATTRIBUTE_UNUSED,
15913                                     long dynsymcount, asymbol **dynsyms,
15914                                     asymbol **ret)
15915 {
15916   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15917   static const char microsuffix[] = "@micromipsplt";
15918   static const char m16suffix[] = "@mips16plt";
15919   static const char mipssuffix[] = "@plt";
15920
15921   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15922   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15923   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15924   Elf_Internal_Shdr *hdr;
15925   bfd_byte *plt_data;
15926   bfd_vma plt_offset;
15927   unsigned int other;
15928   bfd_vma entry_size;
15929   bfd_vma plt0_size;
15930   asection *relplt;
15931   bfd_vma opcode;
15932   asection *plt;
15933   asymbol *send;
15934   size_t size;
15935   char *names;
15936   long counti;
15937   arelent *p;
15938   asymbol *s;
15939   char *nend;
15940   long count;
15941   long pi;
15942   long i;
15943   long n;
15944
15945   *ret = NULL;
15946
15947   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15948     return 0;
15949
15950   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15951   if (relplt == NULL)
15952     return 0;
15953
15954   hdr = &elf_section_data (relplt)->this_hdr;
15955   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15956     return 0;
15957
15958   plt = bfd_get_section_by_name (abfd, ".plt");
15959   if (plt == NULL)
15960     return 0;
15961
15962   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15963   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15964     return -1;
15965   p = relplt->relocation;
15966
15967   /* Calculating the exact amount of space required for symbols would
15968      require two passes over the PLT, so just pessimise assuming two
15969      PLT slots per relocation.  */
15970   count = relplt->size / hdr->sh_entsize;
15971   counti = count * bed->s->int_rels_per_ext_rel;
15972   size = 2 * count * sizeof (asymbol);
15973   size += count * (sizeof (mipssuffix) +
15974                    (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
15975   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
15976     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
15977
15978   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
15979   size += sizeof (asymbol) + sizeof (pltname);
15980
15981   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
15982     return -1;
15983
15984   if (plt->size < 16)
15985     return -1;
15986
15987   s = *ret = bfd_malloc (size);
15988   if (s == NULL)
15989     return -1;
15990   send = s + 2 * count + 1;
15991
15992   names = (char *) send;
15993   nend = (char *) s + size;
15994   n = 0;
15995
15996   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
15997   if (opcode == 0x3302fffe)
15998     {
15999       if (!micromips_p)
16000         return -1;
16001       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16002       other = STO_MICROMIPS;
16003     }
16004   else if (opcode == 0x0398c1d0)
16005     {
16006       if (!micromips_p)
16007         return -1;
16008       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16009       other = STO_MICROMIPS;
16010     }
16011   else
16012     {
16013       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16014       other = 0;
16015     }
16016
16017   s->the_bfd = abfd;
16018   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16019   s->section = plt;
16020   s->value = 0;
16021   s->name = names;
16022   s->udata.i = other;
16023   memcpy (names, pltname, sizeof (pltname));
16024   names += sizeof (pltname);
16025   ++s, ++n;
16026
16027   pi = 0;
16028   for (plt_offset = plt0_size;
16029        plt_offset + 8 <= plt->size && s < send;
16030        plt_offset += entry_size)
16031     {
16032       bfd_vma gotplt_addr;
16033       const char *suffix;
16034       bfd_vma gotplt_hi;
16035       bfd_vma gotplt_lo;
16036       size_t suffixlen;
16037
16038       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16039
16040       /* Check if the second word matches the expected MIPS16 instruction.  */
16041       if (opcode == 0x651aeb00)
16042         {
16043           if (micromips_p)
16044             return -1;
16045           /* Truncated table???  */
16046           if (plt_offset + 16 > plt->size)
16047             break;
16048           gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16049           entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16050           suffixlen = sizeof (m16suffix);
16051           suffix = m16suffix;
16052           other = STO_MIPS16;
16053         }
16054       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16055       else if (opcode == 0xff220000)
16056         {
16057           if (!micromips_p)
16058             return -1;
16059           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16060           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16061           gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16062           gotplt_lo <<= 2;
16063           gotplt_addr = gotplt_hi + gotplt_lo;
16064           gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16065           entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16066           suffixlen = sizeof (microsuffix);
16067           suffix = microsuffix;
16068           other = STO_MICROMIPS;
16069         }
16070       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16071       else if ((opcode & 0xffff0000) == 0xff2f0000)
16072         {
16073           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16074           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16075           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16076           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16077           gotplt_addr = gotplt_hi + gotplt_lo;
16078           entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16079           suffixlen = sizeof (microsuffix);
16080           suffix = microsuffix;
16081           other = STO_MICROMIPS;
16082         }
16083       /* Otherwise assume standard MIPS code.  */
16084       else
16085         {
16086           gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16087           gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16088           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16089           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16090           gotplt_addr = gotplt_hi + gotplt_lo;
16091           entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16092           suffixlen = sizeof (mipssuffix);
16093           suffix = mipssuffix;
16094           other = 0;
16095         }
16096       /* Truncated table???  */
16097       if (plt_offset + entry_size > plt->size)
16098         break;
16099
16100       for (i = 0;
16101            i < count && p[pi].address != gotplt_addr;
16102            i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16103
16104       if (i < count)
16105         {
16106           size_t namelen;
16107           size_t len;
16108
16109           *s = **p[pi].sym_ptr_ptr;
16110           /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16111              we are defining a symbol, ensure one of them is set.  */
16112           if ((s->flags & BSF_LOCAL) == 0)
16113             s->flags |= BSF_GLOBAL;
16114           s->flags |= BSF_SYNTHETIC;
16115           s->section = plt;
16116           s->value = plt_offset;
16117           s->name = names;
16118           s->udata.i = other;
16119
16120           len = strlen ((*p[pi].sym_ptr_ptr)->name);
16121           namelen = len + suffixlen;
16122           if (names + namelen > nend)
16123             break;
16124
16125           memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16126           names += len;
16127           memcpy (names, suffix, suffixlen);
16128           names += suffixlen;
16129
16130           ++s, ++n;
16131           pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16132         }
16133     }
16134
16135   free (plt_data);
16136
16137   return n;
16138 }
16139
16140 void
16141 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16142 {
16143   struct mips_elf_link_hash_table *htab;
16144   Elf_Internal_Ehdr *i_ehdrp;
16145
16146   i_ehdrp = elf_elfheader (abfd);
16147   if (link_info)
16148     {
16149       htab = mips_elf_hash_table (link_info);
16150       BFD_ASSERT (htab != NULL);
16151
16152       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16153         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16154     }
16155
16156   _bfd_elf_post_process_headers (abfd, link_info);
16157
16158   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16159       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16160     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16161
16162   if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16163     i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16164 }
16165
16166 int
16167 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16168 {
16169   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16170 }
16171
16172 /* Return the opcode for can't unwind.  */
16173
16174 int
16175 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16176 {
16177   return COMPACT_EH_CANT_UNWIND_OPCODE;
16178 }