MIPS/BFD: Include the addend in JALX's target alignment verification
[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 aligned_pcrel_reloc_p (int r_type)
2220 {
2221   return (r_type == R_MIPS_PC18_S3
2222           || r_type == R_MIPS_PC19_S2);
2223 }
2224
2225 static inline bfd_boolean
2226 micromips_branch_reloc_p (int r_type)
2227 {
2228   return (r_type == R_MICROMIPS_26_S1
2229           || r_type == R_MICROMIPS_PC16_S1
2230           || r_type == R_MICROMIPS_PC10_S1
2231           || r_type == R_MICROMIPS_PC7_S1);
2232 }
2233
2234 static inline bfd_boolean
2235 tls_gd_reloc_p (unsigned int r_type)
2236 {
2237   return (r_type == R_MIPS_TLS_GD
2238           || r_type == R_MIPS16_TLS_GD
2239           || r_type == R_MICROMIPS_TLS_GD);
2240 }
2241
2242 static inline bfd_boolean
2243 tls_ldm_reloc_p (unsigned int r_type)
2244 {
2245   return (r_type == R_MIPS_TLS_LDM
2246           || r_type == R_MIPS16_TLS_LDM
2247           || r_type == R_MICROMIPS_TLS_LDM);
2248 }
2249
2250 static inline bfd_boolean
2251 tls_gottprel_reloc_p (unsigned int r_type)
2252 {
2253   return (r_type == R_MIPS_TLS_GOTTPREL
2254           || r_type == R_MIPS16_TLS_GOTTPREL
2255           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2256 }
2257
2258 void
2259 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2260                                bfd_boolean jal_shuffle, bfd_byte *data)
2261 {
2262   bfd_vma first, second, val;
2263
2264   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2265     return;
2266
2267   /* Pick up the first and second halfwords of the instruction.  */
2268   first = bfd_get_16 (abfd, data);
2269   second = bfd_get_16 (abfd, data + 2);
2270   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2271     val = first << 16 | second;
2272   else if (r_type != R_MIPS16_26)
2273     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2274            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2275   else
2276     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2277            | ((first & 0x1f) << 21) | second);
2278   bfd_put_32 (abfd, val, data);
2279 }
2280
2281 void
2282 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2283                              bfd_boolean jal_shuffle, bfd_byte *data)
2284 {
2285   bfd_vma first, second, val;
2286
2287   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2288     return;
2289
2290   val = bfd_get_32 (abfd, data);
2291   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2292     {
2293       second = val & 0xffff;
2294       first = val >> 16;
2295     }
2296   else if (r_type != R_MIPS16_26)
2297     {
2298       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2299       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2300     }
2301   else
2302     {
2303       second = val & 0xffff;
2304       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2305                | ((val >> 21) & 0x1f);
2306     }
2307   bfd_put_16 (abfd, second, data + 2);
2308   bfd_put_16 (abfd, first, data);
2309 }
2310
2311 bfd_reloc_status_type
2312 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2313                                arelent *reloc_entry, asection *input_section,
2314                                bfd_boolean relocatable, void *data, bfd_vma gp)
2315 {
2316   bfd_vma relocation;
2317   bfd_signed_vma val;
2318   bfd_reloc_status_type status;
2319
2320   if (bfd_is_com_section (symbol->section))
2321     relocation = 0;
2322   else
2323     relocation = symbol->value;
2324
2325   relocation += symbol->section->output_section->vma;
2326   relocation += symbol->section->output_offset;
2327
2328   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2329     return bfd_reloc_outofrange;
2330
2331   /* Set val to the offset into the section or symbol.  */
2332   val = reloc_entry->addend;
2333
2334   _bfd_mips_elf_sign_extend (val, 16);
2335
2336   /* Adjust val for the final section location and GP value.  If we
2337      are producing relocatable output, we don't want to do this for
2338      an external symbol.  */
2339   if (! relocatable
2340       || (symbol->flags & BSF_SECTION_SYM) != 0)
2341     val += relocation - gp;
2342
2343   if (reloc_entry->howto->partial_inplace)
2344     {
2345       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2346                                        (bfd_byte *) data
2347                                        + reloc_entry->address);
2348       if (status != bfd_reloc_ok)
2349         return status;
2350     }
2351   else
2352     reloc_entry->addend = val;
2353
2354   if (relocatable)
2355     reloc_entry->address += input_section->output_offset;
2356
2357   return bfd_reloc_ok;
2358 }
2359
2360 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2361    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2362    that contains the relocation field and DATA points to the start of
2363    INPUT_SECTION.  */
2364
2365 struct mips_hi16
2366 {
2367   struct mips_hi16 *next;
2368   bfd_byte *data;
2369   asection *input_section;
2370   arelent rel;
2371 };
2372
2373 /* FIXME: This should not be a static variable.  */
2374
2375 static struct mips_hi16 *mips_hi16_list;
2376
2377 /* A howto special_function for REL *HI16 relocations.  We can only
2378    calculate the correct value once we've seen the partnering
2379    *LO16 relocation, so just save the information for later.
2380
2381    The ABI requires that the *LO16 immediately follow the *HI16.
2382    However, as a GNU extension, we permit an arbitrary number of
2383    *HI16s to be associated with a single *LO16.  This significantly
2384    simplies the relocation handling in gcc.  */
2385
2386 bfd_reloc_status_type
2387 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2388                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2389                           asection *input_section, bfd *output_bfd,
2390                           char **error_message ATTRIBUTE_UNUSED)
2391 {
2392   struct mips_hi16 *n;
2393
2394   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2395     return bfd_reloc_outofrange;
2396
2397   n = bfd_malloc (sizeof *n);
2398   if (n == NULL)
2399     return bfd_reloc_outofrange;
2400
2401   n->next = mips_hi16_list;
2402   n->data = data;
2403   n->input_section = input_section;
2404   n->rel = *reloc_entry;
2405   mips_hi16_list = n;
2406
2407   if (output_bfd != NULL)
2408     reloc_entry->address += input_section->output_offset;
2409
2410   return bfd_reloc_ok;
2411 }
2412
2413 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2414    like any other 16-bit relocation when applied to global symbols, but is
2415    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2416
2417 bfd_reloc_status_type
2418 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2419                            void *data, asection *input_section,
2420                            bfd *output_bfd, char **error_message)
2421 {
2422   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2423       || bfd_is_und_section (bfd_get_section (symbol))
2424       || bfd_is_com_section (bfd_get_section (symbol)))
2425     /* The relocation is against a global symbol.  */
2426     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2427                                         input_section, output_bfd,
2428                                         error_message);
2429
2430   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2431                                    input_section, output_bfd, error_message);
2432 }
2433
2434 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2435    is a straightforward 16 bit inplace relocation, but we must deal with
2436    any partnering high-part relocations as well.  */
2437
2438 bfd_reloc_status_type
2439 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2440                           void *data, asection *input_section,
2441                           bfd *output_bfd, char **error_message)
2442 {
2443   bfd_vma vallo;
2444   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2445
2446   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2447     return bfd_reloc_outofrange;
2448
2449   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2450                                  location);
2451   vallo = bfd_get_32 (abfd, location);
2452   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2453                                location);
2454
2455   while (mips_hi16_list != NULL)
2456     {
2457       bfd_reloc_status_type ret;
2458       struct mips_hi16 *hi;
2459
2460       hi = mips_hi16_list;
2461
2462       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2463          want to install the addend in the same way as for a R_MIPS*_HI16
2464          relocation (with a rightshift of 16).  However, since GOT16
2465          relocations can also be used with global symbols, their howto
2466          has a rightshift of 0.  */
2467       if (hi->rel.howto->type == R_MIPS_GOT16)
2468         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2469       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2470         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2471       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2472         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2473
2474       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2475          carry or borrow will induce a change of +1 or -1 in the high part.  */
2476       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2477
2478       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2479                                          hi->input_section, output_bfd,
2480                                          error_message);
2481       if (ret != bfd_reloc_ok)
2482         return ret;
2483
2484       mips_hi16_list = hi->next;
2485       free (hi);
2486     }
2487
2488   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2489                                       input_section, output_bfd,
2490                                       error_message);
2491 }
2492
2493 /* A generic howto special_function.  This calculates and installs the
2494    relocation itself, thus avoiding the oft-discussed problems in
2495    bfd_perform_relocation and bfd_install_relocation.  */
2496
2497 bfd_reloc_status_type
2498 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2499                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2500                              asection *input_section, bfd *output_bfd,
2501                              char **error_message ATTRIBUTE_UNUSED)
2502 {
2503   bfd_signed_vma val;
2504   bfd_reloc_status_type status;
2505   bfd_boolean relocatable;
2506
2507   relocatable = (output_bfd != NULL);
2508
2509   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2510     return bfd_reloc_outofrange;
2511
2512   /* Build up the field adjustment in VAL.  */
2513   val = 0;
2514   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2515     {
2516       /* Either we're calculating the final field value or we have a
2517          relocation against a section symbol.  Add in the section's
2518          offset or address.  */
2519       val += symbol->section->output_section->vma;
2520       val += symbol->section->output_offset;
2521     }
2522
2523   if (!relocatable)
2524     {
2525       /* We're calculating the final field value.  Add in the symbol's value
2526          and, if pc-relative, subtract the address of the field itself.  */
2527       val += symbol->value;
2528       if (reloc_entry->howto->pc_relative)
2529         {
2530           val -= input_section->output_section->vma;
2531           val -= input_section->output_offset;
2532           val -= reloc_entry->address;
2533         }
2534     }
2535
2536   /* VAL is now the final adjustment.  If we're keeping this relocation
2537      in the output file, and if the relocation uses a separate addend,
2538      we just need to add VAL to that addend.  Otherwise we need to add
2539      VAL to the relocation field itself.  */
2540   if (relocatable && !reloc_entry->howto->partial_inplace)
2541     reloc_entry->addend += val;
2542   else
2543     {
2544       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2545
2546       /* Add in the separate addend, if any.  */
2547       val += reloc_entry->addend;
2548
2549       /* Add VAL to the relocation field.  */
2550       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2551                                      location);
2552       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2553                                        location);
2554       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2555                                    location);
2556
2557       if (status != bfd_reloc_ok)
2558         return status;
2559     }
2560
2561   if (relocatable)
2562     reloc_entry->address += input_section->output_offset;
2563
2564   return bfd_reloc_ok;
2565 }
2566 \f
2567 /* Swap an entry in a .gptab section.  Note that these routines rely
2568    on the equivalence of the two elements of the union.  */
2569
2570 static void
2571 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2572                               Elf32_gptab *in)
2573 {
2574   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2575   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2576 }
2577
2578 static void
2579 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2580                                Elf32_External_gptab *ex)
2581 {
2582   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2583   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2584 }
2585
2586 static void
2587 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2588                                 Elf32_External_compact_rel *ex)
2589 {
2590   H_PUT_32 (abfd, in->id1, ex->id1);
2591   H_PUT_32 (abfd, in->num, ex->num);
2592   H_PUT_32 (abfd, in->id2, ex->id2);
2593   H_PUT_32 (abfd, in->offset, ex->offset);
2594   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2595   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2596 }
2597
2598 static void
2599 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2600                            Elf32_External_crinfo *ex)
2601 {
2602   unsigned long l;
2603
2604   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2605        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2606        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2607        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2608   H_PUT_32 (abfd, l, ex->info);
2609   H_PUT_32 (abfd, in->konst, ex->konst);
2610   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2611 }
2612 \f
2613 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2614    routines swap this structure in and out.  They are used outside of
2615    BFD, so they are globally visible.  */
2616
2617 void
2618 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2619                                 Elf32_RegInfo *in)
2620 {
2621   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2622   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2623   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2624   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2625   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2626   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2627 }
2628
2629 void
2630 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2631                                  Elf32_External_RegInfo *ex)
2632 {
2633   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2634   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2635   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2636   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2637   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2638   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2639 }
2640
2641 /* In the 64 bit ABI, the .MIPS.options section holds register
2642    information in an Elf64_Reginfo structure.  These routines swap
2643    them in and out.  They are globally visible because they are used
2644    outside of BFD.  These routines are here so that gas can call them
2645    without worrying about whether the 64 bit ABI has been included.  */
2646
2647 void
2648 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2649                                 Elf64_Internal_RegInfo *in)
2650 {
2651   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2652   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2653   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2654   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2655   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2656   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2657   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2658 }
2659
2660 void
2661 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2662                                  Elf64_External_RegInfo *ex)
2663 {
2664   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2665   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2666   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2667   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2668   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2669   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2670   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2671 }
2672
2673 /* Swap in an options header.  */
2674
2675 void
2676 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2677                               Elf_Internal_Options *in)
2678 {
2679   in->kind = H_GET_8 (abfd, ex->kind);
2680   in->size = H_GET_8 (abfd, ex->size);
2681   in->section = H_GET_16 (abfd, ex->section);
2682   in->info = H_GET_32 (abfd, ex->info);
2683 }
2684
2685 /* Swap out an options header.  */
2686
2687 void
2688 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2689                                Elf_External_Options *ex)
2690 {
2691   H_PUT_8 (abfd, in->kind, ex->kind);
2692   H_PUT_8 (abfd, in->size, ex->size);
2693   H_PUT_16 (abfd, in->section, ex->section);
2694   H_PUT_32 (abfd, in->info, ex->info);
2695 }
2696
2697 /* Swap in an abiflags structure.  */
2698
2699 void
2700 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2701                                   const Elf_External_ABIFlags_v0 *ex,
2702                                   Elf_Internal_ABIFlags_v0 *in)
2703 {
2704   in->version = H_GET_16 (abfd, ex->version);
2705   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2706   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2707   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2708   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2709   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2710   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2711   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2712   in->ases = H_GET_32 (abfd, ex->ases);
2713   in->flags1 = H_GET_32 (abfd, ex->flags1);
2714   in->flags2 = H_GET_32 (abfd, ex->flags2);
2715 }
2716
2717 /* Swap out an abiflags structure.  */
2718
2719 void
2720 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2721                                    const Elf_Internal_ABIFlags_v0 *in,
2722                                    Elf_External_ABIFlags_v0 *ex)
2723 {
2724   H_PUT_16 (abfd, in->version, ex->version);
2725   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2726   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2727   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2728   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2729   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2730   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2731   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2732   H_PUT_32 (abfd, in->ases, ex->ases);
2733   H_PUT_32 (abfd, in->flags1, ex->flags1);
2734   H_PUT_32 (abfd, in->flags2, ex->flags2);
2735 }
2736 \f
2737 /* This function is called via qsort() to sort the dynamic relocation
2738    entries by increasing r_symndx value.  */
2739
2740 static int
2741 sort_dynamic_relocs (const void *arg1, const void *arg2)
2742 {
2743   Elf_Internal_Rela int_reloc1;
2744   Elf_Internal_Rela int_reloc2;
2745   int diff;
2746
2747   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2748   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2749
2750   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2751   if (diff != 0)
2752     return diff;
2753
2754   if (int_reloc1.r_offset < int_reloc2.r_offset)
2755     return -1;
2756   if (int_reloc1.r_offset > int_reloc2.r_offset)
2757     return 1;
2758   return 0;
2759 }
2760
2761 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2762
2763 static int
2764 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2765                         const void *arg2 ATTRIBUTE_UNUSED)
2766 {
2767 #ifdef BFD64
2768   Elf_Internal_Rela int_reloc1[3];
2769   Elf_Internal_Rela int_reloc2[3];
2770
2771   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2772     (reldyn_sorting_bfd, arg1, int_reloc1);
2773   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2774     (reldyn_sorting_bfd, arg2, int_reloc2);
2775
2776   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2777     return -1;
2778   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2779     return 1;
2780
2781   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2782     return -1;
2783   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2784     return 1;
2785   return 0;
2786 #else
2787   abort ();
2788 #endif
2789 }
2790
2791
2792 /* This routine is used to write out ECOFF debugging external symbol
2793    information.  It is called via mips_elf_link_hash_traverse.  The
2794    ECOFF external symbol information must match the ELF external
2795    symbol information.  Unfortunately, at this point we don't know
2796    whether a symbol is required by reloc information, so the two
2797    tables may wind up being different.  We must sort out the external
2798    symbol information before we can set the final size of the .mdebug
2799    section, and we must set the size of the .mdebug section before we
2800    can relocate any sections, and we can't know which symbols are
2801    required by relocation until we relocate the sections.
2802    Fortunately, it is relatively unlikely that any symbol will be
2803    stripped but required by a reloc.  In particular, it can not happen
2804    when generating a final executable.  */
2805
2806 static bfd_boolean
2807 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2808 {
2809   struct extsym_info *einfo = data;
2810   bfd_boolean strip;
2811   asection *sec, *output_section;
2812
2813   if (h->root.indx == -2)
2814     strip = FALSE;
2815   else if ((h->root.def_dynamic
2816             || h->root.ref_dynamic
2817             || h->root.type == bfd_link_hash_new)
2818            && !h->root.def_regular
2819            && !h->root.ref_regular)
2820     strip = TRUE;
2821   else if (einfo->info->strip == strip_all
2822            || (einfo->info->strip == strip_some
2823                && bfd_hash_lookup (einfo->info->keep_hash,
2824                                    h->root.root.root.string,
2825                                    FALSE, FALSE) == NULL))
2826     strip = TRUE;
2827   else
2828     strip = FALSE;
2829
2830   if (strip)
2831     return TRUE;
2832
2833   if (h->esym.ifd == -2)
2834     {
2835       h->esym.jmptbl = 0;
2836       h->esym.cobol_main = 0;
2837       h->esym.weakext = 0;
2838       h->esym.reserved = 0;
2839       h->esym.ifd = ifdNil;
2840       h->esym.asym.value = 0;
2841       h->esym.asym.st = stGlobal;
2842
2843       if (h->root.root.type == bfd_link_hash_undefined
2844           || h->root.root.type == bfd_link_hash_undefweak)
2845         {
2846           const char *name;
2847
2848           /* Use undefined class.  Also, set class and type for some
2849              special symbols.  */
2850           name = h->root.root.root.string;
2851           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2852               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2853             {
2854               h->esym.asym.sc = scData;
2855               h->esym.asym.st = stLabel;
2856               h->esym.asym.value = 0;
2857             }
2858           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2859             {
2860               h->esym.asym.sc = scAbs;
2861               h->esym.asym.st = stLabel;
2862               h->esym.asym.value =
2863                 mips_elf_hash_table (einfo->info)->procedure_count;
2864             }
2865           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2866             {
2867               h->esym.asym.sc = scAbs;
2868               h->esym.asym.st = stLabel;
2869               h->esym.asym.value = elf_gp (einfo->abfd);
2870             }
2871           else
2872             h->esym.asym.sc = scUndefined;
2873         }
2874       else if (h->root.root.type != bfd_link_hash_defined
2875           && h->root.root.type != bfd_link_hash_defweak)
2876         h->esym.asym.sc = scAbs;
2877       else
2878         {
2879           const char *name;
2880
2881           sec = h->root.root.u.def.section;
2882           output_section = sec->output_section;
2883
2884           /* When making a shared library and symbol h is the one from
2885              the another shared library, OUTPUT_SECTION may be null.  */
2886           if (output_section == NULL)
2887             h->esym.asym.sc = scUndefined;
2888           else
2889             {
2890               name = bfd_section_name (output_section->owner, output_section);
2891
2892               if (strcmp (name, ".text") == 0)
2893                 h->esym.asym.sc = scText;
2894               else if (strcmp (name, ".data") == 0)
2895                 h->esym.asym.sc = scData;
2896               else if (strcmp (name, ".sdata") == 0)
2897                 h->esym.asym.sc = scSData;
2898               else if (strcmp (name, ".rodata") == 0
2899                        || strcmp (name, ".rdata") == 0)
2900                 h->esym.asym.sc = scRData;
2901               else if (strcmp (name, ".bss") == 0)
2902                 h->esym.asym.sc = scBss;
2903               else if (strcmp (name, ".sbss") == 0)
2904                 h->esym.asym.sc = scSBss;
2905               else if (strcmp (name, ".init") == 0)
2906                 h->esym.asym.sc = scInit;
2907               else if (strcmp (name, ".fini") == 0)
2908                 h->esym.asym.sc = scFini;
2909               else
2910                 h->esym.asym.sc = scAbs;
2911             }
2912         }
2913
2914       h->esym.asym.reserved = 0;
2915       h->esym.asym.index = indexNil;
2916     }
2917
2918   if (h->root.root.type == bfd_link_hash_common)
2919     h->esym.asym.value = h->root.root.u.c.size;
2920   else if (h->root.root.type == bfd_link_hash_defined
2921            || h->root.root.type == bfd_link_hash_defweak)
2922     {
2923       if (h->esym.asym.sc == scCommon)
2924         h->esym.asym.sc = scBss;
2925       else if (h->esym.asym.sc == scSCommon)
2926         h->esym.asym.sc = scSBss;
2927
2928       sec = h->root.root.u.def.section;
2929       output_section = sec->output_section;
2930       if (output_section != NULL)
2931         h->esym.asym.value = (h->root.root.u.def.value
2932                               + sec->output_offset
2933                               + output_section->vma);
2934       else
2935         h->esym.asym.value = 0;
2936     }
2937   else
2938     {
2939       struct mips_elf_link_hash_entry *hd = h;
2940
2941       while (hd->root.root.type == bfd_link_hash_indirect)
2942         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2943
2944       if (hd->needs_lazy_stub)
2945         {
2946           BFD_ASSERT (hd->root.plt.plist != NULL);
2947           BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2948           /* Set type and value for a symbol with a function stub.  */
2949           h->esym.asym.st = stProc;
2950           sec = hd->root.root.u.def.section;
2951           if (sec == NULL)
2952             h->esym.asym.value = 0;
2953           else
2954             {
2955               output_section = sec->output_section;
2956               if (output_section != NULL)
2957                 h->esym.asym.value = (hd->root.plt.plist->stub_offset
2958                                       + sec->output_offset
2959                                       + output_section->vma);
2960               else
2961                 h->esym.asym.value = 0;
2962             }
2963         }
2964     }
2965
2966   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2967                                       h->root.root.root.string,
2968                                       &h->esym))
2969     {
2970       einfo->failed = TRUE;
2971       return FALSE;
2972     }
2973
2974   return TRUE;
2975 }
2976
2977 /* A comparison routine used to sort .gptab entries.  */
2978
2979 static int
2980 gptab_compare (const void *p1, const void *p2)
2981 {
2982   const Elf32_gptab *a1 = p1;
2983   const Elf32_gptab *a2 = p2;
2984
2985   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2986 }
2987 \f
2988 /* Functions to manage the got entry hash table.  */
2989
2990 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2991    hash number.  */
2992
2993 static INLINE hashval_t
2994 mips_elf_hash_bfd_vma (bfd_vma addr)
2995 {
2996 #ifdef BFD64
2997   return addr + (addr >> 32);
2998 #else
2999   return addr;
3000 #endif
3001 }
3002
3003 static hashval_t
3004 mips_elf_got_entry_hash (const void *entry_)
3005 {
3006   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3007
3008   return (entry->symndx
3009           + ((entry->tls_type == GOT_TLS_LDM) << 18)
3010           + (entry->tls_type == GOT_TLS_LDM ? 0
3011              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3012              : entry->symndx >= 0 ? (entry->abfd->id
3013                                      + mips_elf_hash_bfd_vma (entry->d.addend))
3014              : entry->d.h->root.root.root.hash));
3015 }
3016
3017 static int
3018 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3019 {
3020   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3021   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3022
3023   return (e1->symndx == e2->symndx
3024           && e1->tls_type == e2->tls_type
3025           && (e1->tls_type == GOT_TLS_LDM ? TRUE
3026               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3027               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3028                                    && e1->d.addend == e2->d.addend)
3029               : e2->abfd && e1->d.h == e2->d.h));
3030 }
3031
3032 static hashval_t
3033 mips_got_page_ref_hash (const void *ref_)
3034 {
3035   const struct mips_got_page_ref *ref;
3036
3037   ref = (const struct mips_got_page_ref *) ref_;
3038   return ((ref->symndx >= 0
3039            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3040            : ref->u.h->root.root.root.hash)
3041           + mips_elf_hash_bfd_vma (ref->addend));
3042 }
3043
3044 static int
3045 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3046 {
3047   const struct mips_got_page_ref *ref1, *ref2;
3048
3049   ref1 = (const struct mips_got_page_ref *) ref1_;
3050   ref2 = (const struct mips_got_page_ref *) ref2_;
3051   return (ref1->symndx == ref2->symndx
3052           && (ref1->symndx < 0
3053               ? ref1->u.h == ref2->u.h
3054               : ref1->u.abfd == ref2->u.abfd)
3055           && ref1->addend == ref2->addend);
3056 }
3057
3058 static hashval_t
3059 mips_got_page_entry_hash (const void *entry_)
3060 {
3061   const struct mips_got_page_entry *entry;
3062
3063   entry = (const struct mips_got_page_entry *) entry_;
3064   return entry->sec->id;
3065 }
3066
3067 static int
3068 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3069 {
3070   const struct mips_got_page_entry *entry1, *entry2;
3071
3072   entry1 = (const struct mips_got_page_entry *) entry1_;
3073   entry2 = (const struct mips_got_page_entry *) entry2_;
3074   return entry1->sec == entry2->sec;
3075 }
3076 \f
3077 /* Create and return a new mips_got_info structure.  */
3078
3079 static struct mips_got_info *
3080 mips_elf_create_got_info (bfd *abfd)
3081 {
3082   struct mips_got_info *g;
3083
3084   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3085   if (g == NULL)
3086     return NULL;
3087
3088   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3089                                     mips_elf_got_entry_eq, NULL);
3090   if (g->got_entries == NULL)
3091     return NULL;
3092
3093   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3094                                       mips_got_page_ref_eq, NULL);
3095   if (g->got_page_refs == NULL)
3096     return NULL;
3097
3098   return g;
3099 }
3100
3101 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3102    CREATE_P and if ABFD doesn't already have a GOT.  */
3103
3104 static struct mips_got_info *
3105 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3106 {
3107   struct mips_elf_obj_tdata *tdata;
3108
3109   if (!is_mips_elf (abfd))
3110     return NULL;
3111
3112   tdata = mips_elf_tdata (abfd);
3113   if (!tdata->got && create_p)
3114     tdata->got = mips_elf_create_got_info (abfd);
3115   return tdata->got;
3116 }
3117
3118 /* Record that ABFD should use output GOT G.  */
3119
3120 static void
3121 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3122 {
3123   struct mips_elf_obj_tdata *tdata;
3124
3125   BFD_ASSERT (is_mips_elf (abfd));
3126   tdata = mips_elf_tdata (abfd);
3127   if (tdata->got)
3128     {
3129       /* The GOT structure itself and the hash table entries are
3130          allocated to a bfd, but the hash tables aren't.  */
3131       htab_delete (tdata->got->got_entries);
3132       htab_delete (tdata->got->got_page_refs);
3133       if (tdata->got->got_page_entries)
3134         htab_delete (tdata->got->got_page_entries);
3135     }
3136   tdata->got = g;
3137 }
3138
3139 /* Return the dynamic relocation section.  If it doesn't exist, try to
3140    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3141    if creation fails.  */
3142
3143 static asection *
3144 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3145 {
3146   const char *dname;
3147   asection *sreloc;
3148   bfd *dynobj;
3149
3150   dname = MIPS_ELF_REL_DYN_NAME (info);
3151   dynobj = elf_hash_table (info)->dynobj;
3152   sreloc = bfd_get_linker_section (dynobj, dname);
3153   if (sreloc == NULL && create_p)
3154     {
3155       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3156                                                    (SEC_ALLOC
3157                                                     | SEC_LOAD
3158                                                     | SEC_HAS_CONTENTS
3159                                                     | SEC_IN_MEMORY
3160                                                     | SEC_LINKER_CREATED
3161                                                     | SEC_READONLY));
3162       if (sreloc == NULL
3163           || ! bfd_set_section_alignment (dynobj, sreloc,
3164                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3165         return NULL;
3166     }
3167   return sreloc;
3168 }
3169
3170 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3171
3172 static int
3173 mips_elf_reloc_tls_type (unsigned int r_type)
3174 {
3175   if (tls_gd_reloc_p (r_type))
3176     return GOT_TLS_GD;
3177
3178   if (tls_ldm_reloc_p (r_type))
3179     return GOT_TLS_LDM;
3180
3181   if (tls_gottprel_reloc_p (r_type))
3182     return GOT_TLS_IE;
3183
3184   return GOT_TLS_NONE;
3185 }
3186
3187 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3188
3189 static int
3190 mips_tls_got_entries (unsigned int type)
3191 {
3192   switch (type)
3193     {
3194     case GOT_TLS_GD:
3195     case GOT_TLS_LDM:
3196       return 2;
3197
3198     case GOT_TLS_IE:
3199       return 1;
3200
3201     case GOT_TLS_NONE:
3202       return 0;
3203     }
3204   abort ();
3205 }
3206
3207 /* Count the number of relocations needed for a TLS GOT entry, with
3208    access types from TLS_TYPE, and symbol H (or a local symbol if H
3209    is NULL).  */
3210
3211 static int
3212 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3213                      struct elf_link_hash_entry *h)
3214 {
3215   int indx = 0;
3216   bfd_boolean need_relocs = FALSE;
3217   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3218
3219   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3220       && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3221     indx = h->dynindx;
3222
3223   if ((bfd_link_pic (info) || indx != 0)
3224       && (h == NULL
3225           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3226           || h->root.type != bfd_link_hash_undefweak))
3227     need_relocs = TRUE;
3228
3229   if (!need_relocs)
3230     return 0;
3231
3232   switch (tls_type)
3233     {
3234     case GOT_TLS_GD:
3235       return indx != 0 ? 2 : 1;
3236
3237     case GOT_TLS_IE:
3238       return 1;
3239
3240     case GOT_TLS_LDM:
3241       return bfd_link_pic (info) ? 1 : 0;
3242
3243     default:
3244       return 0;
3245     }
3246 }
3247
3248 /* Add the number of GOT entries and TLS relocations required by ENTRY
3249    to G.  */
3250
3251 static void
3252 mips_elf_count_got_entry (struct bfd_link_info *info,
3253                           struct mips_got_info *g,
3254                           struct mips_got_entry *entry)
3255 {
3256   if (entry->tls_type)
3257     {
3258       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3259       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3260                                         entry->symndx < 0
3261                                         ? &entry->d.h->root : NULL);
3262     }
3263   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3264     g->local_gotno += 1;
3265   else
3266     g->global_gotno += 1;
3267 }
3268
3269 /* Output a simple dynamic relocation into SRELOC.  */
3270
3271 static void
3272 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3273                                     asection *sreloc,
3274                                     unsigned long reloc_index,
3275                                     unsigned long indx,
3276                                     int r_type,
3277                                     bfd_vma offset)
3278 {
3279   Elf_Internal_Rela rel[3];
3280
3281   memset (rel, 0, sizeof (rel));
3282
3283   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3284   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3285
3286   if (ABI_64_P (output_bfd))
3287     {
3288       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3289         (output_bfd, &rel[0],
3290          (sreloc->contents
3291           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3292     }
3293   else
3294     bfd_elf32_swap_reloc_out
3295       (output_bfd, &rel[0],
3296        (sreloc->contents
3297         + reloc_index * sizeof (Elf32_External_Rel)));
3298 }
3299
3300 /* Initialize a set of TLS GOT entries for one symbol.  */
3301
3302 static void
3303 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3304                                struct mips_got_entry *entry,
3305                                struct mips_elf_link_hash_entry *h,
3306                                bfd_vma value)
3307 {
3308   struct mips_elf_link_hash_table *htab;
3309   int indx;
3310   asection *sreloc, *sgot;
3311   bfd_vma got_offset, got_offset2;
3312   bfd_boolean need_relocs = FALSE;
3313
3314   htab = mips_elf_hash_table (info);
3315   if (htab == NULL)
3316     return;
3317
3318   sgot = htab->sgot;
3319
3320   indx = 0;
3321   if (h != NULL)
3322     {
3323       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3324
3325       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3326                                            &h->root)
3327           && (!bfd_link_pic (info)
3328               || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3329         indx = h->root.dynindx;
3330     }
3331
3332   if (entry->tls_initialized)
3333     return;
3334
3335   if ((bfd_link_pic (info) || indx != 0)
3336       && (h == NULL
3337           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3338           || h->root.type != bfd_link_hash_undefweak))
3339     need_relocs = TRUE;
3340
3341   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3342      be defined at all; assume that the value doesn't matter in that
3343      case.  Otherwise complain if we would use the value.  */
3344   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3345               || h->root.root.type == bfd_link_hash_undefweak);
3346
3347   /* Emit necessary relocations.  */
3348   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3349   got_offset = entry->gotidx;
3350
3351   switch (entry->tls_type)
3352     {
3353     case GOT_TLS_GD:
3354       /* General Dynamic.  */
3355       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3356
3357       if (need_relocs)
3358         {
3359           mips_elf_output_dynamic_relocation
3360             (abfd, sreloc, sreloc->reloc_count++, indx,
3361              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3362              sgot->output_offset + sgot->output_section->vma + got_offset);
3363
3364           if (indx)
3365             mips_elf_output_dynamic_relocation
3366               (abfd, sreloc, sreloc->reloc_count++, indx,
3367                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3368                sgot->output_offset + sgot->output_section->vma + got_offset2);
3369           else
3370             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3371                                sgot->contents + got_offset2);
3372         }
3373       else
3374         {
3375           MIPS_ELF_PUT_WORD (abfd, 1,
3376                              sgot->contents + got_offset);
3377           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3378                              sgot->contents + got_offset2);
3379         }
3380       break;
3381
3382     case GOT_TLS_IE:
3383       /* Initial Exec model.  */
3384       if (need_relocs)
3385         {
3386           if (indx == 0)
3387             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3388                                sgot->contents + got_offset);
3389           else
3390             MIPS_ELF_PUT_WORD (abfd, 0,
3391                                sgot->contents + got_offset);
3392
3393           mips_elf_output_dynamic_relocation
3394             (abfd, sreloc, sreloc->reloc_count++, indx,
3395              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3396              sgot->output_offset + sgot->output_section->vma + got_offset);
3397         }
3398       else
3399         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3400                            sgot->contents + got_offset);
3401       break;
3402
3403     case GOT_TLS_LDM:
3404       /* The initial offset is zero, and the LD offsets will include the
3405          bias by DTP_OFFSET.  */
3406       MIPS_ELF_PUT_WORD (abfd, 0,
3407                          sgot->contents + got_offset
3408                          + MIPS_ELF_GOT_SIZE (abfd));
3409
3410       if (!bfd_link_pic (info))
3411         MIPS_ELF_PUT_WORD (abfd, 1,
3412                            sgot->contents + got_offset);
3413       else
3414         mips_elf_output_dynamic_relocation
3415           (abfd, sreloc, sreloc->reloc_count++, indx,
3416            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3417            sgot->output_offset + sgot->output_section->vma + got_offset);
3418       break;
3419
3420     default:
3421       abort ();
3422     }
3423
3424   entry->tls_initialized = TRUE;
3425 }
3426
3427 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3428    for global symbol H.  .got.plt comes before the GOT, so the offset
3429    will be negative.  */
3430
3431 static bfd_vma
3432 mips_elf_gotplt_index (struct bfd_link_info *info,
3433                        struct elf_link_hash_entry *h)
3434 {
3435   bfd_vma got_address, got_value;
3436   struct mips_elf_link_hash_table *htab;
3437
3438   htab = mips_elf_hash_table (info);
3439   BFD_ASSERT (htab != NULL);
3440
3441   BFD_ASSERT (h->plt.plist != NULL);
3442   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3443
3444   /* Calculate the address of the associated .got.plt entry.  */
3445   got_address = (htab->sgotplt->output_section->vma
3446                  + htab->sgotplt->output_offset
3447                  + (h->plt.plist->gotplt_index
3448                     * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3449
3450   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3451   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3452                + htab->root.hgot->root.u.def.section->output_offset
3453                + htab->root.hgot->root.u.def.value);
3454
3455   return got_address - got_value;
3456 }
3457
3458 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3459    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3460    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3461    offset can be found.  */
3462
3463 static bfd_vma
3464 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3465                           bfd_vma value, unsigned long r_symndx,
3466                           struct mips_elf_link_hash_entry *h, int r_type)
3467 {
3468   struct mips_elf_link_hash_table *htab;
3469   struct mips_got_entry *entry;
3470
3471   htab = mips_elf_hash_table (info);
3472   BFD_ASSERT (htab != NULL);
3473
3474   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3475                                            r_symndx, h, r_type);
3476   if (!entry)
3477     return MINUS_ONE;
3478
3479   if (entry->tls_type)
3480     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3481   return entry->gotidx;
3482 }
3483
3484 /* Return the GOT index of global symbol H in the primary GOT.  */
3485
3486 static bfd_vma
3487 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3488                                    struct elf_link_hash_entry *h)
3489 {
3490   struct mips_elf_link_hash_table *htab;
3491   long global_got_dynindx;
3492   struct mips_got_info *g;
3493   bfd_vma got_index;
3494
3495   htab = mips_elf_hash_table (info);
3496   BFD_ASSERT (htab != NULL);
3497
3498   global_got_dynindx = 0;
3499   if (htab->global_gotsym != NULL)
3500     global_got_dynindx = htab->global_gotsym->dynindx;
3501
3502   /* Once we determine the global GOT entry with the lowest dynamic
3503      symbol table index, we must put all dynamic symbols with greater
3504      indices into the primary GOT.  That makes it easy to calculate the
3505      GOT offset.  */
3506   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3507   g = mips_elf_bfd_got (obfd, FALSE);
3508   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3509                * MIPS_ELF_GOT_SIZE (obfd));
3510   BFD_ASSERT (got_index < htab->sgot->size);
3511
3512   return got_index;
3513 }
3514
3515 /* Return the GOT index for the global symbol indicated by H, which is
3516    referenced by a relocation of type R_TYPE in IBFD.  */
3517
3518 static bfd_vma
3519 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3520                            struct elf_link_hash_entry *h, int r_type)
3521 {
3522   struct mips_elf_link_hash_table *htab;
3523   struct mips_got_info *g;
3524   struct mips_got_entry lookup, *entry;
3525   bfd_vma gotidx;
3526
3527   htab = mips_elf_hash_table (info);
3528   BFD_ASSERT (htab != NULL);
3529
3530   g = mips_elf_bfd_got (ibfd, FALSE);
3531   BFD_ASSERT (g);
3532
3533   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3534   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3535     return mips_elf_primary_global_got_index (obfd, info, h);
3536
3537   lookup.abfd = ibfd;
3538   lookup.symndx = -1;
3539   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3540   entry = htab_find (g->got_entries, &lookup);
3541   BFD_ASSERT (entry);
3542
3543   gotidx = entry->gotidx;
3544   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3545
3546   if (lookup.tls_type)
3547     {
3548       bfd_vma value = MINUS_ONE;
3549
3550       if ((h->root.type == bfd_link_hash_defined
3551            || h->root.type == bfd_link_hash_defweak)
3552           && h->root.u.def.section->output_section)
3553         value = (h->root.u.def.value
3554                  + h->root.u.def.section->output_offset
3555                  + h->root.u.def.section->output_section->vma);
3556
3557       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3558     }
3559   return gotidx;
3560 }
3561
3562 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3563    entries are supposed to be placed at small offsets in the GOT, i.e.,
3564    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3565    entry could be created.  If OFFSETP is nonnull, use it to return the
3566    offset of the GOT entry from VALUE.  */
3567
3568 static bfd_vma
3569 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3570                    bfd_vma value, bfd_vma *offsetp)
3571 {
3572   bfd_vma page, got_index;
3573   struct mips_got_entry *entry;
3574
3575   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3576   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3577                                            NULL, R_MIPS_GOT_PAGE);
3578
3579   if (!entry)
3580     return MINUS_ONE;
3581
3582   got_index = entry->gotidx;
3583
3584   if (offsetp)
3585     *offsetp = value - entry->d.address;
3586
3587   return got_index;
3588 }
3589
3590 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3591    EXTERNAL is true if the relocation was originally against a global
3592    symbol that binds locally.  */
3593
3594 static bfd_vma
3595 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3596                       bfd_vma value, bfd_boolean external)
3597 {
3598   struct mips_got_entry *entry;
3599
3600   /* GOT16 relocations against local symbols are followed by a LO16
3601      relocation; those against global symbols are not.  Thus if the
3602      symbol was originally local, the GOT16 relocation should load the
3603      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3604   if (! external)
3605     value = mips_elf_high (value) << 16;
3606
3607   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3608      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3609      same in all cases.  */
3610   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3611                                            NULL, R_MIPS_GOT16);
3612   if (entry)
3613     return entry->gotidx;
3614   else
3615     return MINUS_ONE;
3616 }
3617
3618 /* Returns the offset for the entry at the INDEXth position
3619    in the GOT.  */
3620
3621 static bfd_vma
3622 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3623                                 bfd *input_bfd, bfd_vma got_index)
3624 {
3625   struct mips_elf_link_hash_table *htab;
3626   asection *sgot;
3627   bfd_vma gp;
3628
3629   htab = mips_elf_hash_table (info);
3630   BFD_ASSERT (htab != NULL);
3631
3632   sgot = htab->sgot;
3633   gp = _bfd_get_gp_value (output_bfd)
3634     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3635
3636   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3637 }
3638
3639 /* Create and return a local GOT entry for VALUE, which was calculated
3640    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3641    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3642    instead.  */
3643
3644 static struct mips_got_entry *
3645 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3646                                  bfd *ibfd, bfd_vma value,
3647                                  unsigned long r_symndx,
3648                                  struct mips_elf_link_hash_entry *h,
3649                                  int r_type)
3650 {
3651   struct mips_got_entry lookup, *entry;
3652   void **loc;
3653   struct mips_got_info *g;
3654   struct mips_elf_link_hash_table *htab;
3655   bfd_vma gotidx;
3656
3657   htab = mips_elf_hash_table (info);
3658   BFD_ASSERT (htab != NULL);
3659
3660   g = mips_elf_bfd_got (ibfd, FALSE);
3661   if (g == NULL)
3662     {
3663       g = mips_elf_bfd_got (abfd, FALSE);
3664       BFD_ASSERT (g != NULL);
3665     }
3666
3667   /* This function shouldn't be called for symbols that live in the global
3668      area of the GOT.  */
3669   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3670
3671   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3672   if (lookup.tls_type)
3673     {
3674       lookup.abfd = ibfd;
3675       if (tls_ldm_reloc_p (r_type))
3676         {
3677           lookup.symndx = 0;
3678           lookup.d.addend = 0;
3679         }
3680       else if (h == NULL)
3681         {
3682           lookup.symndx = r_symndx;
3683           lookup.d.addend = 0;
3684         }
3685       else
3686         {
3687           lookup.symndx = -1;
3688           lookup.d.h = h;
3689         }
3690
3691       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3692       BFD_ASSERT (entry);
3693
3694       gotidx = entry->gotidx;
3695       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3696
3697       return entry;
3698     }
3699
3700   lookup.abfd = NULL;
3701   lookup.symndx = -1;
3702   lookup.d.address = value;
3703   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3704   if (!loc)
3705     return NULL;
3706
3707   entry = (struct mips_got_entry *) *loc;
3708   if (entry)
3709     return entry;
3710
3711   if (g->assigned_low_gotno > g->assigned_high_gotno)
3712     {
3713       /* We didn't allocate enough space in the GOT.  */
3714       (*_bfd_error_handler)
3715         (_("not enough GOT space for local GOT entries"));
3716       bfd_set_error (bfd_error_bad_value);
3717       return NULL;
3718     }
3719
3720   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3721   if (!entry)
3722     return NULL;
3723
3724   if (got16_reloc_p (r_type)
3725       || call16_reloc_p (r_type)
3726       || got_page_reloc_p (r_type)
3727       || got_disp_reloc_p (r_type))
3728     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3729   else
3730     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3731
3732   *entry = lookup;
3733   *loc = entry;
3734
3735   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3736
3737   /* These GOT entries need a dynamic relocation on VxWorks.  */
3738   if (htab->is_vxworks)
3739     {
3740       Elf_Internal_Rela outrel;
3741       asection *s;
3742       bfd_byte *rloc;
3743       bfd_vma got_address;
3744
3745       s = mips_elf_rel_dyn_section (info, FALSE);
3746       got_address = (htab->sgot->output_section->vma
3747                      + htab->sgot->output_offset
3748                      + entry->gotidx);
3749
3750       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3751       outrel.r_offset = got_address;
3752       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3753       outrel.r_addend = value;
3754       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3755     }
3756
3757   return entry;
3758 }
3759
3760 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3761    The number might be exact or a worst-case estimate, depending on how
3762    much information is available to elf_backend_omit_section_dynsym at
3763    the current linking stage.  */
3764
3765 static bfd_size_type
3766 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3767 {
3768   bfd_size_type count;
3769
3770   count = 0;
3771   if (bfd_link_pic (info)
3772       || elf_hash_table (info)->is_relocatable_executable)
3773     {
3774       asection *p;
3775       const struct elf_backend_data *bed;
3776
3777       bed = get_elf_backend_data (output_bfd);
3778       for (p = output_bfd->sections; p ; p = p->next)
3779         if ((p->flags & SEC_EXCLUDE) == 0
3780             && (p->flags & SEC_ALLOC) != 0
3781             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3782           ++count;
3783     }
3784   return count;
3785 }
3786
3787 /* Sort the dynamic symbol table so that symbols that need GOT entries
3788    appear towards the end.  */
3789
3790 static bfd_boolean
3791 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3792 {
3793   struct mips_elf_link_hash_table *htab;
3794   struct mips_elf_hash_sort_data hsd;
3795   struct mips_got_info *g;
3796
3797   if (elf_hash_table (info)->dynsymcount == 0)
3798     return TRUE;
3799
3800   htab = mips_elf_hash_table (info);
3801   BFD_ASSERT (htab != NULL);
3802
3803   g = htab->got_info;
3804   if (g == NULL)
3805     return TRUE;
3806
3807   hsd.low = NULL;
3808   hsd.max_unref_got_dynindx
3809     = hsd.min_got_dynindx
3810     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3811   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3812   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3813                                 elf_hash_table (info)),
3814                                mips_elf_sort_hash_table_f,
3815                                &hsd);
3816
3817   /* There should have been enough room in the symbol table to
3818      accommodate both the GOT and non-GOT symbols.  */
3819   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3820   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3821               == elf_hash_table (info)->dynsymcount);
3822   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3823               == g->global_gotno);
3824
3825   /* Now we know which dynamic symbol has the lowest dynamic symbol
3826      table index in the GOT.  */
3827   htab->global_gotsym = hsd.low;
3828
3829   return TRUE;
3830 }
3831
3832 /* If H needs a GOT entry, assign it the highest available dynamic
3833    index.  Otherwise, assign it the lowest available dynamic
3834    index.  */
3835
3836 static bfd_boolean
3837 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3838 {
3839   struct mips_elf_hash_sort_data *hsd = data;
3840
3841   /* Symbols without dynamic symbol table entries aren't interesting
3842      at all.  */
3843   if (h->root.dynindx == -1)
3844     return TRUE;
3845
3846   switch (h->global_got_area)
3847     {
3848     case GGA_NONE:
3849       h->root.dynindx = hsd->max_non_got_dynindx++;
3850       break;
3851
3852     case GGA_NORMAL:
3853       h->root.dynindx = --hsd->min_got_dynindx;
3854       hsd->low = (struct elf_link_hash_entry *) h;
3855       break;
3856
3857     case GGA_RELOC_ONLY:
3858       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3859         hsd->low = (struct elf_link_hash_entry *) h;
3860       h->root.dynindx = hsd->max_unref_got_dynindx++;
3861       break;
3862     }
3863
3864   return TRUE;
3865 }
3866
3867 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3868    (which is owned by the caller and shouldn't be added to the
3869    hash table directly).  */
3870
3871 static bfd_boolean
3872 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3873                            struct mips_got_entry *lookup)
3874 {
3875   struct mips_elf_link_hash_table *htab;
3876   struct mips_got_entry *entry;
3877   struct mips_got_info *g;
3878   void **loc, **bfd_loc;
3879
3880   /* Make sure there's a slot for this entry in the master GOT.  */
3881   htab = mips_elf_hash_table (info);
3882   g = htab->got_info;
3883   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3884   if (!loc)
3885     return FALSE;
3886
3887   /* Populate the entry if it isn't already.  */
3888   entry = (struct mips_got_entry *) *loc;
3889   if (!entry)
3890     {
3891       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3892       if (!entry)
3893         return FALSE;
3894
3895       lookup->tls_initialized = FALSE;
3896       lookup->gotidx = -1;
3897       *entry = *lookup;
3898       *loc = entry;
3899     }
3900
3901   /* Reuse the same GOT entry for the BFD's GOT.  */
3902   g = mips_elf_bfd_got (abfd, TRUE);
3903   if (!g)
3904     return FALSE;
3905
3906   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3907   if (!bfd_loc)
3908     return FALSE;
3909
3910   if (!*bfd_loc)
3911     *bfd_loc = entry;
3912   return TRUE;
3913 }
3914
3915 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3916    entry for it.  FOR_CALL is true if the caller is only interested in
3917    using the GOT entry for calls.  */
3918
3919 static bfd_boolean
3920 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3921                                    bfd *abfd, struct bfd_link_info *info,
3922                                    bfd_boolean for_call, int r_type)
3923 {
3924   struct mips_elf_link_hash_table *htab;
3925   struct mips_elf_link_hash_entry *hmips;
3926   struct mips_got_entry entry;
3927   unsigned char tls_type;
3928
3929   htab = mips_elf_hash_table (info);
3930   BFD_ASSERT (htab != NULL);
3931
3932   hmips = (struct mips_elf_link_hash_entry *) h;
3933   if (!for_call)
3934     hmips->got_only_for_calls = FALSE;
3935
3936   /* A global symbol in the GOT must also be in the dynamic symbol
3937      table.  */
3938   if (h->dynindx == -1)
3939     {
3940       switch (ELF_ST_VISIBILITY (h->other))
3941         {
3942         case STV_INTERNAL:
3943         case STV_HIDDEN:
3944           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3945           break;
3946         }
3947       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3948         return FALSE;
3949     }
3950
3951   tls_type = mips_elf_reloc_tls_type (r_type);
3952   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3953     hmips->global_got_area = GGA_NORMAL;
3954
3955   entry.abfd = abfd;
3956   entry.symndx = -1;
3957   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3958   entry.tls_type = tls_type;
3959   return mips_elf_record_got_entry (info, abfd, &entry);
3960 }
3961
3962 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3963    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3964
3965 static bfd_boolean
3966 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3967                                   struct bfd_link_info *info, int r_type)
3968 {
3969   struct mips_elf_link_hash_table *htab;
3970   struct mips_got_info *g;
3971   struct mips_got_entry entry;
3972
3973   htab = mips_elf_hash_table (info);
3974   BFD_ASSERT (htab != NULL);
3975
3976   g = htab->got_info;
3977   BFD_ASSERT (g != NULL);
3978
3979   entry.abfd = abfd;
3980   entry.symndx = symndx;
3981   entry.d.addend = addend;
3982   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3983   return mips_elf_record_got_entry (info, abfd, &entry);
3984 }
3985
3986 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3987    H is the symbol's hash table entry, or null if SYMNDX is local
3988    to ABFD.  */
3989
3990 static bfd_boolean
3991 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3992                               long symndx, struct elf_link_hash_entry *h,
3993                               bfd_signed_vma addend)
3994 {
3995   struct mips_elf_link_hash_table *htab;
3996   struct mips_got_info *g1, *g2;
3997   struct mips_got_page_ref lookup, *entry;
3998   void **loc, **bfd_loc;
3999
4000   htab = mips_elf_hash_table (info);
4001   BFD_ASSERT (htab != NULL);
4002
4003   g1 = htab->got_info;
4004   BFD_ASSERT (g1 != NULL);
4005
4006   if (h)
4007     {
4008       lookup.symndx = -1;
4009       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4010     }
4011   else
4012     {
4013       lookup.symndx = symndx;
4014       lookup.u.abfd = abfd;
4015     }
4016   lookup.addend = addend;
4017   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4018   if (loc == NULL)
4019     return FALSE;
4020
4021   entry = (struct mips_got_page_ref *) *loc;
4022   if (!entry)
4023     {
4024       entry = bfd_alloc (abfd, sizeof (*entry));
4025       if (!entry)
4026         return FALSE;
4027
4028       *entry = lookup;
4029       *loc = entry;
4030     }
4031
4032   /* Add the same entry to the BFD's GOT.  */
4033   g2 = mips_elf_bfd_got (abfd, TRUE);
4034   if (!g2)
4035     return FALSE;
4036
4037   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4038   if (!bfd_loc)
4039     return FALSE;
4040
4041   if (!*bfd_loc)
4042     *bfd_loc = entry;
4043
4044   return TRUE;
4045 }
4046
4047 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4048
4049 static void
4050 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4051                                        unsigned int n)
4052 {
4053   asection *s;
4054   struct mips_elf_link_hash_table *htab;
4055
4056   htab = mips_elf_hash_table (info);
4057   BFD_ASSERT (htab != NULL);
4058
4059   s = mips_elf_rel_dyn_section (info, FALSE);
4060   BFD_ASSERT (s != NULL);
4061
4062   if (htab->is_vxworks)
4063     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4064   else
4065     {
4066       if (s->size == 0)
4067         {
4068           /* Make room for a null element.  */
4069           s->size += MIPS_ELF_REL_SIZE (abfd);
4070           ++s->reloc_count;
4071         }
4072       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4073     }
4074 }
4075 \f
4076 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4077    mips_elf_traverse_got_arg structure.  Count the number of GOT
4078    entries and TLS relocs.  Set DATA->value to true if we need
4079    to resolve indirect or warning symbols and then recreate the GOT.  */
4080
4081 static int
4082 mips_elf_check_recreate_got (void **entryp, void *data)
4083 {
4084   struct mips_got_entry *entry;
4085   struct mips_elf_traverse_got_arg *arg;
4086
4087   entry = (struct mips_got_entry *) *entryp;
4088   arg = (struct mips_elf_traverse_got_arg *) data;
4089   if (entry->abfd != NULL && entry->symndx == -1)
4090     {
4091       struct mips_elf_link_hash_entry *h;
4092
4093       h = entry->d.h;
4094       if (h->root.root.type == bfd_link_hash_indirect
4095           || h->root.root.type == bfd_link_hash_warning)
4096         {
4097           arg->value = TRUE;
4098           return 0;
4099         }
4100     }
4101   mips_elf_count_got_entry (arg->info, arg->g, entry);
4102   return 1;
4103 }
4104
4105 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4106    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4107    converting entries for indirect and warning symbols into entries
4108    for the target symbol.  Set DATA->g to null on error.  */
4109
4110 static int
4111 mips_elf_recreate_got (void **entryp, void *data)
4112 {
4113   struct mips_got_entry new_entry, *entry;
4114   struct mips_elf_traverse_got_arg *arg;
4115   void **slot;
4116
4117   entry = (struct mips_got_entry *) *entryp;
4118   arg = (struct mips_elf_traverse_got_arg *) data;
4119   if (entry->abfd != NULL
4120       && entry->symndx == -1
4121       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4122           || entry->d.h->root.root.type == bfd_link_hash_warning))
4123     {
4124       struct mips_elf_link_hash_entry *h;
4125
4126       new_entry = *entry;
4127       entry = &new_entry;
4128       h = entry->d.h;
4129       do
4130         {
4131           BFD_ASSERT (h->global_got_area == GGA_NONE);
4132           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4133         }
4134       while (h->root.root.type == bfd_link_hash_indirect
4135              || h->root.root.type == bfd_link_hash_warning);
4136       entry->d.h = h;
4137     }
4138   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4139   if (slot == NULL)
4140     {
4141       arg->g = NULL;
4142       return 0;
4143     }
4144   if (*slot == NULL)
4145     {
4146       if (entry == &new_entry)
4147         {
4148           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4149           if (!entry)
4150             {
4151               arg->g = NULL;
4152               return 0;
4153             }
4154           *entry = new_entry;
4155         }
4156       *slot = entry;
4157       mips_elf_count_got_entry (arg->info, arg->g, entry);
4158     }
4159   return 1;
4160 }
4161
4162 /* Return the maximum number of GOT page entries required for RANGE.  */
4163
4164 static bfd_vma
4165 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4166 {
4167   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4168 }
4169
4170 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4171
4172 static bfd_boolean
4173 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4174                                 asection *sec, bfd_signed_vma addend)
4175 {
4176   struct mips_got_info *g = arg->g;
4177   struct mips_got_page_entry lookup, *entry;
4178   struct mips_got_page_range **range_ptr, *range;
4179   bfd_vma old_pages, new_pages;
4180   void **loc;
4181
4182   /* Find the mips_got_page_entry hash table entry for this section.  */
4183   lookup.sec = sec;
4184   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4185   if (loc == NULL)
4186     return FALSE;
4187
4188   /* Create a mips_got_page_entry if this is the first time we've
4189      seen the section.  */
4190   entry = (struct mips_got_page_entry *) *loc;
4191   if (!entry)
4192     {
4193       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4194       if (!entry)
4195         return FALSE;
4196
4197       entry->sec = sec;
4198       *loc = entry;
4199     }
4200
4201   /* Skip over ranges whose maximum extent cannot share a page entry
4202      with ADDEND.  */
4203   range_ptr = &entry->ranges;
4204   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4205     range_ptr = &(*range_ptr)->next;
4206
4207   /* If we scanned to the end of the list, or found a range whose
4208      minimum extent cannot share a page entry with ADDEND, create
4209      a new singleton range.  */
4210   range = *range_ptr;
4211   if (!range || addend < range->min_addend - 0xffff)
4212     {
4213       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4214       if (!range)
4215         return FALSE;
4216
4217       range->next = *range_ptr;
4218       range->min_addend = addend;
4219       range->max_addend = addend;
4220
4221       *range_ptr = range;
4222       entry->num_pages++;
4223       g->page_gotno++;
4224       return TRUE;
4225     }
4226
4227   /* Remember how many pages the old range contributed.  */
4228   old_pages = mips_elf_pages_for_range (range);
4229
4230   /* Update the ranges.  */
4231   if (addend < range->min_addend)
4232     range->min_addend = addend;
4233   else if (addend > range->max_addend)
4234     {
4235       if (range->next && addend >= range->next->min_addend - 0xffff)
4236         {
4237           old_pages += mips_elf_pages_for_range (range->next);
4238           range->max_addend = range->next->max_addend;
4239           range->next = range->next->next;
4240         }
4241       else
4242         range->max_addend = addend;
4243     }
4244
4245   /* Record any change in the total estimate.  */
4246   new_pages = mips_elf_pages_for_range (range);
4247   if (old_pages != new_pages)
4248     {
4249       entry->num_pages += new_pages - old_pages;
4250       g->page_gotno += new_pages - old_pages;
4251     }
4252
4253   return TRUE;
4254 }
4255
4256 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4257    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4258    whether the page reference described by *REFP needs a GOT page entry,
4259    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4260
4261 static bfd_boolean
4262 mips_elf_resolve_got_page_ref (void **refp, void *data)
4263 {
4264   struct mips_got_page_ref *ref;
4265   struct mips_elf_traverse_got_arg *arg;
4266   struct mips_elf_link_hash_table *htab;
4267   asection *sec;
4268   bfd_vma addend;
4269
4270   ref = (struct mips_got_page_ref *) *refp;
4271   arg = (struct mips_elf_traverse_got_arg *) data;
4272   htab = mips_elf_hash_table (arg->info);
4273
4274   if (ref->symndx < 0)
4275     {
4276       struct mips_elf_link_hash_entry *h;
4277
4278       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4279       h = ref->u.h;
4280       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4281         return 1;
4282
4283       /* Ignore undefined symbols; we'll issue an error later if
4284          appropriate.  */
4285       if (!((h->root.root.type == bfd_link_hash_defined
4286              || h->root.root.type == bfd_link_hash_defweak)
4287             && h->root.root.u.def.section))
4288         return 1;
4289
4290       sec = h->root.root.u.def.section;
4291       addend = h->root.root.u.def.value + ref->addend;
4292     }
4293   else
4294     {
4295       Elf_Internal_Sym *isym;
4296
4297       /* Read in the symbol.  */
4298       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4299                                     ref->symndx);
4300       if (isym == NULL)
4301         {
4302           arg->g = NULL;
4303           return 0;
4304         }
4305
4306       /* Get the associated input section.  */
4307       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4308       if (sec == NULL)
4309         {
4310           arg->g = NULL;
4311           return 0;
4312         }
4313
4314       /* If this is a mergable section, work out the section and offset
4315          of the merged data.  For section symbols, the addend specifies
4316          of the offset _of_ the first byte in the data, otherwise it
4317          specifies the offset _from_ the first byte.  */
4318       if (sec->flags & SEC_MERGE)
4319         {
4320           void *secinfo;
4321
4322           secinfo = elf_section_data (sec)->sec_info;
4323           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4324             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4325                                                  isym->st_value + ref->addend);
4326           else
4327             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4328                                                  isym->st_value) + ref->addend;
4329         }
4330       else
4331         addend = isym->st_value + ref->addend;
4332     }
4333   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4334     {
4335       arg->g = NULL;
4336       return 0;
4337     }
4338   return 1;
4339 }
4340
4341 /* If any entries in G->got_entries are for indirect or warning symbols,
4342    replace them with entries for the target symbol.  Convert g->got_page_refs
4343    into got_page_entry structures and estimate the number of page entries
4344    that they require.  */
4345
4346 static bfd_boolean
4347 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4348                                     struct mips_got_info *g)
4349 {
4350   struct mips_elf_traverse_got_arg tga;
4351   struct mips_got_info oldg;
4352
4353   oldg = *g;
4354
4355   tga.info = info;
4356   tga.g = g;
4357   tga.value = FALSE;
4358   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4359   if (tga.value)
4360     {
4361       *g = oldg;
4362       g->got_entries = htab_create (htab_size (oldg.got_entries),
4363                                     mips_elf_got_entry_hash,
4364                                     mips_elf_got_entry_eq, NULL);
4365       if (!g->got_entries)
4366         return FALSE;
4367
4368       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4369       if (!tga.g)
4370         return FALSE;
4371
4372       htab_delete (oldg.got_entries);
4373     }
4374
4375   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4376                                          mips_got_page_entry_eq, NULL);
4377   if (g->got_page_entries == NULL)
4378     return FALSE;
4379
4380   tga.info = info;
4381   tga.g = g;
4382   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4383
4384   return TRUE;
4385 }
4386
4387 /* Return true if a GOT entry for H should live in the local rather than
4388    global GOT area.  */
4389
4390 static bfd_boolean
4391 mips_use_local_got_p (struct bfd_link_info *info,
4392                       struct mips_elf_link_hash_entry *h)
4393 {
4394   /* Symbols that aren't in the dynamic symbol table must live in the
4395      local GOT.  This includes symbols that are completely undefined
4396      and which therefore don't bind locally.  We'll report undefined
4397      symbols later if appropriate.  */
4398   if (h->root.dynindx == -1)
4399     return TRUE;
4400
4401   /* Symbols that bind locally can (and in the case of forced-local
4402      symbols, must) live in the local GOT.  */
4403   if (h->got_only_for_calls
4404       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4405       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4406     return TRUE;
4407
4408   /* If this is an executable that must provide a definition of the symbol,
4409      either though PLTs or copy relocations, then that address should go in
4410      the local rather than global GOT.  */
4411   if (bfd_link_executable (info) && h->has_static_relocs)
4412     return TRUE;
4413
4414   return FALSE;
4415 }
4416
4417 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4418    link_info structure.  Decide whether the hash entry needs an entry in
4419    the global part of the primary GOT, setting global_got_area accordingly.
4420    Count the number of global symbols that are in the primary GOT only
4421    because they have relocations against them (reloc_only_gotno).  */
4422
4423 static int
4424 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4425 {
4426   struct bfd_link_info *info;
4427   struct mips_elf_link_hash_table *htab;
4428   struct mips_got_info *g;
4429
4430   info = (struct bfd_link_info *) data;
4431   htab = mips_elf_hash_table (info);
4432   g = htab->got_info;
4433   if (h->global_got_area != GGA_NONE)
4434     {
4435       /* Make a final decision about whether the symbol belongs in the
4436          local or global GOT.  */
4437       if (mips_use_local_got_p (info, h))
4438         /* The symbol belongs in the local GOT.  We no longer need this
4439            entry if it was only used for relocations; those relocations
4440            will be against the null or section symbol instead of H.  */
4441         h->global_got_area = GGA_NONE;
4442       else if (htab->is_vxworks
4443                && h->got_only_for_calls
4444                && h->root.plt.plist->mips_offset != MINUS_ONE)
4445         /* On VxWorks, calls can refer directly to the .got.plt entry;
4446            they don't need entries in the regular GOT.  .got.plt entries
4447            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4448         h->global_got_area = GGA_NONE;
4449       else if (h->global_got_area == GGA_RELOC_ONLY)
4450         {
4451           g->reloc_only_gotno++;
4452           g->global_gotno++;
4453         }
4454     }
4455   return 1;
4456 }
4457 \f
4458 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4459    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4460
4461 static int
4462 mips_elf_add_got_entry (void **entryp, void *data)
4463 {
4464   struct mips_got_entry *entry;
4465   struct mips_elf_traverse_got_arg *arg;
4466   void **slot;
4467
4468   entry = (struct mips_got_entry *) *entryp;
4469   arg = (struct mips_elf_traverse_got_arg *) data;
4470   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4471   if (!slot)
4472     {
4473       arg->g = NULL;
4474       return 0;
4475     }
4476   if (!*slot)
4477     {
4478       *slot = entry;
4479       mips_elf_count_got_entry (arg->info, arg->g, entry);
4480     }
4481   return 1;
4482 }
4483
4484 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4485    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4486
4487 static int
4488 mips_elf_add_got_page_entry (void **entryp, void *data)
4489 {
4490   struct mips_got_page_entry *entry;
4491   struct mips_elf_traverse_got_arg *arg;
4492   void **slot;
4493
4494   entry = (struct mips_got_page_entry *) *entryp;
4495   arg = (struct mips_elf_traverse_got_arg *) data;
4496   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4497   if (!slot)
4498     {
4499       arg->g = NULL;
4500       return 0;
4501     }
4502   if (!*slot)
4503     {
4504       *slot = entry;
4505       arg->g->page_gotno += entry->num_pages;
4506     }
4507   return 1;
4508 }
4509
4510 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4511    this would lead to overflow, 1 if they were merged successfully,
4512    and 0 if a merge failed due to lack of memory.  (These values are chosen
4513    so that nonnegative return values can be returned by a htab_traverse
4514    callback.)  */
4515
4516 static int
4517 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4518                          struct mips_got_info *to,
4519                          struct mips_elf_got_per_bfd_arg *arg)
4520 {
4521   struct mips_elf_traverse_got_arg tga;
4522   unsigned int estimate;
4523
4524   /* Work out how many page entries we would need for the combined GOT.  */
4525   estimate = arg->max_pages;
4526   if (estimate >= from->page_gotno + to->page_gotno)
4527     estimate = from->page_gotno + to->page_gotno;
4528
4529   /* And conservatively estimate how many local and TLS entries
4530      would be needed.  */
4531   estimate += from->local_gotno + to->local_gotno;
4532   estimate += from->tls_gotno + to->tls_gotno;
4533
4534   /* If we're merging with the primary got, any TLS relocations will
4535      come after the full set of global entries.  Otherwise estimate those
4536      conservatively as well.  */
4537   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4538     estimate += arg->global_count;
4539   else
4540     estimate += from->global_gotno + to->global_gotno;
4541
4542   /* Bail out if the combined GOT might be too big.  */
4543   if (estimate > arg->max_count)
4544     return -1;
4545
4546   /* Transfer the bfd's got information from FROM to TO.  */
4547   tga.info = arg->info;
4548   tga.g = to;
4549   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4550   if (!tga.g)
4551     return 0;
4552
4553   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4554   if (!tga.g)
4555     return 0;
4556
4557   mips_elf_replace_bfd_got (abfd, to);
4558   return 1;
4559 }
4560
4561 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4562    as possible of the primary got, since it doesn't require explicit
4563    dynamic relocations, but don't use bfds that would reference global
4564    symbols out of the addressable range.  Failing the primary got,
4565    attempt to merge with the current got, or finish the current got
4566    and then make make the new got current.  */
4567
4568 static bfd_boolean
4569 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4570                     struct mips_elf_got_per_bfd_arg *arg)
4571 {
4572   unsigned int estimate;
4573   int result;
4574
4575   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4576     return FALSE;
4577
4578   /* Work out the number of page, local and TLS entries.  */
4579   estimate = arg->max_pages;
4580   if (estimate > g->page_gotno)
4581     estimate = g->page_gotno;
4582   estimate += g->local_gotno + g->tls_gotno;
4583
4584   /* We place TLS GOT entries after both locals and globals.  The globals
4585      for the primary GOT may overflow the normal GOT size limit, so be
4586      sure not to merge a GOT which requires TLS with the primary GOT in that
4587      case.  This doesn't affect non-primary GOTs.  */
4588   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4589
4590   if (estimate <= arg->max_count)
4591     {
4592       /* If we don't have a primary GOT, use it as
4593          a starting point for the primary GOT.  */
4594       if (!arg->primary)
4595         {
4596           arg->primary = g;
4597           return TRUE;
4598         }
4599
4600       /* Try merging with the primary GOT.  */
4601       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4602       if (result >= 0)
4603         return result;
4604     }
4605
4606   /* If we can merge with the last-created got, do it.  */
4607   if (arg->current)
4608     {
4609       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4610       if (result >= 0)
4611         return result;
4612     }
4613
4614   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4615      fits; if it turns out that it doesn't, we'll get relocation
4616      overflows anyway.  */
4617   g->next = arg->current;
4618   arg->current = g;
4619
4620   return TRUE;
4621 }
4622
4623 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4624    to GOTIDX, duplicating the entry if it has already been assigned
4625    an index in a different GOT.  */
4626
4627 static bfd_boolean
4628 mips_elf_set_gotidx (void **entryp, long gotidx)
4629 {
4630   struct mips_got_entry *entry;
4631
4632   entry = (struct mips_got_entry *) *entryp;
4633   if (entry->gotidx > 0)
4634     {
4635       struct mips_got_entry *new_entry;
4636
4637       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4638       if (!new_entry)
4639         return FALSE;
4640
4641       *new_entry = *entry;
4642       *entryp = new_entry;
4643       entry = new_entry;
4644     }
4645   entry->gotidx = gotidx;
4646   return TRUE;
4647 }
4648
4649 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4650    mips_elf_traverse_got_arg in which DATA->value is the size of one
4651    GOT entry.  Set DATA->g to null on failure.  */
4652
4653 static int
4654 mips_elf_initialize_tls_index (void **entryp, void *data)
4655 {
4656   struct mips_got_entry *entry;
4657   struct mips_elf_traverse_got_arg *arg;
4658
4659   /* We're only interested in TLS symbols.  */
4660   entry = (struct mips_got_entry *) *entryp;
4661   if (entry->tls_type == GOT_TLS_NONE)
4662     return 1;
4663
4664   arg = (struct mips_elf_traverse_got_arg *) data;
4665   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4666     {
4667       arg->g = NULL;
4668       return 0;
4669     }
4670
4671   /* Account for the entries we've just allocated.  */
4672   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4673   return 1;
4674 }
4675
4676 /* A htab_traverse callback for GOT entries, where DATA points to a
4677    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4678    symbol to DATA->value.  */
4679
4680 static int
4681 mips_elf_set_global_got_area (void **entryp, void *data)
4682 {
4683   struct mips_got_entry *entry;
4684   struct mips_elf_traverse_got_arg *arg;
4685
4686   entry = (struct mips_got_entry *) *entryp;
4687   arg = (struct mips_elf_traverse_got_arg *) data;
4688   if (entry->abfd != NULL
4689       && entry->symndx == -1
4690       && entry->d.h->global_got_area != GGA_NONE)
4691     entry->d.h->global_got_area = arg->value;
4692   return 1;
4693 }
4694
4695 /* A htab_traverse callback for secondary GOT entries, where DATA points
4696    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4697    and record the number of relocations they require.  DATA->value is
4698    the size of one GOT entry.  Set DATA->g to null on failure.  */
4699
4700 static int
4701 mips_elf_set_global_gotidx (void **entryp, void *data)
4702 {
4703   struct mips_got_entry *entry;
4704   struct mips_elf_traverse_got_arg *arg;
4705
4706   entry = (struct mips_got_entry *) *entryp;
4707   arg = (struct mips_elf_traverse_got_arg *) data;
4708   if (entry->abfd != NULL
4709       && entry->symndx == -1
4710       && entry->d.h->global_got_area != GGA_NONE)
4711     {
4712       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4713         {
4714           arg->g = NULL;
4715           return 0;
4716         }
4717       arg->g->assigned_low_gotno += 1;
4718
4719       if (bfd_link_pic (arg->info)
4720           || (elf_hash_table (arg->info)->dynamic_sections_created
4721               && entry->d.h->root.def_dynamic
4722               && !entry->d.h->root.def_regular))
4723         arg->g->relocs += 1;
4724     }
4725
4726   return 1;
4727 }
4728
4729 /* A htab_traverse callback for GOT entries for which DATA is the
4730    bfd_link_info.  Forbid any global symbols from having traditional
4731    lazy-binding stubs.  */
4732
4733 static int
4734 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4735 {
4736   struct bfd_link_info *info;
4737   struct mips_elf_link_hash_table *htab;
4738   struct mips_got_entry *entry;
4739
4740   entry = (struct mips_got_entry *) *entryp;
4741   info = (struct bfd_link_info *) data;
4742   htab = mips_elf_hash_table (info);
4743   BFD_ASSERT (htab != NULL);
4744
4745   if (entry->abfd != NULL
4746       && entry->symndx == -1
4747       && entry->d.h->needs_lazy_stub)
4748     {
4749       entry->d.h->needs_lazy_stub = FALSE;
4750       htab->lazy_stub_count--;
4751     }
4752
4753   return 1;
4754 }
4755
4756 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4757    the primary GOT.  */
4758 static bfd_vma
4759 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4760 {
4761   if (!g->next)
4762     return 0;
4763
4764   g = mips_elf_bfd_got (ibfd, FALSE);
4765   if (! g)
4766     return 0;
4767
4768   BFD_ASSERT (g->next);
4769
4770   g = g->next;
4771
4772   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4773     * MIPS_ELF_GOT_SIZE (abfd);
4774 }
4775
4776 /* Turn a single GOT that is too big for 16-bit addressing into
4777    a sequence of GOTs, each one 16-bit addressable.  */
4778
4779 static bfd_boolean
4780 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4781                     asection *got, bfd_size_type pages)
4782 {
4783   struct mips_elf_link_hash_table *htab;
4784   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4785   struct mips_elf_traverse_got_arg tga;
4786   struct mips_got_info *g, *gg;
4787   unsigned int assign, needed_relocs;
4788   bfd *dynobj, *ibfd;
4789
4790   dynobj = elf_hash_table (info)->dynobj;
4791   htab = mips_elf_hash_table (info);
4792   BFD_ASSERT (htab != NULL);
4793
4794   g = htab->got_info;
4795
4796   got_per_bfd_arg.obfd = abfd;
4797   got_per_bfd_arg.info = info;
4798   got_per_bfd_arg.current = NULL;
4799   got_per_bfd_arg.primary = NULL;
4800   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4801                                 / MIPS_ELF_GOT_SIZE (abfd))
4802                                - htab->reserved_gotno);
4803   got_per_bfd_arg.max_pages = pages;
4804   /* The number of globals that will be included in the primary GOT.
4805      See the calls to mips_elf_set_global_got_area below for more
4806      information.  */
4807   got_per_bfd_arg.global_count = g->global_gotno;
4808
4809   /* Try to merge the GOTs of input bfds together, as long as they
4810      don't seem to exceed the maximum GOT size, choosing one of them
4811      to be the primary GOT.  */
4812   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4813     {
4814       gg = mips_elf_bfd_got (ibfd, FALSE);
4815       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4816         return FALSE;
4817     }
4818
4819   /* If we do not find any suitable primary GOT, create an empty one.  */
4820   if (got_per_bfd_arg.primary == NULL)
4821     g->next = mips_elf_create_got_info (abfd);
4822   else
4823     g->next = got_per_bfd_arg.primary;
4824   g->next->next = got_per_bfd_arg.current;
4825
4826   /* GG is now the master GOT, and G is the primary GOT.  */
4827   gg = g;
4828   g = g->next;
4829
4830   /* Map the output bfd to the primary got.  That's what we're going
4831      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4832      didn't mark in check_relocs, and we want a quick way to find it.
4833      We can't just use gg->next because we're going to reverse the
4834      list.  */
4835   mips_elf_replace_bfd_got (abfd, g);
4836
4837   /* Every symbol that is referenced in a dynamic relocation must be
4838      present in the primary GOT, so arrange for them to appear after
4839      those that are actually referenced.  */
4840   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4841   g->global_gotno = gg->global_gotno;
4842
4843   tga.info = info;
4844   tga.value = GGA_RELOC_ONLY;
4845   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4846   tga.value = GGA_NORMAL;
4847   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4848
4849   /* Now go through the GOTs assigning them offset ranges.
4850      [assigned_low_gotno, local_gotno[ will be set to the range of local
4851      entries in each GOT.  We can then compute the end of a GOT by
4852      adding local_gotno to global_gotno.  We reverse the list and make
4853      it circular since then we'll be able to quickly compute the
4854      beginning of a GOT, by computing the end of its predecessor.  To
4855      avoid special cases for the primary GOT, while still preserving
4856      assertions that are valid for both single- and multi-got links,
4857      we arrange for the main got struct to have the right number of
4858      global entries, but set its local_gotno such that the initial
4859      offset of the primary GOT is zero.  Remember that the primary GOT
4860      will become the last item in the circular linked list, so it
4861      points back to the master GOT.  */
4862   gg->local_gotno = -g->global_gotno;
4863   gg->global_gotno = g->global_gotno;
4864   gg->tls_gotno = 0;
4865   assign = 0;
4866   gg->next = gg;
4867
4868   do
4869     {
4870       struct mips_got_info *gn;
4871
4872       assign += htab->reserved_gotno;
4873       g->assigned_low_gotno = assign;
4874       g->local_gotno += assign;
4875       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4876       g->assigned_high_gotno = g->local_gotno - 1;
4877       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4878
4879       /* Take g out of the direct list, and push it onto the reversed
4880          list that gg points to.  g->next is guaranteed to be nonnull after
4881          this operation, as required by mips_elf_initialize_tls_index. */
4882       gn = g->next;
4883       g->next = gg->next;
4884       gg->next = g;
4885
4886       /* Set up any TLS entries.  We always place the TLS entries after
4887          all non-TLS entries.  */
4888       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4889       tga.g = g;
4890       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4891       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4892       if (!tga.g)
4893         return FALSE;
4894       BFD_ASSERT (g->tls_assigned_gotno == assign);
4895
4896       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4897       g = gn;
4898
4899       /* Forbid global symbols in every non-primary GOT from having
4900          lazy-binding stubs.  */
4901       if (g)
4902         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4903     }
4904   while (g);
4905
4906   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4907
4908   needed_relocs = 0;
4909   for (g = gg->next; g && g->next != gg; g = g->next)
4910     {
4911       unsigned int save_assign;
4912
4913       /* Assign offsets to global GOT entries and count how many
4914          relocations they need.  */
4915       save_assign = g->assigned_low_gotno;
4916       g->assigned_low_gotno = g->local_gotno;
4917       tga.info = info;
4918       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4919       tga.g = g;
4920       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4921       if (!tga.g)
4922         return FALSE;
4923       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4924       g->assigned_low_gotno = save_assign;
4925
4926       if (bfd_link_pic (info))
4927         {
4928           g->relocs += g->local_gotno - g->assigned_low_gotno;
4929           BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4930                       + g->next->global_gotno
4931                       + g->next->tls_gotno
4932                       + htab->reserved_gotno);
4933         }
4934       needed_relocs += g->relocs;
4935     }
4936   needed_relocs += g->relocs;
4937
4938   if (needed_relocs)
4939     mips_elf_allocate_dynamic_relocations (dynobj, info,
4940                                            needed_relocs);
4941
4942   return TRUE;
4943 }
4944
4945 \f
4946 /* Returns the first relocation of type r_type found, beginning with
4947    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4948
4949 static const Elf_Internal_Rela *
4950 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4951                           const Elf_Internal_Rela *relocation,
4952                           const Elf_Internal_Rela *relend)
4953 {
4954   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4955
4956   while (relocation < relend)
4957     {
4958       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4959           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4960         return relocation;
4961
4962       ++relocation;
4963     }
4964
4965   /* We didn't find it.  */
4966   return NULL;
4967 }
4968
4969 /* Return whether an input relocation is against a local symbol.  */
4970
4971 static bfd_boolean
4972 mips_elf_local_relocation_p (bfd *input_bfd,
4973                              const Elf_Internal_Rela *relocation,
4974                              asection **local_sections)
4975 {
4976   unsigned long r_symndx;
4977   Elf_Internal_Shdr *symtab_hdr;
4978   size_t extsymoff;
4979
4980   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4981   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4982   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4983
4984   if (r_symndx < extsymoff)
4985     return TRUE;
4986   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4987     return TRUE;
4988
4989   return FALSE;
4990 }
4991 \f
4992 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4993
4994 bfd_vma
4995 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
4996 {
4997   if (value & ((bfd_vma) 1 << (bits - 1)))
4998     /* VALUE is negative.  */
4999     value |= ((bfd_vma) - 1) << bits;
5000
5001   return value;
5002 }
5003
5004 /* Return non-zero if the indicated VALUE has overflowed the maximum
5005    range expressible by a signed number with the indicated number of
5006    BITS.  */
5007
5008 static bfd_boolean
5009 mips_elf_overflow_p (bfd_vma value, int bits)
5010 {
5011   bfd_signed_vma svalue = (bfd_signed_vma) value;
5012
5013   if (svalue > (1 << (bits - 1)) - 1)
5014     /* The value is too big.  */
5015     return TRUE;
5016   else if (svalue < -(1 << (bits - 1)))
5017     /* The value is too small.  */
5018     return TRUE;
5019
5020   /* All is well.  */
5021   return FALSE;
5022 }
5023
5024 /* Calculate the %high function.  */
5025
5026 static bfd_vma
5027 mips_elf_high (bfd_vma value)
5028 {
5029   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5030 }
5031
5032 /* Calculate the %higher function.  */
5033
5034 static bfd_vma
5035 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5036 {
5037 #ifdef BFD64
5038   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5039 #else
5040   abort ();
5041   return MINUS_ONE;
5042 #endif
5043 }
5044
5045 /* Calculate the %highest function.  */
5046
5047 static bfd_vma
5048 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5049 {
5050 #ifdef BFD64
5051   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5052 #else
5053   abort ();
5054   return MINUS_ONE;
5055 #endif
5056 }
5057 \f
5058 /* Create the .compact_rel section.  */
5059
5060 static bfd_boolean
5061 mips_elf_create_compact_rel_section
5062   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5063 {
5064   flagword flags;
5065   register asection *s;
5066
5067   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5068     {
5069       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5070                | SEC_READONLY);
5071
5072       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5073       if (s == NULL
5074           || ! bfd_set_section_alignment (abfd, s,
5075                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5076         return FALSE;
5077
5078       s->size = sizeof (Elf32_External_compact_rel);
5079     }
5080
5081   return TRUE;
5082 }
5083
5084 /* Create the .got section to hold the global offset table.  */
5085
5086 static bfd_boolean
5087 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5088 {
5089   flagword flags;
5090   register asection *s;
5091   struct elf_link_hash_entry *h;
5092   struct bfd_link_hash_entry *bh;
5093   struct mips_elf_link_hash_table *htab;
5094
5095   htab = mips_elf_hash_table (info);
5096   BFD_ASSERT (htab != NULL);
5097
5098   /* This function may be called more than once.  */
5099   if (htab->sgot)
5100     return TRUE;
5101
5102   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5103            | SEC_LINKER_CREATED);
5104
5105   /* We have to use an alignment of 2**4 here because this is hardcoded
5106      in the function stub generation and in the linker script.  */
5107   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5108   if (s == NULL
5109       || ! bfd_set_section_alignment (abfd, s, 4))
5110     return FALSE;
5111   htab->sgot = s;
5112
5113   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5114      linker script because we don't want to define the symbol if we
5115      are not creating a global offset table.  */
5116   bh = NULL;
5117   if (! (_bfd_generic_link_add_one_symbol
5118          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5119           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5120     return FALSE;
5121
5122   h = (struct elf_link_hash_entry *) bh;
5123   h->non_elf = 0;
5124   h->def_regular = 1;
5125   h->type = STT_OBJECT;
5126   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5127   elf_hash_table (info)->hgot = h;
5128
5129   if (bfd_link_pic (info)
5130       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5131     return FALSE;
5132
5133   htab->got_info = mips_elf_create_got_info (abfd);
5134   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5135     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5136
5137   /* We also need a .got.plt section when generating PLTs.  */
5138   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5139                                           SEC_ALLOC | SEC_LOAD
5140                                           | SEC_HAS_CONTENTS
5141                                           | SEC_IN_MEMORY
5142                                           | SEC_LINKER_CREATED);
5143   if (s == NULL)
5144     return FALSE;
5145   htab->sgotplt = s;
5146
5147   return TRUE;
5148 }
5149 \f
5150 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5151    __GOTT_INDEX__ symbols.  These symbols are only special for
5152    shared objects; they are not used in executables.  */
5153
5154 static bfd_boolean
5155 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5156 {
5157   return (mips_elf_hash_table (info)->is_vxworks
5158           && bfd_link_pic (info)
5159           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5160               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5161 }
5162
5163 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5164    require an la25 stub.  See also mips_elf_local_pic_function_p,
5165    which determines whether the destination function ever requires a
5166    stub.  */
5167
5168 static bfd_boolean
5169 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5170                                      bfd_boolean target_is_16_bit_code_p)
5171 {
5172   /* We specifically ignore branches and jumps from EF_PIC objects,
5173      where the onus is on the compiler or programmer to perform any
5174      necessary initialization of $25.  Sometimes such initialization
5175      is unnecessary; for example, -mno-shared functions do not use
5176      the incoming value of $25, and may therefore be called directly.  */
5177   if (PIC_OBJECT_P (input_bfd))
5178     return FALSE;
5179
5180   switch (r_type)
5181     {
5182     case R_MIPS_26:
5183     case R_MIPS_PC16:
5184     case R_MIPS_PC21_S2:
5185     case R_MIPS_PC26_S2:
5186     case R_MICROMIPS_26_S1:
5187     case R_MICROMIPS_PC7_S1:
5188     case R_MICROMIPS_PC10_S1:
5189     case R_MICROMIPS_PC16_S1:
5190     case R_MICROMIPS_PC23_S2:
5191       return TRUE;
5192
5193     case R_MIPS16_26:
5194       return !target_is_16_bit_code_p;
5195
5196     default:
5197       return FALSE;
5198     }
5199 }
5200 \f
5201 /* Calculate the value produced by the RELOCATION (which comes from
5202    the INPUT_BFD).  The ADDEND is the addend to use for this
5203    RELOCATION; RELOCATION->R_ADDEND is ignored.
5204
5205    The result of the relocation calculation is stored in VALUEP.
5206    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5207    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5208
5209    This function returns bfd_reloc_continue if the caller need take no
5210    further action regarding this relocation, bfd_reloc_notsupported if
5211    something goes dramatically wrong, bfd_reloc_overflow if an
5212    overflow occurs, and bfd_reloc_ok to indicate success.  */
5213
5214 static bfd_reloc_status_type
5215 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5216                                asection *input_section,
5217                                struct bfd_link_info *info,
5218                                const Elf_Internal_Rela *relocation,
5219                                bfd_vma addend, reloc_howto_type *howto,
5220                                Elf_Internal_Sym *local_syms,
5221                                asection **local_sections, bfd_vma *valuep,
5222                                const char **namep,
5223                                bfd_boolean *cross_mode_jump_p,
5224                                bfd_boolean save_addend)
5225 {
5226   /* The eventual value we will return.  */
5227   bfd_vma value;
5228   /* The address of the symbol against which the relocation is
5229      occurring.  */
5230   bfd_vma symbol = 0;
5231   /* The final GP value to be used for the relocatable, executable, or
5232      shared object file being produced.  */
5233   bfd_vma gp;
5234   /* The place (section offset or address) of the storage unit being
5235      relocated.  */
5236   bfd_vma p;
5237   /* The value of GP used to create the relocatable object.  */
5238   bfd_vma gp0;
5239   /* The offset into the global offset table at which the address of
5240      the relocation entry symbol, adjusted by the addend, resides
5241      during execution.  */
5242   bfd_vma g = MINUS_ONE;
5243   /* The section in which the symbol referenced by the relocation is
5244      located.  */
5245   asection *sec = NULL;
5246   struct mips_elf_link_hash_entry *h = NULL;
5247   /* TRUE if the symbol referred to by this relocation is a local
5248      symbol.  */
5249   bfd_boolean local_p, was_local_p;
5250   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5251   bfd_boolean gp_disp_p = FALSE;
5252   /* TRUE if the symbol referred to by this relocation is
5253      "__gnu_local_gp".  */
5254   bfd_boolean gnu_local_gp_p = FALSE;
5255   Elf_Internal_Shdr *symtab_hdr;
5256   size_t extsymoff;
5257   unsigned long r_symndx;
5258   int r_type;
5259   /* TRUE if overflow occurred during the calculation of the
5260      relocation value.  */
5261   bfd_boolean overflowed_p;
5262   /* TRUE if this relocation refers to a MIPS16 function.  */
5263   bfd_boolean target_is_16_bit_code_p = FALSE;
5264   bfd_boolean target_is_micromips_code_p = FALSE;
5265   struct mips_elf_link_hash_table *htab;
5266   bfd *dynobj;
5267
5268   dynobj = elf_hash_table (info)->dynobj;
5269   htab = mips_elf_hash_table (info);
5270   BFD_ASSERT (htab != NULL);
5271
5272   /* Parse the relocation.  */
5273   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5274   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5275   p = (input_section->output_section->vma
5276        + input_section->output_offset
5277        + relocation->r_offset);
5278
5279   /* Assume that there will be no overflow.  */
5280   overflowed_p = FALSE;
5281
5282   /* Figure out whether or not the symbol is local, and get the offset
5283      used in the array of hash table entries.  */
5284   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5285   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5286                                          local_sections);
5287   was_local_p = local_p;
5288   if (! elf_bad_symtab (input_bfd))
5289     extsymoff = symtab_hdr->sh_info;
5290   else
5291     {
5292       /* The symbol table does not follow the rule that local symbols
5293          must come before globals.  */
5294       extsymoff = 0;
5295     }
5296
5297   /* Figure out the value of the symbol.  */
5298   if (local_p)
5299     {
5300       Elf_Internal_Sym *sym;
5301
5302       sym = local_syms + r_symndx;
5303       sec = local_sections[r_symndx];
5304
5305       symbol = sec->output_section->vma + sec->output_offset;
5306       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5307           || (sec->flags & SEC_MERGE))
5308         symbol += sym->st_value;
5309       if ((sec->flags & SEC_MERGE)
5310           && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5311         {
5312           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5313           addend -= symbol;
5314           addend += sec->output_section->vma + sec->output_offset;
5315         }
5316
5317       /* MIPS16/microMIPS text labels should be treated as odd.  */
5318       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5319         ++symbol;
5320
5321       /* Record the name of this symbol, for our caller.  */
5322       *namep = bfd_elf_string_from_elf_section (input_bfd,
5323                                                 symtab_hdr->sh_link,
5324                                                 sym->st_name);
5325       if (*namep == NULL || **namep == '\0')
5326         *namep = bfd_section_name (input_bfd, sec);
5327
5328       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5329       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5330     }
5331   else
5332     {
5333       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5334
5335       /* For global symbols we look up the symbol in the hash-table.  */
5336       h = ((struct mips_elf_link_hash_entry *)
5337            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5338       /* Find the real hash-table entry for this symbol.  */
5339       while (h->root.root.type == bfd_link_hash_indirect
5340              || h->root.root.type == bfd_link_hash_warning)
5341         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5342
5343       /* Record the name of this symbol, for our caller.  */
5344       *namep = h->root.root.root.string;
5345
5346       /* See if this is the special _gp_disp symbol.  Note that such a
5347          symbol must always be a global symbol.  */
5348       if (strcmp (*namep, "_gp_disp") == 0
5349           && ! NEWABI_P (input_bfd))
5350         {
5351           /* Relocations against _gp_disp are permitted only with
5352              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5353           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5354             return bfd_reloc_notsupported;
5355
5356           gp_disp_p = TRUE;
5357         }
5358       /* See if this is the special _gp symbol.  Note that such a
5359          symbol must always be a global symbol.  */
5360       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5361         gnu_local_gp_p = TRUE;
5362
5363
5364       /* If this symbol is defined, calculate its address.  Note that
5365          _gp_disp is a magic symbol, always implicitly defined by the
5366          linker, so it's inappropriate to check to see whether or not
5367          its defined.  */
5368       else if ((h->root.root.type == bfd_link_hash_defined
5369                 || h->root.root.type == bfd_link_hash_defweak)
5370                && h->root.root.u.def.section)
5371         {
5372           sec = h->root.root.u.def.section;
5373           if (sec->output_section)
5374             symbol = (h->root.root.u.def.value
5375                       + sec->output_section->vma
5376                       + sec->output_offset);
5377           else
5378             symbol = h->root.root.u.def.value;
5379         }
5380       else if (h->root.root.type == bfd_link_hash_undefweak)
5381         /* We allow relocations against undefined weak symbols, giving
5382            it the value zero, so that you can undefined weak functions
5383            and check to see if they exist by looking at their
5384            addresses.  */
5385         symbol = 0;
5386       else if (info->unresolved_syms_in_objects == RM_IGNORE
5387                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5388         symbol = 0;
5389       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5390                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5391         {
5392           /* If this is a dynamic link, we should have created a
5393              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5394              in in _bfd_mips_elf_create_dynamic_sections.
5395              Otherwise, we should define the symbol with a value of 0.
5396              FIXME: It should probably get into the symbol table
5397              somehow as well.  */
5398           BFD_ASSERT (! bfd_link_pic (info));
5399           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5400           symbol = 0;
5401         }
5402       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5403         {
5404           /* This is an optional symbol - an Irix specific extension to the
5405              ELF spec.  Ignore it for now.
5406              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5407              than simply ignoring them, but we do not handle this for now.
5408              For information see the "64-bit ELF Object File Specification"
5409              which is available from here:
5410              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5411           symbol = 0;
5412         }
5413       else if ((*info->callbacks->undefined_symbol)
5414                (info, h->root.root.root.string, input_bfd,
5415                 input_section, relocation->r_offset,
5416                 (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5417                  || ELF_ST_VISIBILITY (h->root.other)))
5418         {
5419           return bfd_reloc_undefined;
5420         }
5421       else
5422         {
5423           return bfd_reloc_notsupported;
5424         }
5425
5426       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5427       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5428     }
5429
5430   /* If this is a reference to a 16-bit function with a stub, we need
5431      to redirect the relocation to the stub unless:
5432
5433      (a) the relocation is for a MIPS16 JAL;
5434
5435      (b) the relocation is for a MIPS16 PIC call, and there are no
5436          non-MIPS16 uses of the GOT slot; or
5437
5438      (c) the section allows direct references to MIPS16 functions.  */
5439   if (r_type != R_MIPS16_26
5440       && !bfd_link_relocatable (info)
5441       && ((h != NULL
5442            && h->fn_stub != NULL
5443            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5444           || (local_p
5445               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5446               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5447       && !section_allows_mips16_refs_p (input_section))
5448     {
5449       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5450          have already noticed that we were going to need the
5451          stub.  */
5452       if (local_p)
5453         {
5454           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5455           value = 0;
5456         }
5457       else
5458         {
5459           BFD_ASSERT (h->need_fn_stub);
5460           if (h->la25_stub)
5461             {
5462               /* If a LA25 header for the stub itself exists, point to the
5463                  prepended LUI/ADDIU sequence.  */
5464               sec = h->la25_stub->stub_section;
5465               value = h->la25_stub->offset;
5466             }
5467           else
5468             {
5469               sec = h->fn_stub;
5470               value = 0;
5471             }
5472         }
5473
5474       symbol = sec->output_section->vma + sec->output_offset + value;
5475       /* The target is 16-bit, but the stub isn't.  */
5476       target_is_16_bit_code_p = FALSE;
5477     }
5478   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5479      to a standard MIPS function, we need to redirect the call to the stub.
5480      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5481      indirect calls should use an indirect stub instead.  */
5482   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5483            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5484                || (local_p
5485                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5486                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5487            && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5488     {
5489       if (local_p)
5490         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5491       else
5492         {
5493           /* If both call_stub and call_fp_stub are defined, we can figure
5494              out which one to use by checking which one appears in the input
5495              file.  */
5496           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5497             {
5498               asection *o;
5499
5500               sec = NULL;
5501               for (o = input_bfd->sections; o != NULL; o = o->next)
5502                 {
5503                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5504                     {
5505                       sec = h->call_fp_stub;
5506                       break;
5507                     }
5508                 }
5509               if (sec == NULL)
5510                 sec = h->call_stub;
5511             }
5512           else if (h->call_stub != NULL)
5513             sec = h->call_stub;
5514           else
5515             sec = h->call_fp_stub;
5516         }
5517
5518       BFD_ASSERT (sec->size > 0);
5519       symbol = sec->output_section->vma + sec->output_offset;
5520     }
5521   /* If this is a direct call to a PIC function, redirect to the
5522      non-PIC stub.  */
5523   else if (h != NULL && h->la25_stub
5524            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5525                                                    target_is_16_bit_code_p))
5526     symbol = (h->la25_stub->stub_section->output_section->vma
5527               + h->la25_stub->stub_section->output_offset
5528               + h->la25_stub->offset);
5529   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5530      entry is used if a standard PLT entry has also been made.  In this
5531      case the symbol will have been set by mips_elf_set_plt_sym_value
5532      to point to the standard PLT entry, so redirect to the compressed
5533      one.  */
5534   else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
5535            && !bfd_link_relocatable (info)
5536            && h != NULL
5537            && h->use_plt_entry
5538            && h->root.plt.plist->comp_offset != MINUS_ONE
5539            && h->root.plt.plist->mips_offset != MINUS_ONE)
5540     {
5541       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5542
5543       sec = htab->splt;
5544       symbol = (sec->output_section->vma
5545                 + sec->output_offset
5546                 + htab->plt_header_size
5547                 + htab->plt_mips_offset
5548                 + h->root.plt.plist->comp_offset
5549                 + 1);
5550
5551       target_is_16_bit_code_p = !micromips_p;
5552       target_is_micromips_code_p = micromips_p;
5553     }
5554
5555   /* Make sure MIPS16 and microMIPS are not used together.  */
5556   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5557       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5558    {
5559       (*_bfd_error_handler)
5560         (_("MIPS16 and microMIPS functions cannot call each other"));
5561       return bfd_reloc_notsupported;
5562    }
5563
5564   /* Calls from 16-bit code to 32-bit code and vice versa require the
5565      mode change.  However, we can ignore calls to undefined weak symbols,
5566      which should never be executed at runtime.  This exception is important
5567      because the assembly writer may have "known" that any definition of the
5568      symbol would be 16-bit code, and that direct jumps were therefore
5569      acceptable.  */
5570   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5571                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5572                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5573                             || (r_type == R_MICROMIPS_26_S1
5574                                 && !target_is_micromips_code_p)
5575                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5576                                 && (target_is_16_bit_code_p
5577                                     || target_is_micromips_code_p))));
5578
5579   local_p = (h == NULL || mips_use_local_got_p (info, h));
5580
5581   gp0 = _bfd_get_gp_value (input_bfd);
5582   gp = _bfd_get_gp_value (abfd);
5583   if (htab->got_info)
5584     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5585
5586   if (gnu_local_gp_p)
5587     symbol = gp;
5588
5589   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5590      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5591      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5592   if (got_page_reloc_p (r_type) && !local_p)
5593     {
5594       r_type = (micromips_reloc_p (r_type)
5595                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5596       addend = 0;
5597     }
5598
5599   /* If we haven't already determined the GOT offset, and we're going
5600      to need it, get it now.  */
5601   switch (r_type)
5602     {
5603     case R_MIPS16_CALL16:
5604     case R_MIPS16_GOT16:
5605     case R_MIPS_CALL16:
5606     case R_MIPS_GOT16:
5607     case R_MIPS_GOT_DISP:
5608     case R_MIPS_GOT_HI16:
5609     case R_MIPS_CALL_HI16:
5610     case R_MIPS_GOT_LO16:
5611     case R_MIPS_CALL_LO16:
5612     case R_MICROMIPS_CALL16:
5613     case R_MICROMIPS_GOT16:
5614     case R_MICROMIPS_GOT_DISP:
5615     case R_MICROMIPS_GOT_HI16:
5616     case R_MICROMIPS_CALL_HI16:
5617     case R_MICROMIPS_GOT_LO16:
5618     case R_MICROMIPS_CALL_LO16:
5619     case R_MIPS_TLS_GD:
5620     case R_MIPS_TLS_GOTTPREL:
5621     case R_MIPS_TLS_LDM:
5622     case R_MIPS16_TLS_GD:
5623     case R_MIPS16_TLS_GOTTPREL:
5624     case R_MIPS16_TLS_LDM:
5625     case R_MICROMIPS_TLS_GD:
5626     case R_MICROMIPS_TLS_GOTTPREL:
5627     case R_MICROMIPS_TLS_LDM:
5628       /* Find the index into the GOT where this value is located.  */
5629       if (tls_ldm_reloc_p (r_type))
5630         {
5631           g = mips_elf_local_got_index (abfd, input_bfd, info,
5632                                         0, 0, NULL, r_type);
5633           if (g == MINUS_ONE)
5634             return bfd_reloc_outofrange;
5635         }
5636       else if (!local_p)
5637         {
5638           /* On VxWorks, CALL relocations should refer to the .got.plt
5639              entry, which is initialized to point at the PLT stub.  */
5640           if (htab->is_vxworks
5641               && (call_hi16_reloc_p (r_type)
5642                   || call_lo16_reloc_p (r_type)
5643                   || call16_reloc_p (r_type)))
5644             {
5645               BFD_ASSERT (addend == 0);
5646               BFD_ASSERT (h->root.needs_plt);
5647               g = mips_elf_gotplt_index (info, &h->root);
5648             }
5649           else
5650             {
5651               BFD_ASSERT (addend == 0);
5652               g = mips_elf_global_got_index (abfd, info, input_bfd,
5653                                              &h->root, r_type);
5654               if (!TLS_RELOC_P (r_type)
5655                   && !elf_hash_table (info)->dynamic_sections_created)
5656                 /* This is a static link.  We must initialize the GOT entry.  */
5657                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5658             }
5659         }
5660       else if (!htab->is_vxworks
5661                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5662         /* The calculation below does not involve "g".  */
5663         break;
5664       else
5665         {
5666           g = mips_elf_local_got_index (abfd, input_bfd, info,
5667                                         symbol + addend, r_symndx, h, r_type);
5668           if (g == MINUS_ONE)
5669             return bfd_reloc_outofrange;
5670         }
5671
5672       /* Convert GOT indices to actual offsets.  */
5673       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5674       break;
5675     }
5676
5677   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5678      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5679   if (h != NULL && is_gott_symbol (info, &h->root))
5680     {
5681       Elf_Internal_Rela outrel;
5682       bfd_byte *loc;
5683       asection *s;
5684
5685       s = mips_elf_rel_dyn_section (info, FALSE);
5686       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5687
5688       outrel.r_offset = (input_section->output_section->vma
5689                          + input_section->output_offset
5690                          + relocation->r_offset);
5691       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5692       outrel.r_addend = addend;
5693       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5694
5695       /* If we've written this relocation for a readonly section,
5696          we need to set DF_TEXTREL again, so that we do not delete the
5697          DT_TEXTREL tag.  */
5698       if (MIPS_ELF_READONLY_SECTION (input_section))
5699         info->flags |= DF_TEXTREL;
5700
5701       *valuep = 0;
5702       return bfd_reloc_ok;
5703     }
5704
5705   /* Figure out what kind of relocation is being performed.  */
5706   switch (r_type)
5707     {
5708     case R_MIPS_NONE:
5709       return bfd_reloc_continue;
5710
5711     case R_MIPS_16:
5712       if (howto->partial_inplace)
5713         addend = _bfd_mips_elf_sign_extend (addend, 16);
5714       value = symbol + addend;
5715       overflowed_p = mips_elf_overflow_p (value, 16);
5716       break;
5717
5718     case R_MIPS_32:
5719     case R_MIPS_REL32:
5720     case R_MIPS_64:
5721       if ((bfd_link_pic (info)
5722            || (htab->root.dynamic_sections_created
5723                && h != NULL
5724                && h->root.def_dynamic
5725                && !h->root.def_regular
5726                && !h->has_static_relocs))
5727           && r_symndx != STN_UNDEF
5728           && (h == NULL
5729               || h->root.root.type != bfd_link_hash_undefweak
5730               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5731           && (input_section->flags & SEC_ALLOC) != 0)
5732         {
5733           /* If we're creating a shared library, then we can't know
5734              where the symbol will end up.  So, we create a relocation
5735              record in the output, and leave the job up to the dynamic
5736              linker.  We must do the same for executable references to
5737              shared library symbols, unless we've decided to use copy
5738              relocs or PLTs instead.  */
5739           value = addend;
5740           if (!mips_elf_create_dynamic_relocation (abfd,
5741                                                    info,
5742                                                    relocation,
5743                                                    h,
5744                                                    sec,
5745                                                    symbol,
5746                                                    &value,
5747                                                    input_section))
5748             return bfd_reloc_undefined;
5749         }
5750       else
5751         {
5752           if (r_type != R_MIPS_REL32)
5753             value = symbol + addend;
5754           else
5755             value = addend;
5756         }
5757       value &= howto->dst_mask;
5758       break;
5759
5760     case R_MIPS_PC32:
5761       value = symbol + addend - p;
5762       value &= howto->dst_mask;
5763       break;
5764
5765     case R_MIPS16_26:
5766       /* The calculation for R_MIPS16_26 is just the same as for an
5767          R_MIPS_26.  It's only the storage of the relocated field into
5768          the output file that's different.  That's handled in
5769          mips_elf_perform_relocation.  So, we just fall through to the
5770          R_MIPS_26 case here.  */
5771     case R_MIPS_26:
5772     case R_MICROMIPS_26_S1:
5773       {
5774         unsigned int shift;
5775
5776         /* Shift is 2, unusually, for microMIPS JALX.  */
5777         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5778
5779         if (was_local_p)
5780           value = addend | ((p + 4) & (0xfc000000 << shift));
5781         else if (howto->partial_inplace)
5782           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5783         else
5784           value = addend;
5785         value += symbol;
5786
5787         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5788            the correct ISA mode selector and bit 1 must be 0.  */
5789         if (*cross_mode_jump_p && (value & 3) != (r_type == R_MIPS_26))
5790           return bfd_reloc_outofrange;
5791
5792         value >>= shift;
5793         if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5794           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5795         value &= howto->dst_mask;
5796       }
5797       break;
5798
5799     case R_MIPS_TLS_DTPREL_HI16:
5800     case R_MIPS16_TLS_DTPREL_HI16:
5801     case R_MICROMIPS_TLS_DTPREL_HI16:
5802       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5803                & howto->dst_mask);
5804       break;
5805
5806     case R_MIPS_TLS_DTPREL_LO16:
5807     case R_MIPS_TLS_DTPREL32:
5808     case R_MIPS_TLS_DTPREL64:
5809     case R_MIPS16_TLS_DTPREL_LO16:
5810     case R_MICROMIPS_TLS_DTPREL_LO16:
5811       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5812       break;
5813
5814     case R_MIPS_TLS_TPREL_HI16:
5815     case R_MIPS16_TLS_TPREL_HI16:
5816     case R_MICROMIPS_TLS_TPREL_HI16:
5817       value = (mips_elf_high (addend + symbol - tprel_base (info))
5818                & howto->dst_mask);
5819       break;
5820
5821     case R_MIPS_TLS_TPREL_LO16:
5822     case R_MIPS_TLS_TPREL32:
5823     case R_MIPS_TLS_TPREL64:
5824     case R_MIPS16_TLS_TPREL_LO16:
5825     case R_MICROMIPS_TLS_TPREL_LO16:
5826       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5827       break;
5828
5829     case R_MIPS_HI16:
5830     case R_MIPS16_HI16:
5831     case R_MICROMIPS_HI16:
5832       if (!gp_disp_p)
5833         {
5834           value = mips_elf_high (addend + symbol);
5835           value &= howto->dst_mask;
5836         }
5837       else
5838         {
5839           /* For MIPS16 ABI code we generate this sequence
5840                 0: li      $v0,%hi(_gp_disp)
5841                 4: addiupc $v1,%lo(_gp_disp)
5842                 8: sll     $v0,16
5843                12: addu    $v0,$v1
5844                14: move    $gp,$v0
5845              So the offsets of hi and lo relocs are the same, but the
5846              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5847              ADDIUPC clears the low two bits of the instruction address,
5848              so the base is ($t9 + 4) & ~3.  */
5849           if (r_type == R_MIPS16_HI16)
5850             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5851           /* The microMIPS .cpload sequence uses the same assembly
5852              instructions as the traditional psABI version, but the
5853              incoming $t9 has the low bit set.  */
5854           else if (r_type == R_MICROMIPS_HI16)
5855             value = mips_elf_high (addend + gp - p - 1);
5856           else
5857             value = mips_elf_high (addend + gp - p);
5858           overflowed_p = mips_elf_overflow_p (value, 16);
5859         }
5860       break;
5861
5862     case R_MIPS_LO16:
5863     case R_MIPS16_LO16:
5864     case R_MICROMIPS_LO16:
5865     case R_MICROMIPS_HI0_LO16:
5866       if (!gp_disp_p)
5867         value = (symbol + addend) & howto->dst_mask;
5868       else
5869         {
5870           /* See the comment for R_MIPS16_HI16 above for the reason
5871              for this conditional.  */
5872           if (r_type == R_MIPS16_LO16)
5873             value = addend + gp - (p & ~(bfd_vma) 0x3);
5874           else if (r_type == R_MICROMIPS_LO16
5875                    || r_type == R_MICROMIPS_HI0_LO16)
5876             value = addend + gp - p + 3;
5877           else
5878             value = addend + gp - p + 4;
5879           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5880              for overflow.  But, on, say, IRIX5, relocations against
5881              _gp_disp are normally generated from the .cpload
5882              pseudo-op.  It generates code that normally looks like
5883              this:
5884
5885                lui    $gp,%hi(_gp_disp)
5886                addiu  $gp,$gp,%lo(_gp_disp)
5887                addu   $gp,$gp,$t9
5888
5889              Here $t9 holds the address of the function being called,
5890              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5891              relocation can easily overflow in this situation, but the
5892              R_MIPS_HI16 relocation will handle the overflow.
5893              Therefore, we consider this a bug in the MIPS ABI, and do
5894              not check for overflow here.  */
5895         }
5896       break;
5897
5898     case R_MIPS_LITERAL:
5899     case R_MICROMIPS_LITERAL:
5900       /* Because we don't merge literal sections, we can handle this
5901          just like R_MIPS_GPREL16.  In the long run, we should merge
5902          shared literals, and then we will need to additional work
5903          here.  */
5904
5905       /* Fall through.  */
5906
5907     case R_MIPS16_GPREL:
5908       /* The R_MIPS16_GPREL performs the same calculation as
5909          R_MIPS_GPREL16, but stores the relocated bits in a different
5910          order.  We don't need to do anything special here; the
5911          differences are handled in mips_elf_perform_relocation.  */
5912     case R_MIPS_GPREL16:
5913     case R_MICROMIPS_GPREL7_S2:
5914     case R_MICROMIPS_GPREL16:
5915       /* Only sign-extend the addend if it was extracted from the
5916          instruction.  If the addend was separate, leave it alone,
5917          otherwise we may lose significant bits.  */
5918       if (howto->partial_inplace)
5919         addend = _bfd_mips_elf_sign_extend (addend, 16);
5920       value = symbol + addend - gp;
5921       /* If the symbol was local, any earlier relocatable links will
5922          have adjusted its addend with the gp offset, so compensate
5923          for that now.  Don't do it for symbols forced local in this
5924          link, though, since they won't have had the gp offset applied
5925          to them before.  */
5926       if (was_local_p)
5927         value += gp0;
5928       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5929         overflowed_p = mips_elf_overflow_p (value, 16);
5930       break;
5931
5932     case R_MIPS16_GOT16:
5933     case R_MIPS16_CALL16:
5934     case R_MIPS_GOT16:
5935     case R_MIPS_CALL16:
5936     case R_MICROMIPS_GOT16:
5937     case R_MICROMIPS_CALL16:
5938       /* VxWorks does not have separate local and global semantics for
5939          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5940       if (!htab->is_vxworks && local_p)
5941         {
5942           value = mips_elf_got16_entry (abfd, input_bfd, info,
5943                                         symbol + addend, !was_local_p);
5944           if (value == MINUS_ONE)
5945             return bfd_reloc_outofrange;
5946           value
5947             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5948           overflowed_p = mips_elf_overflow_p (value, 16);
5949           break;
5950         }
5951
5952       /* Fall through.  */
5953
5954     case R_MIPS_TLS_GD:
5955     case R_MIPS_TLS_GOTTPREL:
5956     case R_MIPS_TLS_LDM:
5957     case R_MIPS_GOT_DISP:
5958     case R_MIPS16_TLS_GD:
5959     case R_MIPS16_TLS_GOTTPREL:
5960     case R_MIPS16_TLS_LDM:
5961     case R_MICROMIPS_TLS_GD:
5962     case R_MICROMIPS_TLS_GOTTPREL:
5963     case R_MICROMIPS_TLS_LDM:
5964     case R_MICROMIPS_GOT_DISP:
5965       value = g;
5966       overflowed_p = mips_elf_overflow_p (value, 16);
5967       break;
5968
5969     case R_MIPS_GPREL32:
5970       value = (addend + symbol + gp0 - gp);
5971       if (!save_addend)
5972         value &= howto->dst_mask;
5973       break;
5974
5975     case R_MIPS_PC16:
5976     case R_MIPS_GNU_REL16_S2:
5977       if (howto->partial_inplace)
5978         addend = _bfd_mips_elf_sign_extend (addend, 18);
5979
5980       if ((symbol + addend) & 3)
5981         return bfd_reloc_outofrange;
5982
5983       value = symbol + addend - p;
5984       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5985         overflowed_p = mips_elf_overflow_p (value, 18);
5986       value >>= howto->rightshift;
5987       value &= howto->dst_mask;
5988       break;
5989
5990     case R_MIPS_PC21_S2:
5991       if (howto->partial_inplace)
5992         addend = _bfd_mips_elf_sign_extend (addend, 23);
5993
5994       if ((symbol + addend) & 3)
5995         return bfd_reloc_outofrange;
5996
5997       value = symbol + addend - p;
5998       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5999         overflowed_p = mips_elf_overflow_p (value, 23);
6000       value >>= howto->rightshift;
6001       value &= howto->dst_mask;
6002       break;
6003
6004     case R_MIPS_PC26_S2:
6005       if (howto->partial_inplace)
6006         addend = _bfd_mips_elf_sign_extend (addend, 28);
6007
6008       if ((symbol + addend) & 3)
6009         return bfd_reloc_outofrange;
6010
6011       value = symbol + addend - p;
6012       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6013         overflowed_p = mips_elf_overflow_p (value, 28);
6014       value >>= howto->rightshift;
6015       value &= howto->dst_mask;
6016       break;
6017
6018     case R_MIPS_PC18_S3:
6019       if (howto->partial_inplace)
6020         addend = _bfd_mips_elf_sign_extend (addend, 21);
6021
6022       if ((symbol + addend) & 7)
6023         return bfd_reloc_outofrange;
6024
6025       value = symbol + addend - ((p | 7) ^ 7);
6026       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6027         overflowed_p = mips_elf_overflow_p (value, 21);
6028       value >>= howto->rightshift;
6029       value &= howto->dst_mask;
6030       break;
6031
6032     case R_MIPS_PC19_S2:
6033       if (howto->partial_inplace)
6034         addend = _bfd_mips_elf_sign_extend (addend, 21);
6035
6036       if ((symbol + addend) & 3)
6037         return bfd_reloc_outofrange;
6038
6039       value = symbol + addend - p;
6040       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6041         overflowed_p = mips_elf_overflow_p (value, 21);
6042       value >>= howto->rightshift;
6043       value &= howto->dst_mask;
6044       break;
6045
6046     case R_MIPS_PCHI16:
6047       value = mips_elf_high (symbol + addend - p);
6048       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6049         overflowed_p = mips_elf_overflow_p (value, 16);
6050       value &= howto->dst_mask;
6051       break;
6052
6053     case R_MIPS_PCLO16:
6054       if (howto->partial_inplace)
6055         addend = _bfd_mips_elf_sign_extend (addend, 16);
6056       value = symbol + addend - p;
6057       value &= howto->dst_mask;
6058       break;
6059
6060     case R_MICROMIPS_PC7_S1:
6061       if (howto->partial_inplace)
6062         addend = _bfd_mips_elf_sign_extend (addend, 8);
6063       value = symbol + addend - p;
6064       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6065         overflowed_p = mips_elf_overflow_p (value, 8);
6066       value >>= howto->rightshift;
6067       value &= howto->dst_mask;
6068       break;
6069
6070     case R_MICROMIPS_PC10_S1:
6071       if (howto->partial_inplace)
6072         addend = _bfd_mips_elf_sign_extend (addend, 11);
6073       value = symbol + addend - p;
6074       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6075         overflowed_p = mips_elf_overflow_p (value, 11);
6076       value >>= howto->rightshift;
6077       value &= howto->dst_mask;
6078       break;
6079
6080     case R_MICROMIPS_PC16_S1:
6081       if (howto->partial_inplace)
6082         addend = _bfd_mips_elf_sign_extend (addend, 17);
6083       value = symbol + addend - p;
6084       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6085         overflowed_p = mips_elf_overflow_p (value, 17);
6086       value >>= howto->rightshift;
6087       value &= howto->dst_mask;
6088       break;
6089
6090     case R_MICROMIPS_PC23_S2:
6091       if (howto->partial_inplace)
6092         addend = _bfd_mips_elf_sign_extend (addend, 25);
6093       value = symbol + addend - ((p | 3) ^ 3);
6094       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6095         overflowed_p = mips_elf_overflow_p (value, 25);
6096       value >>= howto->rightshift;
6097       value &= howto->dst_mask;
6098       break;
6099
6100     case R_MIPS_GOT_HI16:
6101     case R_MIPS_CALL_HI16:
6102     case R_MICROMIPS_GOT_HI16:
6103     case R_MICROMIPS_CALL_HI16:
6104       /* We're allowed to handle these two relocations identically.
6105          The dynamic linker is allowed to handle the CALL relocations
6106          differently by creating a lazy evaluation stub.  */
6107       value = g;
6108       value = mips_elf_high (value);
6109       value &= howto->dst_mask;
6110       break;
6111
6112     case R_MIPS_GOT_LO16:
6113     case R_MIPS_CALL_LO16:
6114     case R_MICROMIPS_GOT_LO16:
6115     case R_MICROMIPS_CALL_LO16:
6116       value = g & howto->dst_mask;
6117       break;
6118
6119     case R_MIPS_GOT_PAGE:
6120     case R_MICROMIPS_GOT_PAGE:
6121       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6122       if (value == MINUS_ONE)
6123         return bfd_reloc_outofrange;
6124       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6125       overflowed_p = mips_elf_overflow_p (value, 16);
6126       break;
6127
6128     case R_MIPS_GOT_OFST:
6129     case R_MICROMIPS_GOT_OFST:
6130       if (local_p)
6131         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6132       else
6133         value = addend;
6134       overflowed_p = mips_elf_overflow_p (value, 16);
6135       break;
6136
6137     case R_MIPS_SUB:
6138     case R_MICROMIPS_SUB:
6139       value = symbol - addend;
6140       value &= howto->dst_mask;
6141       break;
6142
6143     case R_MIPS_HIGHER:
6144     case R_MICROMIPS_HIGHER:
6145       value = mips_elf_higher (addend + symbol);
6146       value &= howto->dst_mask;
6147       break;
6148
6149     case R_MIPS_HIGHEST:
6150     case R_MICROMIPS_HIGHEST:
6151       value = mips_elf_highest (addend + symbol);
6152       value &= howto->dst_mask;
6153       break;
6154
6155     case R_MIPS_SCN_DISP:
6156     case R_MICROMIPS_SCN_DISP:
6157       value = symbol + addend - sec->output_offset;
6158       value &= howto->dst_mask;
6159       break;
6160
6161     case R_MIPS_JALR:
6162     case R_MICROMIPS_JALR:
6163       /* This relocation is only a hint.  In some cases, we optimize
6164          it into a bal instruction.  But we don't try to optimize
6165          when the symbol does not resolve locally.  */
6166       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6167         return bfd_reloc_continue;
6168       value = symbol + addend;
6169       break;
6170
6171     case R_MIPS_PJUMP:
6172     case R_MIPS_GNU_VTINHERIT:
6173     case R_MIPS_GNU_VTENTRY:
6174       /* We don't do anything with these at present.  */
6175       return bfd_reloc_continue;
6176
6177     default:
6178       /* An unrecognized relocation type.  */
6179       return bfd_reloc_notsupported;
6180     }
6181
6182   /* Store the VALUE for our caller.  */
6183   *valuep = value;
6184   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6185 }
6186
6187 /* Obtain the field relocated by RELOCATION.  */
6188
6189 static bfd_vma
6190 mips_elf_obtain_contents (reloc_howto_type *howto,
6191                           const Elf_Internal_Rela *relocation,
6192                           bfd *input_bfd, bfd_byte *contents)
6193 {
6194   bfd_vma x = 0;
6195   bfd_byte *location = contents + relocation->r_offset;
6196   unsigned int size = bfd_get_reloc_size (howto);
6197
6198   /* Obtain the bytes.  */
6199   if (size != 0)
6200     x = bfd_get (8 * size, input_bfd, location);
6201
6202   return x;
6203 }
6204
6205 /* It has been determined that the result of the RELOCATION is the
6206    VALUE.  Use HOWTO to place VALUE into the output file at the
6207    appropriate position.  The SECTION is the section to which the
6208    relocation applies.
6209    CROSS_MODE_JUMP_P is true if the relocation field
6210    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6211
6212    Returns FALSE if anything goes wrong.  */
6213
6214 static bfd_boolean
6215 mips_elf_perform_relocation (struct bfd_link_info *info,
6216                              reloc_howto_type *howto,
6217                              const Elf_Internal_Rela *relocation,
6218                              bfd_vma value, bfd *input_bfd,
6219                              asection *input_section, bfd_byte *contents,
6220                              bfd_boolean cross_mode_jump_p)
6221 {
6222   bfd_vma x;
6223   bfd_byte *location;
6224   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6225   unsigned int size;
6226
6227   /* Figure out where the relocation is occurring.  */
6228   location = contents + relocation->r_offset;
6229
6230   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6231
6232   /* Obtain the current value.  */
6233   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6234
6235   /* Clear the field we are setting.  */
6236   x &= ~howto->dst_mask;
6237
6238   /* Set the field.  */
6239   x |= (value & howto->dst_mask);
6240
6241   /* If required, turn JAL into JALX.  */
6242   if (cross_mode_jump_p && jal_reloc_p (r_type))
6243     {
6244       bfd_boolean ok;
6245       bfd_vma opcode = x >> 26;
6246       bfd_vma jalx_opcode;
6247
6248       /* Check to see if the opcode is already JAL or JALX.  */
6249       if (r_type == R_MIPS16_26)
6250         {
6251           ok = ((opcode == 0x6) || (opcode == 0x7));
6252           jalx_opcode = 0x7;
6253         }
6254       else if (r_type == R_MICROMIPS_26_S1)
6255         {
6256           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6257           jalx_opcode = 0x3c;
6258         }
6259       else
6260         {
6261           ok = ((opcode == 0x3) || (opcode == 0x1d));
6262           jalx_opcode = 0x1d;
6263         }
6264
6265       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6266          convert J or JALS to JALX.  */
6267       if (!ok)
6268         {
6269           (*_bfd_error_handler)
6270             (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
6271              input_bfd,
6272              input_section,
6273              (unsigned long) relocation->r_offset);
6274           bfd_set_error (bfd_error_bad_value);
6275           return FALSE;
6276         }
6277
6278       /* Make this the JALX opcode.  */
6279       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6280     }
6281
6282   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6283      range.  */
6284   if (!bfd_link_relocatable (info)
6285       && !cross_mode_jump_p
6286       && ((JAL_TO_BAL_P (input_bfd)
6287            && r_type == R_MIPS_26
6288            && (x >> 26) == 0x3)         /* jal addr */
6289           || (JALR_TO_BAL_P (input_bfd)
6290               && r_type == R_MIPS_JALR
6291               && x == 0x0320f809)       /* jalr t9 */
6292           || (JR_TO_B_P (input_bfd)
6293               && r_type == R_MIPS_JALR
6294               && x == 0x03200008)))     /* jr t9 */
6295     {
6296       bfd_vma addr;
6297       bfd_vma dest;
6298       bfd_signed_vma off;
6299
6300       addr = (input_section->output_section->vma
6301               + input_section->output_offset
6302               + relocation->r_offset
6303               + 4);
6304       if (r_type == R_MIPS_26)
6305         dest = (value << 2) | ((addr >> 28) << 28);
6306       else
6307         dest = value;
6308       off = dest - addr;
6309       if (off <= 0x1ffff && off >= -0x20000)
6310         {
6311           if (x == 0x03200008)  /* jr t9 */
6312             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6313           else
6314             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6315         }
6316     }
6317
6318   /* Put the value into the output.  */
6319   size = bfd_get_reloc_size (howto);
6320   if (size != 0)
6321     bfd_put (8 * size, input_bfd, x, location);
6322
6323   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6324                                location);
6325
6326   return TRUE;
6327 }
6328 \f
6329 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6330    is the original relocation, which is now being transformed into a
6331    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6332    caller should store the result in place of the original addend.  */
6333
6334 static bfd_boolean
6335 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6336                                     struct bfd_link_info *info,
6337                                     const Elf_Internal_Rela *rel,
6338                                     struct mips_elf_link_hash_entry *h,
6339                                     asection *sec, bfd_vma symbol,
6340                                     bfd_vma *addendp, asection *input_section)
6341 {
6342   Elf_Internal_Rela outrel[3];
6343   asection *sreloc;
6344   bfd *dynobj;
6345   int r_type;
6346   long indx;
6347   bfd_boolean defined_p;
6348   struct mips_elf_link_hash_table *htab;
6349
6350   htab = mips_elf_hash_table (info);
6351   BFD_ASSERT (htab != NULL);
6352
6353   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6354   dynobj = elf_hash_table (info)->dynobj;
6355   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6356   BFD_ASSERT (sreloc != NULL);
6357   BFD_ASSERT (sreloc->contents != NULL);
6358   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6359               < sreloc->size);
6360
6361   outrel[0].r_offset =
6362     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6363   if (ABI_64_P (output_bfd))
6364     {
6365       outrel[1].r_offset =
6366         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6367       outrel[2].r_offset =
6368         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6369     }
6370
6371   if (outrel[0].r_offset == MINUS_ONE)
6372     /* The relocation field has been deleted.  */
6373     return TRUE;
6374
6375   if (outrel[0].r_offset == MINUS_TWO)
6376     {
6377       /* The relocation field has been converted into a relative value of
6378          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6379          the field to be fully relocated, so add in the symbol's value.  */
6380       *addendp += symbol;
6381       return TRUE;
6382     }
6383
6384   /* We must now calculate the dynamic symbol table index to use
6385      in the relocation.  */
6386   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6387     {
6388       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6389       indx = h->root.dynindx;
6390       if (SGI_COMPAT (output_bfd))
6391         defined_p = h->root.def_regular;
6392       else
6393         /* ??? glibc's ld.so just adds the final GOT entry to the
6394            relocation field.  It therefore treats relocs against
6395            defined symbols in the same way as relocs against
6396            undefined symbols.  */
6397         defined_p = FALSE;
6398     }
6399   else
6400     {
6401       if (sec != NULL && bfd_is_abs_section (sec))
6402         indx = 0;
6403       else if (sec == NULL || sec->owner == NULL)
6404         {
6405           bfd_set_error (bfd_error_bad_value);
6406           return FALSE;
6407         }
6408       else
6409         {
6410           indx = elf_section_data (sec->output_section)->dynindx;
6411           if (indx == 0)
6412             {
6413               asection *osec = htab->root.text_index_section;
6414               indx = elf_section_data (osec)->dynindx;
6415             }
6416           if (indx == 0)
6417             abort ();
6418         }
6419
6420       /* Instead of generating a relocation using the section
6421          symbol, we may as well make it a fully relative
6422          relocation.  We want to avoid generating relocations to
6423          local symbols because we used to generate them
6424          incorrectly, without adding the original symbol value,
6425          which is mandated by the ABI for section symbols.  In
6426          order to give dynamic loaders and applications time to
6427          phase out the incorrect use, we refrain from emitting
6428          section-relative relocations.  It's not like they're
6429          useful, after all.  This should be a bit more efficient
6430          as well.  */
6431       /* ??? Although this behavior is compatible with glibc's ld.so,
6432          the ABI says that relocations against STN_UNDEF should have
6433          a symbol value of 0.  Irix rld honors this, so relocations
6434          against STN_UNDEF have no effect.  */
6435       if (!SGI_COMPAT (output_bfd))
6436         indx = 0;
6437       defined_p = TRUE;
6438     }
6439
6440   /* If the relocation was previously an absolute relocation and
6441      this symbol will not be referred to by the relocation, we must
6442      adjust it by the value we give it in the dynamic symbol table.
6443      Otherwise leave the job up to the dynamic linker.  */
6444   if (defined_p && r_type != R_MIPS_REL32)
6445     *addendp += symbol;
6446
6447   if (htab->is_vxworks)
6448     /* VxWorks uses non-relative relocations for this.  */
6449     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6450   else
6451     /* The relocation is always an REL32 relocation because we don't
6452        know where the shared library will wind up at load-time.  */
6453     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6454                                    R_MIPS_REL32);
6455
6456   /* For strict adherence to the ABI specification, we should
6457      generate a R_MIPS_64 relocation record by itself before the
6458      _REL32/_64 record as well, such that the addend is read in as
6459      a 64-bit value (REL32 is a 32-bit relocation, after all).
6460      However, since none of the existing ELF64 MIPS dynamic
6461      loaders seems to care, we don't waste space with these
6462      artificial relocations.  If this turns out to not be true,
6463      mips_elf_allocate_dynamic_relocation() should be tweaked so
6464      as to make room for a pair of dynamic relocations per
6465      invocation if ABI_64_P, and here we should generate an
6466      additional relocation record with R_MIPS_64 by itself for a
6467      NULL symbol before this relocation record.  */
6468   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6469                                  ABI_64_P (output_bfd)
6470                                  ? R_MIPS_64
6471                                  : R_MIPS_NONE);
6472   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6473
6474   /* Adjust the output offset of the relocation to reference the
6475      correct location in the output file.  */
6476   outrel[0].r_offset += (input_section->output_section->vma
6477                          + input_section->output_offset);
6478   outrel[1].r_offset += (input_section->output_section->vma
6479                          + input_section->output_offset);
6480   outrel[2].r_offset += (input_section->output_section->vma
6481                          + input_section->output_offset);
6482
6483   /* Put the relocation back out.  We have to use the special
6484      relocation outputter in the 64-bit case since the 64-bit
6485      relocation format is non-standard.  */
6486   if (ABI_64_P (output_bfd))
6487     {
6488       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6489         (output_bfd, &outrel[0],
6490          (sreloc->contents
6491           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6492     }
6493   else if (htab->is_vxworks)
6494     {
6495       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6496       outrel[0].r_addend = *addendp;
6497       bfd_elf32_swap_reloca_out
6498         (output_bfd, &outrel[0],
6499          (sreloc->contents
6500           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6501     }
6502   else
6503     bfd_elf32_swap_reloc_out
6504       (output_bfd, &outrel[0],
6505        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6506
6507   /* We've now added another relocation.  */
6508   ++sreloc->reloc_count;
6509
6510   /* Make sure the output section is writable.  The dynamic linker
6511      will be writing to it.  */
6512   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6513     |= SHF_WRITE;
6514
6515   /* On IRIX5, make an entry of compact relocation info.  */
6516   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6517     {
6518       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6519       bfd_byte *cr;
6520
6521       if (scpt)
6522         {
6523           Elf32_crinfo cptrel;
6524
6525           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6526           cptrel.vaddr = (rel->r_offset
6527                           + input_section->output_section->vma
6528                           + input_section->output_offset);
6529           if (r_type == R_MIPS_REL32)
6530             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6531           else
6532             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6533           mips_elf_set_cr_dist2to (cptrel, 0);
6534           cptrel.konst = *addendp;
6535
6536           cr = (scpt->contents
6537                 + sizeof (Elf32_External_compact_rel));
6538           mips_elf_set_cr_relvaddr (cptrel, 0);
6539           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6540                                      ((Elf32_External_crinfo *) cr
6541                                       + scpt->reloc_count));
6542           ++scpt->reloc_count;
6543         }
6544     }
6545
6546   /* If we've written this relocation for a readonly section,
6547      we need to set DF_TEXTREL again, so that we do not delete the
6548      DT_TEXTREL tag.  */
6549   if (MIPS_ELF_READONLY_SECTION (input_section))
6550     info->flags |= DF_TEXTREL;
6551
6552   return TRUE;
6553 }
6554 \f
6555 /* Return the MACH for a MIPS e_flags value.  */
6556
6557 unsigned long
6558 _bfd_elf_mips_mach (flagword flags)
6559 {
6560   switch (flags & EF_MIPS_MACH)
6561     {
6562     case E_MIPS_MACH_3900:
6563       return bfd_mach_mips3900;
6564
6565     case E_MIPS_MACH_4010:
6566       return bfd_mach_mips4010;
6567
6568     case E_MIPS_MACH_4100:
6569       return bfd_mach_mips4100;
6570
6571     case E_MIPS_MACH_4111:
6572       return bfd_mach_mips4111;
6573
6574     case E_MIPS_MACH_4120:
6575       return bfd_mach_mips4120;
6576
6577     case E_MIPS_MACH_4650:
6578       return bfd_mach_mips4650;
6579
6580     case E_MIPS_MACH_5400:
6581       return bfd_mach_mips5400;
6582
6583     case E_MIPS_MACH_5500:
6584       return bfd_mach_mips5500;
6585
6586     case E_MIPS_MACH_5900:
6587       return bfd_mach_mips5900;
6588
6589     case E_MIPS_MACH_9000:
6590       return bfd_mach_mips9000;
6591
6592     case E_MIPS_MACH_SB1:
6593       return bfd_mach_mips_sb1;
6594
6595     case E_MIPS_MACH_LS2E:
6596       return bfd_mach_mips_loongson_2e;
6597
6598     case E_MIPS_MACH_LS2F:
6599       return bfd_mach_mips_loongson_2f;
6600
6601     case E_MIPS_MACH_LS3A:
6602       return bfd_mach_mips_loongson_3a;
6603
6604     case E_MIPS_MACH_OCTEON3:
6605       return bfd_mach_mips_octeon3;
6606
6607     case E_MIPS_MACH_OCTEON2:
6608       return bfd_mach_mips_octeon2;
6609
6610     case E_MIPS_MACH_OCTEON:
6611       return bfd_mach_mips_octeon;
6612
6613     case E_MIPS_MACH_XLR:
6614       return bfd_mach_mips_xlr;
6615
6616     default:
6617       switch (flags & EF_MIPS_ARCH)
6618         {
6619         default:
6620         case E_MIPS_ARCH_1:
6621           return bfd_mach_mips3000;
6622
6623         case E_MIPS_ARCH_2:
6624           return bfd_mach_mips6000;
6625
6626         case E_MIPS_ARCH_3:
6627           return bfd_mach_mips4000;
6628
6629         case E_MIPS_ARCH_4:
6630           return bfd_mach_mips8000;
6631
6632         case E_MIPS_ARCH_5:
6633           return bfd_mach_mips5;
6634
6635         case E_MIPS_ARCH_32:
6636           return bfd_mach_mipsisa32;
6637
6638         case E_MIPS_ARCH_64:
6639           return bfd_mach_mipsisa64;
6640
6641         case E_MIPS_ARCH_32R2:
6642           return bfd_mach_mipsisa32r2;
6643
6644         case E_MIPS_ARCH_64R2:
6645           return bfd_mach_mipsisa64r2;
6646
6647         case E_MIPS_ARCH_32R6:
6648           return bfd_mach_mipsisa32r6;
6649
6650         case E_MIPS_ARCH_64R6:
6651           return bfd_mach_mipsisa64r6;
6652         }
6653     }
6654
6655   return 0;
6656 }
6657
6658 /* Return printable name for ABI.  */
6659
6660 static INLINE char *
6661 elf_mips_abi_name (bfd *abfd)
6662 {
6663   flagword flags;
6664
6665   flags = elf_elfheader (abfd)->e_flags;
6666   switch (flags & EF_MIPS_ABI)
6667     {
6668     case 0:
6669       if (ABI_N32_P (abfd))
6670         return "N32";
6671       else if (ABI_64_P (abfd))
6672         return "64";
6673       else
6674         return "none";
6675     case E_MIPS_ABI_O32:
6676       return "O32";
6677     case E_MIPS_ABI_O64:
6678       return "O64";
6679     case E_MIPS_ABI_EABI32:
6680       return "EABI32";
6681     case E_MIPS_ABI_EABI64:
6682       return "EABI64";
6683     default:
6684       return "unknown abi";
6685     }
6686 }
6687 \f
6688 /* MIPS ELF uses two common sections.  One is the usual one, and the
6689    other is for small objects.  All the small objects are kept
6690    together, and then referenced via the gp pointer, which yields
6691    faster assembler code.  This is what we use for the small common
6692    section.  This approach is copied from ecoff.c.  */
6693 static asection mips_elf_scom_section;
6694 static asymbol mips_elf_scom_symbol;
6695 static asymbol *mips_elf_scom_symbol_ptr;
6696
6697 /* MIPS ELF also uses an acommon section, which represents an
6698    allocated common symbol which may be overridden by a
6699    definition in a shared library.  */
6700 static asection mips_elf_acom_section;
6701 static asymbol mips_elf_acom_symbol;
6702 static asymbol *mips_elf_acom_symbol_ptr;
6703
6704 /* This is used for both the 32-bit and the 64-bit ABI.  */
6705
6706 void
6707 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6708 {
6709   elf_symbol_type *elfsym;
6710
6711   /* Handle the special MIPS section numbers that a symbol may use.  */
6712   elfsym = (elf_symbol_type *) asym;
6713   switch (elfsym->internal_elf_sym.st_shndx)
6714     {
6715     case SHN_MIPS_ACOMMON:
6716       /* This section is used in a dynamically linked executable file.
6717          It is an allocated common section.  The dynamic linker can
6718          either resolve these symbols to something in a shared
6719          library, or it can just leave them here.  For our purposes,
6720          we can consider these symbols to be in a new section.  */
6721       if (mips_elf_acom_section.name == NULL)
6722         {
6723           /* Initialize the acommon section.  */
6724           mips_elf_acom_section.name = ".acommon";
6725           mips_elf_acom_section.flags = SEC_ALLOC;
6726           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6727           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6728           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6729           mips_elf_acom_symbol.name = ".acommon";
6730           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6731           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6732           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6733         }
6734       asym->section = &mips_elf_acom_section;
6735       break;
6736
6737     case SHN_COMMON:
6738       /* Common symbols less than the GP size are automatically
6739          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6740       if (asym->value > elf_gp_size (abfd)
6741           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6742           || IRIX_COMPAT (abfd) == ict_irix6)
6743         break;
6744       /* Fall through.  */
6745     case SHN_MIPS_SCOMMON:
6746       if (mips_elf_scom_section.name == NULL)
6747         {
6748           /* Initialize the small common section.  */
6749           mips_elf_scom_section.name = ".scommon";
6750           mips_elf_scom_section.flags = SEC_IS_COMMON;
6751           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6752           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6753           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6754           mips_elf_scom_symbol.name = ".scommon";
6755           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6756           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6757           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6758         }
6759       asym->section = &mips_elf_scom_section;
6760       asym->value = elfsym->internal_elf_sym.st_size;
6761       break;
6762
6763     case SHN_MIPS_SUNDEFINED:
6764       asym->section = bfd_und_section_ptr;
6765       break;
6766
6767     case SHN_MIPS_TEXT:
6768       {
6769         asection *section = bfd_get_section_by_name (abfd, ".text");
6770
6771         if (section != NULL)
6772           {
6773             asym->section = section;
6774             /* MIPS_TEXT is a bit special, the address is not an offset
6775                to the base of the .text section.  So substract the section
6776                base address to make it an offset.  */
6777             asym->value -= section->vma;
6778           }
6779       }
6780       break;
6781
6782     case SHN_MIPS_DATA:
6783       {
6784         asection *section = bfd_get_section_by_name (abfd, ".data");
6785
6786         if (section != NULL)
6787           {
6788             asym->section = section;
6789             /* MIPS_DATA is a bit special, the address is not an offset
6790                to the base of the .data section.  So substract the section
6791                base address to make it an offset.  */
6792             asym->value -= section->vma;
6793           }
6794       }
6795       break;
6796     }
6797
6798   /* If this is an odd-valued function symbol, assume it's a MIPS16
6799      or microMIPS one.  */
6800   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6801       && (asym->value & 1) != 0)
6802     {
6803       asym->value--;
6804       if (MICROMIPS_P (abfd))
6805         elfsym->internal_elf_sym.st_other
6806           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6807       else
6808         elfsym->internal_elf_sym.st_other
6809           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6810     }
6811 }
6812 \f
6813 /* Implement elf_backend_eh_frame_address_size.  This differs from
6814    the default in the way it handles EABI64.
6815
6816    EABI64 was originally specified as an LP64 ABI, and that is what
6817    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6818    historically accepted the combination of -mabi=eabi and -mlong32,
6819    and this ILP32 variation has become semi-official over time.
6820    Both forms use elf32 and have pointer-sized FDE addresses.
6821
6822    If an EABI object was generated by GCC 4.0 or above, it will have
6823    an empty .gcc_compiled_longXX section, where XX is the size of longs
6824    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6825    have no special marking to distinguish them from LP64 objects.
6826
6827    We don't want users of the official LP64 ABI to be punished for the
6828    existence of the ILP32 variant, but at the same time, we don't want
6829    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6830    We therefore take the following approach:
6831
6832       - If ABFD contains a .gcc_compiled_longXX section, use it to
6833         determine the pointer size.
6834
6835       - Otherwise check the type of the first relocation.  Assume that
6836         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6837
6838       - Otherwise punt.
6839
6840    The second check is enough to detect LP64 objects generated by pre-4.0
6841    compilers because, in the kind of output generated by those compilers,
6842    the first relocation will be associated with either a CIE personality
6843    routine or an FDE start address.  Furthermore, the compilers never
6844    used a special (non-pointer) encoding for this ABI.
6845
6846    Checking the relocation type should also be safe because there is no
6847    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6848    did so.  */
6849
6850 unsigned int
6851 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6852 {
6853   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6854     return 8;
6855   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6856     {
6857       bfd_boolean long32_p, long64_p;
6858
6859       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6860       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6861       if (long32_p && long64_p)
6862         return 0;
6863       if (long32_p)
6864         return 4;
6865       if (long64_p)
6866         return 8;
6867
6868       if (sec->reloc_count > 0
6869           && elf_section_data (sec)->relocs != NULL
6870           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6871               == R_MIPS_64))
6872         return 8;
6873
6874       return 0;
6875     }
6876   return 4;
6877 }
6878 \f
6879 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6880    relocations against two unnamed section symbols to resolve to the
6881    same address.  For example, if we have code like:
6882
6883         lw      $4,%got_disp(.data)($gp)
6884         lw      $25,%got_disp(.text)($gp)
6885         jalr    $25
6886
6887    then the linker will resolve both relocations to .data and the program
6888    will jump there rather than to .text.
6889
6890    We can work around this problem by giving names to local section symbols.
6891    This is also what the MIPSpro tools do.  */
6892
6893 bfd_boolean
6894 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6895 {
6896   return SGI_COMPAT (abfd);
6897 }
6898 \f
6899 /* Work over a section just before writing it out.  This routine is
6900    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6901    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6902    a better way.  */
6903
6904 bfd_boolean
6905 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6906 {
6907   if (hdr->sh_type == SHT_MIPS_REGINFO
6908       && hdr->sh_size > 0)
6909     {
6910       bfd_byte buf[4];
6911
6912       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6913       BFD_ASSERT (hdr->contents == NULL);
6914
6915       if (bfd_seek (abfd,
6916                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6917                     SEEK_SET) != 0)
6918         return FALSE;
6919       H_PUT_32 (abfd, elf_gp (abfd), buf);
6920       if (bfd_bwrite (buf, 4, abfd) != 4)
6921         return FALSE;
6922     }
6923
6924   if (hdr->sh_type == SHT_MIPS_OPTIONS
6925       && hdr->bfd_section != NULL
6926       && mips_elf_section_data (hdr->bfd_section) != NULL
6927       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6928     {
6929       bfd_byte *contents, *l, *lend;
6930
6931       /* We stored the section contents in the tdata field in the
6932          set_section_contents routine.  We save the section contents
6933          so that we don't have to read them again.
6934          At this point we know that elf_gp is set, so we can look
6935          through the section contents to see if there is an
6936          ODK_REGINFO structure.  */
6937
6938       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6939       l = contents;
6940       lend = contents + hdr->sh_size;
6941       while (l + sizeof (Elf_External_Options) <= lend)
6942         {
6943           Elf_Internal_Options intopt;
6944
6945           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6946                                         &intopt);
6947           if (intopt.size < sizeof (Elf_External_Options))
6948             {
6949               (*_bfd_error_handler)
6950                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6951                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6952               break;
6953             }
6954           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6955             {
6956               bfd_byte buf[8];
6957
6958               if (bfd_seek (abfd,
6959                             (hdr->sh_offset
6960                              + (l - contents)
6961                              + sizeof (Elf_External_Options)
6962                              + (sizeof (Elf64_External_RegInfo) - 8)),
6963                              SEEK_SET) != 0)
6964                 return FALSE;
6965               H_PUT_64 (abfd, elf_gp (abfd), buf);
6966               if (bfd_bwrite (buf, 8, abfd) != 8)
6967                 return FALSE;
6968             }
6969           else if (intopt.kind == ODK_REGINFO)
6970             {
6971               bfd_byte buf[4];
6972
6973               if (bfd_seek (abfd,
6974                             (hdr->sh_offset
6975                              + (l - contents)
6976                              + sizeof (Elf_External_Options)
6977                              + (sizeof (Elf32_External_RegInfo) - 4)),
6978                             SEEK_SET) != 0)
6979                 return FALSE;
6980               H_PUT_32 (abfd, elf_gp (abfd), buf);
6981               if (bfd_bwrite (buf, 4, abfd) != 4)
6982                 return FALSE;
6983             }
6984           l += intopt.size;
6985         }
6986     }
6987
6988   if (hdr->bfd_section != NULL)
6989     {
6990       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6991
6992       /* .sbss is not handled specially here because the GNU/Linux
6993          prelinker can convert .sbss from NOBITS to PROGBITS and
6994          changing it back to NOBITS breaks the binary.  The entry in
6995          _bfd_mips_elf_special_sections will ensure the correct flags
6996          are set on .sbss if BFD creates it without reading it from an
6997          input file, and without special handling here the flags set
6998          on it in an input file will be followed.  */
6999       if (strcmp (name, ".sdata") == 0
7000           || strcmp (name, ".lit8") == 0
7001           || strcmp (name, ".lit4") == 0)
7002         hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7003       else if (strcmp (name, ".srdata") == 0)
7004         hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7005       else if (strcmp (name, ".compact_rel") == 0)
7006         hdr->sh_flags = 0;
7007       else if (strcmp (name, ".rtproc") == 0)
7008         {
7009           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7010             {
7011               unsigned int adjust;
7012
7013               adjust = hdr->sh_size % hdr->sh_addralign;
7014               if (adjust != 0)
7015                 hdr->sh_size += hdr->sh_addralign - adjust;
7016             }
7017         }
7018     }
7019
7020   return TRUE;
7021 }
7022
7023 /* Handle a MIPS specific section when reading an object file.  This
7024    is called when elfcode.h finds a section with an unknown type.
7025    This routine supports both the 32-bit and 64-bit ELF ABI.
7026
7027    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7028    how to.  */
7029
7030 bfd_boolean
7031 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7032                                  Elf_Internal_Shdr *hdr,
7033                                  const char *name,
7034                                  int shindex)
7035 {
7036   flagword flags = 0;
7037
7038   /* There ought to be a place to keep ELF backend specific flags, but
7039      at the moment there isn't one.  We just keep track of the
7040      sections by their name, instead.  Fortunately, the ABI gives
7041      suggested names for all the MIPS specific sections, so we will
7042      probably get away with this.  */
7043   switch (hdr->sh_type)
7044     {
7045     case SHT_MIPS_LIBLIST:
7046       if (strcmp (name, ".liblist") != 0)
7047         return FALSE;
7048       break;
7049     case SHT_MIPS_MSYM:
7050       if (strcmp (name, ".msym") != 0)
7051         return FALSE;
7052       break;
7053     case SHT_MIPS_CONFLICT:
7054       if (strcmp (name, ".conflict") != 0)
7055         return FALSE;
7056       break;
7057     case SHT_MIPS_GPTAB:
7058       if (! CONST_STRNEQ (name, ".gptab."))
7059         return FALSE;
7060       break;
7061     case SHT_MIPS_UCODE:
7062       if (strcmp (name, ".ucode") != 0)
7063         return FALSE;
7064       break;
7065     case SHT_MIPS_DEBUG:
7066       if (strcmp (name, ".mdebug") != 0)
7067         return FALSE;
7068       flags = SEC_DEBUGGING;
7069       break;
7070     case SHT_MIPS_REGINFO:
7071       if (strcmp (name, ".reginfo") != 0
7072           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7073         return FALSE;
7074       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7075       break;
7076     case SHT_MIPS_IFACE:
7077       if (strcmp (name, ".MIPS.interfaces") != 0)
7078         return FALSE;
7079       break;
7080     case SHT_MIPS_CONTENT:
7081       if (! CONST_STRNEQ (name, ".MIPS.content"))
7082         return FALSE;
7083       break;
7084     case SHT_MIPS_OPTIONS:
7085       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7086         return FALSE;
7087       break;
7088     case SHT_MIPS_ABIFLAGS:
7089       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7090         return FALSE;
7091       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7092       break;
7093     case SHT_MIPS_DWARF:
7094       if (! CONST_STRNEQ (name, ".debug_")
7095           && ! CONST_STRNEQ (name, ".zdebug_"))
7096         return FALSE;
7097       break;
7098     case SHT_MIPS_SYMBOL_LIB:
7099       if (strcmp (name, ".MIPS.symlib") != 0)
7100         return FALSE;
7101       break;
7102     case SHT_MIPS_EVENTS:
7103       if (! CONST_STRNEQ (name, ".MIPS.events")
7104           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7105         return FALSE;
7106       break;
7107     default:
7108       break;
7109     }
7110
7111   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7112     return FALSE;
7113
7114   if (flags)
7115     {
7116       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7117                                    (bfd_get_section_flags (abfd,
7118                                                            hdr->bfd_section)
7119                                     | flags)))
7120         return FALSE;
7121     }
7122
7123   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7124     {
7125       Elf_External_ABIFlags_v0 ext;
7126
7127       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7128                                       &ext, 0, sizeof ext))
7129         return FALSE;
7130       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7131                                         &mips_elf_tdata (abfd)->abiflags);
7132       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7133         return FALSE;
7134       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7135     }
7136
7137   /* FIXME: We should record sh_info for a .gptab section.  */
7138
7139   /* For a .reginfo section, set the gp value in the tdata information
7140      from the contents of this section.  We need the gp value while
7141      processing relocs, so we just get it now.  The .reginfo section
7142      is not used in the 64-bit MIPS ELF ABI.  */
7143   if (hdr->sh_type == SHT_MIPS_REGINFO)
7144     {
7145       Elf32_External_RegInfo ext;
7146       Elf32_RegInfo s;
7147
7148       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7149                                       &ext, 0, sizeof ext))
7150         return FALSE;
7151       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7152       elf_gp (abfd) = s.ri_gp_value;
7153     }
7154
7155   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7156      set the gp value based on what we find.  We may see both
7157      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7158      they should agree.  */
7159   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7160     {
7161       bfd_byte *contents, *l, *lend;
7162
7163       contents = bfd_malloc (hdr->sh_size);
7164       if (contents == NULL)
7165         return FALSE;
7166       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7167                                       0, hdr->sh_size))
7168         {
7169           free (contents);
7170           return FALSE;
7171         }
7172       l = contents;
7173       lend = contents + hdr->sh_size;
7174       while (l + sizeof (Elf_External_Options) <= lend)
7175         {
7176           Elf_Internal_Options intopt;
7177
7178           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7179                                         &intopt);
7180           if (intopt.size < sizeof (Elf_External_Options))
7181             {
7182               (*_bfd_error_handler)
7183                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7184                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7185               break;
7186             }
7187           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7188             {
7189               Elf64_Internal_RegInfo intreg;
7190
7191               bfd_mips_elf64_swap_reginfo_in
7192                 (abfd,
7193                  ((Elf64_External_RegInfo *)
7194                   (l + sizeof (Elf_External_Options))),
7195                  &intreg);
7196               elf_gp (abfd) = intreg.ri_gp_value;
7197             }
7198           else if (intopt.kind == ODK_REGINFO)
7199             {
7200               Elf32_RegInfo intreg;
7201
7202               bfd_mips_elf32_swap_reginfo_in
7203                 (abfd,
7204                  ((Elf32_External_RegInfo *)
7205                   (l + sizeof (Elf_External_Options))),
7206                  &intreg);
7207               elf_gp (abfd) = intreg.ri_gp_value;
7208             }
7209           l += intopt.size;
7210         }
7211       free (contents);
7212     }
7213
7214   return TRUE;
7215 }
7216
7217 /* Set the correct type for a MIPS ELF section.  We do this by the
7218    section name, which is a hack, but ought to work.  This routine is
7219    used by both the 32-bit and the 64-bit ABI.  */
7220
7221 bfd_boolean
7222 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7223 {
7224   const char *name = bfd_get_section_name (abfd, sec);
7225
7226   if (strcmp (name, ".liblist") == 0)
7227     {
7228       hdr->sh_type = SHT_MIPS_LIBLIST;
7229       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7230       /* The sh_link field is set in final_write_processing.  */
7231     }
7232   else if (strcmp (name, ".conflict") == 0)
7233     hdr->sh_type = SHT_MIPS_CONFLICT;
7234   else if (CONST_STRNEQ (name, ".gptab."))
7235     {
7236       hdr->sh_type = SHT_MIPS_GPTAB;
7237       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7238       /* The sh_info field is set in final_write_processing.  */
7239     }
7240   else if (strcmp (name, ".ucode") == 0)
7241     hdr->sh_type = SHT_MIPS_UCODE;
7242   else if (strcmp (name, ".mdebug") == 0)
7243     {
7244       hdr->sh_type = SHT_MIPS_DEBUG;
7245       /* In a shared object on IRIX 5.3, the .mdebug section has an
7246          entsize of 0.  FIXME: Does this matter?  */
7247       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7248         hdr->sh_entsize = 0;
7249       else
7250         hdr->sh_entsize = 1;
7251     }
7252   else if (strcmp (name, ".reginfo") == 0)
7253     {
7254       hdr->sh_type = SHT_MIPS_REGINFO;
7255       /* In a shared object on IRIX 5.3, the .reginfo section has an
7256          entsize of 0x18.  FIXME: Does this matter?  */
7257       if (SGI_COMPAT (abfd))
7258         {
7259           if ((abfd->flags & DYNAMIC) != 0)
7260             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7261           else
7262             hdr->sh_entsize = 1;
7263         }
7264       else
7265         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7266     }
7267   else if (SGI_COMPAT (abfd)
7268            && (strcmp (name, ".hash") == 0
7269                || strcmp (name, ".dynamic") == 0
7270                || strcmp (name, ".dynstr") == 0))
7271     {
7272       if (SGI_COMPAT (abfd))
7273         hdr->sh_entsize = 0;
7274 #if 0
7275       /* This isn't how the IRIX6 linker behaves.  */
7276       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7277 #endif
7278     }
7279   else if (strcmp (name, ".got") == 0
7280            || strcmp (name, ".srdata") == 0
7281            || strcmp (name, ".sdata") == 0
7282            || strcmp (name, ".sbss") == 0
7283            || strcmp (name, ".lit4") == 0
7284            || strcmp (name, ".lit8") == 0)
7285     hdr->sh_flags |= SHF_MIPS_GPREL;
7286   else if (strcmp (name, ".MIPS.interfaces") == 0)
7287     {
7288       hdr->sh_type = SHT_MIPS_IFACE;
7289       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7290     }
7291   else if (CONST_STRNEQ (name, ".MIPS.content"))
7292     {
7293       hdr->sh_type = SHT_MIPS_CONTENT;
7294       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7295       /* The sh_info field is set in final_write_processing.  */
7296     }
7297   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7298     {
7299       hdr->sh_type = SHT_MIPS_OPTIONS;
7300       hdr->sh_entsize = 1;
7301       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7302     }
7303   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7304     {
7305       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7306       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7307     }
7308   else if (CONST_STRNEQ (name, ".debug_")
7309            || CONST_STRNEQ (name, ".zdebug_"))
7310     {
7311       hdr->sh_type = SHT_MIPS_DWARF;
7312
7313       /* Irix facilities such as libexc expect a single .debug_frame
7314          per executable, the system ones have NOSTRIP set and the linker
7315          doesn't merge sections with different flags so ...  */
7316       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7317         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7318     }
7319   else if (strcmp (name, ".MIPS.symlib") == 0)
7320     {
7321       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7322       /* The sh_link and sh_info fields are set in
7323          final_write_processing.  */
7324     }
7325   else if (CONST_STRNEQ (name, ".MIPS.events")
7326            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7327     {
7328       hdr->sh_type = SHT_MIPS_EVENTS;
7329       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7330       /* The sh_link field is set in final_write_processing.  */
7331     }
7332   else if (strcmp (name, ".msym") == 0)
7333     {
7334       hdr->sh_type = SHT_MIPS_MSYM;
7335       hdr->sh_flags |= SHF_ALLOC;
7336       hdr->sh_entsize = 8;
7337     }
7338
7339   /* The generic elf_fake_sections will set up REL_HDR using the default
7340    kind of relocations.  We used to set up a second header for the
7341    non-default kind of relocations here, but only NewABI would use
7342    these, and the IRIX ld doesn't like resulting empty RELA sections.
7343    Thus we create those header only on demand now.  */
7344
7345   return TRUE;
7346 }
7347
7348 /* Given a BFD section, try to locate the corresponding ELF section
7349    index.  This is used by both the 32-bit and the 64-bit ABI.
7350    Actually, it's not clear to me that the 64-bit ABI supports these,
7351    but for non-PIC objects we will certainly want support for at least
7352    the .scommon section.  */
7353
7354 bfd_boolean
7355 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7356                                         asection *sec, int *retval)
7357 {
7358   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7359     {
7360       *retval = SHN_MIPS_SCOMMON;
7361       return TRUE;
7362     }
7363   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7364     {
7365       *retval = SHN_MIPS_ACOMMON;
7366       return TRUE;
7367     }
7368   return FALSE;
7369 }
7370 \f
7371 /* Hook called by the linker routine which adds symbols from an object
7372    file.  We must handle the special MIPS section numbers here.  */
7373
7374 bfd_boolean
7375 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7376                                Elf_Internal_Sym *sym, const char **namep,
7377                                flagword *flagsp ATTRIBUTE_UNUSED,
7378                                asection **secp, bfd_vma *valp)
7379 {
7380   if (SGI_COMPAT (abfd)
7381       && (abfd->flags & DYNAMIC) != 0
7382       && strcmp (*namep, "_rld_new_interface") == 0)
7383     {
7384       /* Skip IRIX5 rld entry name.  */
7385       *namep = NULL;
7386       return TRUE;
7387     }
7388
7389   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7390      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7391      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7392      a magic symbol resolved by the linker, we ignore this bogus definition
7393      of _gp_disp.  New ABI objects do not suffer from this problem so this
7394      is not done for them. */
7395   if (!NEWABI_P(abfd)
7396       && (sym->st_shndx == SHN_ABS)
7397       && (strcmp (*namep, "_gp_disp") == 0))
7398     {
7399       *namep = NULL;
7400       return TRUE;
7401     }
7402
7403   switch (sym->st_shndx)
7404     {
7405     case SHN_COMMON:
7406       /* Common symbols less than the GP size are automatically
7407          treated as SHN_MIPS_SCOMMON symbols.  */
7408       if (sym->st_size > elf_gp_size (abfd)
7409           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7410           || IRIX_COMPAT (abfd) == ict_irix6)
7411         break;
7412       /* Fall through.  */
7413     case SHN_MIPS_SCOMMON:
7414       *secp = bfd_make_section_old_way (abfd, ".scommon");
7415       (*secp)->flags |= SEC_IS_COMMON;
7416       *valp = sym->st_size;
7417       break;
7418
7419     case SHN_MIPS_TEXT:
7420       /* This section is used in a shared object.  */
7421       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7422         {
7423           asymbol *elf_text_symbol;
7424           asection *elf_text_section;
7425           bfd_size_type amt = sizeof (asection);
7426
7427           elf_text_section = bfd_zalloc (abfd, amt);
7428           if (elf_text_section == NULL)
7429             return FALSE;
7430
7431           amt = sizeof (asymbol);
7432           elf_text_symbol = bfd_zalloc (abfd, amt);
7433           if (elf_text_symbol == NULL)
7434             return FALSE;
7435
7436           /* Initialize the section.  */
7437
7438           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7439           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7440
7441           elf_text_section->symbol = elf_text_symbol;
7442           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7443
7444           elf_text_section->name = ".text";
7445           elf_text_section->flags = SEC_NO_FLAGS;
7446           elf_text_section->output_section = NULL;
7447           elf_text_section->owner = abfd;
7448           elf_text_symbol->name = ".text";
7449           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7450           elf_text_symbol->section = elf_text_section;
7451         }
7452       /* This code used to do *secp = bfd_und_section_ptr if
7453          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7454          so I took it out.  */
7455       *secp = mips_elf_tdata (abfd)->elf_text_section;
7456       break;
7457
7458     case SHN_MIPS_ACOMMON:
7459       /* Fall through. XXX Can we treat this as allocated data?  */
7460     case SHN_MIPS_DATA:
7461       /* This section is used in a shared object.  */
7462       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7463         {
7464           asymbol *elf_data_symbol;
7465           asection *elf_data_section;
7466           bfd_size_type amt = sizeof (asection);
7467
7468           elf_data_section = bfd_zalloc (abfd, amt);
7469           if (elf_data_section == NULL)
7470             return FALSE;
7471
7472           amt = sizeof (asymbol);
7473           elf_data_symbol = bfd_zalloc (abfd, amt);
7474           if (elf_data_symbol == NULL)
7475             return FALSE;
7476
7477           /* Initialize the section.  */
7478
7479           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7480           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7481
7482           elf_data_section->symbol = elf_data_symbol;
7483           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7484
7485           elf_data_section->name = ".data";
7486           elf_data_section->flags = SEC_NO_FLAGS;
7487           elf_data_section->output_section = NULL;
7488           elf_data_section->owner = abfd;
7489           elf_data_symbol->name = ".data";
7490           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7491           elf_data_symbol->section = elf_data_section;
7492         }
7493       /* This code used to do *secp = bfd_und_section_ptr if
7494          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7495          so I took it out.  */
7496       *secp = mips_elf_tdata (abfd)->elf_data_section;
7497       break;
7498
7499     case SHN_MIPS_SUNDEFINED:
7500       *secp = bfd_und_section_ptr;
7501       break;
7502     }
7503
7504   if (SGI_COMPAT (abfd)
7505       && ! bfd_link_pic (info)
7506       && info->output_bfd->xvec == abfd->xvec
7507       && strcmp (*namep, "__rld_obj_head") == 0)
7508     {
7509       struct elf_link_hash_entry *h;
7510       struct bfd_link_hash_entry *bh;
7511
7512       /* Mark __rld_obj_head as dynamic.  */
7513       bh = NULL;
7514       if (! (_bfd_generic_link_add_one_symbol
7515              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7516               get_elf_backend_data (abfd)->collect, &bh)))
7517         return FALSE;
7518
7519       h = (struct elf_link_hash_entry *) bh;
7520       h->non_elf = 0;
7521       h->def_regular = 1;
7522       h->type = STT_OBJECT;
7523
7524       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7525         return FALSE;
7526
7527       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7528       mips_elf_hash_table (info)->rld_symbol = h;
7529     }
7530
7531   /* If this is a mips16 text symbol, add 1 to the value to make it
7532      odd.  This will cause something like .word SYM to come up with
7533      the right value when it is loaded into the PC.  */
7534   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7535     ++*valp;
7536
7537   return TRUE;
7538 }
7539
7540 /* This hook function is called before the linker writes out a global
7541    symbol.  We mark symbols as small common if appropriate.  This is
7542    also where we undo the increment of the value for a mips16 symbol.  */
7543
7544 int
7545 _bfd_mips_elf_link_output_symbol_hook
7546   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7547    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7548    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7549 {
7550   /* If we see a common symbol, which implies a relocatable link, then
7551      if a symbol was small common in an input file, mark it as small
7552      common in the output file.  */
7553   if (sym->st_shndx == SHN_COMMON
7554       && strcmp (input_sec->name, ".scommon") == 0)
7555     sym->st_shndx = SHN_MIPS_SCOMMON;
7556
7557   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7558     sym->st_value &= ~1;
7559
7560   return 1;
7561 }
7562 \f
7563 /* Functions for the dynamic linker.  */
7564
7565 /* Create dynamic sections when linking against a dynamic object.  */
7566
7567 bfd_boolean
7568 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7569 {
7570   struct elf_link_hash_entry *h;
7571   struct bfd_link_hash_entry *bh;
7572   flagword flags;
7573   register asection *s;
7574   const char * const *namep;
7575   struct mips_elf_link_hash_table *htab;
7576
7577   htab = mips_elf_hash_table (info);
7578   BFD_ASSERT (htab != NULL);
7579
7580   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7581            | SEC_LINKER_CREATED | SEC_READONLY);
7582
7583   /* The psABI requires a read-only .dynamic section, but the VxWorks
7584      EABI doesn't.  */
7585   if (!htab->is_vxworks)
7586     {
7587       s = bfd_get_linker_section (abfd, ".dynamic");
7588       if (s != NULL)
7589         {
7590           if (! bfd_set_section_flags (abfd, s, flags))
7591             return FALSE;
7592         }
7593     }
7594
7595   /* We need to create .got section.  */
7596   if (!mips_elf_create_got_section (abfd, info))
7597     return FALSE;
7598
7599   if (! mips_elf_rel_dyn_section (info, TRUE))
7600     return FALSE;
7601
7602   /* Create .stub section.  */
7603   s = bfd_make_section_anyway_with_flags (abfd,
7604                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7605                                           flags | SEC_CODE);
7606   if (s == NULL
7607       || ! bfd_set_section_alignment (abfd, s,
7608                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7609     return FALSE;
7610   htab->sstubs = s;
7611
7612   if (!mips_elf_hash_table (info)->use_rld_obj_head
7613       && bfd_link_executable (info)
7614       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7615     {
7616       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7617                                               flags &~ (flagword) SEC_READONLY);
7618       if (s == NULL
7619           || ! bfd_set_section_alignment (abfd, s,
7620                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7621         return FALSE;
7622     }
7623
7624   /* On IRIX5, we adjust add some additional symbols and change the
7625      alignments of several sections.  There is no ABI documentation
7626      indicating that this is necessary on IRIX6, nor any evidence that
7627      the linker takes such action.  */
7628   if (IRIX_COMPAT (abfd) == ict_irix5)
7629     {
7630       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7631         {
7632           bh = NULL;
7633           if (! (_bfd_generic_link_add_one_symbol
7634                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7635                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7636             return FALSE;
7637
7638           h = (struct elf_link_hash_entry *) bh;
7639           h->non_elf = 0;
7640           h->def_regular = 1;
7641           h->type = STT_SECTION;
7642
7643           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7644             return FALSE;
7645         }
7646
7647       /* We need to create a .compact_rel section.  */
7648       if (SGI_COMPAT (abfd))
7649         {
7650           if (!mips_elf_create_compact_rel_section (abfd, info))
7651             return FALSE;
7652         }
7653
7654       /* Change alignments of some sections.  */
7655       s = bfd_get_linker_section (abfd, ".hash");
7656       if (s != NULL)
7657         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7658
7659       s = bfd_get_linker_section (abfd, ".dynsym");
7660       if (s != NULL)
7661         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7662
7663       s = bfd_get_linker_section (abfd, ".dynstr");
7664       if (s != NULL)
7665         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7666
7667       /* ??? */
7668       s = bfd_get_section_by_name (abfd, ".reginfo");
7669       if (s != NULL)
7670         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7671
7672       s = bfd_get_linker_section (abfd, ".dynamic");
7673       if (s != NULL)
7674         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7675     }
7676
7677   if (bfd_link_executable (info))
7678     {
7679       const char *name;
7680
7681       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7682       bh = NULL;
7683       if (!(_bfd_generic_link_add_one_symbol
7684             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7685              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7686         return FALSE;
7687
7688       h = (struct elf_link_hash_entry *) bh;
7689       h->non_elf = 0;
7690       h->def_regular = 1;
7691       h->type = STT_SECTION;
7692
7693       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7694         return FALSE;
7695
7696       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7697         {
7698           /* __rld_map is a four byte word located in the .data section
7699              and is filled in by the rtld to contain a pointer to
7700              the _r_debug structure. Its symbol value will be set in
7701              _bfd_mips_elf_finish_dynamic_symbol.  */
7702           s = bfd_get_linker_section (abfd, ".rld_map");
7703           BFD_ASSERT (s != NULL);
7704
7705           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7706           bh = NULL;
7707           if (!(_bfd_generic_link_add_one_symbol
7708                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7709                  get_elf_backend_data (abfd)->collect, &bh)))
7710             return FALSE;
7711
7712           h = (struct elf_link_hash_entry *) bh;
7713           h->non_elf = 0;
7714           h->def_regular = 1;
7715           h->type = STT_OBJECT;
7716
7717           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7718             return FALSE;
7719           mips_elf_hash_table (info)->rld_symbol = h;
7720         }
7721     }
7722
7723   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7724      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7725   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7726     return FALSE;
7727
7728   /* Cache the sections created above.  */
7729   htab->splt = bfd_get_linker_section (abfd, ".plt");
7730   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7731   if (htab->is_vxworks)
7732     {
7733       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7734       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7735     }
7736   else
7737     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7738   if (!htab->sdynbss
7739       || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7740       || !htab->srelplt
7741       || !htab->splt)
7742     abort ();
7743
7744   /* Do the usual VxWorks handling.  */
7745   if (htab->is_vxworks
7746       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7747     return FALSE;
7748
7749   return TRUE;
7750 }
7751 \f
7752 /* Return true if relocation REL against section SEC is a REL rather than
7753    RELA relocation.  RELOCS is the first relocation in the section and
7754    ABFD is the bfd that contains SEC.  */
7755
7756 static bfd_boolean
7757 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7758                            const Elf_Internal_Rela *relocs,
7759                            const Elf_Internal_Rela *rel)
7760 {
7761   Elf_Internal_Shdr *rel_hdr;
7762   const struct elf_backend_data *bed;
7763
7764   /* To determine which flavor of relocation this is, we depend on the
7765      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7766   rel_hdr = elf_section_data (sec)->rel.hdr;
7767   if (rel_hdr == NULL)
7768     return FALSE;
7769   bed = get_elf_backend_data (abfd);
7770   return ((size_t) (rel - relocs)
7771           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7772 }
7773
7774 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7775    HOWTO is the relocation's howto and CONTENTS points to the contents
7776    of the section that REL is against.  */
7777
7778 static bfd_vma
7779 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7780                           reloc_howto_type *howto, bfd_byte *contents)
7781 {
7782   bfd_byte *location;
7783   unsigned int r_type;
7784   bfd_vma addend;
7785   bfd_vma bytes;
7786
7787   r_type = ELF_R_TYPE (abfd, rel->r_info);
7788   location = contents + rel->r_offset;
7789
7790   /* Get the addend, which is stored in the input file.  */
7791   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7792   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7793   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7794
7795   addend = bytes & howto->src_mask;
7796
7797   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
7798      accordingly.  */
7799   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7800     addend <<= 1;
7801
7802   return addend;
7803 }
7804
7805 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7806    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7807    and update *ADDEND with the final addend.  Return true on success
7808    or false if the LO16 could not be found.  RELEND is the exclusive
7809    upper bound on the relocations for REL's section.  */
7810
7811 static bfd_boolean
7812 mips_elf_add_lo16_rel_addend (bfd *abfd,
7813                               const Elf_Internal_Rela *rel,
7814                               const Elf_Internal_Rela *relend,
7815                               bfd_byte *contents, bfd_vma *addend)
7816 {
7817   unsigned int r_type, lo16_type;
7818   const Elf_Internal_Rela *lo16_relocation;
7819   reloc_howto_type *lo16_howto;
7820   bfd_vma l;
7821
7822   r_type = ELF_R_TYPE (abfd, rel->r_info);
7823   if (mips16_reloc_p (r_type))
7824     lo16_type = R_MIPS16_LO16;
7825   else if (micromips_reloc_p (r_type))
7826     lo16_type = R_MICROMIPS_LO16;
7827   else if (r_type == R_MIPS_PCHI16)
7828     lo16_type = R_MIPS_PCLO16;
7829   else
7830     lo16_type = R_MIPS_LO16;
7831
7832   /* The combined value is the sum of the HI16 addend, left-shifted by
7833      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7834      code does a `lui' of the HI16 value, and then an `addiu' of the
7835      LO16 value.)
7836
7837      Scan ahead to find a matching LO16 relocation.
7838
7839      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7840      be immediately following.  However, for the IRIX6 ABI, the next
7841      relocation may be a composed relocation consisting of several
7842      relocations for the same address.  In that case, the R_MIPS_LO16
7843      relocation may occur as one of these.  We permit a similar
7844      extension in general, as that is useful for GCC.
7845
7846      In some cases GCC dead code elimination removes the LO16 but keeps
7847      the corresponding HI16.  This is strictly speaking a violation of
7848      the ABI but not immediately harmful.  */
7849   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7850   if (lo16_relocation == NULL)
7851     return FALSE;
7852
7853   /* Obtain the addend kept there.  */
7854   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7855   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7856
7857   l <<= lo16_howto->rightshift;
7858   l = _bfd_mips_elf_sign_extend (l, 16);
7859
7860   *addend <<= 16;
7861   *addend += l;
7862   return TRUE;
7863 }
7864
7865 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7866    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7867    already holds the contents if it is nonull on entry.  */
7868
7869 static bfd_boolean
7870 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7871 {
7872   if (*contents)
7873     return TRUE;
7874
7875   /* Get cached copy if it exists.  */
7876   if (elf_section_data (sec)->this_hdr.contents != NULL)
7877     {
7878       *contents = elf_section_data (sec)->this_hdr.contents;
7879       return TRUE;
7880     }
7881
7882   return bfd_malloc_and_get_section (abfd, sec, contents);
7883 }
7884
7885 /* Make a new PLT record to keep internal data.  */
7886
7887 static struct plt_entry *
7888 mips_elf_make_plt_record (bfd *abfd)
7889 {
7890   struct plt_entry *entry;
7891
7892   entry = bfd_zalloc (abfd, sizeof (*entry));
7893   if (entry == NULL)
7894     return NULL;
7895
7896   entry->stub_offset = MINUS_ONE;
7897   entry->mips_offset = MINUS_ONE;
7898   entry->comp_offset = MINUS_ONE;
7899   entry->gotplt_index = MINUS_ONE;
7900   return entry;
7901 }
7902
7903 /* Look through the relocs for a section during the first phase, and
7904    allocate space in the global offset table and record the need for
7905    standard MIPS and compressed procedure linkage table entries.  */
7906
7907 bfd_boolean
7908 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7909                             asection *sec, const Elf_Internal_Rela *relocs)
7910 {
7911   const char *name;
7912   bfd *dynobj;
7913   Elf_Internal_Shdr *symtab_hdr;
7914   struct elf_link_hash_entry **sym_hashes;
7915   size_t extsymoff;
7916   const Elf_Internal_Rela *rel;
7917   const Elf_Internal_Rela *rel_end;
7918   asection *sreloc;
7919   const struct elf_backend_data *bed;
7920   struct mips_elf_link_hash_table *htab;
7921   bfd_byte *contents;
7922   bfd_vma addend;
7923   reloc_howto_type *howto;
7924
7925   if (bfd_link_relocatable (info))
7926     return TRUE;
7927
7928   htab = mips_elf_hash_table (info);
7929   BFD_ASSERT (htab != NULL);
7930
7931   dynobj = elf_hash_table (info)->dynobj;
7932   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7933   sym_hashes = elf_sym_hashes (abfd);
7934   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7935
7936   bed = get_elf_backend_data (abfd);
7937   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7938
7939   /* Check for the mips16 stub sections.  */
7940
7941   name = bfd_get_section_name (abfd, sec);
7942   if (FN_STUB_P (name))
7943     {
7944       unsigned long r_symndx;
7945
7946       /* Look at the relocation information to figure out which symbol
7947          this is for.  */
7948
7949       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7950       if (r_symndx == 0)
7951         {
7952           (*_bfd_error_handler)
7953             (_("%B: Warning: cannot determine the target function for"
7954                " stub section `%s'"),
7955              abfd, name);
7956           bfd_set_error (bfd_error_bad_value);
7957           return FALSE;
7958         }
7959
7960       if (r_symndx < extsymoff
7961           || sym_hashes[r_symndx - extsymoff] == NULL)
7962         {
7963           asection *o;
7964
7965           /* This stub is for a local symbol.  This stub will only be
7966              needed if there is some relocation in this BFD, other
7967              than a 16 bit function call, which refers to this symbol.  */
7968           for (o = abfd->sections; o != NULL; o = o->next)
7969             {
7970               Elf_Internal_Rela *sec_relocs;
7971               const Elf_Internal_Rela *r, *rend;
7972
7973               /* We can ignore stub sections when looking for relocs.  */
7974               if ((o->flags & SEC_RELOC) == 0
7975                   || o->reloc_count == 0
7976                   || section_allows_mips16_refs_p (o))
7977                 continue;
7978
7979               sec_relocs
7980                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7981                                              info->keep_memory);
7982               if (sec_relocs == NULL)
7983                 return FALSE;
7984
7985               rend = sec_relocs + o->reloc_count;
7986               for (r = sec_relocs; r < rend; r++)
7987                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7988                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7989                   break;
7990
7991               if (elf_section_data (o)->relocs != sec_relocs)
7992                 free (sec_relocs);
7993
7994               if (r < rend)
7995                 break;
7996             }
7997
7998           if (o == NULL)
7999             {
8000               /* There is no non-call reloc for this stub, so we do
8001                  not need it.  Since this function is called before
8002                  the linker maps input sections to output sections, we
8003                  can easily discard it by setting the SEC_EXCLUDE
8004                  flag.  */
8005               sec->flags |= SEC_EXCLUDE;
8006               return TRUE;
8007             }
8008
8009           /* Record this stub in an array of local symbol stubs for
8010              this BFD.  */
8011           if (mips_elf_tdata (abfd)->local_stubs == NULL)
8012             {
8013               unsigned long symcount;
8014               asection **n;
8015               bfd_size_type amt;
8016
8017               if (elf_bad_symtab (abfd))
8018                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8019               else
8020                 symcount = symtab_hdr->sh_info;
8021               amt = symcount * sizeof (asection *);
8022               n = bfd_zalloc (abfd, amt);
8023               if (n == NULL)
8024                 return FALSE;
8025               mips_elf_tdata (abfd)->local_stubs = n;
8026             }
8027
8028           sec->flags |= SEC_KEEP;
8029           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8030
8031           /* We don't need to set mips16_stubs_seen in this case.
8032              That flag is used to see whether we need to look through
8033              the global symbol table for stubs.  We don't need to set
8034              it here, because we just have a local stub.  */
8035         }
8036       else
8037         {
8038           struct mips_elf_link_hash_entry *h;
8039
8040           h = ((struct mips_elf_link_hash_entry *)
8041                sym_hashes[r_symndx - extsymoff]);
8042
8043           while (h->root.root.type == bfd_link_hash_indirect
8044                  || h->root.root.type == bfd_link_hash_warning)
8045             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8046
8047           /* H is the symbol this stub is for.  */
8048
8049           /* If we already have an appropriate stub for this function, we
8050              don't need another one, so we can discard this one.  Since
8051              this function is called before the linker maps input sections
8052              to output sections, we can easily discard it by setting the
8053              SEC_EXCLUDE flag.  */
8054           if (h->fn_stub != NULL)
8055             {
8056               sec->flags |= SEC_EXCLUDE;
8057               return TRUE;
8058             }
8059
8060           sec->flags |= SEC_KEEP;
8061           h->fn_stub = sec;
8062           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8063         }
8064     }
8065   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8066     {
8067       unsigned long r_symndx;
8068       struct mips_elf_link_hash_entry *h;
8069       asection **loc;
8070
8071       /* Look at the relocation information to figure out which symbol
8072          this is for.  */
8073
8074       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8075       if (r_symndx == 0)
8076         {
8077           (*_bfd_error_handler)
8078             (_("%B: Warning: cannot determine the target function for"
8079                " stub section `%s'"),
8080              abfd, name);
8081           bfd_set_error (bfd_error_bad_value);
8082           return FALSE;
8083         }
8084
8085       if (r_symndx < extsymoff
8086           || sym_hashes[r_symndx - extsymoff] == NULL)
8087         {
8088           asection *o;
8089
8090           /* This stub is for a local symbol.  This stub will only be
8091              needed if there is some relocation (R_MIPS16_26) in this BFD
8092              that refers to this symbol.  */
8093           for (o = abfd->sections; o != NULL; o = o->next)
8094             {
8095               Elf_Internal_Rela *sec_relocs;
8096               const Elf_Internal_Rela *r, *rend;
8097
8098               /* We can ignore stub sections when looking for relocs.  */
8099               if ((o->flags & SEC_RELOC) == 0
8100                   || o->reloc_count == 0
8101                   || section_allows_mips16_refs_p (o))
8102                 continue;
8103
8104               sec_relocs
8105                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8106                                              info->keep_memory);
8107               if (sec_relocs == NULL)
8108                 return FALSE;
8109
8110               rend = sec_relocs + o->reloc_count;
8111               for (r = sec_relocs; r < rend; r++)
8112                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8113                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8114                     break;
8115
8116               if (elf_section_data (o)->relocs != sec_relocs)
8117                 free (sec_relocs);
8118
8119               if (r < rend)
8120                 break;
8121             }
8122
8123           if (o == NULL)
8124             {
8125               /* There is no non-call reloc for this stub, so we do
8126                  not need it.  Since this function is called before
8127                  the linker maps input sections to output sections, we
8128                  can easily discard it by setting the SEC_EXCLUDE
8129                  flag.  */
8130               sec->flags |= SEC_EXCLUDE;
8131               return TRUE;
8132             }
8133
8134           /* Record this stub in an array of local symbol call_stubs for
8135              this BFD.  */
8136           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8137             {
8138               unsigned long symcount;
8139               asection **n;
8140               bfd_size_type amt;
8141
8142               if (elf_bad_symtab (abfd))
8143                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8144               else
8145                 symcount = symtab_hdr->sh_info;
8146               amt = symcount * sizeof (asection *);
8147               n = bfd_zalloc (abfd, amt);
8148               if (n == NULL)
8149                 return FALSE;
8150               mips_elf_tdata (abfd)->local_call_stubs = n;
8151             }
8152
8153           sec->flags |= SEC_KEEP;
8154           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8155
8156           /* We don't need to set mips16_stubs_seen in this case.
8157              That flag is used to see whether we need to look through
8158              the global symbol table for stubs.  We don't need to set
8159              it here, because we just have a local stub.  */
8160         }
8161       else
8162         {
8163           h = ((struct mips_elf_link_hash_entry *)
8164                sym_hashes[r_symndx - extsymoff]);
8165
8166           /* H is the symbol this stub is for.  */
8167
8168           if (CALL_FP_STUB_P (name))
8169             loc = &h->call_fp_stub;
8170           else
8171             loc = &h->call_stub;
8172
8173           /* If we already have an appropriate stub for this function, we
8174              don't need another one, so we can discard this one.  Since
8175              this function is called before the linker maps input sections
8176              to output sections, we can easily discard it by setting the
8177              SEC_EXCLUDE flag.  */
8178           if (*loc != NULL)
8179             {
8180               sec->flags |= SEC_EXCLUDE;
8181               return TRUE;
8182             }
8183
8184           sec->flags |= SEC_KEEP;
8185           *loc = sec;
8186           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8187         }
8188     }
8189
8190   sreloc = NULL;
8191   contents = NULL;
8192   for (rel = relocs; rel < rel_end; ++rel)
8193     {
8194       unsigned long r_symndx;
8195       unsigned int r_type;
8196       struct elf_link_hash_entry *h;
8197       bfd_boolean can_make_dynamic_p;
8198       bfd_boolean call_reloc_p;
8199       bfd_boolean constrain_symbol_p;
8200
8201       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8202       r_type = ELF_R_TYPE (abfd, rel->r_info);
8203
8204       if (r_symndx < extsymoff)
8205         h = NULL;
8206       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8207         {
8208           (*_bfd_error_handler)
8209             (_("%B: Malformed reloc detected for section %s"),
8210              abfd, name);
8211           bfd_set_error (bfd_error_bad_value);
8212           return FALSE;
8213         }
8214       else
8215         {
8216           h = sym_hashes[r_symndx - extsymoff];
8217           if (h != NULL)
8218             {
8219               while (h->root.type == bfd_link_hash_indirect
8220                      || h->root.type == bfd_link_hash_warning)
8221                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8222
8223               /* PR15323, ref flags aren't set for references in the
8224                  same object.  */
8225               h->root.non_ir_ref = 1;
8226             }
8227         }
8228
8229       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8230          relocation into a dynamic one.  */
8231       can_make_dynamic_p = FALSE;
8232
8233       /* Set CALL_RELOC_P to true if the relocation is for a call,
8234          and if pointer equality therefore doesn't matter.  */
8235       call_reloc_p = FALSE;
8236
8237       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8238          into account when deciding how to define the symbol.
8239          Relocations in nonallocatable sections such as .pdr and
8240          .debug* should have no effect.  */
8241       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8242
8243       switch (r_type)
8244         {
8245         case R_MIPS_CALL16:
8246         case R_MIPS_CALL_HI16:
8247         case R_MIPS_CALL_LO16:
8248         case R_MIPS16_CALL16:
8249         case R_MICROMIPS_CALL16:
8250         case R_MICROMIPS_CALL_HI16:
8251         case R_MICROMIPS_CALL_LO16:
8252           call_reloc_p = TRUE;
8253           /* Fall through.  */
8254
8255         case R_MIPS_GOT16:
8256         case R_MIPS_GOT_HI16:
8257         case R_MIPS_GOT_LO16:
8258         case R_MIPS_GOT_PAGE:
8259         case R_MIPS_GOT_OFST:
8260         case R_MIPS_GOT_DISP:
8261         case R_MIPS_TLS_GOTTPREL:
8262         case R_MIPS_TLS_GD:
8263         case R_MIPS_TLS_LDM:
8264         case R_MIPS16_GOT16:
8265         case R_MIPS16_TLS_GOTTPREL:
8266         case R_MIPS16_TLS_GD:
8267         case R_MIPS16_TLS_LDM:
8268         case R_MICROMIPS_GOT16:
8269         case R_MICROMIPS_GOT_HI16:
8270         case R_MICROMIPS_GOT_LO16:
8271         case R_MICROMIPS_GOT_PAGE:
8272         case R_MICROMIPS_GOT_OFST:
8273         case R_MICROMIPS_GOT_DISP:
8274         case R_MICROMIPS_TLS_GOTTPREL:
8275         case R_MICROMIPS_TLS_GD:
8276         case R_MICROMIPS_TLS_LDM:
8277           if (dynobj == NULL)
8278             elf_hash_table (info)->dynobj = dynobj = abfd;
8279           if (!mips_elf_create_got_section (dynobj, info))
8280             return FALSE;
8281           if (htab->is_vxworks && !bfd_link_pic (info))
8282             {
8283               (*_bfd_error_handler)
8284                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8285                  abfd, (unsigned long) rel->r_offset);
8286               bfd_set_error (bfd_error_bad_value);
8287               return FALSE;
8288             }
8289           can_make_dynamic_p = TRUE;
8290           break;
8291
8292         case R_MIPS_NONE:
8293         case R_MIPS_JALR:
8294         case R_MICROMIPS_JALR:
8295           /* These relocations have empty fields and are purely there to
8296              provide link information.  The symbol value doesn't matter.  */
8297           constrain_symbol_p = FALSE;
8298           break;
8299
8300         case R_MIPS_GPREL16:
8301         case R_MIPS_GPREL32:
8302         case R_MIPS16_GPREL:
8303         case R_MICROMIPS_GPREL16:
8304           /* GP-relative relocations always resolve to a definition in a
8305              regular input file, ignoring the one-definition rule.  This is
8306              important for the GP setup sequence in NewABI code, which
8307              always resolves to a local function even if other relocations
8308              against the symbol wouldn't.  */
8309           constrain_symbol_p = FALSE;
8310           break;
8311
8312         case R_MIPS_32:
8313         case R_MIPS_REL32:
8314         case R_MIPS_64:
8315           /* In VxWorks executables, references to external symbols
8316              must be handled using copy relocs or PLT entries; it is not
8317              possible to convert this relocation into a dynamic one.
8318
8319              For executables that use PLTs and copy-relocs, we have a
8320              choice between converting the relocation into a dynamic
8321              one or using copy relocations or PLT entries.  It is
8322              usually better to do the former, unless the relocation is
8323              against a read-only section.  */
8324           if ((bfd_link_pic (info)
8325                || (h != NULL
8326                    && !htab->is_vxworks
8327                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8328                    && !(!info->nocopyreloc
8329                         && !PIC_OBJECT_P (abfd)
8330                         && MIPS_ELF_READONLY_SECTION (sec))))
8331               && (sec->flags & SEC_ALLOC) != 0)
8332             {
8333               can_make_dynamic_p = TRUE;
8334               if (dynobj == NULL)
8335                 elf_hash_table (info)->dynobj = dynobj = abfd;
8336             }
8337           break;
8338
8339         case R_MIPS_26:
8340         case R_MIPS_PC16:
8341         case R_MIPS_PC21_S2:
8342         case R_MIPS_PC26_S2:
8343         case R_MIPS16_26:
8344         case R_MICROMIPS_26_S1:
8345         case R_MICROMIPS_PC7_S1:
8346         case R_MICROMIPS_PC10_S1:
8347         case R_MICROMIPS_PC16_S1:
8348         case R_MICROMIPS_PC23_S2:
8349           call_reloc_p = TRUE;
8350           break;
8351         }
8352
8353       if (h)
8354         {
8355           if (constrain_symbol_p)
8356             {
8357               if (!can_make_dynamic_p)
8358                 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8359
8360               if (!call_reloc_p)
8361                 h->pointer_equality_needed = 1;
8362
8363               /* We must not create a stub for a symbol that has
8364                  relocations related to taking the function's address.
8365                  This doesn't apply to VxWorks, where CALL relocs refer
8366                  to a .got.plt entry instead of a normal .got entry.  */
8367               if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8368                 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8369             }
8370
8371           /* Relocations against the special VxWorks __GOTT_BASE__ and
8372              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8373              room for them in .rela.dyn.  */
8374           if (is_gott_symbol (info, h))
8375             {
8376               if (sreloc == NULL)
8377                 {
8378                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8379                   if (sreloc == NULL)
8380                     return FALSE;
8381                 }
8382               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8383               if (MIPS_ELF_READONLY_SECTION (sec))
8384                 /* We tell the dynamic linker that there are
8385                    relocations against the text segment.  */
8386                 info->flags |= DF_TEXTREL;
8387             }
8388         }
8389       else if (call_lo16_reloc_p (r_type)
8390                || got_lo16_reloc_p (r_type)
8391                || got_disp_reloc_p (r_type)
8392                || (got16_reloc_p (r_type) && htab->is_vxworks))
8393         {
8394           /* We may need a local GOT entry for this relocation.  We
8395              don't count R_MIPS_GOT_PAGE because we can estimate the
8396              maximum number of pages needed by looking at the size of
8397              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8398              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8399              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8400              R_MIPS_CALL_HI16 because these are always followed by an
8401              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8402           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8403                                                  rel->r_addend, info, r_type))
8404             return FALSE;
8405         }
8406
8407       if (h != NULL
8408           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8409                                                   ELF_ST_IS_MIPS16 (h->other)))
8410         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8411
8412       switch (r_type)
8413         {
8414         case R_MIPS_CALL16:
8415         case R_MIPS16_CALL16:
8416         case R_MICROMIPS_CALL16:
8417           if (h == NULL)
8418             {
8419               (*_bfd_error_handler)
8420                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8421                  abfd, (unsigned long) rel->r_offset);
8422               bfd_set_error (bfd_error_bad_value);
8423               return FALSE;
8424             }
8425           /* Fall through.  */
8426
8427         case R_MIPS_CALL_HI16:
8428         case R_MIPS_CALL_LO16:
8429         case R_MICROMIPS_CALL_HI16:
8430         case R_MICROMIPS_CALL_LO16:
8431           if (h != NULL)
8432             {
8433               /* Make sure there is room in the regular GOT to hold the
8434                  function's address.  We may eliminate it in favour of
8435                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8436               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8437                                                       r_type))
8438                 return FALSE;
8439
8440               /* We need a stub, not a plt entry for the undefined
8441                  function.  But we record it as if it needs plt.  See
8442                  _bfd_elf_adjust_dynamic_symbol.  */
8443               h->needs_plt = 1;
8444               h->type = STT_FUNC;
8445             }
8446           break;
8447
8448         case R_MIPS_GOT_PAGE:
8449         case R_MICROMIPS_GOT_PAGE:
8450         case R_MIPS16_GOT16:
8451         case R_MIPS_GOT16:
8452         case R_MIPS_GOT_HI16:
8453         case R_MIPS_GOT_LO16:
8454         case R_MICROMIPS_GOT16:
8455         case R_MICROMIPS_GOT_HI16:
8456         case R_MICROMIPS_GOT_LO16:
8457           if (!h || got_page_reloc_p (r_type))
8458             {
8459               /* This relocation needs (or may need, if h != NULL) a
8460                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8461                  know for sure until we know whether the symbol is
8462                  preemptible.  */
8463               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8464                 {
8465                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8466                     return FALSE;
8467                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8468                   addend = mips_elf_read_rel_addend (abfd, rel,
8469                                                      howto, contents);
8470                   if (got16_reloc_p (r_type))
8471                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8472                                                   contents, &addend);
8473                   else
8474                     addend <<= howto->rightshift;
8475                 }
8476               else
8477                 addend = rel->r_addend;
8478               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8479                                                  h, addend))
8480                 return FALSE;
8481
8482               if (h)
8483                 {
8484                   struct mips_elf_link_hash_entry *hmips =
8485                     (struct mips_elf_link_hash_entry *) h;
8486
8487                   /* This symbol is definitely not overridable.  */
8488                   if (hmips->root.def_regular
8489                       && ! (bfd_link_pic (info) && ! info->symbolic
8490                             && ! hmips->root.forced_local))
8491                     h = NULL;
8492                 }
8493             }
8494           /* If this is a global, overridable symbol, GOT_PAGE will
8495              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8496           /* Fall through.  */
8497
8498         case R_MIPS_GOT_DISP:
8499         case R_MICROMIPS_GOT_DISP:
8500           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8501                                                        FALSE, r_type))
8502             return FALSE;
8503           break;
8504
8505         case R_MIPS_TLS_GOTTPREL:
8506         case R_MIPS16_TLS_GOTTPREL:
8507         case R_MICROMIPS_TLS_GOTTPREL:
8508           if (bfd_link_pic (info))
8509             info->flags |= DF_STATIC_TLS;
8510           /* Fall through */
8511
8512         case R_MIPS_TLS_LDM:
8513         case R_MIPS16_TLS_LDM:
8514         case R_MICROMIPS_TLS_LDM:
8515           if (tls_ldm_reloc_p (r_type))
8516             {
8517               r_symndx = STN_UNDEF;
8518               h = NULL;
8519             }
8520           /* Fall through */
8521
8522         case R_MIPS_TLS_GD:
8523         case R_MIPS16_TLS_GD:
8524         case R_MICROMIPS_TLS_GD:
8525           /* This symbol requires a global offset table entry, or two
8526              for TLS GD relocations.  */
8527           if (h != NULL)
8528             {
8529               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8530                                                       FALSE, r_type))
8531                 return FALSE;
8532             }
8533           else
8534             {
8535               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8536                                                      rel->r_addend,
8537                                                      info, r_type))
8538                 return FALSE;
8539             }
8540           break;
8541
8542         case R_MIPS_32:
8543         case R_MIPS_REL32:
8544         case R_MIPS_64:
8545           /* In VxWorks executables, references to external symbols
8546              are handled using copy relocs or PLT stubs, so there's
8547              no need to add a .rela.dyn entry for this relocation.  */
8548           if (can_make_dynamic_p)
8549             {
8550               if (sreloc == NULL)
8551                 {
8552                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8553                   if (sreloc == NULL)
8554                     return FALSE;
8555                 }
8556               if (bfd_link_pic (info) && h == NULL)
8557                 {
8558                   /* When creating a shared object, we must copy these
8559                      reloc types into the output file as R_MIPS_REL32
8560                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8561                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8562                   if (MIPS_ELF_READONLY_SECTION (sec))
8563                     /* We tell the dynamic linker that there are
8564                        relocations against the text segment.  */
8565                     info->flags |= DF_TEXTREL;
8566                 }
8567               else
8568                 {
8569                   struct mips_elf_link_hash_entry *hmips;
8570
8571                   /* For a shared object, we must copy this relocation
8572                      unless the symbol turns out to be undefined and
8573                      weak with non-default visibility, in which case
8574                      it will be left as zero.
8575
8576                      We could elide R_MIPS_REL32 for locally binding symbols
8577                      in shared libraries, but do not yet do so.
8578
8579                      For an executable, we only need to copy this
8580                      reloc if the symbol is defined in a dynamic
8581                      object.  */
8582                   hmips = (struct mips_elf_link_hash_entry *) h;
8583                   ++hmips->possibly_dynamic_relocs;
8584                   if (MIPS_ELF_READONLY_SECTION (sec))
8585                     /* We need it to tell the dynamic linker if there
8586                        are relocations against the text segment.  */
8587                     hmips->readonly_reloc = TRUE;
8588                 }
8589             }
8590
8591           if (SGI_COMPAT (abfd))
8592             mips_elf_hash_table (info)->compact_rel_size +=
8593               sizeof (Elf32_External_crinfo);
8594           break;
8595
8596         case R_MIPS_26:
8597         case R_MIPS_GPREL16:
8598         case R_MIPS_LITERAL:
8599         case R_MIPS_GPREL32:
8600         case R_MICROMIPS_26_S1:
8601         case R_MICROMIPS_GPREL16:
8602         case R_MICROMIPS_LITERAL:
8603         case R_MICROMIPS_GPREL7_S2:
8604           if (SGI_COMPAT (abfd))
8605             mips_elf_hash_table (info)->compact_rel_size +=
8606               sizeof (Elf32_External_crinfo);
8607           break;
8608
8609           /* This relocation describes the C++ object vtable hierarchy.
8610              Reconstruct it for later use during GC.  */
8611         case R_MIPS_GNU_VTINHERIT:
8612           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8613             return FALSE;
8614           break;
8615
8616           /* This relocation describes which C++ vtable entries are actually
8617              used.  Record for later use during GC.  */
8618         case R_MIPS_GNU_VTENTRY:
8619           BFD_ASSERT (h != NULL);
8620           if (h != NULL
8621               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8622             return FALSE;
8623           break;
8624
8625         default:
8626           break;
8627         }
8628
8629       /* Record the need for a PLT entry.  At this point we don't know
8630          yet if we are going to create a PLT in the first place, but
8631          we only record whether the relocation requires a standard MIPS
8632          or a compressed code entry anyway.  If we don't make a PLT after
8633          all, then we'll just ignore these arrangements.  Likewise if
8634          a PLT entry is not created because the symbol is satisfied
8635          locally.  */
8636       if (h != NULL
8637           && jal_reloc_p (r_type)
8638           && !SYMBOL_CALLS_LOCAL (info, h))
8639         {
8640           if (h->plt.plist == NULL)
8641             h->plt.plist = mips_elf_make_plt_record (abfd);
8642           if (h->plt.plist == NULL)
8643             return FALSE;
8644
8645           if (r_type == R_MIPS_26)
8646             h->plt.plist->need_mips = TRUE;
8647           else
8648             h->plt.plist->need_comp = TRUE;
8649         }
8650
8651       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8652          if there is one.  We only need to handle global symbols here;
8653          we decide whether to keep or delete stubs for local symbols
8654          when processing the stub's relocations.  */
8655       if (h != NULL
8656           && !mips16_call_reloc_p (r_type)
8657           && !section_allows_mips16_refs_p (sec))
8658         {
8659           struct mips_elf_link_hash_entry *mh;
8660
8661           mh = (struct mips_elf_link_hash_entry *) h;
8662           mh->need_fn_stub = TRUE;
8663         }
8664
8665       /* Refuse some position-dependent relocations when creating a
8666          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8667          not PIC, but we can create dynamic relocations and the result
8668          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8669          combined with R_MIPS_GOT16.  */
8670       if (bfd_link_pic (info))
8671         {
8672           switch (r_type)
8673             {
8674             case R_MIPS16_HI16:
8675             case R_MIPS_HI16:
8676             case R_MIPS_HIGHER:
8677             case R_MIPS_HIGHEST:
8678             case R_MICROMIPS_HI16:
8679             case R_MICROMIPS_HIGHER:
8680             case R_MICROMIPS_HIGHEST:
8681               /* Don't refuse a high part relocation if it's against
8682                  no symbol (e.g. part of a compound relocation).  */
8683               if (r_symndx == STN_UNDEF)
8684                 break;
8685
8686               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8687                  and has a special meaning.  */
8688               if (!NEWABI_P (abfd) && h != NULL
8689                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8690                 break;
8691
8692               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8693               if (is_gott_symbol (info, h))
8694                 break;
8695
8696               /* FALLTHROUGH */
8697
8698             case R_MIPS16_26:
8699             case R_MIPS_26:
8700             case R_MICROMIPS_26_S1:
8701               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8702               (*_bfd_error_handler)
8703                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8704                  abfd, howto->name,
8705                  (h) ? h->root.root.string : "a local symbol");
8706               bfd_set_error (bfd_error_bad_value);
8707               return FALSE;
8708             default:
8709               break;
8710             }
8711         }
8712     }
8713
8714   return TRUE;
8715 }
8716 \f
8717 bfd_boolean
8718 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8719                          struct bfd_link_info *link_info,
8720                          bfd_boolean *again)
8721 {
8722   Elf_Internal_Rela *internal_relocs;
8723   Elf_Internal_Rela *irel, *irelend;
8724   Elf_Internal_Shdr *symtab_hdr;
8725   bfd_byte *contents = NULL;
8726   size_t extsymoff;
8727   bfd_boolean changed_contents = FALSE;
8728   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8729   Elf_Internal_Sym *isymbuf = NULL;
8730
8731   /* We are not currently changing any sizes, so only one pass.  */
8732   *again = FALSE;
8733
8734   if (bfd_link_relocatable (link_info))
8735     return TRUE;
8736
8737   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8738                                                link_info->keep_memory);
8739   if (internal_relocs == NULL)
8740     return TRUE;
8741
8742   irelend = internal_relocs + sec->reloc_count
8743     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8744   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8745   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8746
8747   for (irel = internal_relocs; irel < irelend; irel++)
8748     {
8749       bfd_vma symval;
8750       bfd_signed_vma sym_offset;
8751       unsigned int r_type;
8752       unsigned long r_symndx;
8753       asection *sym_sec;
8754       unsigned long instruction;
8755
8756       /* Turn jalr into bgezal, and jr into beq, if they're marked
8757          with a JALR relocation, that indicate where they jump to.
8758          This saves some pipeline bubbles.  */
8759       r_type = ELF_R_TYPE (abfd, irel->r_info);
8760       if (r_type != R_MIPS_JALR)
8761         continue;
8762
8763       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8764       /* Compute the address of the jump target.  */
8765       if (r_symndx >= extsymoff)
8766         {
8767           struct mips_elf_link_hash_entry *h
8768             = ((struct mips_elf_link_hash_entry *)
8769                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8770
8771           while (h->root.root.type == bfd_link_hash_indirect
8772                  || h->root.root.type == bfd_link_hash_warning)
8773             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8774
8775           /* If a symbol is undefined, or if it may be overridden,
8776              skip it.  */
8777           if (! ((h->root.root.type == bfd_link_hash_defined
8778                   || h->root.root.type == bfd_link_hash_defweak)
8779                  && h->root.root.u.def.section)
8780               || (bfd_link_pic (link_info) && ! link_info->symbolic
8781                   && !h->root.forced_local))
8782             continue;
8783
8784           sym_sec = h->root.root.u.def.section;
8785           if (sym_sec->output_section)
8786             symval = (h->root.root.u.def.value
8787                       + sym_sec->output_section->vma
8788                       + sym_sec->output_offset);
8789           else
8790             symval = h->root.root.u.def.value;
8791         }
8792       else
8793         {
8794           Elf_Internal_Sym *isym;
8795
8796           /* Read this BFD's symbols if we haven't done so already.  */
8797           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8798             {
8799               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8800               if (isymbuf == NULL)
8801                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8802                                                 symtab_hdr->sh_info, 0,
8803                                                 NULL, NULL, NULL);
8804               if (isymbuf == NULL)
8805                 goto relax_return;
8806             }
8807
8808           isym = isymbuf + r_symndx;
8809           if (isym->st_shndx == SHN_UNDEF)
8810             continue;
8811           else if (isym->st_shndx == SHN_ABS)
8812             sym_sec = bfd_abs_section_ptr;
8813           else if (isym->st_shndx == SHN_COMMON)
8814             sym_sec = bfd_com_section_ptr;
8815           else
8816             sym_sec
8817               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8818           symval = isym->st_value
8819             + sym_sec->output_section->vma
8820             + sym_sec->output_offset;
8821         }
8822
8823       /* Compute branch offset, from delay slot of the jump to the
8824          branch target.  */
8825       sym_offset = (symval + irel->r_addend)
8826         - (sec_start + irel->r_offset + 4);
8827
8828       /* Branch offset must be properly aligned.  */
8829       if ((sym_offset & 3) != 0)
8830         continue;
8831
8832       sym_offset >>= 2;
8833
8834       /* Check that it's in range.  */
8835       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8836         continue;
8837
8838       /* Get the section contents if we haven't done so already.  */
8839       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8840         goto relax_return;
8841
8842       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8843
8844       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8845       if ((instruction & 0xfc1fffff) == 0x0000f809)
8846         instruction = 0x04110000;
8847       /* If it was jr <reg>, turn it into b <target>.  */
8848       else if ((instruction & 0xfc1fffff) == 0x00000008)
8849         instruction = 0x10000000;
8850       else
8851         continue;
8852
8853       instruction |= (sym_offset & 0xffff);
8854       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8855       changed_contents = TRUE;
8856     }
8857
8858   if (contents != NULL
8859       && elf_section_data (sec)->this_hdr.contents != contents)
8860     {
8861       if (!changed_contents && !link_info->keep_memory)
8862         free (contents);
8863       else
8864         {
8865           /* Cache the section contents for elf_link_input_bfd.  */
8866           elf_section_data (sec)->this_hdr.contents = contents;
8867         }
8868     }
8869   return TRUE;
8870
8871  relax_return:
8872   if (contents != NULL
8873       && elf_section_data (sec)->this_hdr.contents != contents)
8874     free (contents);
8875   return FALSE;
8876 }
8877 \f
8878 /* Allocate space for global sym dynamic relocs.  */
8879
8880 static bfd_boolean
8881 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8882 {
8883   struct bfd_link_info *info = inf;
8884   bfd *dynobj;
8885   struct mips_elf_link_hash_entry *hmips;
8886   struct mips_elf_link_hash_table *htab;
8887
8888   htab = mips_elf_hash_table (info);
8889   BFD_ASSERT (htab != NULL);
8890
8891   dynobj = elf_hash_table (info)->dynobj;
8892   hmips = (struct mips_elf_link_hash_entry *) h;
8893
8894   /* VxWorks executables are handled elsewhere; we only need to
8895      allocate relocations in shared objects.  */
8896   if (htab->is_vxworks && !bfd_link_pic (info))
8897     return TRUE;
8898
8899   /* Ignore indirect symbols.  All relocations against such symbols
8900      will be redirected to the target symbol.  */
8901   if (h->root.type == bfd_link_hash_indirect)
8902     return TRUE;
8903
8904   /* If this symbol is defined in a dynamic object, or we are creating
8905      a shared library, we will need to copy any R_MIPS_32 or
8906      R_MIPS_REL32 relocs against it into the output file.  */
8907   if (! bfd_link_relocatable (info)
8908       && hmips->possibly_dynamic_relocs != 0
8909       && (h->root.type == bfd_link_hash_defweak
8910           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8911           || bfd_link_pic (info)))
8912     {
8913       bfd_boolean do_copy = TRUE;
8914
8915       if (h->root.type == bfd_link_hash_undefweak)
8916         {
8917           /* Do not copy relocations for undefined weak symbols with
8918              non-default visibility.  */
8919           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8920             do_copy = FALSE;
8921
8922           /* Make sure undefined weak symbols are output as a dynamic
8923              symbol in PIEs.  */
8924           else if (h->dynindx == -1 && !h->forced_local)
8925             {
8926               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8927                 return FALSE;
8928             }
8929         }
8930
8931       if (do_copy)
8932         {
8933           /* Even though we don't directly need a GOT entry for this symbol,
8934              the SVR4 psABI requires it to have a dynamic symbol table
8935              index greater that DT_MIPS_GOTSYM if there are dynamic
8936              relocations against it.
8937
8938              VxWorks does not enforce the same mapping between the GOT
8939              and the symbol table, so the same requirement does not
8940              apply there.  */
8941           if (!htab->is_vxworks)
8942             {
8943               if (hmips->global_got_area > GGA_RELOC_ONLY)
8944                 hmips->global_got_area = GGA_RELOC_ONLY;
8945               hmips->got_only_for_calls = FALSE;
8946             }
8947
8948           mips_elf_allocate_dynamic_relocations
8949             (dynobj, info, hmips->possibly_dynamic_relocs);
8950           if (hmips->readonly_reloc)
8951             /* We tell the dynamic linker that there are relocations
8952                against the text segment.  */
8953             info->flags |= DF_TEXTREL;
8954         }
8955     }
8956
8957   return TRUE;
8958 }
8959
8960 /* Adjust a symbol defined by a dynamic object and referenced by a
8961    regular object.  The current definition is in some section of the
8962    dynamic object, but we're not including those sections.  We have to
8963    change the definition to something the rest of the link can
8964    understand.  */
8965
8966 bfd_boolean
8967 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8968                                      struct elf_link_hash_entry *h)
8969 {
8970   bfd *dynobj;
8971   struct mips_elf_link_hash_entry *hmips;
8972   struct mips_elf_link_hash_table *htab;
8973
8974   htab = mips_elf_hash_table (info);
8975   BFD_ASSERT (htab != NULL);
8976
8977   dynobj = elf_hash_table (info)->dynobj;
8978   hmips = (struct mips_elf_link_hash_entry *) h;
8979
8980   /* Make sure we know what is going on here.  */
8981   BFD_ASSERT (dynobj != NULL
8982               && (h->needs_plt
8983                   || h->u.weakdef != NULL
8984                   || (h->def_dynamic
8985                       && h->ref_regular
8986                       && !h->def_regular)));
8987
8988   hmips = (struct mips_elf_link_hash_entry *) h;
8989
8990   /* If there are call relocations against an externally-defined symbol,
8991      see whether we can create a MIPS lazy-binding stub for it.  We can
8992      only do this if all references to the function are through call
8993      relocations, and in that case, the traditional lazy-binding stubs
8994      are much more efficient than PLT entries.
8995
8996      Traditional stubs are only available on SVR4 psABI-based systems;
8997      VxWorks always uses PLTs instead.  */
8998   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8999     {
9000       if (! elf_hash_table (info)->dynamic_sections_created)
9001         return TRUE;
9002
9003       /* If this symbol is not defined in a regular file, then set
9004          the symbol to the stub location.  This is required to make
9005          function pointers compare as equal between the normal
9006          executable and the shared library.  */
9007       if (!h->def_regular)
9008         {
9009           hmips->needs_lazy_stub = TRUE;
9010           htab->lazy_stub_count++;
9011           return TRUE;
9012         }
9013     }
9014   /* As above, VxWorks requires PLT entries for externally-defined
9015      functions that are only accessed through call relocations.
9016
9017      Both VxWorks and non-VxWorks targets also need PLT entries if there
9018      are static-only relocations against an externally-defined function.
9019      This can technically occur for shared libraries if there are
9020      branches to the symbol, although it is unlikely that this will be
9021      used in practice due to the short ranges involved.  It can occur
9022      for any relative or absolute relocation in executables; in that
9023      case, the PLT entry becomes the function's canonical address.  */
9024   else if (((h->needs_plt && !hmips->no_fn_stub)
9025             || (h->type == STT_FUNC && hmips->has_static_relocs))
9026            && htab->use_plts_and_copy_relocs
9027            && !SYMBOL_CALLS_LOCAL (info, h)
9028            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9029                 && h->root.type == bfd_link_hash_undefweak))
9030     {
9031       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9032       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9033
9034       /* If this is the first symbol to need a PLT entry, then make some
9035          basic setup.  Also work out PLT entry sizes.  We'll need them
9036          for PLT offset calculations.  */
9037       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9038         {
9039           BFD_ASSERT (htab->sgotplt->size == 0);
9040           BFD_ASSERT (htab->plt_got_index == 0);
9041
9042           /* If we're using the PLT additions to the psABI, each PLT
9043              entry is 16 bytes and the PLT0 entry is 32 bytes.
9044              Encourage better cache usage by aligning.  We do this
9045              lazily to avoid pessimizing traditional objects.  */
9046           if (!htab->is_vxworks
9047               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9048             return FALSE;
9049
9050           /* Make sure that .got.plt is word-aligned.  We do this lazily
9051              for the same reason as above.  */
9052           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9053                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9054             return FALSE;
9055
9056           /* On non-VxWorks targets, the first two entries in .got.plt
9057              are reserved.  */
9058           if (!htab->is_vxworks)
9059             htab->plt_got_index
9060               += (get_elf_backend_data (dynobj)->got_header_size
9061                   / MIPS_ELF_GOT_SIZE (dynobj));
9062
9063           /* On VxWorks, also allocate room for the header's
9064              .rela.plt.unloaded entries.  */
9065           if (htab->is_vxworks && !bfd_link_pic (info))
9066             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9067
9068           /* Now work out the sizes of individual PLT entries.  */
9069           if (htab->is_vxworks && bfd_link_pic (info))
9070             htab->plt_mips_entry_size
9071               = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9072           else if (htab->is_vxworks)
9073             htab->plt_mips_entry_size
9074               = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9075           else if (newabi_p)
9076             htab->plt_mips_entry_size
9077               = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9078           else if (!micromips_p)
9079             {
9080               htab->plt_mips_entry_size
9081                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9082               htab->plt_comp_entry_size
9083                 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9084             }
9085           else if (htab->insn32)
9086             {
9087               htab->plt_mips_entry_size
9088                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9089               htab->plt_comp_entry_size
9090                 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9091             }
9092           else
9093             {
9094               htab->plt_mips_entry_size
9095                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9096               htab->plt_comp_entry_size
9097                 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9098             }
9099         }
9100
9101       if (h->plt.plist == NULL)
9102         h->plt.plist = mips_elf_make_plt_record (dynobj);
9103       if (h->plt.plist == NULL)
9104         return FALSE;
9105
9106       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9107          n32 or n64, so always use a standard entry there.
9108
9109          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9110          all MIPS16 calls will go via that stub, and there is no benefit
9111          to having a MIPS16 entry.  And in the case of call_stub a
9112          standard entry actually has to be used as the stub ends with a J
9113          instruction.  */
9114       if (newabi_p
9115           || htab->is_vxworks
9116           || hmips->call_stub
9117           || hmips->call_fp_stub)
9118         {
9119           h->plt.plist->need_mips = TRUE;
9120           h->plt.plist->need_comp = FALSE;
9121         }
9122
9123       /* Otherwise, if there are no direct calls to the function, we
9124          have a free choice of whether to use standard or compressed
9125          entries.  Prefer microMIPS entries if the object is known to
9126          contain microMIPS code, so that it becomes possible to create
9127          pure microMIPS binaries.  Prefer standard entries otherwise,
9128          because MIPS16 ones are no smaller and are usually slower.  */
9129       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9130         {
9131           if (micromips_p)
9132             h->plt.plist->need_comp = TRUE;
9133           else
9134             h->plt.plist->need_mips = TRUE;
9135         }
9136
9137       if (h->plt.plist->need_mips)
9138         {
9139           h->plt.plist->mips_offset = htab->plt_mips_offset;
9140           htab->plt_mips_offset += htab->plt_mips_entry_size;
9141         }
9142       if (h->plt.plist->need_comp)
9143         {
9144           h->plt.plist->comp_offset = htab->plt_comp_offset;
9145           htab->plt_comp_offset += htab->plt_comp_entry_size;
9146         }
9147
9148       /* Reserve the corresponding .got.plt entry now too.  */
9149       h->plt.plist->gotplt_index = htab->plt_got_index++;
9150
9151       /* If the output file has no definition of the symbol, set the
9152          symbol's value to the address of the stub.  */
9153       if (!bfd_link_pic (info) && !h->def_regular)
9154         hmips->use_plt_entry = TRUE;
9155
9156       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9157       htab->srelplt->size += (htab->is_vxworks
9158                               ? MIPS_ELF_RELA_SIZE (dynobj)
9159                               : MIPS_ELF_REL_SIZE (dynobj));
9160
9161       /* Make room for the .rela.plt.unloaded relocations.  */
9162       if (htab->is_vxworks && !bfd_link_pic (info))
9163         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9164
9165       /* All relocations against this symbol that could have been made
9166          dynamic will now refer to the PLT entry instead.  */
9167       hmips->possibly_dynamic_relocs = 0;
9168
9169       return TRUE;
9170     }
9171
9172   /* If this is a weak symbol, and there is a real definition, the
9173      processor independent code will have arranged for us to see the
9174      real definition first, and we can just use the same value.  */
9175   if (h->u.weakdef != NULL)
9176     {
9177       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9178                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
9179       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9180       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9181       return TRUE;
9182     }
9183
9184   /* Otherwise, there is nothing further to do for symbols defined
9185      in regular objects.  */
9186   if (h->def_regular)
9187     return TRUE;
9188
9189   /* There's also nothing more to do if we'll convert all relocations
9190      against this symbol into dynamic relocations.  */
9191   if (!hmips->has_static_relocs)
9192     return TRUE;
9193
9194   /* We're now relying on copy relocations.  Complain if we have
9195      some that we can't convert.  */
9196   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9197     {
9198       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9199                                "dynamic symbol %s"),
9200                              h->root.root.string);
9201       bfd_set_error (bfd_error_bad_value);
9202       return FALSE;
9203     }
9204
9205   /* We must allocate the symbol in our .dynbss section, which will
9206      become part of the .bss section of the executable.  There will be
9207      an entry for this symbol in the .dynsym section.  The dynamic
9208      object will contain position independent code, so all references
9209      from the dynamic object to this symbol will go through the global
9210      offset table.  The dynamic linker will use the .dynsym entry to
9211      determine the address it must put in the global offset table, so
9212      both the dynamic object and the regular object will refer to the
9213      same memory location for the variable.  */
9214
9215   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9216     {
9217       if (htab->is_vxworks)
9218         htab->srelbss->size += sizeof (Elf32_External_Rela);
9219       else
9220         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9221       h->needs_copy = 1;
9222     }
9223
9224   /* All relocations against this symbol that could have been made
9225      dynamic will now refer to the local copy instead.  */
9226   hmips->possibly_dynamic_relocs = 0;
9227
9228   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9229 }
9230 \f
9231 /* This function is called after all the input files have been read,
9232    and the input sections have been assigned to output sections.  We
9233    check for any mips16 stub sections that we can discard.  */
9234
9235 bfd_boolean
9236 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9237                                     struct bfd_link_info *info)
9238 {
9239   asection *sect;
9240   struct mips_elf_link_hash_table *htab;
9241   struct mips_htab_traverse_info hti;
9242
9243   htab = mips_elf_hash_table (info);
9244   BFD_ASSERT (htab != NULL);
9245
9246   /* The .reginfo section has a fixed size.  */
9247   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9248   if (sect != NULL)
9249     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9250
9251   /* The .MIPS.abiflags section has a fixed size.  */
9252   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9253   if (sect != NULL)
9254     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9255
9256   hti.info = info;
9257   hti.output_bfd = output_bfd;
9258   hti.error = FALSE;
9259   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9260                                mips_elf_check_symbols, &hti);
9261   if (hti.error)
9262     return FALSE;
9263
9264   return TRUE;
9265 }
9266
9267 /* If the link uses a GOT, lay it out and work out its size.  */
9268
9269 static bfd_boolean
9270 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9271 {
9272   bfd *dynobj;
9273   asection *s;
9274   struct mips_got_info *g;
9275   bfd_size_type loadable_size = 0;
9276   bfd_size_type page_gotno;
9277   bfd *ibfd;
9278   struct mips_elf_traverse_got_arg tga;
9279   struct mips_elf_link_hash_table *htab;
9280
9281   htab = mips_elf_hash_table (info);
9282   BFD_ASSERT (htab != NULL);
9283
9284   s = htab->sgot;
9285   if (s == NULL)
9286     return TRUE;
9287
9288   dynobj = elf_hash_table (info)->dynobj;
9289   g = htab->got_info;
9290
9291   /* Allocate room for the reserved entries.  VxWorks always reserves
9292      3 entries; other objects only reserve 2 entries.  */
9293   BFD_ASSERT (g->assigned_low_gotno == 0);
9294   if (htab->is_vxworks)
9295     htab->reserved_gotno = 3;
9296   else
9297     htab->reserved_gotno = 2;
9298   g->local_gotno += htab->reserved_gotno;
9299   g->assigned_low_gotno = htab->reserved_gotno;
9300
9301   /* Decide which symbols need to go in the global part of the GOT and
9302      count the number of reloc-only GOT symbols.  */
9303   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9304
9305   if (!mips_elf_resolve_final_got_entries (info, g))
9306     return FALSE;
9307
9308   /* Calculate the total loadable size of the output.  That
9309      will give us the maximum number of GOT_PAGE entries
9310      required.  */
9311   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9312     {
9313       asection *subsection;
9314
9315       for (subsection = ibfd->sections;
9316            subsection;
9317            subsection = subsection->next)
9318         {
9319           if ((subsection->flags & SEC_ALLOC) == 0)
9320             continue;
9321           loadable_size += ((subsection->size + 0xf)
9322                             &~ (bfd_size_type) 0xf);
9323         }
9324     }
9325
9326   if (htab->is_vxworks)
9327     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9328        relocations against local symbols evaluate to "G", and the EABI does
9329        not include R_MIPS_GOT_PAGE.  */
9330     page_gotno = 0;
9331   else
9332     /* Assume there are two loadable segments consisting of contiguous
9333        sections.  Is 5 enough?  */
9334     page_gotno = (loadable_size >> 16) + 5;
9335
9336   /* Choose the smaller of the two page estimates; both are intended to be
9337      conservative.  */
9338   if (page_gotno > g->page_gotno)
9339     page_gotno = g->page_gotno;
9340
9341   g->local_gotno += page_gotno;
9342   g->assigned_high_gotno = g->local_gotno - 1;
9343
9344   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9345   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9346   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9347
9348   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9349      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9350      dynamic loader.  */
9351   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9352     {
9353       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9354         return FALSE;
9355     }
9356   else
9357     {
9358       /* Record that all bfds use G.  This also has the effect of freeing
9359          the per-bfd GOTs, which we no longer need.  */
9360       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9361         if (mips_elf_bfd_got (ibfd, FALSE))
9362           mips_elf_replace_bfd_got (ibfd, g);
9363       mips_elf_replace_bfd_got (output_bfd, g);
9364
9365       /* Set up TLS entries.  */
9366       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9367       tga.info = info;
9368       tga.g = g;
9369       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9370       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9371       if (!tga.g)
9372         return FALSE;
9373       BFD_ASSERT (g->tls_assigned_gotno
9374                   == g->global_gotno + g->local_gotno + g->tls_gotno);
9375
9376       /* Each VxWorks GOT entry needs an explicit relocation.  */
9377       if (htab->is_vxworks && bfd_link_pic (info))
9378         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9379
9380       /* Allocate room for the TLS relocations.  */
9381       if (g->relocs)
9382         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9383     }
9384
9385   return TRUE;
9386 }
9387
9388 /* Estimate the size of the .MIPS.stubs section.  */
9389
9390 static void
9391 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9392 {
9393   struct mips_elf_link_hash_table *htab;
9394   bfd_size_type dynsymcount;
9395
9396   htab = mips_elf_hash_table (info);
9397   BFD_ASSERT (htab != NULL);
9398
9399   if (htab->lazy_stub_count == 0)
9400     return;
9401
9402   /* IRIX rld assumes that a function stub isn't at the end of the .text
9403      section, so add a dummy entry to the end.  */
9404   htab->lazy_stub_count++;
9405
9406   /* Get a worst-case estimate of the number of dynamic symbols needed.
9407      At this point, dynsymcount does not account for section symbols
9408      and count_section_dynsyms may overestimate the number that will
9409      be needed.  */
9410   dynsymcount = (elf_hash_table (info)->dynsymcount
9411                  + count_section_dynsyms (output_bfd, info));
9412
9413   /* Determine the size of one stub entry.  There's no disadvantage
9414      from using microMIPS code here, so for the sake of pure-microMIPS
9415      binaries we prefer it whenever there's any microMIPS code in
9416      output produced at all.  This has a benefit of stubs being
9417      shorter by 4 bytes each too, unless in the insn32 mode.  */
9418   if (!MICROMIPS_P (output_bfd))
9419     htab->function_stub_size = (dynsymcount > 0x10000
9420                                 ? MIPS_FUNCTION_STUB_BIG_SIZE
9421                                 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9422   else if (htab->insn32)
9423     htab->function_stub_size = (dynsymcount > 0x10000
9424                                 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9425                                 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9426   else
9427     htab->function_stub_size = (dynsymcount > 0x10000
9428                                 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9429                                 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9430
9431   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9432 }
9433
9434 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9435    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9436    stub, allocate an entry in the stubs section.  */
9437
9438 static bfd_boolean
9439 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9440 {
9441   struct mips_htab_traverse_info *hti = data;
9442   struct mips_elf_link_hash_table *htab;
9443   struct bfd_link_info *info;
9444   bfd *output_bfd;
9445
9446   info = hti->info;
9447   output_bfd = hti->output_bfd;
9448   htab = mips_elf_hash_table (info);
9449   BFD_ASSERT (htab != NULL);
9450
9451   if (h->needs_lazy_stub)
9452     {
9453       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9454       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9455       bfd_vma isa_bit = micromips_p;
9456
9457       BFD_ASSERT (htab->root.dynobj != NULL);
9458       if (h->root.plt.plist == NULL)
9459         h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9460       if (h->root.plt.plist == NULL)
9461         {
9462           hti->error = TRUE;
9463           return FALSE;
9464         }
9465       h->root.root.u.def.section = htab->sstubs;
9466       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9467       h->root.plt.plist->stub_offset = htab->sstubs->size;
9468       h->root.other = other;
9469       htab->sstubs->size += htab->function_stub_size;
9470     }
9471   return TRUE;
9472 }
9473
9474 /* Allocate offsets in the stubs section to each symbol that needs one.
9475    Set the final size of the .MIPS.stub section.  */
9476
9477 static bfd_boolean
9478 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9479 {
9480   bfd *output_bfd = info->output_bfd;
9481   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9482   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9483   bfd_vma isa_bit = micromips_p;
9484   struct mips_elf_link_hash_table *htab;
9485   struct mips_htab_traverse_info hti;
9486   struct elf_link_hash_entry *h;
9487   bfd *dynobj;
9488
9489   htab = mips_elf_hash_table (info);
9490   BFD_ASSERT (htab != NULL);
9491
9492   if (htab->lazy_stub_count == 0)
9493     return TRUE;
9494
9495   htab->sstubs->size = 0;
9496   hti.info = info;
9497   hti.output_bfd = output_bfd;
9498   hti.error = FALSE;
9499   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9500   if (hti.error)
9501     return FALSE;
9502   htab->sstubs->size += htab->function_stub_size;
9503   BFD_ASSERT (htab->sstubs->size
9504               == htab->lazy_stub_count * htab->function_stub_size);
9505
9506   dynobj = elf_hash_table (info)->dynobj;
9507   BFD_ASSERT (dynobj != NULL);
9508   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9509   if (h == NULL)
9510     return FALSE;
9511   h->root.u.def.value = isa_bit;
9512   h->other = other;
9513   h->type = STT_FUNC;
9514
9515   return TRUE;
9516 }
9517
9518 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9519    bfd_link_info.  If H uses the address of a PLT entry as the value
9520    of the symbol, then set the entry in the symbol table now.  Prefer
9521    a standard MIPS PLT entry.  */
9522
9523 static bfd_boolean
9524 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9525 {
9526   struct bfd_link_info *info = data;
9527   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9528   struct mips_elf_link_hash_table *htab;
9529   unsigned int other;
9530   bfd_vma isa_bit;
9531   bfd_vma val;
9532
9533   htab = mips_elf_hash_table (info);
9534   BFD_ASSERT (htab != NULL);
9535
9536   if (h->use_plt_entry)
9537     {
9538       BFD_ASSERT (h->root.plt.plist != NULL);
9539       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9540                   || h->root.plt.plist->comp_offset != MINUS_ONE);
9541
9542       val = htab->plt_header_size;
9543       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9544         {
9545           isa_bit = 0;
9546           val += h->root.plt.plist->mips_offset;
9547           other = 0;
9548         }
9549       else
9550         {
9551           isa_bit = 1;
9552           val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9553           other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9554         }
9555       val += isa_bit;
9556       /* For VxWorks, point at the PLT load stub rather than the lazy
9557          resolution stub; this stub will become the canonical function
9558          address.  */
9559       if (htab->is_vxworks)
9560         val += 8;
9561
9562       h->root.root.u.def.section = htab->splt;
9563       h->root.root.u.def.value = val;
9564       h->root.other = other;
9565     }
9566
9567   return TRUE;
9568 }
9569
9570 /* Set the sizes of the dynamic sections.  */
9571
9572 bfd_boolean
9573 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9574                                      struct bfd_link_info *info)
9575 {
9576   bfd *dynobj;
9577   asection *s, *sreldyn;
9578   bfd_boolean reltext;
9579   struct mips_elf_link_hash_table *htab;
9580
9581   htab = mips_elf_hash_table (info);
9582   BFD_ASSERT (htab != NULL);
9583   dynobj = elf_hash_table (info)->dynobj;
9584   BFD_ASSERT (dynobj != NULL);
9585
9586   if (elf_hash_table (info)->dynamic_sections_created)
9587     {
9588       /* Set the contents of the .interp section to the interpreter.  */
9589       if (bfd_link_executable (info) && !info->nointerp)
9590         {
9591           s = bfd_get_linker_section (dynobj, ".interp");
9592           BFD_ASSERT (s != NULL);
9593           s->size
9594             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9595           s->contents
9596             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9597         }
9598
9599       /* Figure out the size of the PLT header if we know that we
9600          are using it.  For the sake of cache alignment always use
9601          a standard header whenever any standard entries are present
9602          even if microMIPS entries are present as well.  This also
9603          lets the microMIPS header rely on the value of $v0 only set
9604          by microMIPS entries, for a small size reduction.
9605
9606          Set symbol table entry values for symbols that use the
9607          address of their PLT entry now that we can calculate it.
9608
9609          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9610          haven't already in _bfd_elf_create_dynamic_sections.  */
9611       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9612         {
9613           bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9614                                      && !htab->plt_mips_offset);
9615           unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9616           bfd_vma isa_bit = micromips_p;
9617           struct elf_link_hash_entry *h;
9618           bfd_vma size;
9619
9620           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9621           BFD_ASSERT (htab->sgotplt->size == 0);
9622           BFD_ASSERT (htab->splt->size == 0);
9623
9624           if (htab->is_vxworks && bfd_link_pic (info))
9625             size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9626           else if (htab->is_vxworks)
9627             size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9628           else if (ABI_64_P (output_bfd))
9629             size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9630           else if (ABI_N32_P (output_bfd))
9631             size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9632           else if (!micromips_p)
9633             size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9634           else if (htab->insn32)
9635             size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9636           else
9637             size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9638
9639           htab->plt_header_is_comp = micromips_p;
9640           htab->plt_header_size = size;
9641           htab->splt->size = (size
9642                               + htab->plt_mips_offset
9643                               + htab->plt_comp_offset);
9644           htab->sgotplt->size = (htab->plt_got_index
9645                                  * MIPS_ELF_GOT_SIZE (dynobj));
9646
9647           mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9648
9649           if (htab->root.hplt == NULL)
9650             {
9651               h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9652                                                "_PROCEDURE_LINKAGE_TABLE_");
9653               htab->root.hplt = h;
9654               if (h == NULL)
9655                 return FALSE;
9656             }
9657
9658           h = htab->root.hplt;
9659           h->root.u.def.value = isa_bit;
9660           h->other = other;
9661           h->type = STT_FUNC;
9662         }
9663     }
9664
9665   /* Allocate space for global sym dynamic relocs.  */
9666   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9667
9668   mips_elf_estimate_stub_size (output_bfd, info);
9669
9670   if (!mips_elf_lay_out_got (output_bfd, info))
9671     return FALSE;
9672
9673   mips_elf_lay_out_lazy_stubs (info);
9674
9675   /* The check_relocs and adjust_dynamic_symbol entry points have
9676      determined the sizes of the various dynamic sections.  Allocate
9677      memory for them.  */
9678   reltext = FALSE;
9679   for (s = dynobj->sections; s != NULL; s = s->next)
9680     {
9681       const char *name;
9682
9683       /* It's OK to base decisions on the section name, because none
9684          of the dynobj section names depend upon the input files.  */
9685       name = bfd_get_section_name (dynobj, s);
9686
9687       if ((s->flags & SEC_LINKER_CREATED) == 0)
9688         continue;
9689
9690       if (CONST_STRNEQ (name, ".rel"))
9691         {
9692           if (s->size != 0)
9693             {
9694               const char *outname;
9695               asection *target;
9696
9697               /* If this relocation section applies to a read only
9698                  section, then we probably need a DT_TEXTREL entry.
9699                  If the relocation section is .rel(a).dyn, we always
9700                  assert a DT_TEXTREL entry rather than testing whether
9701                  there exists a relocation to a read only section or
9702                  not.  */
9703               outname = bfd_get_section_name (output_bfd,
9704                                               s->output_section);
9705               target = bfd_get_section_by_name (output_bfd, outname + 4);
9706               if ((target != NULL
9707                    && (target->flags & SEC_READONLY) != 0
9708                    && (target->flags & SEC_ALLOC) != 0)
9709                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9710                 reltext = TRUE;
9711
9712               /* We use the reloc_count field as a counter if we need
9713                  to copy relocs into the output file.  */
9714               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9715                 s->reloc_count = 0;
9716
9717               /* If combreloc is enabled, elf_link_sort_relocs() will
9718                  sort relocations, but in a different way than we do,
9719                  and before we're done creating relocations.  Also, it
9720                  will move them around between input sections'
9721                  relocation's contents, so our sorting would be
9722                  broken, so don't let it run.  */
9723               info->combreloc = 0;
9724             }
9725         }
9726       else if (bfd_link_executable (info)
9727                && ! mips_elf_hash_table (info)->use_rld_obj_head
9728                && CONST_STRNEQ (name, ".rld_map"))
9729         {
9730           /* We add a room for __rld_map.  It will be filled in by the
9731              rtld to contain a pointer to the _r_debug structure.  */
9732           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9733         }
9734       else if (SGI_COMPAT (output_bfd)
9735                && CONST_STRNEQ (name, ".compact_rel"))
9736         s->size += mips_elf_hash_table (info)->compact_rel_size;
9737       else if (s == htab->splt)
9738         {
9739           /* If the last PLT entry has a branch delay slot, allocate
9740              room for an extra nop to fill the delay slot.  This is
9741              for CPUs without load interlocking.  */
9742           if (! LOAD_INTERLOCKS_P (output_bfd)
9743               && ! htab->is_vxworks && s->size > 0)
9744             s->size += 4;
9745         }
9746       else if (! CONST_STRNEQ (name, ".init")
9747                && s != htab->sgot
9748                && s != htab->sgotplt
9749                && s != htab->sstubs
9750                && s != htab->sdynbss)
9751         {
9752           /* It's not one of our sections, so don't allocate space.  */
9753           continue;
9754         }
9755
9756       if (s->size == 0)
9757         {
9758           s->flags |= SEC_EXCLUDE;
9759           continue;
9760         }
9761
9762       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9763         continue;
9764
9765       /* Allocate memory for the section contents.  */
9766       s->contents = bfd_zalloc (dynobj, s->size);
9767       if (s->contents == NULL)
9768         {
9769           bfd_set_error (bfd_error_no_memory);
9770           return FALSE;
9771         }
9772     }
9773
9774   if (elf_hash_table (info)->dynamic_sections_created)
9775     {
9776       /* Add some entries to the .dynamic section.  We fill in the
9777          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9778          must add the entries now so that we get the correct size for
9779          the .dynamic section.  */
9780
9781       /* SGI object has the equivalence of DT_DEBUG in the
9782          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9783          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9784          may only look at the first one they see.  */
9785       if (!bfd_link_pic (info)
9786           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9787         return FALSE;
9788
9789       if (bfd_link_executable (info)
9790           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9791         return FALSE;
9792
9793       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9794          used by the debugger.  */
9795       if (bfd_link_executable (info)
9796           && !SGI_COMPAT (output_bfd)
9797           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9798         return FALSE;
9799
9800       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9801         info->flags |= DF_TEXTREL;
9802
9803       if ((info->flags & DF_TEXTREL) != 0)
9804         {
9805           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9806             return FALSE;
9807
9808           /* Clear the DF_TEXTREL flag.  It will be set again if we
9809              write out an actual text relocation; we may not, because
9810              at this point we do not know whether e.g. any .eh_frame
9811              absolute relocations have been converted to PC-relative.  */
9812           info->flags &= ~DF_TEXTREL;
9813         }
9814
9815       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9816         return FALSE;
9817
9818       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9819       if (htab->is_vxworks)
9820         {
9821           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9822              use any of the DT_MIPS_* tags.  */
9823           if (sreldyn && sreldyn->size > 0)
9824             {
9825               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9826                 return FALSE;
9827
9828               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9829                 return FALSE;
9830
9831               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9832                 return FALSE;
9833             }
9834         }
9835       else
9836         {
9837           if (sreldyn && sreldyn->size > 0)
9838             {
9839               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9840                 return FALSE;
9841
9842               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9843                 return FALSE;
9844
9845               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9846                 return FALSE;
9847             }
9848
9849           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9850             return FALSE;
9851
9852           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9853             return FALSE;
9854
9855           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9856             return FALSE;
9857
9858           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9859             return FALSE;
9860
9861           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9862             return FALSE;
9863
9864           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9865             return FALSE;
9866
9867           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9868             return FALSE;
9869
9870           if (IRIX_COMPAT (dynobj) == ict_irix5
9871               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9872             return FALSE;
9873
9874           if (IRIX_COMPAT (dynobj) == ict_irix6
9875               && (bfd_get_section_by_name
9876                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9877               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9878             return FALSE;
9879         }
9880       if (htab->splt->size > 0)
9881         {
9882           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9883             return FALSE;
9884
9885           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9886             return FALSE;
9887
9888           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9889             return FALSE;
9890
9891           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9892             return FALSE;
9893         }
9894       if (htab->is_vxworks
9895           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9896         return FALSE;
9897     }
9898
9899   return TRUE;
9900 }
9901 \f
9902 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9903    Adjust its R_ADDEND field so that it is correct for the output file.
9904    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9905    and sections respectively; both use symbol indexes.  */
9906
9907 static void
9908 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9909                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9910                         asection **local_sections, Elf_Internal_Rela *rel)
9911 {
9912   unsigned int r_type, r_symndx;
9913   Elf_Internal_Sym *sym;
9914   asection *sec;
9915
9916   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9917     {
9918       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9919       if (gprel16_reloc_p (r_type)
9920           || r_type == R_MIPS_GPREL32
9921           || literal_reloc_p (r_type))
9922         {
9923           rel->r_addend += _bfd_get_gp_value (input_bfd);
9924           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9925         }
9926
9927       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9928       sym = local_syms + r_symndx;
9929
9930       /* Adjust REL's addend to account for section merging.  */
9931       if (!bfd_link_relocatable (info))
9932         {
9933           sec = local_sections[r_symndx];
9934           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9935         }
9936
9937       /* This would normally be done by the rela_normal code in elflink.c.  */
9938       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9939         rel->r_addend += local_sections[r_symndx]->output_offset;
9940     }
9941 }
9942
9943 /* Handle relocations against symbols from removed linkonce sections,
9944    or sections discarded by a linker script.  We use this wrapper around
9945    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9946    on 64-bit ELF targets.  In this case for any relocation handled, which
9947    always be the first in a triplet, the remaining two have to be processed
9948    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9949    index referred by the first reloc that applies to all the three and the
9950    remaining two never refer to an object symbol.  And it is the final
9951    relocation (the last non-null one) that determines the output field of
9952    the whole relocation so retrieve the corresponding howto structure for
9953    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9954
9955    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9956    and therefore requires to be pasted in a loop.  It also defines a block
9957    and does not protect any of its arguments, hence the extra brackets.  */
9958
9959 static void
9960 mips_reloc_against_discarded_section (bfd *output_bfd,
9961                                       struct bfd_link_info *info,
9962                                       bfd *input_bfd, asection *input_section,
9963                                       Elf_Internal_Rela **rel,
9964                                       const Elf_Internal_Rela **relend,
9965                                       bfd_boolean rel_reloc,
9966                                       reloc_howto_type *howto,
9967                                       bfd_byte *contents)
9968 {
9969   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9970   int count = bed->s->int_rels_per_ext_rel;
9971   unsigned int r_type;
9972   int i;
9973
9974   for (i = count - 1; i > 0; i--)
9975     {
9976       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9977       if (r_type != R_MIPS_NONE)
9978         {
9979           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9980           break;
9981         }
9982     }
9983   do
9984     {
9985        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9986                                         (*rel), count, (*relend),
9987                                         howto, i, contents);
9988     }
9989   while (0);
9990 }
9991
9992 /* Relocate a MIPS ELF section.  */
9993
9994 bfd_boolean
9995 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9996                                 bfd *input_bfd, asection *input_section,
9997                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
9998                                 Elf_Internal_Sym *local_syms,
9999                                 asection **local_sections)
10000 {
10001   Elf_Internal_Rela *rel;
10002   const Elf_Internal_Rela *relend;
10003   bfd_vma addend = 0;
10004   bfd_boolean use_saved_addend_p = FALSE;
10005   const struct elf_backend_data *bed;
10006
10007   bed = get_elf_backend_data (output_bfd);
10008   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10009   for (rel = relocs; rel < relend; ++rel)
10010     {
10011       const char *name;
10012       bfd_vma value = 0;
10013       reloc_howto_type *howto;
10014       bfd_boolean cross_mode_jump_p = FALSE;
10015       /* TRUE if the relocation is a RELA relocation, rather than a
10016          REL relocation.  */
10017       bfd_boolean rela_relocation_p = TRUE;
10018       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10019       const char *msg;
10020       unsigned long r_symndx;
10021       asection *sec;
10022       Elf_Internal_Shdr *symtab_hdr;
10023       struct elf_link_hash_entry *h;
10024       bfd_boolean rel_reloc;
10025
10026       rel_reloc = (NEWABI_P (input_bfd)
10027                    && mips_elf_rel_relocation_p (input_bfd, input_section,
10028                                                  relocs, rel));
10029       /* Find the relocation howto for this relocation.  */
10030       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10031
10032       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10033       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10034       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10035         {
10036           sec = local_sections[r_symndx];
10037           h = NULL;
10038         }
10039       else
10040         {
10041           unsigned long extsymoff;
10042
10043           extsymoff = 0;
10044           if (!elf_bad_symtab (input_bfd))
10045             extsymoff = symtab_hdr->sh_info;
10046           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10047           while (h->root.type == bfd_link_hash_indirect
10048                  || h->root.type == bfd_link_hash_warning)
10049             h = (struct elf_link_hash_entry *) h->root.u.i.link;
10050
10051           sec = NULL;
10052           if (h->root.type == bfd_link_hash_defined
10053               || h->root.type == bfd_link_hash_defweak)
10054             sec = h->root.u.def.section;
10055         }
10056
10057       if (sec != NULL && discarded_section (sec))
10058         {
10059           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10060                                                 input_section, &rel, &relend,
10061                                                 rel_reloc, howto, contents);
10062           continue;
10063         }
10064
10065       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10066         {
10067           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10068              64-bit code, but make sure all their addresses are in the
10069              lowermost or uppermost 32-bit section of the 64-bit address
10070              space.  Thus, when they use an R_MIPS_64 they mean what is
10071              usually meant by R_MIPS_32, with the exception that the
10072              stored value is sign-extended to 64 bits.  */
10073           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10074
10075           /* On big-endian systems, we need to lie about the position
10076              of the reloc.  */
10077           if (bfd_big_endian (input_bfd))
10078             rel->r_offset += 4;
10079         }
10080
10081       if (!use_saved_addend_p)
10082         {
10083           /* If these relocations were originally of the REL variety,
10084              we must pull the addend out of the field that will be
10085              relocated.  Otherwise, we simply use the contents of the
10086              RELA relocation.  */
10087           if (mips_elf_rel_relocation_p (input_bfd, input_section,
10088                                          relocs, rel))
10089             {
10090               rela_relocation_p = FALSE;
10091               addend = mips_elf_read_rel_addend (input_bfd, rel,
10092                                                  howto, contents);
10093               if (hi16_reloc_p (r_type)
10094                   || (got16_reloc_p (r_type)
10095                       && mips_elf_local_relocation_p (input_bfd, rel,
10096                                                       local_sections)))
10097                 {
10098                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10099                                                      contents, &addend))
10100                     {
10101                       if (h)
10102                         name = h->root.root.string;
10103                       else
10104                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10105                                                  local_syms + r_symndx,
10106                                                  sec);
10107                       (*_bfd_error_handler)
10108                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10109                          input_bfd, input_section, name, howto->name,
10110                          rel->r_offset);
10111                     }
10112                 }
10113               else
10114                 addend <<= howto->rightshift;
10115             }
10116           else
10117             addend = rel->r_addend;
10118           mips_elf_adjust_addend (output_bfd, info, input_bfd,
10119                                   local_syms, local_sections, rel);
10120         }
10121
10122       if (bfd_link_relocatable (info))
10123         {
10124           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10125               && bfd_big_endian (input_bfd))
10126             rel->r_offset -= 4;
10127
10128           if (!rela_relocation_p && rel->r_addend)
10129             {
10130               addend += rel->r_addend;
10131               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10132                 addend = mips_elf_high (addend);
10133               else if (r_type == R_MIPS_HIGHER)
10134                 addend = mips_elf_higher (addend);
10135               else if (r_type == R_MIPS_HIGHEST)
10136                 addend = mips_elf_highest (addend);
10137               else
10138                 addend >>= howto->rightshift;
10139
10140               /* We use the source mask, rather than the destination
10141                  mask because the place to which we are writing will be
10142                  source of the addend in the final link.  */
10143               addend &= howto->src_mask;
10144
10145               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10146                 /* See the comment above about using R_MIPS_64 in the 32-bit
10147                    ABI.  Here, we need to update the addend.  It would be
10148                    possible to get away with just using the R_MIPS_32 reloc
10149                    but for endianness.  */
10150                 {
10151                   bfd_vma sign_bits;
10152                   bfd_vma low_bits;
10153                   bfd_vma high_bits;
10154
10155                   if (addend & ((bfd_vma) 1 << 31))
10156 #ifdef BFD64
10157                     sign_bits = ((bfd_vma) 1 << 32) - 1;
10158 #else
10159                     sign_bits = -1;
10160 #endif
10161                   else
10162                     sign_bits = 0;
10163
10164                   /* If we don't know that we have a 64-bit type,
10165                      do two separate stores.  */
10166                   if (bfd_big_endian (input_bfd))
10167                     {
10168                       /* Store the sign-bits (which are most significant)
10169                          first.  */
10170                       low_bits = sign_bits;
10171                       high_bits = addend;
10172                     }
10173                   else
10174                     {
10175                       low_bits = addend;
10176                       high_bits = sign_bits;
10177                     }
10178                   bfd_put_32 (input_bfd, low_bits,
10179                               contents + rel->r_offset);
10180                   bfd_put_32 (input_bfd, high_bits,
10181                               contents + rel->r_offset + 4);
10182                   continue;
10183                 }
10184
10185               if (! mips_elf_perform_relocation (info, howto, rel, addend,
10186                                                  input_bfd, input_section,
10187                                                  contents, FALSE))
10188                 return FALSE;
10189             }
10190
10191           /* Go on to the next relocation.  */
10192           continue;
10193         }
10194
10195       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10196          relocations for the same offset.  In that case we are
10197          supposed to treat the output of each relocation as the addend
10198          for the next.  */
10199       if (rel + 1 < relend
10200           && rel->r_offset == rel[1].r_offset
10201           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10202         use_saved_addend_p = TRUE;
10203       else
10204         use_saved_addend_p = FALSE;
10205
10206       /* Figure out what value we are supposed to relocate.  */
10207       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10208                                              input_section, info, rel,
10209                                              addend, howto, local_syms,
10210                                              local_sections, &value,
10211                                              &name, &cross_mode_jump_p,
10212                                              use_saved_addend_p))
10213         {
10214         case bfd_reloc_continue:
10215           /* There's nothing to do.  */
10216           continue;
10217
10218         case bfd_reloc_undefined:
10219           /* mips_elf_calculate_relocation already called the
10220              undefined_symbol callback.  There's no real point in
10221              trying to perform the relocation at this point, so we
10222              just skip ahead to the next relocation.  */
10223           continue;
10224
10225         case bfd_reloc_notsupported:
10226           msg = _("internal error: unsupported relocation error");
10227           info->callbacks->warning
10228             (info, msg, name, input_bfd, input_section, rel->r_offset);
10229           return FALSE;
10230
10231         case bfd_reloc_overflow:
10232           if (use_saved_addend_p)
10233             /* Ignore overflow until we reach the last relocation for
10234                a given location.  */
10235             ;
10236           else
10237             {
10238               struct mips_elf_link_hash_table *htab;
10239
10240               htab = mips_elf_hash_table (info);
10241               BFD_ASSERT (htab != NULL);
10242               BFD_ASSERT (name != NULL);
10243               if (!htab->small_data_overflow_reported
10244                   && (gprel16_reloc_p (howto->type)
10245                       || literal_reloc_p (howto->type)))
10246                 {
10247                   msg = _("small-data section exceeds 64KB;"
10248                           " lower small-data size limit (see option -G)");
10249
10250                   htab->small_data_overflow_reported = TRUE;
10251                   (*info->callbacks->einfo) ("%P: %s\n", msg);
10252                 }
10253               if (! ((*info->callbacks->reloc_overflow)
10254                      (info, NULL, name, howto->name, (bfd_vma) 0,
10255                       input_bfd, input_section, rel->r_offset)))
10256                 return FALSE;
10257             }
10258           break;
10259
10260         case bfd_reloc_ok:
10261           break;
10262
10263         case bfd_reloc_outofrange:
10264           msg = NULL;
10265           if (jal_reloc_p (howto->type))
10266             msg = _("JALX to a non-word-aligned address");
10267           else if (aligned_pcrel_reloc_p (howto->type))
10268             msg = _("PC-relative load from unaligned address");
10269           if (msg)
10270             {
10271               info->callbacks->einfo
10272                 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10273               break;
10274             }
10275           /* Fall through.  */
10276
10277         default:
10278           abort ();
10279           break;
10280         }
10281
10282       /* If we've got another relocation for the address, keep going
10283          until we reach the last one.  */
10284       if (use_saved_addend_p)
10285         {
10286           addend = value;
10287           continue;
10288         }
10289
10290       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10291         /* See the comment above about using R_MIPS_64 in the 32-bit
10292            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10293            that calculated the right value.  Now, however, we
10294            sign-extend the 32-bit result to 64-bits, and store it as a
10295            64-bit value.  We are especially generous here in that we
10296            go to extreme lengths to support this usage on systems with
10297            only a 32-bit VMA.  */
10298         {
10299           bfd_vma sign_bits;
10300           bfd_vma low_bits;
10301           bfd_vma high_bits;
10302
10303           if (value & ((bfd_vma) 1 << 31))
10304 #ifdef BFD64
10305             sign_bits = ((bfd_vma) 1 << 32) - 1;
10306 #else
10307             sign_bits = -1;
10308 #endif
10309           else
10310             sign_bits = 0;
10311
10312           /* If we don't know that we have a 64-bit type,
10313              do two separate stores.  */
10314           if (bfd_big_endian (input_bfd))
10315             {
10316               /* Undo what we did above.  */
10317               rel->r_offset -= 4;
10318               /* Store the sign-bits (which are most significant)
10319                  first.  */
10320               low_bits = sign_bits;
10321               high_bits = value;
10322             }
10323           else
10324             {
10325               low_bits = value;
10326               high_bits = sign_bits;
10327             }
10328           bfd_put_32 (input_bfd, low_bits,
10329                       contents + rel->r_offset);
10330           bfd_put_32 (input_bfd, high_bits,
10331                       contents + rel->r_offset + 4);
10332           continue;
10333         }
10334
10335       /* Actually perform the relocation.  */
10336       if (! mips_elf_perform_relocation (info, howto, rel, value,
10337                                          input_bfd, input_section,
10338                                          contents, cross_mode_jump_p))
10339         return FALSE;
10340     }
10341
10342   return TRUE;
10343 }
10344 \f
10345 /* A function that iterates over each entry in la25_stubs and fills
10346    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10347
10348 static int
10349 mips_elf_create_la25_stub (void **slot, void *data)
10350 {
10351   struct mips_htab_traverse_info *hti;
10352   struct mips_elf_link_hash_table *htab;
10353   struct mips_elf_la25_stub *stub;
10354   asection *s;
10355   bfd_byte *loc;
10356   bfd_vma offset, target, target_high, target_low;
10357
10358   stub = (struct mips_elf_la25_stub *) *slot;
10359   hti = (struct mips_htab_traverse_info *) data;
10360   htab = mips_elf_hash_table (hti->info);
10361   BFD_ASSERT (htab != NULL);
10362
10363   /* Create the section contents, if we haven't already.  */
10364   s = stub->stub_section;
10365   loc = s->contents;
10366   if (loc == NULL)
10367     {
10368       loc = bfd_malloc (s->size);
10369       if (loc == NULL)
10370         {
10371           hti->error = TRUE;
10372           return FALSE;
10373         }
10374       s->contents = loc;
10375     }
10376
10377   /* Work out where in the section this stub should go.  */
10378   offset = stub->offset;
10379
10380   /* Work out the target address.  */
10381   target = mips_elf_get_la25_target (stub, &s);
10382   target += s->output_section->vma + s->output_offset;
10383
10384   target_high = ((target + 0x8000) >> 16) & 0xffff;
10385   target_low = (target & 0xffff);
10386
10387   if (stub->stub_section != htab->strampoline)
10388     {
10389       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10390          of the section and write the two instructions at the end.  */
10391       memset (loc, 0, offset);
10392       loc += offset;
10393       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10394         {
10395           bfd_put_micromips_32 (hti->output_bfd,
10396                                 LA25_LUI_MICROMIPS (target_high),
10397                                 loc);
10398           bfd_put_micromips_32 (hti->output_bfd,
10399                                 LA25_ADDIU_MICROMIPS (target_low),
10400                                 loc + 4);
10401         }
10402       else
10403         {
10404           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10405           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10406         }
10407     }
10408   else
10409     {
10410       /* This is trampoline.  */
10411       loc += offset;
10412       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10413         {
10414           bfd_put_micromips_32 (hti->output_bfd,
10415                                 LA25_LUI_MICROMIPS (target_high), loc);
10416           bfd_put_micromips_32 (hti->output_bfd,
10417                                 LA25_J_MICROMIPS (target), loc + 4);
10418           bfd_put_micromips_32 (hti->output_bfd,
10419                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10420           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10421         }
10422       else
10423         {
10424           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10425           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10426           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10427           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10428         }
10429     }
10430   return TRUE;
10431 }
10432
10433 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10434    adjust it appropriately now.  */
10435
10436 static void
10437 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10438                                       const char *name, Elf_Internal_Sym *sym)
10439 {
10440   /* The linker script takes care of providing names and values for
10441      these, but we must place them into the right sections.  */
10442   static const char* const text_section_symbols[] = {
10443     "_ftext",
10444     "_etext",
10445     "__dso_displacement",
10446     "__elf_header",
10447     "__program_header_table",
10448     NULL
10449   };
10450
10451   static const char* const data_section_symbols[] = {
10452     "_fdata",
10453     "_edata",
10454     "_end",
10455     "_fbss",
10456     NULL
10457   };
10458
10459   const char* const *p;
10460   int i;
10461
10462   for (i = 0; i < 2; ++i)
10463     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10464          *p;
10465          ++p)
10466       if (strcmp (*p, name) == 0)
10467         {
10468           /* All of these symbols are given type STT_SECTION by the
10469              IRIX6 linker.  */
10470           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10471           sym->st_other = STO_PROTECTED;
10472
10473           /* The IRIX linker puts these symbols in special sections.  */
10474           if (i == 0)
10475             sym->st_shndx = SHN_MIPS_TEXT;
10476           else
10477             sym->st_shndx = SHN_MIPS_DATA;
10478
10479           break;
10480         }
10481 }
10482
10483 /* Finish up dynamic symbol handling.  We set the contents of various
10484    dynamic sections here.  */
10485
10486 bfd_boolean
10487 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10488                                      struct bfd_link_info *info,
10489                                      struct elf_link_hash_entry *h,
10490                                      Elf_Internal_Sym *sym)
10491 {
10492   bfd *dynobj;
10493   asection *sgot;
10494   struct mips_got_info *g, *gg;
10495   const char *name;
10496   int idx;
10497   struct mips_elf_link_hash_table *htab;
10498   struct mips_elf_link_hash_entry *hmips;
10499
10500   htab = mips_elf_hash_table (info);
10501   BFD_ASSERT (htab != NULL);
10502   dynobj = elf_hash_table (info)->dynobj;
10503   hmips = (struct mips_elf_link_hash_entry *) h;
10504
10505   BFD_ASSERT (!htab->is_vxworks);
10506
10507   if (h->plt.plist != NULL
10508       && (h->plt.plist->mips_offset != MINUS_ONE
10509           || h->plt.plist->comp_offset != MINUS_ONE))
10510     {
10511       /* We've decided to create a PLT entry for this symbol.  */
10512       bfd_byte *loc;
10513       bfd_vma header_address, got_address;
10514       bfd_vma got_address_high, got_address_low, load;
10515       bfd_vma got_index;
10516       bfd_vma isa_bit;
10517
10518       got_index = h->plt.plist->gotplt_index;
10519
10520       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10521       BFD_ASSERT (h->dynindx != -1);
10522       BFD_ASSERT (htab->splt != NULL);
10523       BFD_ASSERT (got_index != MINUS_ONE);
10524       BFD_ASSERT (!h->def_regular);
10525
10526       /* Calculate the address of the PLT header.  */
10527       isa_bit = htab->plt_header_is_comp;
10528       header_address = (htab->splt->output_section->vma
10529                         + htab->splt->output_offset + isa_bit);
10530
10531       /* Calculate the address of the .got.plt entry.  */
10532       got_address = (htab->sgotplt->output_section->vma
10533                      + htab->sgotplt->output_offset
10534                      + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10535
10536       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10537       got_address_low = got_address & 0xffff;
10538
10539       /* Initially point the .got.plt entry at the PLT header.  */
10540       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10541       if (ABI_64_P (output_bfd))
10542         bfd_put_64 (output_bfd, header_address, loc);
10543       else
10544         bfd_put_32 (output_bfd, header_address, loc);
10545
10546       /* Now handle the PLT itself.  First the standard entry (the order
10547          does not matter, we just have to pick one).  */
10548       if (h->plt.plist->mips_offset != MINUS_ONE)
10549         {
10550           const bfd_vma *plt_entry;
10551           bfd_vma plt_offset;
10552
10553           plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10554
10555           BFD_ASSERT (plt_offset <= htab->splt->size);
10556
10557           /* Find out where the .plt entry should go.  */
10558           loc = htab->splt->contents + plt_offset;
10559
10560           /* Pick the load opcode.  */
10561           load = MIPS_ELF_LOAD_WORD (output_bfd);
10562
10563           /* Fill in the PLT entry itself.  */
10564
10565           if (MIPSR6_P (output_bfd))
10566             plt_entry = mipsr6_exec_plt_entry;
10567           else
10568             plt_entry = mips_exec_plt_entry;
10569           bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10570           bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10571                       loc + 4);
10572
10573           if (! LOAD_INTERLOCKS_P (output_bfd))
10574             {
10575               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10576               bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10577             }
10578           else
10579             {
10580               bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10581               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10582                           loc + 12);
10583             }
10584         }
10585
10586       /* Now the compressed entry.  They come after any standard ones.  */
10587       if (h->plt.plist->comp_offset != MINUS_ONE)
10588         {
10589           bfd_vma plt_offset;
10590
10591           plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10592                         + h->plt.plist->comp_offset);
10593
10594           BFD_ASSERT (plt_offset <= htab->splt->size);
10595
10596           /* Find out where the .plt entry should go.  */
10597           loc = htab->splt->contents + plt_offset;
10598
10599           /* Fill in the PLT entry itself.  */
10600           if (!MICROMIPS_P (output_bfd))
10601             {
10602               const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10603
10604               bfd_put_16 (output_bfd, plt_entry[0], loc);
10605               bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10606               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10607               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10608               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10609               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10610               bfd_put_32 (output_bfd, got_address, loc + 12);
10611             }
10612           else if (htab->insn32)
10613             {
10614               const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10615
10616               bfd_put_16 (output_bfd, plt_entry[0], loc);
10617               bfd_put_16 (output_bfd, got_address_high, loc + 2);
10618               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10619               bfd_put_16 (output_bfd, got_address_low, loc + 6);
10620               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10621               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10622               bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10623               bfd_put_16 (output_bfd, got_address_low, loc + 14);
10624             }
10625           else
10626             {
10627               const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10628               bfd_signed_vma gotpc_offset;
10629               bfd_vma loc_address;
10630
10631               BFD_ASSERT (got_address % 4 == 0);
10632
10633               loc_address = (htab->splt->output_section->vma
10634                              + htab->splt->output_offset + plt_offset);
10635               gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10636
10637               /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10638               if (gotpc_offset + 0x1000000 >= 0x2000000)
10639                 {
10640                   (*_bfd_error_handler)
10641                     (_("%B: `%A' offset of %ld from `%A' "
10642                        "beyond the range of ADDIUPC"),
10643                      output_bfd,
10644                      htab->sgotplt->output_section,
10645                      htab->splt->output_section,
10646                      (long) gotpc_offset);
10647                   bfd_set_error (bfd_error_no_error);
10648                   return FALSE;
10649                 }
10650               bfd_put_16 (output_bfd,
10651                           plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10652               bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10653               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10654               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10655               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10656               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10657             }
10658         }
10659
10660       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10661       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10662                                           got_index - 2, h->dynindx,
10663                                           R_MIPS_JUMP_SLOT, got_address);
10664
10665       /* We distinguish between PLT entries and lazy-binding stubs by
10666          giving the former an st_other value of STO_MIPS_PLT.  Set the
10667          flag and leave the value if there are any relocations in the
10668          binary where pointer equality matters.  */
10669       sym->st_shndx = SHN_UNDEF;
10670       if (h->pointer_equality_needed)
10671         sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10672       else
10673         {
10674           sym->st_value = 0;
10675           sym->st_other = 0;
10676         }
10677     }
10678
10679   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10680     {
10681       /* We've decided to create a lazy-binding stub.  */
10682       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10683       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10684       bfd_vma stub_size = htab->function_stub_size;
10685       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10686       bfd_vma isa_bit = micromips_p;
10687       bfd_vma stub_big_size;
10688
10689       if (!micromips_p)
10690         stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10691       else if (htab->insn32)
10692         stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10693       else
10694         stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10695
10696       /* This symbol has a stub.  Set it up.  */
10697
10698       BFD_ASSERT (h->dynindx != -1);
10699
10700       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10701
10702       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10703          sign extension at runtime in the stub, resulting in a negative
10704          index value.  */
10705       if (h->dynindx & ~0x7fffffff)
10706         return FALSE;
10707
10708       /* Fill the stub.  */
10709       if (micromips_p)
10710         {
10711           idx = 0;
10712           bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10713                                 stub + idx);
10714           idx += 4;
10715           if (htab->insn32)
10716             {
10717               bfd_put_micromips_32 (output_bfd,
10718                                     STUB_MOVE32_MICROMIPS, stub + idx);
10719               idx += 4;
10720             }
10721           else
10722             {
10723               bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10724               idx += 2;
10725             }
10726           if (stub_size == stub_big_size)
10727             {
10728               long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10729
10730               bfd_put_micromips_32 (output_bfd,
10731                                     STUB_LUI_MICROMIPS (dynindx_hi),
10732                                     stub + idx);
10733               idx += 4;
10734             }
10735           if (htab->insn32)
10736             {
10737               bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10738                                     stub + idx);
10739               idx += 4;
10740             }
10741           else
10742             {
10743               bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10744               idx += 2;
10745             }
10746
10747           /* If a large stub is not required and sign extension is not a
10748              problem, then use legacy code in the stub.  */
10749           if (stub_size == stub_big_size)
10750             bfd_put_micromips_32 (output_bfd,
10751                                   STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10752                                   stub + idx);
10753           else if (h->dynindx & ~0x7fff)
10754             bfd_put_micromips_32 (output_bfd,
10755                                   STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10756                                   stub + idx);
10757           else
10758             bfd_put_micromips_32 (output_bfd,
10759                                   STUB_LI16S_MICROMIPS (output_bfd,
10760                                                         h->dynindx),
10761                                   stub + idx);
10762         }
10763       else
10764         {
10765           idx = 0;
10766           bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10767           idx += 4;
10768           bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10769           idx += 4;
10770           if (stub_size == stub_big_size)
10771             {
10772               bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10773                           stub + idx);
10774               idx += 4;
10775             }
10776           bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10777           idx += 4;
10778
10779           /* If a large stub is not required and sign extension is not a
10780              problem, then use legacy code in the stub.  */
10781           if (stub_size == stub_big_size)
10782             bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10783                         stub + idx);
10784           else if (h->dynindx & ~0x7fff)
10785             bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10786                         stub + idx);
10787           else
10788             bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10789                         stub + idx);
10790         }
10791
10792       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10793       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10794               stub, stub_size);
10795
10796       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10797          only for the referenced symbol.  */
10798       sym->st_shndx = SHN_UNDEF;
10799
10800       /* The run-time linker uses the st_value field of the symbol
10801          to reset the global offset table entry for this external
10802          to its stub address when unlinking a shared object.  */
10803       sym->st_value = (htab->sstubs->output_section->vma
10804                        + htab->sstubs->output_offset
10805                        + h->plt.plist->stub_offset
10806                        + isa_bit);
10807       sym->st_other = other;
10808     }
10809
10810   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10811      refer to the stub, since only the stub uses the standard calling
10812      conventions.  */
10813   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10814     {
10815       BFD_ASSERT (hmips->need_fn_stub);
10816       sym->st_value = (hmips->fn_stub->output_section->vma
10817                        + hmips->fn_stub->output_offset);
10818       sym->st_size = hmips->fn_stub->size;
10819       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10820     }
10821
10822   BFD_ASSERT (h->dynindx != -1
10823               || h->forced_local);
10824
10825   sgot = htab->sgot;
10826   g = htab->got_info;
10827   BFD_ASSERT (g != NULL);
10828
10829   /* Run through the global symbol table, creating GOT entries for all
10830      the symbols that need them.  */
10831   if (hmips->global_got_area != GGA_NONE)
10832     {
10833       bfd_vma offset;
10834       bfd_vma value;
10835
10836       value = sym->st_value;
10837       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10838       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10839     }
10840
10841   if (hmips->global_got_area != GGA_NONE && g->next)
10842     {
10843       struct mips_got_entry e, *p;
10844       bfd_vma entry;
10845       bfd_vma offset;
10846
10847       gg = g;
10848
10849       e.abfd = output_bfd;
10850       e.symndx = -1;
10851       e.d.h = hmips;
10852       e.tls_type = GOT_TLS_NONE;
10853
10854       for (g = g->next; g->next != gg; g = g->next)
10855         {
10856           if (g->got_entries
10857               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10858                                                            &e)))
10859             {
10860               offset = p->gotidx;
10861               BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10862               if (bfd_link_pic (info)
10863                   || (elf_hash_table (info)->dynamic_sections_created
10864                       && p->d.h != NULL
10865                       && p->d.h->root.def_dynamic
10866                       && !p->d.h->root.def_regular))
10867                 {
10868                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10869                      the various compatibility problems, it's easier to mock
10870                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10871                      mips_elf_create_dynamic_relocation to calculate the
10872                      appropriate addend.  */
10873                   Elf_Internal_Rela rel[3];
10874
10875                   memset (rel, 0, sizeof (rel));
10876                   if (ABI_64_P (output_bfd))
10877                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10878                   else
10879                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10880                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10881
10882                   entry = 0;
10883                   if (! (mips_elf_create_dynamic_relocation
10884                          (output_bfd, info, rel,
10885                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10886                     return FALSE;
10887                 }
10888               else
10889                 entry = sym->st_value;
10890               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10891             }
10892         }
10893     }
10894
10895   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10896   name = h->root.root.string;
10897   if (h == elf_hash_table (info)->hdynamic
10898       || h == elf_hash_table (info)->hgot)
10899     sym->st_shndx = SHN_ABS;
10900   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10901            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10902     {
10903       sym->st_shndx = SHN_ABS;
10904       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10905       sym->st_value = 1;
10906     }
10907   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10908     {
10909       sym->st_shndx = SHN_ABS;
10910       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10911       sym->st_value = elf_gp (output_bfd);
10912     }
10913   else if (SGI_COMPAT (output_bfd))
10914     {
10915       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10916           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10917         {
10918           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10919           sym->st_other = STO_PROTECTED;
10920           sym->st_value = 0;
10921           sym->st_shndx = SHN_MIPS_DATA;
10922         }
10923       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10924         {
10925           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10926           sym->st_other = STO_PROTECTED;
10927           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10928           sym->st_shndx = SHN_ABS;
10929         }
10930       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10931         {
10932           if (h->type == STT_FUNC)
10933             sym->st_shndx = SHN_MIPS_TEXT;
10934           else if (h->type == STT_OBJECT)
10935             sym->st_shndx = SHN_MIPS_DATA;
10936         }
10937     }
10938
10939   /* Emit a copy reloc, if needed.  */
10940   if (h->needs_copy)
10941     {
10942       asection *s;
10943       bfd_vma symval;
10944
10945       BFD_ASSERT (h->dynindx != -1);
10946       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10947
10948       s = mips_elf_rel_dyn_section (info, FALSE);
10949       symval = (h->root.u.def.section->output_section->vma
10950                 + h->root.u.def.section->output_offset
10951                 + h->root.u.def.value);
10952       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10953                                           h->dynindx, R_MIPS_COPY, symval);
10954     }
10955
10956   /* Handle the IRIX6-specific symbols.  */
10957   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10958     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10959
10960   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10961      to treat compressed symbols like any other.  */
10962   if (ELF_ST_IS_MIPS16 (sym->st_other))
10963     {
10964       BFD_ASSERT (sym->st_value & 1);
10965       sym->st_other -= STO_MIPS16;
10966     }
10967   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10968     {
10969       BFD_ASSERT (sym->st_value & 1);
10970       sym->st_other -= STO_MICROMIPS;
10971     }
10972
10973   return TRUE;
10974 }
10975
10976 /* Likewise, for VxWorks.  */
10977
10978 bfd_boolean
10979 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10980                                          struct bfd_link_info *info,
10981                                          struct elf_link_hash_entry *h,
10982                                          Elf_Internal_Sym *sym)
10983 {
10984   bfd *dynobj;
10985   asection *sgot;
10986   struct mips_got_info *g;
10987   struct mips_elf_link_hash_table *htab;
10988   struct mips_elf_link_hash_entry *hmips;
10989
10990   htab = mips_elf_hash_table (info);
10991   BFD_ASSERT (htab != NULL);
10992   dynobj = elf_hash_table (info)->dynobj;
10993   hmips = (struct mips_elf_link_hash_entry *) h;
10994
10995   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
10996     {
10997       bfd_byte *loc;
10998       bfd_vma plt_address, got_address, got_offset, branch_offset;
10999       Elf_Internal_Rela rel;
11000       static const bfd_vma *plt_entry;
11001       bfd_vma gotplt_index;
11002       bfd_vma plt_offset;
11003
11004       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11005       gotplt_index = h->plt.plist->gotplt_index;
11006
11007       BFD_ASSERT (h->dynindx != -1);
11008       BFD_ASSERT (htab->splt != NULL);
11009       BFD_ASSERT (gotplt_index != MINUS_ONE);
11010       BFD_ASSERT (plt_offset <= htab->splt->size);
11011
11012       /* Calculate the address of the .plt entry.  */
11013       plt_address = (htab->splt->output_section->vma
11014                      + htab->splt->output_offset
11015                      + plt_offset);
11016
11017       /* Calculate the address of the .got.plt entry.  */
11018       got_address = (htab->sgotplt->output_section->vma
11019                      + htab->sgotplt->output_offset
11020                      + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11021
11022       /* Calculate the offset of the .got.plt entry from
11023          _GLOBAL_OFFSET_TABLE_.  */
11024       got_offset = mips_elf_gotplt_index (info, h);
11025
11026       /* Calculate the offset for the branch at the start of the PLT
11027          entry.  The branch jumps to the beginning of .plt.  */
11028       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11029
11030       /* Fill in the initial value of the .got.plt entry.  */
11031       bfd_put_32 (output_bfd, plt_address,
11032                   (htab->sgotplt->contents
11033                    + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11034
11035       /* Find out where the .plt entry should go.  */
11036       loc = htab->splt->contents + plt_offset;
11037
11038       if (bfd_link_pic (info))
11039         {
11040           plt_entry = mips_vxworks_shared_plt_entry;
11041           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11042           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11043         }
11044       else
11045         {
11046           bfd_vma got_address_high, got_address_low;
11047
11048           plt_entry = mips_vxworks_exec_plt_entry;
11049           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11050           got_address_low = got_address & 0xffff;
11051
11052           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11053           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11054           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11055           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11056           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11057           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11058           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11059           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11060
11061           loc = (htab->srelplt2->contents
11062                  + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11063
11064           /* Emit a relocation for the .got.plt entry.  */
11065           rel.r_offset = got_address;
11066           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11067           rel.r_addend = plt_offset;
11068           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11069
11070           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11071           loc += sizeof (Elf32_External_Rela);
11072           rel.r_offset = plt_address + 8;
11073           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11074           rel.r_addend = got_offset;
11075           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11076
11077           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11078           loc += sizeof (Elf32_External_Rela);
11079           rel.r_offset += 4;
11080           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11081           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11082         }
11083
11084       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11085       loc = (htab->srelplt->contents
11086              + gotplt_index * sizeof (Elf32_External_Rela));
11087       rel.r_offset = got_address;
11088       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11089       rel.r_addend = 0;
11090       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11091
11092       if (!h->def_regular)
11093         sym->st_shndx = SHN_UNDEF;
11094     }
11095
11096   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11097
11098   sgot = htab->sgot;
11099   g = htab->got_info;
11100   BFD_ASSERT (g != NULL);
11101
11102   /* See if this symbol has an entry in the GOT.  */
11103   if (hmips->global_got_area != GGA_NONE)
11104     {
11105       bfd_vma offset;
11106       Elf_Internal_Rela outrel;
11107       bfd_byte *loc;
11108       asection *s;
11109
11110       /* Install the symbol value in the GOT.   */
11111       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11112       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11113
11114       /* Add a dynamic relocation for it.  */
11115       s = mips_elf_rel_dyn_section (info, FALSE);
11116       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11117       outrel.r_offset = (sgot->output_section->vma
11118                          + sgot->output_offset
11119                          + offset);
11120       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11121       outrel.r_addend = 0;
11122       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11123     }
11124
11125   /* Emit a copy reloc, if needed.  */
11126   if (h->needs_copy)
11127     {
11128       Elf_Internal_Rela rel;
11129
11130       BFD_ASSERT (h->dynindx != -1);
11131
11132       rel.r_offset = (h->root.u.def.section->output_section->vma
11133                       + h->root.u.def.section->output_offset
11134                       + h->root.u.def.value);
11135       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11136       rel.r_addend = 0;
11137       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11138                                  htab->srelbss->contents
11139                                  + (htab->srelbss->reloc_count
11140                                     * sizeof (Elf32_External_Rela)));
11141       ++htab->srelbss->reloc_count;
11142     }
11143
11144   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11145   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11146     sym->st_value &= ~1;
11147
11148   return TRUE;
11149 }
11150
11151 /* Write out a plt0 entry to the beginning of .plt.  */
11152
11153 static bfd_boolean
11154 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11155 {
11156   bfd_byte *loc;
11157   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11158   static const bfd_vma *plt_entry;
11159   struct mips_elf_link_hash_table *htab;
11160
11161   htab = mips_elf_hash_table (info);
11162   BFD_ASSERT (htab != NULL);
11163
11164   if (ABI_64_P (output_bfd))
11165     plt_entry = mips_n64_exec_plt0_entry;
11166   else if (ABI_N32_P (output_bfd))
11167     plt_entry = mips_n32_exec_plt0_entry;
11168   else if (!htab->plt_header_is_comp)
11169     plt_entry = mips_o32_exec_plt0_entry;
11170   else if (htab->insn32)
11171     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11172   else
11173     plt_entry = micromips_o32_exec_plt0_entry;
11174
11175   /* Calculate the value of .got.plt.  */
11176   gotplt_value = (htab->sgotplt->output_section->vma
11177                   + htab->sgotplt->output_offset);
11178   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11179   gotplt_value_low = gotplt_value & 0xffff;
11180
11181   /* The PLT sequence is not safe for N64 if .got.plt's address can
11182      not be loaded in two instructions.  */
11183   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11184               || ~(gotplt_value | 0x7fffffff) == 0);
11185
11186   /* Install the PLT header.  */
11187   loc = htab->splt->contents;
11188   if (plt_entry == micromips_o32_exec_plt0_entry)
11189     {
11190       bfd_vma gotpc_offset;
11191       bfd_vma loc_address;
11192       size_t i;
11193
11194       BFD_ASSERT (gotplt_value % 4 == 0);
11195
11196       loc_address = (htab->splt->output_section->vma
11197                      + htab->splt->output_offset);
11198       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11199
11200       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11201       if (gotpc_offset + 0x1000000 >= 0x2000000)
11202         {
11203           (*_bfd_error_handler)
11204             (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11205              output_bfd,
11206              htab->sgotplt->output_section,
11207              htab->splt->output_section,
11208              (long) gotpc_offset);
11209           bfd_set_error (bfd_error_no_error);
11210           return FALSE;
11211         }
11212       bfd_put_16 (output_bfd,
11213                   plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11214       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11215       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11216         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11217     }
11218   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11219     {
11220       size_t i;
11221
11222       bfd_put_16 (output_bfd, plt_entry[0], loc);
11223       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11224       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11225       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11226       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11227       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11228       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11229         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11230     }
11231   else
11232     {
11233       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11234       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11235       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11236       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11237       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11238       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11239       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11240       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11241     }
11242
11243   return TRUE;
11244 }
11245
11246 /* Install the PLT header for a VxWorks executable and finalize the
11247    contents of .rela.plt.unloaded.  */
11248
11249 static void
11250 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11251 {
11252   Elf_Internal_Rela rela;
11253   bfd_byte *loc;
11254   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11255   static const bfd_vma *plt_entry;
11256   struct mips_elf_link_hash_table *htab;
11257
11258   htab = mips_elf_hash_table (info);
11259   BFD_ASSERT (htab != NULL);
11260
11261   plt_entry = mips_vxworks_exec_plt0_entry;
11262
11263   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11264   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11265                + htab->root.hgot->root.u.def.section->output_offset
11266                + htab->root.hgot->root.u.def.value);
11267
11268   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11269   got_value_low = got_value & 0xffff;
11270
11271   /* Calculate the address of the PLT header.  */
11272   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11273
11274   /* Install the PLT header.  */
11275   loc = htab->splt->contents;
11276   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11277   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11278   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11279   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11280   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11281   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11282
11283   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11284   loc = htab->srelplt2->contents;
11285   rela.r_offset = plt_address;
11286   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11287   rela.r_addend = 0;
11288   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11289   loc += sizeof (Elf32_External_Rela);
11290
11291   /* Output the relocation for the following addiu of
11292      %lo(_GLOBAL_OFFSET_TABLE_).  */
11293   rela.r_offset += 4;
11294   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11295   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11296   loc += sizeof (Elf32_External_Rela);
11297
11298   /* Fix up the remaining relocations.  They may have the wrong
11299      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11300      in which symbols were output.  */
11301   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11302     {
11303       Elf_Internal_Rela rel;
11304
11305       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11306       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11307       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11308       loc += sizeof (Elf32_External_Rela);
11309
11310       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11311       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11312       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11313       loc += sizeof (Elf32_External_Rela);
11314
11315       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11316       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11317       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11318       loc += sizeof (Elf32_External_Rela);
11319     }
11320 }
11321
11322 /* Install the PLT header for a VxWorks shared library.  */
11323
11324 static void
11325 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11326 {
11327   unsigned int i;
11328   struct mips_elf_link_hash_table *htab;
11329
11330   htab = mips_elf_hash_table (info);
11331   BFD_ASSERT (htab != NULL);
11332
11333   /* We just need to copy the entry byte-by-byte.  */
11334   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11335     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11336                 htab->splt->contents + i * 4);
11337 }
11338
11339 /* Finish up the dynamic sections.  */
11340
11341 bfd_boolean
11342 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11343                                        struct bfd_link_info *info)
11344 {
11345   bfd *dynobj;
11346   asection *sdyn;
11347   asection *sgot;
11348   struct mips_got_info *gg, *g;
11349   struct mips_elf_link_hash_table *htab;
11350
11351   htab = mips_elf_hash_table (info);
11352   BFD_ASSERT (htab != NULL);
11353
11354   dynobj = elf_hash_table (info)->dynobj;
11355
11356   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11357
11358   sgot = htab->sgot;
11359   gg = htab->got_info;
11360
11361   if (elf_hash_table (info)->dynamic_sections_created)
11362     {
11363       bfd_byte *b;
11364       int dyn_to_skip = 0, dyn_skipped = 0;
11365
11366       BFD_ASSERT (sdyn != NULL);
11367       BFD_ASSERT (gg != NULL);
11368
11369       g = mips_elf_bfd_got (output_bfd, FALSE);
11370       BFD_ASSERT (g != NULL);
11371
11372       for (b = sdyn->contents;
11373            b < sdyn->contents + sdyn->size;
11374            b += MIPS_ELF_DYN_SIZE (dynobj))
11375         {
11376           Elf_Internal_Dyn dyn;
11377           const char *name;
11378           size_t elemsize;
11379           asection *s;
11380           bfd_boolean swap_out_p;
11381
11382           /* Read in the current dynamic entry.  */
11383           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11384
11385           /* Assume that we're going to modify it and write it out.  */
11386           swap_out_p = TRUE;
11387
11388           switch (dyn.d_tag)
11389             {
11390             case DT_RELENT:
11391               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11392               break;
11393
11394             case DT_RELAENT:
11395               BFD_ASSERT (htab->is_vxworks);
11396               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11397               break;
11398
11399             case DT_STRSZ:
11400               /* Rewrite DT_STRSZ.  */
11401               dyn.d_un.d_val =
11402                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11403               break;
11404
11405             case DT_PLTGOT:
11406               s = htab->sgot;
11407               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11408               break;
11409
11410             case DT_MIPS_PLTGOT:
11411               s = htab->sgotplt;
11412               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11413               break;
11414
11415             case DT_MIPS_RLD_VERSION:
11416               dyn.d_un.d_val = 1; /* XXX */
11417               break;
11418
11419             case DT_MIPS_FLAGS:
11420               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11421               break;
11422
11423             case DT_MIPS_TIME_STAMP:
11424               {
11425                 time_t t;
11426                 time (&t);
11427                 dyn.d_un.d_val = t;
11428               }
11429               break;
11430
11431             case DT_MIPS_ICHECKSUM:
11432               /* XXX FIXME: */
11433               swap_out_p = FALSE;
11434               break;
11435
11436             case DT_MIPS_IVERSION:
11437               /* XXX FIXME: */
11438               swap_out_p = FALSE;
11439               break;
11440
11441             case DT_MIPS_BASE_ADDRESS:
11442               s = output_bfd->sections;
11443               BFD_ASSERT (s != NULL);
11444               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11445               break;
11446
11447             case DT_MIPS_LOCAL_GOTNO:
11448               dyn.d_un.d_val = g->local_gotno;
11449               break;
11450
11451             case DT_MIPS_UNREFEXTNO:
11452               /* The index into the dynamic symbol table which is the
11453                  entry of the first external symbol that is not
11454                  referenced within the same object.  */
11455               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11456               break;
11457
11458             case DT_MIPS_GOTSYM:
11459               if (htab->global_gotsym)
11460                 {
11461                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
11462                   break;
11463                 }
11464               /* In case if we don't have global got symbols we default
11465                  to setting DT_MIPS_GOTSYM to the same value as
11466                  DT_MIPS_SYMTABNO, so we just fall through.  */
11467
11468             case DT_MIPS_SYMTABNO:
11469               name = ".dynsym";
11470               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11471               s = bfd_get_linker_section (dynobj, name);
11472
11473               if (s != NULL)
11474                 dyn.d_un.d_val = s->size / elemsize;
11475               else
11476                 dyn.d_un.d_val = 0;
11477               break;
11478
11479             case DT_MIPS_HIPAGENO:
11480               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11481               break;
11482
11483             case DT_MIPS_RLD_MAP:
11484               {
11485                 struct elf_link_hash_entry *h;
11486                 h = mips_elf_hash_table (info)->rld_symbol;
11487                 if (!h)
11488                   {
11489                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11490                     swap_out_p = FALSE;
11491                     break;
11492                   }
11493                 s = h->root.u.def.section;
11494
11495                 /* The MIPS_RLD_MAP tag stores the absolute address of the
11496                    debug pointer.  */
11497                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11498                                   + h->root.u.def.value);
11499               }
11500               break;
11501
11502             case DT_MIPS_RLD_MAP_REL:
11503               {
11504                 struct elf_link_hash_entry *h;
11505                 bfd_vma dt_addr, rld_addr;
11506                 h = mips_elf_hash_table (info)->rld_symbol;
11507                 if (!h)
11508                   {
11509                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11510                     swap_out_p = FALSE;
11511                     break;
11512                   }
11513                 s = h->root.u.def.section;
11514
11515                 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11516                    pointer, relative to the address of the tag.  */
11517                 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11518                            + (b - sdyn->contents));
11519                 rld_addr = (s->output_section->vma + s->output_offset
11520                             + h->root.u.def.value);
11521                 dyn.d_un.d_ptr = rld_addr - dt_addr;
11522               }
11523               break;
11524
11525             case DT_MIPS_OPTIONS:
11526               s = (bfd_get_section_by_name
11527                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11528               dyn.d_un.d_ptr = s->vma;
11529               break;
11530
11531             case DT_RELASZ:
11532               BFD_ASSERT (htab->is_vxworks);
11533               /* The count does not include the JUMP_SLOT relocations.  */
11534               if (htab->srelplt)
11535                 dyn.d_un.d_val -= htab->srelplt->size;
11536               break;
11537
11538             case DT_PLTREL:
11539               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11540               if (htab->is_vxworks)
11541                 dyn.d_un.d_val = DT_RELA;
11542               else
11543                 dyn.d_un.d_val = DT_REL;
11544               break;
11545
11546             case DT_PLTRELSZ:
11547               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11548               dyn.d_un.d_val = htab->srelplt->size;
11549               break;
11550
11551             case DT_JMPREL:
11552               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11553               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11554                                 + htab->srelplt->output_offset);
11555               break;
11556
11557             case DT_TEXTREL:
11558               /* If we didn't need any text relocations after all, delete
11559                  the dynamic tag.  */
11560               if (!(info->flags & DF_TEXTREL))
11561                 {
11562                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11563                   swap_out_p = FALSE;
11564                 }
11565               break;
11566
11567             case DT_FLAGS:
11568               /* If we didn't need any text relocations after all, clear
11569                  DF_TEXTREL from DT_FLAGS.  */
11570               if (!(info->flags & DF_TEXTREL))
11571                 dyn.d_un.d_val &= ~DF_TEXTREL;
11572               else
11573                 swap_out_p = FALSE;
11574               break;
11575
11576             default:
11577               swap_out_p = FALSE;
11578               if (htab->is_vxworks
11579                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11580                 swap_out_p = TRUE;
11581               break;
11582             }
11583
11584           if (swap_out_p || dyn_skipped)
11585             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11586               (dynobj, &dyn, b - dyn_skipped);
11587
11588           if (dyn_to_skip)
11589             {
11590               dyn_skipped += dyn_to_skip;
11591               dyn_to_skip = 0;
11592             }
11593         }
11594
11595       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11596       if (dyn_skipped > 0)
11597         memset (b - dyn_skipped, 0, dyn_skipped);
11598     }
11599
11600   if (sgot != NULL && sgot->size > 0
11601       && !bfd_is_abs_section (sgot->output_section))
11602     {
11603       if (htab->is_vxworks)
11604         {
11605           /* The first entry of the global offset table points to the
11606              ".dynamic" section.  The second is initialized by the
11607              loader and contains the shared library identifier.
11608              The third is also initialized by the loader and points
11609              to the lazy resolution stub.  */
11610           MIPS_ELF_PUT_WORD (output_bfd,
11611                              sdyn->output_offset + sdyn->output_section->vma,
11612                              sgot->contents);
11613           MIPS_ELF_PUT_WORD (output_bfd, 0,
11614                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11615           MIPS_ELF_PUT_WORD (output_bfd, 0,
11616                              sgot->contents
11617                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11618         }
11619       else
11620         {
11621           /* The first entry of the global offset table will be filled at
11622              runtime. The second entry will be used by some runtime loaders.
11623              This isn't the case of IRIX rld.  */
11624           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11625           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11626                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11627         }
11628
11629       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11630          = MIPS_ELF_GOT_SIZE (output_bfd);
11631     }
11632
11633   /* Generate dynamic relocations for the non-primary gots.  */
11634   if (gg != NULL && gg->next)
11635     {
11636       Elf_Internal_Rela rel[3];
11637       bfd_vma addend = 0;
11638
11639       memset (rel, 0, sizeof (rel));
11640       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11641
11642       for (g = gg->next; g->next != gg; g = g->next)
11643         {
11644           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11645             + g->next->tls_gotno;
11646
11647           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11648                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11649           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11650                              sgot->contents
11651                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11652
11653           if (! bfd_link_pic (info))
11654             continue;
11655
11656           for (; got_index < g->local_gotno; got_index++)
11657             {
11658               if (got_index >= g->assigned_low_gotno
11659                   && got_index <= g->assigned_high_gotno)
11660                 continue;
11661
11662               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11663                 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11664               if (!(mips_elf_create_dynamic_relocation
11665                     (output_bfd, info, rel, NULL,
11666                      bfd_abs_section_ptr,
11667                      0, &addend, sgot)))
11668                 return FALSE;
11669               BFD_ASSERT (addend == 0);
11670             }
11671         }
11672     }
11673
11674   /* The generation of dynamic relocations for the non-primary gots
11675      adds more dynamic relocations.  We cannot count them until
11676      here.  */
11677
11678   if (elf_hash_table (info)->dynamic_sections_created)
11679     {
11680       bfd_byte *b;
11681       bfd_boolean swap_out_p;
11682
11683       BFD_ASSERT (sdyn != NULL);
11684
11685       for (b = sdyn->contents;
11686            b < sdyn->contents + sdyn->size;
11687            b += MIPS_ELF_DYN_SIZE (dynobj))
11688         {
11689           Elf_Internal_Dyn dyn;
11690           asection *s;
11691
11692           /* Read in the current dynamic entry.  */
11693           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11694
11695           /* Assume that we're going to modify it and write it out.  */
11696           swap_out_p = TRUE;
11697
11698           switch (dyn.d_tag)
11699             {
11700             case DT_RELSZ:
11701               /* Reduce DT_RELSZ to account for any relocations we
11702                  decided not to make.  This is for the n64 irix rld,
11703                  which doesn't seem to apply any relocations if there
11704                  are trailing null entries.  */
11705               s = mips_elf_rel_dyn_section (info, FALSE);
11706               dyn.d_un.d_val = (s->reloc_count
11707                                 * (ABI_64_P (output_bfd)
11708                                    ? sizeof (Elf64_Mips_External_Rel)
11709                                    : sizeof (Elf32_External_Rel)));
11710               /* Adjust the section size too.  Tools like the prelinker
11711                  can reasonably expect the values to the same.  */
11712               elf_section_data (s->output_section)->this_hdr.sh_size
11713                 = dyn.d_un.d_val;
11714               break;
11715
11716             default:
11717               swap_out_p = FALSE;
11718               break;
11719             }
11720
11721           if (swap_out_p)
11722             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11723               (dynobj, &dyn, b);
11724         }
11725     }
11726
11727   {
11728     asection *s;
11729     Elf32_compact_rel cpt;
11730
11731     if (SGI_COMPAT (output_bfd))
11732       {
11733         /* Write .compact_rel section out.  */
11734         s = bfd_get_linker_section (dynobj, ".compact_rel");
11735         if (s != NULL)
11736           {
11737             cpt.id1 = 1;
11738             cpt.num = s->reloc_count;
11739             cpt.id2 = 2;
11740             cpt.offset = (s->output_section->filepos
11741                           + sizeof (Elf32_External_compact_rel));
11742             cpt.reserved0 = 0;
11743             cpt.reserved1 = 0;
11744             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11745                                             ((Elf32_External_compact_rel *)
11746                                              s->contents));
11747
11748             /* Clean up a dummy stub function entry in .text.  */
11749             if (htab->sstubs != NULL)
11750               {
11751                 file_ptr dummy_offset;
11752
11753                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11754                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11755                 memset (htab->sstubs->contents + dummy_offset, 0,
11756                         htab->function_stub_size);
11757               }
11758           }
11759       }
11760
11761     /* The psABI says that the dynamic relocations must be sorted in
11762        increasing order of r_symndx.  The VxWorks EABI doesn't require
11763        this, and because the code below handles REL rather than RELA
11764        relocations, using it for VxWorks would be outright harmful.  */
11765     if (!htab->is_vxworks)
11766       {
11767         s = mips_elf_rel_dyn_section (info, FALSE);
11768         if (s != NULL
11769             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11770           {
11771             reldyn_sorting_bfd = output_bfd;
11772
11773             if (ABI_64_P (output_bfd))
11774               qsort ((Elf64_External_Rel *) s->contents + 1,
11775                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11776                      sort_dynamic_relocs_64);
11777             else
11778               qsort ((Elf32_External_Rel *) s->contents + 1,
11779                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
11780                      sort_dynamic_relocs);
11781           }
11782       }
11783   }
11784
11785   if (htab->splt && htab->splt->size > 0)
11786     {
11787       if (htab->is_vxworks)
11788         {
11789           if (bfd_link_pic (info))
11790             mips_vxworks_finish_shared_plt (output_bfd, info);
11791           else
11792             mips_vxworks_finish_exec_plt (output_bfd, info);
11793         }
11794       else
11795         {
11796           BFD_ASSERT (!bfd_link_pic (info));
11797           if (!mips_finish_exec_plt (output_bfd, info))
11798             return FALSE;
11799         }
11800     }
11801   return TRUE;
11802 }
11803
11804
11805 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11806
11807 static void
11808 mips_set_isa_flags (bfd *abfd)
11809 {
11810   flagword val;
11811
11812   switch (bfd_get_mach (abfd))
11813     {
11814     default:
11815     case bfd_mach_mips3000:
11816       val = E_MIPS_ARCH_1;
11817       break;
11818
11819     case bfd_mach_mips3900:
11820       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11821       break;
11822
11823     case bfd_mach_mips6000:
11824       val = E_MIPS_ARCH_2;
11825       break;
11826
11827     case bfd_mach_mips4000:
11828     case bfd_mach_mips4300:
11829     case bfd_mach_mips4400:
11830     case bfd_mach_mips4600:
11831       val = E_MIPS_ARCH_3;
11832       break;
11833
11834     case bfd_mach_mips4010:
11835       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11836       break;
11837
11838     case bfd_mach_mips4100:
11839       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11840       break;
11841
11842     case bfd_mach_mips4111:
11843       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11844       break;
11845
11846     case bfd_mach_mips4120:
11847       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11848       break;
11849
11850     case bfd_mach_mips4650:
11851       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11852       break;
11853
11854     case bfd_mach_mips5400:
11855       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11856       break;
11857
11858     case bfd_mach_mips5500:
11859       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11860       break;
11861
11862     case bfd_mach_mips5900:
11863       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11864       break;
11865
11866     case bfd_mach_mips9000:
11867       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11868       break;
11869
11870     case bfd_mach_mips5000:
11871     case bfd_mach_mips7000:
11872     case bfd_mach_mips8000:
11873     case bfd_mach_mips10000:
11874     case bfd_mach_mips12000:
11875     case bfd_mach_mips14000:
11876     case bfd_mach_mips16000:
11877       val = E_MIPS_ARCH_4;
11878       break;
11879
11880     case bfd_mach_mips5:
11881       val = E_MIPS_ARCH_5;
11882       break;
11883
11884     case bfd_mach_mips_loongson_2e:
11885       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11886       break;
11887
11888     case bfd_mach_mips_loongson_2f:
11889       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11890       break;
11891
11892     case bfd_mach_mips_sb1:
11893       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11894       break;
11895
11896     case bfd_mach_mips_loongson_3a:
11897       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11898       break;
11899
11900     case bfd_mach_mips_octeon:
11901     case bfd_mach_mips_octeonp:
11902       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11903       break;
11904
11905     case bfd_mach_mips_octeon3:
11906       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11907       break;
11908
11909     case bfd_mach_mips_xlr:
11910       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11911       break;
11912
11913     case bfd_mach_mips_octeon2:
11914       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11915       break;
11916
11917     case bfd_mach_mipsisa32:
11918       val = E_MIPS_ARCH_32;
11919       break;
11920
11921     case bfd_mach_mipsisa64:
11922       val = E_MIPS_ARCH_64;
11923       break;
11924
11925     case bfd_mach_mipsisa32r2:
11926     case bfd_mach_mipsisa32r3:
11927     case bfd_mach_mipsisa32r5:
11928       val = E_MIPS_ARCH_32R2;
11929       break;
11930
11931     case bfd_mach_mipsisa64r2:
11932     case bfd_mach_mipsisa64r3:
11933     case bfd_mach_mipsisa64r5:
11934       val = E_MIPS_ARCH_64R2;
11935       break;
11936
11937     case bfd_mach_mipsisa32r6:
11938       val = E_MIPS_ARCH_32R6;
11939       break;
11940
11941     case bfd_mach_mipsisa64r6:
11942       val = E_MIPS_ARCH_64R6;
11943       break;
11944     }
11945   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11946   elf_elfheader (abfd)->e_flags |= val;
11947
11948 }
11949
11950
11951 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11952    Don't do so for code sections.  We want to keep ordering of HI16/LO16
11953    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
11954    relocs to be sorted.  */
11955
11956 bfd_boolean
11957 _bfd_mips_elf_sort_relocs_p (asection *sec)
11958 {
11959   return (sec->flags & SEC_CODE) == 0;
11960 }
11961
11962
11963 /* The final processing done just before writing out a MIPS ELF object
11964    file.  This gets the MIPS architecture right based on the machine
11965    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11966
11967 void
11968 _bfd_mips_elf_final_write_processing (bfd *abfd,
11969                                       bfd_boolean linker ATTRIBUTE_UNUSED)
11970 {
11971   unsigned int i;
11972   Elf_Internal_Shdr **hdrpp;
11973   const char *name;
11974   asection *sec;
11975
11976   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11977      is nonzero.  This is for compatibility with old objects, which used
11978      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11979   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11980     mips_set_isa_flags (abfd);
11981
11982   /* Set the sh_info field for .gptab sections and other appropriate
11983      info for each special section.  */
11984   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11985        i < elf_numsections (abfd);
11986        i++, hdrpp++)
11987     {
11988       switch ((*hdrpp)->sh_type)
11989         {
11990         case SHT_MIPS_MSYM:
11991         case SHT_MIPS_LIBLIST:
11992           sec = bfd_get_section_by_name (abfd, ".dynstr");
11993           if (sec != NULL)
11994             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11995           break;
11996
11997         case SHT_MIPS_GPTAB:
11998           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11999           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12000           BFD_ASSERT (name != NULL
12001                       && CONST_STRNEQ (name, ".gptab."));
12002           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12003           BFD_ASSERT (sec != NULL);
12004           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12005           break;
12006
12007         case SHT_MIPS_CONTENT:
12008           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12009           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12010           BFD_ASSERT (name != NULL
12011                       && CONST_STRNEQ (name, ".MIPS.content"));
12012           sec = bfd_get_section_by_name (abfd,
12013                                          name + sizeof ".MIPS.content" - 1);
12014           BFD_ASSERT (sec != NULL);
12015           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12016           break;
12017
12018         case SHT_MIPS_SYMBOL_LIB:
12019           sec = bfd_get_section_by_name (abfd, ".dynsym");
12020           if (sec != NULL)
12021             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12022           sec = bfd_get_section_by_name (abfd, ".liblist");
12023           if (sec != NULL)
12024             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12025           break;
12026
12027         case SHT_MIPS_EVENTS:
12028           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12029           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12030           BFD_ASSERT (name != NULL);
12031           if (CONST_STRNEQ (name, ".MIPS.events"))
12032             sec = bfd_get_section_by_name (abfd,
12033                                            name + sizeof ".MIPS.events" - 1);
12034           else
12035             {
12036               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12037               sec = bfd_get_section_by_name (abfd,
12038                                              (name
12039                                               + sizeof ".MIPS.post_rel" - 1));
12040             }
12041           BFD_ASSERT (sec != NULL);
12042           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12043           break;
12044
12045         }
12046     }
12047 }
12048 \f
12049 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12050    segments.  */
12051
12052 int
12053 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12054                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
12055 {
12056   asection *s;
12057   int ret = 0;
12058
12059   /* See if we need a PT_MIPS_REGINFO segment.  */
12060   s = bfd_get_section_by_name (abfd, ".reginfo");
12061   if (s && (s->flags & SEC_LOAD))
12062     ++ret;
12063
12064   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12065   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12066     ++ret;
12067
12068   /* See if we need a PT_MIPS_OPTIONS segment.  */
12069   if (IRIX_COMPAT (abfd) == ict_irix6
12070       && bfd_get_section_by_name (abfd,
12071                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12072     ++ret;
12073
12074   /* See if we need a PT_MIPS_RTPROC segment.  */
12075   if (IRIX_COMPAT (abfd) == ict_irix5
12076       && bfd_get_section_by_name (abfd, ".dynamic")
12077       && bfd_get_section_by_name (abfd, ".mdebug"))
12078     ++ret;
12079
12080   /* Allocate a PT_NULL header in dynamic objects.  See
12081      _bfd_mips_elf_modify_segment_map for details.  */
12082   if (!SGI_COMPAT (abfd)
12083       && bfd_get_section_by_name (abfd, ".dynamic"))
12084     ++ret;
12085
12086   return ret;
12087 }
12088
12089 /* Modify the segment map for an IRIX5 executable.  */
12090
12091 bfd_boolean
12092 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12093                                   struct bfd_link_info *info)
12094 {
12095   asection *s;
12096   struct elf_segment_map *m, **pm;
12097   bfd_size_type amt;
12098
12099   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12100      segment.  */
12101   s = bfd_get_section_by_name (abfd, ".reginfo");
12102   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12103     {
12104       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12105         if (m->p_type == PT_MIPS_REGINFO)
12106           break;
12107       if (m == NULL)
12108         {
12109           amt = sizeof *m;
12110           m = bfd_zalloc (abfd, amt);
12111           if (m == NULL)
12112             return FALSE;
12113
12114           m->p_type = PT_MIPS_REGINFO;
12115           m->count = 1;
12116           m->sections[0] = s;
12117
12118           /* We want to put it after the PHDR and INTERP segments.  */
12119           pm = &elf_seg_map (abfd);
12120           while (*pm != NULL
12121                  && ((*pm)->p_type == PT_PHDR
12122                      || (*pm)->p_type == PT_INTERP))
12123             pm = &(*pm)->next;
12124
12125           m->next = *pm;
12126           *pm = m;
12127         }
12128     }
12129
12130   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12131      segment.  */
12132   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12133   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12134     {
12135       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12136         if (m->p_type == PT_MIPS_ABIFLAGS)
12137           break;
12138       if (m == NULL)
12139         {
12140           amt = sizeof *m;
12141           m = bfd_zalloc (abfd, amt);
12142           if (m == NULL)
12143             return FALSE;
12144
12145           m->p_type = PT_MIPS_ABIFLAGS;
12146           m->count = 1;
12147           m->sections[0] = s;
12148
12149           /* We want to put it after the PHDR and INTERP segments.  */
12150           pm = &elf_seg_map (abfd);
12151           while (*pm != NULL
12152                  && ((*pm)->p_type == PT_PHDR
12153                      || (*pm)->p_type == PT_INTERP))
12154             pm = &(*pm)->next;
12155
12156           m->next = *pm;
12157           *pm = m;
12158         }
12159     }
12160
12161   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12162      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12163      PT_MIPS_OPTIONS segment immediately following the program header
12164      table.  */
12165   if (NEWABI_P (abfd)
12166       /* On non-IRIX6 new abi, we'll have already created a segment
12167          for this section, so don't create another.  I'm not sure this
12168          is not also the case for IRIX 6, but I can't test it right
12169          now.  */
12170       && IRIX_COMPAT (abfd) == ict_irix6)
12171     {
12172       for (s = abfd->sections; s; s = s->next)
12173         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12174           break;
12175
12176       if (s)
12177         {
12178           struct elf_segment_map *options_segment;
12179
12180           pm = &elf_seg_map (abfd);
12181           while (*pm != NULL
12182                  && ((*pm)->p_type == PT_PHDR
12183                      || (*pm)->p_type == PT_INTERP))
12184             pm = &(*pm)->next;
12185
12186           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12187             {
12188               amt = sizeof (struct elf_segment_map);
12189               options_segment = bfd_zalloc (abfd, amt);
12190               options_segment->next = *pm;
12191               options_segment->p_type = PT_MIPS_OPTIONS;
12192               options_segment->p_flags = PF_R;
12193               options_segment->p_flags_valid = TRUE;
12194               options_segment->count = 1;
12195               options_segment->sections[0] = s;
12196               *pm = options_segment;
12197             }
12198         }
12199     }
12200   else
12201     {
12202       if (IRIX_COMPAT (abfd) == ict_irix5)
12203         {
12204           /* If there are .dynamic and .mdebug sections, we make a room
12205              for the RTPROC header.  FIXME: Rewrite without section names.  */
12206           if (bfd_get_section_by_name (abfd, ".interp") == NULL
12207               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12208               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12209             {
12210               for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12211                 if (m->p_type == PT_MIPS_RTPROC)
12212                   break;
12213               if (m == NULL)
12214                 {
12215                   amt = sizeof *m;
12216                   m = bfd_zalloc (abfd, amt);
12217                   if (m == NULL)
12218                     return FALSE;
12219
12220                   m->p_type = PT_MIPS_RTPROC;
12221
12222                   s = bfd_get_section_by_name (abfd, ".rtproc");
12223                   if (s == NULL)
12224                     {
12225                       m->count = 0;
12226                       m->p_flags = 0;
12227                       m->p_flags_valid = 1;
12228                     }
12229                   else
12230                     {
12231                       m->count = 1;
12232                       m->sections[0] = s;
12233                     }
12234
12235                   /* We want to put it after the DYNAMIC segment.  */
12236                   pm = &elf_seg_map (abfd);
12237                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12238                     pm = &(*pm)->next;
12239                   if (*pm != NULL)
12240                     pm = &(*pm)->next;
12241
12242                   m->next = *pm;
12243                   *pm = m;
12244                 }
12245             }
12246         }
12247       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12248          .dynstr, .dynsym, and .hash sections, and everything in
12249          between.  */
12250       for (pm = &elf_seg_map (abfd); *pm != NULL;
12251            pm = &(*pm)->next)
12252         if ((*pm)->p_type == PT_DYNAMIC)
12253           break;
12254       m = *pm;
12255       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12256          glibc's dynamic linker has traditionally derived the number of
12257          tags from the p_filesz field, and sometimes allocates stack
12258          arrays of that size.  An overly-big PT_DYNAMIC segment can
12259          be actively harmful in such cases.  Making PT_DYNAMIC contain
12260          other sections can also make life hard for the prelinker,
12261          which might move one of the other sections to a different
12262          PT_LOAD segment.  */
12263       if (SGI_COMPAT (abfd)
12264           && m != NULL
12265           && m->count == 1
12266           && strcmp (m->sections[0]->name, ".dynamic") == 0)
12267         {
12268           static const char *sec_names[] =
12269           {
12270             ".dynamic", ".dynstr", ".dynsym", ".hash"
12271           };
12272           bfd_vma low, high;
12273           unsigned int i, c;
12274           struct elf_segment_map *n;
12275
12276           low = ~(bfd_vma) 0;
12277           high = 0;
12278           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12279             {
12280               s = bfd_get_section_by_name (abfd, sec_names[i]);
12281               if (s != NULL && (s->flags & SEC_LOAD) != 0)
12282                 {
12283                   bfd_size_type sz;
12284
12285                   if (low > s->vma)
12286                     low = s->vma;
12287                   sz = s->size;
12288                   if (high < s->vma + sz)
12289                     high = s->vma + sz;
12290                 }
12291             }
12292
12293           c = 0;
12294           for (s = abfd->sections; s != NULL; s = s->next)
12295             if ((s->flags & SEC_LOAD) != 0
12296                 && s->vma >= low
12297                 && s->vma + s->size <= high)
12298               ++c;
12299
12300           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12301           n = bfd_zalloc (abfd, amt);
12302           if (n == NULL)
12303             return FALSE;
12304           *n = *m;
12305           n->count = c;
12306
12307           i = 0;
12308           for (s = abfd->sections; s != NULL; s = s->next)
12309             {
12310               if ((s->flags & SEC_LOAD) != 0
12311                   && s->vma >= low
12312                   && s->vma + s->size <= high)
12313                 {
12314                   n->sections[i] = s;
12315                   ++i;
12316                 }
12317             }
12318
12319           *pm = n;
12320         }
12321     }
12322
12323   /* Allocate a spare program header in dynamic objects so that tools
12324      like the prelinker can add an extra PT_LOAD entry.
12325
12326      If the prelinker needs to make room for a new PT_LOAD entry, its
12327      standard procedure is to move the first (read-only) sections into
12328      the new (writable) segment.  However, the MIPS ABI requires
12329      .dynamic to be in a read-only segment, and the section will often
12330      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12331
12332      Although the prelinker could in principle move .dynamic to a
12333      writable segment, it seems better to allocate a spare program
12334      header instead, and avoid the need to move any sections.
12335      There is a long tradition of allocating spare dynamic tags,
12336      so allocating a spare program header seems like a natural
12337      extension.
12338
12339      If INFO is NULL, we may be copying an already prelinked binary
12340      with objcopy or strip, so do not add this header.  */
12341   if (info != NULL
12342       && !SGI_COMPAT (abfd)
12343       && bfd_get_section_by_name (abfd, ".dynamic"))
12344     {
12345       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12346         if ((*pm)->p_type == PT_NULL)
12347           break;
12348       if (*pm == NULL)
12349         {
12350           m = bfd_zalloc (abfd, sizeof (*m));
12351           if (m == NULL)
12352             return FALSE;
12353
12354           m->p_type = PT_NULL;
12355           *pm = m;
12356         }
12357     }
12358
12359   return TRUE;
12360 }
12361 \f
12362 /* Return the section that should be marked against GC for a given
12363    relocation.  */
12364
12365 asection *
12366 _bfd_mips_elf_gc_mark_hook (asection *sec,
12367                             struct bfd_link_info *info,
12368                             Elf_Internal_Rela *rel,
12369                             struct elf_link_hash_entry *h,
12370                             Elf_Internal_Sym *sym)
12371 {
12372   /* ??? Do mips16 stub sections need to be handled special?  */
12373
12374   if (h != NULL)
12375     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12376       {
12377       case R_MIPS_GNU_VTINHERIT:
12378       case R_MIPS_GNU_VTENTRY:
12379         return NULL;
12380       }
12381
12382   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12383 }
12384
12385 /* Update the got entry reference counts for the section being removed.  */
12386
12387 bfd_boolean
12388 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12389                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
12390                              asection *sec ATTRIBUTE_UNUSED,
12391                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12392 {
12393 #if 0
12394   Elf_Internal_Shdr *symtab_hdr;
12395   struct elf_link_hash_entry **sym_hashes;
12396   bfd_signed_vma *local_got_refcounts;
12397   const Elf_Internal_Rela *rel, *relend;
12398   unsigned long r_symndx;
12399   struct elf_link_hash_entry *h;
12400
12401   if (bfd_link_relocatable (info))
12402     return TRUE;
12403
12404   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12405   sym_hashes = elf_sym_hashes (abfd);
12406   local_got_refcounts = elf_local_got_refcounts (abfd);
12407
12408   relend = relocs + sec->reloc_count;
12409   for (rel = relocs; rel < relend; rel++)
12410     switch (ELF_R_TYPE (abfd, rel->r_info))
12411       {
12412       case R_MIPS16_GOT16:
12413       case R_MIPS16_CALL16:
12414       case R_MIPS_GOT16:
12415       case R_MIPS_CALL16:
12416       case R_MIPS_CALL_HI16:
12417       case R_MIPS_CALL_LO16:
12418       case R_MIPS_GOT_HI16:
12419       case R_MIPS_GOT_LO16:
12420       case R_MIPS_GOT_DISP:
12421       case R_MIPS_GOT_PAGE:
12422       case R_MIPS_GOT_OFST:
12423       case R_MICROMIPS_GOT16:
12424       case R_MICROMIPS_CALL16:
12425       case R_MICROMIPS_CALL_HI16:
12426       case R_MICROMIPS_CALL_LO16:
12427       case R_MICROMIPS_GOT_HI16:
12428       case R_MICROMIPS_GOT_LO16:
12429       case R_MICROMIPS_GOT_DISP:
12430       case R_MICROMIPS_GOT_PAGE:
12431       case R_MICROMIPS_GOT_OFST:
12432         /* ??? It would seem that the existing MIPS code does no sort
12433            of reference counting or whatnot on its GOT and PLT entries,
12434            so it is not possible to garbage collect them at this time.  */
12435         break;
12436
12437       default:
12438         break;
12439       }
12440 #endif
12441
12442   return TRUE;
12443 }
12444
12445 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12446
12447 bfd_boolean
12448 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12449                                       elf_gc_mark_hook_fn gc_mark_hook)
12450 {
12451   bfd *sub;
12452
12453   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12454
12455   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12456     {
12457       asection *o;
12458
12459       if (! is_mips_elf (sub))
12460         continue;
12461
12462       for (o = sub->sections; o != NULL; o = o->next)
12463         if (!o->gc_mark
12464             && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12465                  (bfd_get_section_name (sub, o)))
12466           {
12467             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12468               return FALSE;
12469           }
12470     }
12471
12472   return TRUE;
12473 }
12474 \f
12475 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12476    hiding the old indirect symbol.  Process additional relocation
12477    information.  Also called for weakdefs, in which case we just let
12478    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12479
12480 void
12481 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12482                                     struct elf_link_hash_entry *dir,
12483                                     struct elf_link_hash_entry *ind)
12484 {
12485   struct mips_elf_link_hash_entry *dirmips, *indmips;
12486
12487   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12488
12489   dirmips = (struct mips_elf_link_hash_entry *) dir;
12490   indmips = (struct mips_elf_link_hash_entry *) ind;
12491   /* Any absolute non-dynamic relocations against an indirect or weak
12492      definition will be against the target symbol.  */
12493   if (indmips->has_static_relocs)
12494     dirmips->has_static_relocs = TRUE;
12495
12496   if (ind->root.type != bfd_link_hash_indirect)
12497     return;
12498
12499   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12500   if (indmips->readonly_reloc)
12501     dirmips->readonly_reloc = TRUE;
12502   if (indmips->no_fn_stub)
12503     dirmips->no_fn_stub = TRUE;
12504   if (indmips->fn_stub)
12505     {
12506       dirmips->fn_stub = indmips->fn_stub;
12507       indmips->fn_stub = NULL;
12508     }
12509   if (indmips->need_fn_stub)
12510     {
12511       dirmips->need_fn_stub = TRUE;
12512       indmips->need_fn_stub = FALSE;
12513     }
12514   if (indmips->call_stub)
12515     {
12516       dirmips->call_stub = indmips->call_stub;
12517       indmips->call_stub = NULL;
12518     }
12519   if (indmips->call_fp_stub)
12520     {
12521       dirmips->call_fp_stub = indmips->call_fp_stub;
12522       indmips->call_fp_stub = NULL;
12523     }
12524   if (indmips->global_got_area < dirmips->global_got_area)
12525     dirmips->global_got_area = indmips->global_got_area;
12526   if (indmips->global_got_area < GGA_NONE)
12527     indmips->global_got_area = GGA_NONE;
12528   if (indmips->has_nonpic_branches)
12529     dirmips->has_nonpic_branches = TRUE;
12530 }
12531 \f
12532 #define PDR_SIZE 32
12533
12534 bfd_boolean
12535 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12536                             struct bfd_link_info *info)
12537 {
12538   asection *o;
12539   bfd_boolean ret = FALSE;
12540   unsigned char *tdata;
12541   size_t i, skip;
12542
12543   o = bfd_get_section_by_name (abfd, ".pdr");
12544   if (! o)
12545     return FALSE;
12546   if (o->size == 0)
12547     return FALSE;
12548   if (o->size % PDR_SIZE != 0)
12549     return FALSE;
12550   if (o->output_section != NULL
12551       && bfd_is_abs_section (o->output_section))
12552     return FALSE;
12553
12554   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12555   if (! tdata)
12556     return FALSE;
12557
12558   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12559                                             info->keep_memory);
12560   if (!cookie->rels)
12561     {
12562       free (tdata);
12563       return FALSE;
12564     }
12565
12566   cookie->rel = cookie->rels;
12567   cookie->relend = cookie->rels + o->reloc_count;
12568
12569   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12570     {
12571       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12572         {
12573           tdata[i] = 1;
12574           skip ++;
12575         }
12576     }
12577
12578   if (skip != 0)
12579     {
12580       mips_elf_section_data (o)->u.tdata = tdata;
12581       if (o->rawsize == 0)
12582         o->rawsize = o->size;
12583       o->size -= skip * PDR_SIZE;
12584       ret = TRUE;
12585     }
12586   else
12587     free (tdata);
12588
12589   if (! info->keep_memory)
12590     free (cookie->rels);
12591
12592   return ret;
12593 }
12594
12595 bfd_boolean
12596 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12597 {
12598   if (strcmp (sec->name, ".pdr") == 0)
12599     return TRUE;
12600   return FALSE;
12601 }
12602
12603 bfd_boolean
12604 _bfd_mips_elf_write_section (bfd *output_bfd,
12605                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12606                              asection *sec, bfd_byte *contents)
12607 {
12608   bfd_byte *to, *from, *end;
12609   int i;
12610
12611   if (strcmp (sec->name, ".pdr") != 0)
12612     return FALSE;
12613
12614   if (mips_elf_section_data (sec)->u.tdata == NULL)
12615     return FALSE;
12616
12617   to = contents;
12618   end = contents + sec->size;
12619   for (from = contents, i = 0;
12620        from < end;
12621        from += PDR_SIZE, i++)
12622     {
12623       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12624         continue;
12625       if (to != from)
12626         memcpy (to, from, PDR_SIZE);
12627       to += PDR_SIZE;
12628     }
12629   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12630                             sec->output_offset, sec->size);
12631   return TRUE;
12632 }
12633 \f
12634 /* microMIPS code retains local labels for linker relaxation.  Omit them
12635    from output by default for clarity.  */
12636
12637 bfd_boolean
12638 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12639 {
12640   return _bfd_elf_is_local_label_name (abfd, sym->name);
12641 }
12642
12643 /* MIPS ELF uses a special find_nearest_line routine in order the
12644    handle the ECOFF debugging information.  */
12645
12646 struct mips_elf_find_line
12647 {
12648   struct ecoff_debug_info d;
12649   struct ecoff_find_line i;
12650 };
12651
12652 bfd_boolean
12653 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12654                                  asection *section, bfd_vma offset,
12655                                  const char **filename_ptr,
12656                                  const char **functionname_ptr,
12657                                  unsigned int *line_ptr,
12658                                  unsigned int *discriminator_ptr)
12659 {
12660   asection *msec;
12661
12662   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12663                                      filename_ptr, functionname_ptr,
12664                                      line_ptr, discriminator_ptr,
12665                                      dwarf_debug_sections,
12666                                      ABI_64_P (abfd) ? 8 : 0,
12667                                      &elf_tdata (abfd)->dwarf2_find_line_info))
12668     return TRUE;
12669
12670   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12671                                      filename_ptr, functionname_ptr,
12672                                      line_ptr))
12673     return TRUE;
12674
12675   msec = bfd_get_section_by_name (abfd, ".mdebug");
12676   if (msec != NULL)
12677     {
12678       flagword origflags;
12679       struct mips_elf_find_line *fi;
12680       const struct ecoff_debug_swap * const swap =
12681         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12682
12683       /* If we are called during a link, mips_elf_final_link may have
12684          cleared the SEC_HAS_CONTENTS field.  We force it back on here
12685          if appropriate (which it normally will be).  */
12686       origflags = msec->flags;
12687       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12688         msec->flags |= SEC_HAS_CONTENTS;
12689
12690       fi = mips_elf_tdata (abfd)->find_line_info;
12691       if (fi == NULL)
12692         {
12693           bfd_size_type external_fdr_size;
12694           char *fraw_src;
12695           char *fraw_end;
12696           struct fdr *fdr_ptr;
12697           bfd_size_type amt = sizeof (struct mips_elf_find_line);
12698
12699           fi = bfd_zalloc (abfd, amt);
12700           if (fi == NULL)
12701             {
12702               msec->flags = origflags;
12703               return FALSE;
12704             }
12705
12706           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12707             {
12708               msec->flags = origflags;
12709               return FALSE;
12710             }
12711
12712           /* Swap in the FDR information.  */
12713           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12714           fi->d.fdr = bfd_alloc (abfd, amt);
12715           if (fi->d.fdr == NULL)
12716             {
12717               msec->flags = origflags;
12718               return FALSE;
12719             }
12720           external_fdr_size = swap->external_fdr_size;
12721           fdr_ptr = fi->d.fdr;
12722           fraw_src = (char *) fi->d.external_fdr;
12723           fraw_end = (fraw_src
12724                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
12725           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12726             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12727
12728           mips_elf_tdata (abfd)->find_line_info = fi;
12729
12730           /* Note that we don't bother to ever free this information.
12731              find_nearest_line is either called all the time, as in
12732              objdump -l, so the information should be saved, or it is
12733              rarely called, as in ld error messages, so the memory
12734              wasted is unimportant.  Still, it would probably be a
12735              good idea for free_cached_info to throw it away.  */
12736         }
12737
12738       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12739                                   &fi->i, filename_ptr, functionname_ptr,
12740                                   line_ptr))
12741         {
12742           msec->flags = origflags;
12743           return TRUE;
12744         }
12745
12746       msec->flags = origflags;
12747     }
12748
12749   /* Fall back on the generic ELF find_nearest_line routine.  */
12750
12751   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12752                                      filename_ptr, functionname_ptr,
12753                                      line_ptr, discriminator_ptr);
12754 }
12755
12756 bfd_boolean
12757 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12758                                  const char **filename_ptr,
12759                                  const char **functionname_ptr,
12760                                  unsigned int *line_ptr)
12761 {
12762   bfd_boolean found;
12763   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12764                                          functionname_ptr, line_ptr,
12765                                          & elf_tdata (abfd)->dwarf2_find_line_info);
12766   return found;
12767 }
12768
12769 \f
12770 /* When are writing out the .options or .MIPS.options section,
12771    remember the bytes we are writing out, so that we can install the
12772    GP value in the section_processing routine.  */
12773
12774 bfd_boolean
12775 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12776                                     const void *location,
12777                                     file_ptr offset, bfd_size_type count)
12778 {
12779   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12780     {
12781       bfd_byte *c;
12782
12783       if (elf_section_data (section) == NULL)
12784         {
12785           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12786           section->used_by_bfd = bfd_zalloc (abfd, amt);
12787           if (elf_section_data (section) == NULL)
12788             return FALSE;
12789         }
12790       c = mips_elf_section_data (section)->u.tdata;
12791       if (c == NULL)
12792         {
12793           c = bfd_zalloc (abfd, section->size);
12794           if (c == NULL)
12795             return FALSE;
12796           mips_elf_section_data (section)->u.tdata = c;
12797         }
12798
12799       memcpy (c + offset, location, count);
12800     }
12801
12802   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12803                                         count);
12804 }
12805
12806 /* This is almost identical to bfd_generic_get_... except that some
12807    MIPS relocations need to be handled specially.  Sigh.  */
12808
12809 bfd_byte *
12810 _bfd_elf_mips_get_relocated_section_contents
12811   (bfd *abfd,
12812    struct bfd_link_info *link_info,
12813    struct bfd_link_order *link_order,
12814    bfd_byte *data,
12815    bfd_boolean relocatable,
12816    asymbol **symbols)
12817 {
12818   /* Get enough memory to hold the stuff */
12819   bfd *input_bfd = link_order->u.indirect.section->owner;
12820   asection *input_section = link_order->u.indirect.section;
12821   bfd_size_type sz;
12822
12823   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12824   arelent **reloc_vector = NULL;
12825   long reloc_count;
12826
12827   if (reloc_size < 0)
12828     goto error_return;
12829
12830   reloc_vector = bfd_malloc (reloc_size);
12831   if (reloc_vector == NULL && reloc_size != 0)
12832     goto error_return;
12833
12834   /* read in the section */
12835   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12836   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12837     goto error_return;
12838
12839   reloc_count = bfd_canonicalize_reloc (input_bfd,
12840                                         input_section,
12841                                         reloc_vector,
12842                                         symbols);
12843   if (reloc_count < 0)
12844     goto error_return;
12845
12846   if (reloc_count > 0)
12847     {
12848       arelent **parent;
12849       /* for mips */
12850       int gp_found;
12851       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
12852
12853       {
12854         struct bfd_hash_entry *h;
12855         struct bfd_link_hash_entry *lh;
12856         /* Skip all this stuff if we aren't mixing formats.  */
12857         if (abfd && input_bfd
12858             && abfd->xvec == input_bfd->xvec)
12859           lh = 0;
12860         else
12861           {
12862             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12863             lh = (struct bfd_link_hash_entry *) h;
12864           }
12865       lookup:
12866         if (lh)
12867           {
12868             switch (lh->type)
12869               {
12870               case bfd_link_hash_undefined:
12871               case bfd_link_hash_undefweak:
12872               case bfd_link_hash_common:
12873                 gp_found = 0;
12874                 break;
12875               case bfd_link_hash_defined:
12876               case bfd_link_hash_defweak:
12877                 gp_found = 1;
12878                 gp = lh->u.def.value;
12879                 break;
12880               case bfd_link_hash_indirect:
12881               case bfd_link_hash_warning:
12882                 lh = lh->u.i.link;
12883                 /* @@FIXME  ignoring warning for now */
12884                 goto lookup;
12885               case bfd_link_hash_new:
12886               default:
12887                 abort ();
12888               }
12889           }
12890         else
12891           gp_found = 0;
12892       }
12893       /* end mips */
12894       for (parent = reloc_vector; *parent != NULL; parent++)
12895         {
12896           char *error_message = NULL;
12897           bfd_reloc_status_type r;
12898
12899           /* Specific to MIPS: Deal with relocation types that require
12900              knowing the gp of the output bfd.  */
12901           asymbol *sym = *(*parent)->sym_ptr_ptr;
12902
12903           /* If we've managed to find the gp and have a special
12904              function for the relocation then go ahead, else default
12905              to the generic handling.  */
12906           if (gp_found
12907               && (*parent)->howto->special_function
12908               == _bfd_mips_elf32_gprel16_reloc)
12909             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12910                                                input_section, relocatable,
12911                                                data, gp);
12912           else
12913             r = bfd_perform_relocation (input_bfd, *parent, data,
12914                                         input_section,
12915                                         relocatable ? abfd : NULL,
12916                                         &error_message);
12917
12918           if (relocatable)
12919             {
12920               asection *os = input_section->output_section;
12921
12922               /* A partial link, so keep the relocs */
12923               os->orelocation[os->reloc_count] = *parent;
12924               os->reloc_count++;
12925             }
12926
12927           if (r != bfd_reloc_ok)
12928             {
12929               switch (r)
12930                 {
12931                 case bfd_reloc_undefined:
12932                   if (!((*link_info->callbacks->undefined_symbol)
12933                         (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12934                          input_bfd, input_section, (*parent)->address, TRUE)))
12935                     goto error_return;
12936                   break;
12937                 case bfd_reloc_dangerous:
12938                   BFD_ASSERT (error_message != NULL);
12939                   if (!((*link_info->callbacks->reloc_dangerous)
12940                         (link_info, error_message, input_bfd, input_section,
12941                          (*parent)->address)))
12942                     goto error_return;
12943                   break;
12944                 case bfd_reloc_overflow:
12945                   if (!((*link_info->callbacks->reloc_overflow)
12946                         (link_info, NULL,
12947                          bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12948                          (*parent)->howto->name, (*parent)->addend,
12949                          input_bfd, input_section, (*parent)->address)))
12950                     goto error_return;
12951                   break;
12952                 case bfd_reloc_outofrange:
12953                 default:
12954                   abort ();
12955                   break;
12956                 }
12957
12958             }
12959         }
12960     }
12961   if (reloc_vector != NULL)
12962     free (reloc_vector);
12963   return data;
12964
12965 error_return:
12966   if (reloc_vector != NULL)
12967     free (reloc_vector);
12968   return NULL;
12969 }
12970 \f
12971 static bfd_boolean
12972 mips_elf_relax_delete_bytes (bfd *abfd,
12973                              asection *sec, bfd_vma addr, int count)
12974 {
12975   Elf_Internal_Shdr *symtab_hdr;
12976   unsigned int sec_shndx;
12977   bfd_byte *contents;
12978   Elf_Internal_Rela *irel, *irelend;
12979   Elf_Internal_Sym *isym;
12980   Elf_Internal_Sym *isymend;
12981   struct elf_link_hash_entry **sym_hashes;
12982   struct elf_link_hash_entry **end_hashes;
12983   struct elf_link_hash_entry **start_hashes;
12984   unsigned int symcount;
12985
12986   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12987   contents = elf_section_data (sec)->this_hdr.contents;
12988
12989   irel = elf_section_data (sec)->relocs;
12990   irelend = irel + sec->reloc_count;
12991
12992   /* Actually delete the bytes.  */
12993   memmove (contents + addr, contents + addr + count,
12994            (size_t) (sec->size - addr - count));
12995   sec->size -= count;
12996
12997   /* Adjust all the relocs.  */
12998   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12999     {
13000       /* Get the new reloc address.  */
13001       if (irel->r_offset > addr)
13002         irel->r_offset -= count;
13003     }
13004
13005   BFD_ASSERT (addr % 2 == 0);
13006   BFD_ASSERT (count % 2 == 0);
13007
13008   /* Adjust the local symbols defined in this section.  */
13009   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13010   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13011   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13012     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13013       isym->st_value -= count;
13014
13015   /* Now adjust the global symbols defined in this section.  */
13016   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13017               - symtab_hdr->sh_info);
13018   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13019   end_hashes = sym_hashes + symcount;
13020
13021   for (; sym_hashes < end_hashes; sym_hashes++)
13022     {
13023       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13024
13025       if ((sym_hash->root.type == bfd_link_hash_defined
13026            || sym_hash->root.type == bfd_link_hash_defweak)
13027           && sym_hash->root.u.def.section == sec)
13028         {
13029           bfd_vma value = sym_hash->root.u.def.value;
13030
13031           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13032             value &= MINUS_TWO;
13033           if (value > addr)
13034             sym_hash->root.u.def.value -= count;
13035         }
13036     }
13037
13038   return TRUE;
13039 }
13040
13041
13042 /* Opcodes needed for microMIPS relaxation as found in
13043    opcodes/micromips-opc.c.  */
13044
13045 struct opcode_descriptor {
13046   unsigned long match;
13047   unsigned long mask;
13048 };
13049
13050 /* The $ra register aka $31.  */
13051
13052 #define RA 31
13053
13054 /* 32-bit instruction format register fields.  */
13055
13056 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13057 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13058
13059 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13060
13061 #define OP16_VALID_REG(r) \
13062   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13063
13064
13065 /* 32-bit and 16-bit branches.  */
13066
13067 static const struct opcode_descriptor b_insns_32[] = {
13068   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13069   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13070   { 0, 0 }  /* End marker for find_match().  */
13071 };
13072
13073 static const struct opcode_descriptor bc_insn_32 =
13074   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
13075
13076 static const struct opcode_descriptor bz_insn_32 =
13077   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
13078
13079 static const struct opcode_descriptor bzal_insn_32 =
13080   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
13081
13082 static const struct opcode_descriptor beq_insn_32 =
13083   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
13084
13085 static const struct opcode_descriptor b_insn_16 =
13086   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
13087
13088 static const struct opcode_descriptor bz_insn_16 =
13089   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
13090
13091
13092 /* 32-bit and 16-bit branch EQ and NE zero.  */
13093
13094 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13095    eq and second the ne.  This convention is used when replacing a
13096    32-bit BEQ/BNE with the 16-bit version.  */
13097
13098 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13099
13100 static const struct opcode_descriptor bz_rs_insns_32[] = {
13101   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
13102   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
13103   { 0, 0 }  /* End marker for find_match().  */
13104 };
13105
13106 static const struct opcode_descriptor bz_rt_insns_32[] = {
13107   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
13108   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
13109   { 0, 0 }  /* End marker for find_match().  */
13110 };
13111
13112 static const struct opcode_descriptor bzc_insns_32[] = {
13113   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
13114   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
13115   { 0, 0 }  /* End marker for find_match().  */
13116 };
13117
13118 static const struct opcode_descriptor bz_insns_16[] = {
13119   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
13120   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
13121   { 0, 0 }  /* End marker for find_match().  */
13122 };
13123
13124 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13125
13126 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13127 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13128
13129
13130 /* 32-bit instructions with a delay slot.  */
13131
13132 static const struct opcode_descriptor jal_insn_32_bd16 =
13133   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
13134
13135 static const struct opcode_descriptor jal_insn_32_bd32 =
13136   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
13137
13138 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13139   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
13140
13141 static const struct opcode_descriptor j_insn_32 =
13142   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
13143
13144 static const struct opcode_descriptor jalr_insn_32 =
13145   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
13146
13147 /* This table can be compacted, because no opcode replacement is made.  */
13148
13149 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13150   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
13151
13152   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
13153   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
13154
13155   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
13156   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
13157   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
13158   { 0, 0 }  /* End marker for find_match().  */
13159 };
13160
13161 /* This table can be compacted, because no opcode replacement is made.  */
13162
13163 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13164   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
13165
13166   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
13167   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
13168   { 0, 0 }  /* End marker for find_match().  */
13169 };
13170
13171
13172 /* 16-bit instructions with a delay slot.  */
13173
13174 static const struct opcode_descriptor jalr_insn_16_bd16 =
13175   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
13176
13177 static const struct opcode_descriptor jalr_insn_16_bd32 =
13178   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
13179
13180 static const struct opcode_descriptor jr_insn_16 =
13181   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
13182
13183 #define JR16_REG(opcode) ((opcode) & 0x1f)
13184
13185 /* This table can be compacted, because no opcode replacement is made.  */
13186
13187 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13188   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
13189
13190   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
13191   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
13192   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
13193   { 0, 0 }  /* End marker for find_match().  */
13194 };
13195
13196
13197 /* LUI instruction.  */
13198
13199 static const struct opcode_descriptor lui_insn =
13200  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
13201
13202
13203 /* ADDIU instruction.  */
13204
13205 static const struct opcode_descriptor addiu_insn =
13206   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
13207
13208 static const struct opcode_descriptor addiupc_insn =
13209   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
13210
13211 #define ADDIUPC_REG_FIELD(r) \
13212   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13213
13214
13215 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13216
13217 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13218    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13219 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13220 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13221
13222 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13223 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13224
13225 static const struct opcode_descriptor move_insns_32[] = {
13226   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13227   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13228   { 0, 0 }  /* End marker for find_match().  */
13229 };
13230
13231 static const struct opcode_descriptor move_insn_16 =
13232   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
13233
13234
13235 /* NOP instructions.  */
13236
13237 static const struct opcode_descriptor nop_insn_32 =
13238   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
13239
13240 static const struct opcode_descriptor nop_insn_16 =
13241   { /* "nop",   "",             */ 0x0c00,     0xffff };
13242
13243
13244 /* Instruction match support.  */
13245
13246 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13247
13248 static int
13249 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13250 {
13251   unsigned long indx;
13252
13253   for (indx = 0; insn[indx].mask != 0; indx++)
13254     if (MATCH (opcode, insn[indx]))
13255       return indx;
13256
13257   return -1;
13258 }
13259
13260
13261 /* Branch and delay slot decoding support.  */
13262
13263 /* If PTR points to what *might* be a 16-bit branch or jump, then
13264    return the minimum length of its delay slot, otherwise return 0.
13265    Non-zero results are not definitive as we might be checking against
13266    the second half of another instruction.  */
13267
13268 static int
13269 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13270 {
13271   unsigned long opcode;
13272   int bdsize;
13273
13274   opcode = bfd_get_16 (abfd, ptr);
13275   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13276     /* 16-bit branch/jump with a 32-bit delay slot.  */
13277     bdsize = 4;
13278   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13279            || find_match (opcode, ds_insns_16_bd16) >= 0)
13280     /* 16-bit branch/jump with a 16-bit delay slot.  */
13281     bdsize = 2;
13282   else
13283     /* No delay slot.  */
13284     bdsize = 0;
13285
13286   return bdsize;
13287 }
13288
13289 /* If PTR points to what *might* be a 32-bit branch or jump, then
13290    return the minimum length of its delay slot, otherwise return 0.
13291    Non-zero results are not definitive as we might be checking against
13292    the second half of another instruction.  */
13293
13294 static int
13295 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13296 {
13297   unsigned long opcode;
13298   int bdsize;
13299
13300   opcode = bfd_get_micromips_32 (abfd, ptr);
13301   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13302     /* 32-bit branch/jump with a 32-bit delay slot.  */
13303     bdsize = 4;
13304   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13305     /* 32-bit branch/jump with a 16-bit delay slot.  */
13306     bdsize = 2;
13307   else
13308     /* No delay slot.  */
13309     bdsize = 0;
13310
13311   return bdsize;
13312 }
13313
13314 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13315    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13316
13317 static bfd_boolean
13318 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13319 {
13320   unsigned long opcode;
13321
13322   opcode = bfd_get_16 (abfd, ptr);
13323   if (MATCH (opcode, b_insn_16)
13324                                                 /* B16  */
13325       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13326                                                 /* JR16  */
13327       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13328                                                 /* BEQZ16, BNEZ16  */
13329       || (MATCH (opcode, jalr_insn_16_bd32)
13330                                                 /* JALR16  */
13331           && reg != JR16_REG (opcode) && reg != RA))
13332     return TRUE;
13333
13334   return FALSE;
13335 }
13336
13337 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13338    then return TRUE, otherwise FALSE.  */
13339
13340 static bfd_boolean
13341 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13342 {
13343   unsigned long opcode;
13344
13345   opcode = bfd_get_micromips_32 (abfd, ptr);
13346   if (MATCH (opcode, j_insn_32)
13347                                                 /* J  */
13348       || MATCH (opcode, bc_insn_32)
13349                                                 /* BC1F, BC1T, BC2F, BC2T  */
13350       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13351                                                 /* JAL, JALX  */
13352       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13353                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
13354       || (MATCH (opcode, bzal_insn_32)
13355                                                 /* BGEZAL, BLTZAL  */
13356           && reg != OP32_SREG (opcode) && reg != RA)
13357       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13358                                                 /* JALR, JALR.HB, BEQ, BNE  */
13359           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13360     return TRUE;
13361
13362   return FALSE;
13363 }
13364
13365 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13366    IRELEND) at OFFSET indicate that there must be a compact branch there,
13367    then return TRUE, otherwise FALSE.  */
13368
13369 static bfd_boolean
13370 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13371                      const Elf_Internal_Rela *internal_relocs,
13372                      const Elf_Internal_Rela *irelend)
13373 {
13374   const Elf_Internal_Rela *irel;
13375   unsigned long opcode;
13376
13377   opcode = bfd_get_micromips_32 (abfd, ptr);
13378   if (find_match (opcode, bzc_insns_32) < 0)
13379     return FALSE;
13380
13381   for (irel = internal_relocs; irel < irelend; irel++)
13382     if (irel->r_offset == offset
13383         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13384       return TRUE;
13385
13386   return FALSE;
13387 }
13388
13389 /* Bitsize checking.  */
13390 #define IS_BITSIZE(val, N)                                              \
13391   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
13392     - (1ULL << ((N) - 1))) == (val))
13393
13394 \f
13395 bfd_boolean
13396 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13397                              struct bfd_link_info *link_info,
13398                              bfd_boolean *again)
13399 {
13400   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13401   Elf_Internal_Shdr *symtab_hdr;
13402   Elf_Internal_Rela *internal_relocs;
13403   Elf_Internal_Rela *irel, *irelend;
13404   bfd_byte *contents = NULL;
13405   Elf_Internal_Sym *isymbuf = NULL;
13406
13407   /* Assume nothing changes.  */
13408   *again = FALSE;
13409
13410   /* We don't have to do anything for a relocatable link, if
13411      this section does not have relocs, or if this is not a
13412      code section.  */
13413
13414   if (bfd_link_relocatable (link_info)
13415       || (sec->flags & SEC_RELOC) == 0
13416       || sec->reloc_count == 0
13417       || (sec->flags & SEC_CODE) == 0)
13418     return TRUE;
13419
13420   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13421
13422   /* Get a copy of the native relocations.  */
13423   internal_relocs = (_bfd_elf_link_read_relocs
13424                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13425                       link_info->keep_memory));
13426   if (internal_relocs == NULL)
13427     goto error_return;
13428
13429   /* Walk through them looking for relaxing opportunities.  */
13430   irelend = internal_relocs + sec->reloc_count;
13431   for (irel = internal_relocs; irel < irelend; irel++)
13432     {
13433       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13434       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13435       bfd_boolean target_is_micromips_code_p;
13436       unsigned long opcode;
13437       bfd_vma symval;
13438       bfd_vma pcrval;
13439       bfd_byte *ptr;
13440       int fndopc;
13441
13442       /* The number of bytes to delete for relaxation and from where
13443          to delete these bytes starting at irel->r_offset.  */
13444       int delcnt = 0;
13445       int deloff = 0;
13446
13447       /* If this isn't something that can be relaxed, then ignore
13448          this reloc.  */
13449       if (r_type != R_MICROMIPS_HI16
13450           && r_type != R_MICROMIPS_PC16_S1
13451           && r_type != R_MICROMIPS_26_S1)
13452         continue;
13453
13454       /* Get the section contents if we haven't done so already.  */
13455       if (contents == NULL)
13456         {
13457           /* Get cached copy if it exists.  */
13458           if (elf_section_data (sec)->this_hdr.contents != NULL)
13459             contents = elf_section_data (sec)->this_hdr.contents;
13460           /* Go get them off disk.  */
13461           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13462             goto error_return;
13463         }
13464       ptr = contents + irel->r_offset;
13465
13466       /* Read this BFD's local symbols if we haven't done so already.  */
13467       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13468         {
13469           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13470           if (isymbuf == NULL)
13471             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13472                                             symtab_hdr->sh_info, 0,
13473                                             NULL, NULL, NULL);
13474           if (isymbuf == NULL)
13475             goto error_return;
13476         }
13477
13478       /* Get the value of the symbol referred to by the reloc.  */
13479       if (r_symndx < symtab_hdr->sh_info)
13480         {
13481           /* A local symbol.  */
13482           Elf_Internal_Sym *isym;
13483           asection *sym_sec;
13484
13485           isym = isymbuf + r_symndx;
13486           if (isym->st_shndx == SHN_UNDEF)
13487             sym_sec = bfd_und_section_ptr;
13488           else if (isym->st_shndx == SHN_ABS)
13489             sym_sec = bfd_abs_section_ptr;
13490           else if (isym->st_shndx == SHN_COMMON)
13491             sym_sec = bfd_com_section_ptr;
13492           else
13493             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13494           symval = (isym->st_value
13495                     + sym_sec->output_section->vma
13496                     + sym_sec->output_offset);
13497           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13498         }
13499       else
13500         {
13501           unsigned long indx;
13502           struct elf_link_hash_entry *h;
13503
13504           /* An external symbol.  */
13505           indx = r_symndx - symtab_hdr->sh_info;
13506           h = elf_sym_hashes (abfd)[indx];
13507           BFD_ASSERT (h != NULL);
13508
13509           if (h->root.type != bfd_link_hash_defined
13510               && h->root.type != bfd_link_hash_defweak)
13511             /* This appears to be a reference to an undefined
13512                symbol.  Just ignore it -- it will be caught by the
13513                regular reloc processing.  */
13514             continue;
13515
13516           symval = (h->root.u.def.value
13517                     + h->root.u.def.section->output_section->vma
13518                     + h->root.u.def.section->output_offset);
13519           target_is_micromips_code_p = (!h->needs_plt
13520                                         && ELF_ST_IS_MICROMIPS (h->other));
13521         }
13522
13523
13524       /* For simplicity of coding, we are going to modify the
13525          section contents, the section relocs, and the BFD symbol
13526          table.  We must tell the rest of the code not to free up this
13527          information.  It would be possible to instead create a table
13528          of changes which have to be made, as is done in coff-mips.c;
13529          that would be more work, but would require less memory when
13530          the linker is run.  */
13531
13532       /* Only 32-bit instructions relaxed.  */
13533       if (irel->r_offset + 4 > sec->size)
13534         continue;
13535
13536       opcode = bfd_get_micromips_32 (abfd, ptr);
13537
13538       /* This is the pc-relative distance from the instruction the
13539          relocation is applied to, to the symbol referred.  */
13540       pcrval = (symval
13541                 - (sec->output_section->vma + sec->output_offset)
13542                 - irel->r_offset);
13543
13544       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13545          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13546          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13547
13548            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13549
13550          where pcrval has first to be adjusted to apply against the LO16
13551          location (we make the adjustment later on, when we have figured
13552          out the offset).  */
13553       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13554         {
13555           bfd_boolean bzc = FALSE;
13556           unsigned long nextopc;
13557           unsigned long reg;
13558           bfd_vma offset;
13559
13560           /* Give up if the previous reloc was a HI16 against this symbol
13561              too.  */
13562           if (irel > internal_relocs
13563               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13564               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13565             continue;
13566
13567           /* Or if the next reloc is not a LO16 against this symbol.  */
13568           if (irel + 1 >= irelend
13569               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13570               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13571             continue;
13572
13573           /* Or if the second next reloc is a LO16 against this symbol too.  */
13574           if (irel + 2 >= irelend
13575               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13576               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13577             continue;
13578
13579           /* See if the LUI instruction *might* be in a branch delay slot.
13580              We check whether what looks like a 16-bit branch or jump is
13581              actually an immediate argument to a compact branch, and let
13582              it through if so.  */
13583           if (irel->r_offset >= 2
13584               && check_br16_dslot (abfd, ptr - 2)
13585               && !(irel->r_offset >= 4
13586                    && (bzc = check_relocated_bzc (abfd,
13587                                                   ptr - 4, irel->r_offset - 4,
13588                                                   internal_relocs, irelend))))
13589             continue;
13590           if (irel->r_offset >= 4
13591               && !bzc
13592               && check_br32_dslot (abfd, ptr - 4))
13593             continue;
13594
13595           reg = OP32_SREG (opcode);
13596
13597           /* We only relax adjacent instructions or ones separated with
13598              a branch or jump that has a delay slot.  The branch or jump
13599              must not fiddle with the register used to hold the address.
13600              Subtract 4 for the LUI itself.  */
13601           offset = irel[1].r_offset - irel[0].r_offset;
13602           switch (offset - 4)
13603             {
13604             case 0:
13605               break;
13606             case 2:
13607               if (check_br16 (abfd, ptr + 4, reg))
13608                 break;
13609               continue;
13610             case 4:
13611               if (check_br32 (abfd, ptr + 4, reg))
13612                 break;
13613               continue;
13614             default:
13615               continue;
13616             }
13617
13618           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13619
13620           /* Give up unless the same register is used with both
13621              relocations.  */
13622           if (OP32_SREG (nextopc) != reg)
13623             continue;
13624
13625           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13626              and rounding up to take masking of the two LSBs into account.  */
13627           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13628
13629           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13630           if (IS_BITSIZE (symval, 16))
13631             {
13632               /* Fix the relocation's type.  */
13633               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13634
13635               /* Instructions using R_MICROMIPS_LO16 have the base or
13636                  source register in bits 20:16.  This register becomes $0
13637                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13638               nextopc &= ~0x001f0000;
13639               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13640                           contents + irel[1].r_offset);
13641             }
13642
13643           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13644              We add 4 to take LUI deletion into account while checking
13645              the PC-relative distance.  */
13646           else if (symval % 4 == 0
13647                    && IS_BITSIZE (pcrval + 4, 25)
13648                    && MATCH (nextopc, addiu_insn)
13649                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13650                    && OP16_VALID_REG (OP32_TREG (nextopc)))
13651             {
13652               /* Fix the relocation's type.  */
13653               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13654
13655               /* Replace ADDIU with the ADDIUPC version.  */
13656               nextopc = (addiupc_insn.match
13657                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13658
13659               bfd_put_micromips_32 (abfd, nextopc,
13660                                     contents + irel[1].r_offset);
13661             }
13662
13663           /* Can't do anything, give up, sigh...  */
13664           else
13665             continue;
13666
13667           /* Fix the relocation's type.  */
13668           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13669
13670           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13671           delcnt = 4;
13672           deloff = 0;
13673         }
13674
13675       /* Compact branch relaxation -- due to the multitude of macros
13676          employed by the compiler/assembler, compact branches are not
13677          always generated.  Obviously, this can/will be fixed elsewhere,
13678          but there is no drawback in double checking it here.  */
13679       else if (r_type == R_MICROMIPS_PC16_S1
13680                && irel->r_offset + 5 < sec->size
13681                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13682                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13683                && ((!insn32
13684                     && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13685                                         nop_insn_16) ? 2 : 0))
13686                    || (irel->r_offset + 7 < sec->size
13687                        && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13688                                                                  ptr + 4),
13689                                            nop_insn_32) ? 4 : 0))))
13690         {
13691           unsigned long reg;
13692
13693           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13694
13695           /* Replace BEQZ/BNEZ with the compact version.  */
13696           opcode = (bzc_insns_32[fndopc].match
13697                     | BZC32_REG_FIELD (reg)
13698                     | (opcode & 0xffff));               /* Addend value.  */
13699
13700           bfd_put_micromips_32 (abfd, opcode, ptr);
13701
13702           /* Delete the delay slot NOP: two or four bytes from
13703              irel->offset + 4; delcnt has already been set above.  */
13704           deloff = 4;
13705         }
13706
13707       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13708          to check the distance from the next instruction, so subtract 2.  */
13709       else if (!insn32
13710                && r_type == R_MICROMIPS_PC16_S1
13711                && IS_BITSIZE (pcrval - 2, 11)
13712                && find_match (opcode, b_insns_32) >= 0)
13713         {
13714           /* Fix the relocation's type.  */
13715           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13716
13717           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13718           bfd_put_16 (abfd,
13719                       (b_insn_16.match
13720                        | (opcode & 0x3ff)),             /* Addend value.  */
13721                       ptr);
13722
13723           /* Delete 2 bytes from irel->r_offset + 2.  */
13724           delcnt = 2;
13725           deloff = 2;
13726         }
13727
13728       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13729          to check the distance from the next instruction, so subtract 2.  */
13730       else if (!insn32
13731                && r_type == R_MICROMIPS_PC16_S1
13732                && IS_BITSIZE (pcrval - 2, 8)
13733                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13734                     && OP16_VALID_REG (OP32_SREG (opcode)))
13735                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13736                        && OP16_VALID_REG (OP32_TREG (opcode)))))
13737         {
13738           unsigned long reg;
13739
13740           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13741
13742           /* Fix the relocation's type.  */
13743           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13744
13745           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13746           bfd_put_16 (abfd,
13747                       (bz_insns_16[fndopc].match
13748                        | BZ16_REG_FIELD (reg)
13749                        | (opcode & 0x7f)),              /* Addend value.  */
13750                       ptr);
13751
13752           /* Delete 2 bytes from irel->r_offset + 2.  */
13753           delcnt = 2;
13754           deloff = 2;
13755         }
13756
13757       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13758       else if (!insn32
13759                && r_type == R_MICROMIPS_26_S1
13760                && target_is_micromips_code_p
13761                && irel->r_offset + 7 < sec->size
13762                && MATCH (opcode, jal_insn_32_bd32))
13763         {
13764           unsigned long n32opc;
13765           bfd_boolean relaxed = FALSE;
13766
13767           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13768
13769           if (MATCH (n32opc, nop_insn_32))
13770             {
13771               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13772               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13773
13774               relaxed = TRUE;
13775             }
13776           else if (find_match (n32opc, move_insns_32) >= 0)
13777             {
13778               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13779               bfd_put_16 (abfd,
13780                           (move_insn_16.match
13781                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13782                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13783                           ptr + 4);
13784
13785               relaxed = TRUE;
13786             }
13787           /* Other 32-bit instructions relaxable to 16-bit
13788              instructions will be handled here later.  */
13789
13790           if (relaxed)
13791             {
13792               /* JAL with 32-bit delay slot that is changed to a JALS
13793                  with 16-bit delay slot.  */
13794               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13795
13796               /* Delete 2 bytes from irel->r_offset + 6.  */
13797               delcnt = 2;
13798               deloff = 6;
13799             }
13800         }
13801
13802       if (delcnt != 0)
13803         {
13804           /* Note that we've changed the relocs, section contents, etc.  */
13805           elf_section_data (sec)->relocs = internal_relocs;
13806           elf_section_data (sec)->this_hdr.contents = contents;
13807           symtab_hdr->contents = (unsigned char *) isymbuf;
13808
13809           /* Delete bytes depending on the delcnt and deloff.  */
13810           if (!mips_elf_relax_delete_bytes (abfd, sec,
13811                                             irel->r_offset + deloff, delcnt))
13812             goto error_return;
13813
13814           /* That will change things, so we should relax again.
13815              Note that this is not required, and it may be slow.  */
13816           *again = TRUE;
13817         }
13818     }
13819
13820   if (isymbuf != NULL
13821       && symtab_hdr->contents != (unsigned char *) isymbuf)
13822     {
13823       if (! link_info->keep_memory)
13824         free (isymbuf);
13825       else
13826         {
13827           /* Cache the symbols for elf_link_input_bfd.  */
13828           symtab_hdr->contents = (unsigned char *) isymbuf;
13829         }
13830     }
13831
13832   if (contents != NULL
13833       && elf_section_data (sec)->this_hdr.contents != contents)
13834     {
13835       if (! link_info->keep_memory)
13836         free (contents);
13837       else
13838         {
13839           /* Cache the section contents for elf_link_input_bfd.  */
13840           elf_section_data (sec)->this_hdr.contents = contents;
13841         }
13842     }
13843
13844   if (internal_relocs != NULL
13845       && elf_section_data (sec)->relocs != internal_relocs)
13846     free (internal_relocs);
13847
13848   return TRUE;
13849
13850  error_return:
13851   if (isymbuf != NULL
13852       && symtab_hdr->contents != (unsigned char *) isymbuf)
13853     free (isymbuf);
13854   if (contents != NULL
13855       && elf_section_data (sec)->this_hdr.contents != contents)
13856     free (contents);
13857   if (internal_relocs != NULL
13858       && elf_section_data (sec)->relocs != internal_relocs)
13859     free (internal_relocs);
13860
13861   return FALSE;
13862 }
13863 \f
13864 /* Create a MIPS ELF linker hash table.  */
13865
13866 struct bfd_link_hash_table *
13867 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13868 {
13869   struct mips_elf_link_hash_table *ret;
13870   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13871
13872   ret = bfd_zmalloc (amt);
13873   if (ret == NULL)
13874     return NULL;
13875
13876   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13877                                       mips_elf_link_hash_newfunc,
13878                                       sizeof (struct mips_elf_link_hash_entry),
13879                                       MIPS_ELF_DATA))
13880     {
13881       free (ret);
13882       return NULL;
13883     }
13884   ret->root.init_plt_refcount.plist = NULL;
13885   ret->root.init_plt_offset.plist = NULL;
13886
13887   return &ret->root.root;
13888 }
13889
13890 /* Likewise, but indicate that the target is VxWorks.  */
13891
13892 struct bfd_link_hash_table *
13893 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13894 {
13895   struct bfd_link_hash_table *ret;
13896
13897   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13898   if (ret)
13899     {
13900       struct mips_elf_link_hash_table *htab;
13901
13902       htab = (struct mips_elf_link_hash_table *) ret;
13903       htab->use_plts_and_copy_relocs = TRUE;
13904       htab->is_vxworks = TRUE;
13905     }
13906   return ret;
13907 }
13908
13909 /* A function that the linker calls if we are allowed to use PLTs
13910    and copy relocs.  */
13911
13912 void
13913 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13914 {
13915   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13916 }
13917
13918 /* A function that the linker calls to select between all or only
13919    32-bit microMIPS instructions.  */
13920
13921 void
13922 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13923 {
13924   mips_elf_hash_table (info)->insn32 = on;
13925 }
13926 \f
13927 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13928
13929 struct mips_mach_extension
13930 {
13931   unsigned long extension, base;
13932 };
13933
13934
13935 /* An array describing how BFD machines relate to one another.  The entries
13936    are ordered topologically with MIPS I extensions listed last.  */
13937
13938 static const struct mips_mach_extension mips_mach_extensions[] =
13939 {
13940   /* MIPS64r2 extensions.  */
13941   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
13942   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13943   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13944   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13945   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
13946
13947   /* MIPS64 extensions.  */
13948   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13949   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13950   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13951
13952   /* MIPS V extensions.  */
13953   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13954
13955   /* R10000 extensions.  */
13956   { bfd_mach_mips12000, bfd_mach_mips10000 },
13957   { bfd_mach_mips14000, bfd_mach_mips10000 },
13958   { bfd_mach_mips16000, bfd_mach_mips10000 },
13959
13960   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13961      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13962      better to allow vr5400 and vr5500 code to be merged anyway, since
13963      many libraries will just use the core ISA.  Perhaps we could add
13964      some sort of ASE flag if this ever proves a problem.  */
13965   { bfd_mach_mips5500, bfd_mach_mips5400 },
13966   { bfd_mach_mips5400, bfd_mach_mips5000 },
13967
13968   /* MIPS IV extensions.  */
13969   { bfd_mach_mips5, bfd_mach_mips8000 },
13970   { bfd_mach_mips10000, bfd_mach_mips8000 },
13971   { bfd_mach_mips5000, bfd_mach_mips8000 },
13972   { bfd_mach_mips7000, bfd_mach_mips8000 },
13973   { bfd_mach_mips9000, bfd_mach_mips8000 },
13974
13975   /* VR4100 extensions.  */
13976   { bfd_mach_mips4120, bfd_mach_mips4100 },
13977   { bfd_mach_mips4111, bfd_mach_mips4100 },
13978
13979   /* MIPS III extensions.  */
13980   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
13981   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
13982   { bfd_mach_mips8000, bfd_mach_mips4000 },
13983   { bfd_mach_mips4650, bfd_mach_mips4000 },
13984   { bfd_mach_mips4600, bfd_mach_mips4000 },
13985   { bfd_mach_mips4400, bfd_mach_mips4000 },
13986   { bfd_mach_mips4300, bfd_mach_mips4000 },
13987   { bfd_mach_mips4100, bfd_mach_mips4000 },
13988   { bfd_mach_mips4010, bfd_mach_mips4000 },
13989   { bfd_mach_mips5900, bfd_mach_mips4000 },
13990
13991   /* MIPS32 extensions.  */
13992   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
13993
13994   /* MIPS II extensions.  */
13995   { bfd_mach_mips4000, bfd_mach_mips6000 },
13996   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
13997
13998   /* MIPS I extensions.  */
13999   { bfd_mach_mips6000, bfd_mach_mips3000 },
14000   { bfd_mach_mips3900, bfd_mach_mips3000 }
14001 };
14002
14003 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14004
14005 static bfd_boolean
14006 mips_mach_extends_p (unsigned long base, unsigned long extension)
14007 {
14008   size_t i;
14009
14010   if (extension == base)
14011     return TRUE;
14012
14013   if (base == bfd_mach_mipsisa32
14014       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14015     return TRUE;
14016
14017   if (base == bfd_mach_mipsisa32r2
14018       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14019     return TRUE;
14020
14021   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14022     if (extension == mips_mach_extensions[i].extension)
14023       {
14024         extension = mips_mach_extensions[i].base;
14025         if (extension == base)
14026           return TRUE;
14027       }
14028
14029   return FALSE;
14030 }
14031
14032 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14033
14034 static unsigned long
14035 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14036 {
14037   switch (isa_ext)
14038     {
14039     case AFL_EXT_3900:        return bfd_mach_mips3900;
14040     case AFL_EXT_4010:        return bfd_mach_mips4010;
14041     case AFL_EXT_4100:        return bfd_mach_mips4100;
14042     case AFL_EXT_4111:        return bfd_mach_mips4111;
14043     case AFL_EXT_4120:        return bfd_mach_mips4120;
14044     case AFL_EXT_4650:        return bfd_mach_mips4650;
14045     case AFL_EXT_5400:        return bfd_mach_mips5400;
14046     case AFL_EXT_5500:        return bfd_mach_mips5500;
14047     case AFL_EXT_5900:        return bfd_mach_mips5900;
14048     case AFL_EXT_10000:       return bfd_mach_mips10000;
14049     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14050     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14051     case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14052     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14053     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14054     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14055     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14056     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14057     default:                  return bfd_mach_mips3000;
14058     }
14059 }
14060
14061 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14062
14063 unsigned int
14064 bfd_mips_isa_ext (bfd *abfd)
14065 {
14066   switch (bfd_get_mach (abfd))
14067     {
14068     case bfd_mach_mips3900:         return AFL_EXT_3900;
14069     case bfd_mach_mips4010:         return AFL_EXT_4010;
14070     case bfd_mach_mips4100:         return AFL_EXT_4100;
14071     case bfd_mach_mips4111:         return AFL_EXT_4111;
14072     case bfd_mach_mips4120:         return AFL_EXT_4120;
14073     case bfd_mach_mips4650:         return AFL_EXT_4650;
14074     case bfd_mach_mips5400:         return AFL_EXT_5400;
14075     case bfd_mach_mips5500:         return AFL_EXT_5500;
14076     case bfd_mach_mips5900:         return AFL_EXT_5900;
14077     case bfd_mach_mips10000:        return AFL_EXT_10000;
14078     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14079     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14080     case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14081     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14082     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14083     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14084     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14085     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14086     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14087     default:                        return 0;
14088     }
14089 }
14090
14091 /* Encode ISA level and revision as a single value.  */
14092 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14093
14094 /* Decode a single value into level and revision.  */
14095 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14096 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14097
14098 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14099
14100 static void
14101 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14102 {
14103   int new_isa = 0;
14104   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14105     {
14106     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14107     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14108     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14109     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14110     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14111     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14112     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14113     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14114     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14115     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14116     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14117     default:
14118       (*_bfd_error_handler)
14119         (_("%B: Unknown architecture %s"),
14120          abfd, bfd_printable_name (abfd));
14121     }
14122
14123   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14124     {
14125       abiflags->isa_level = ISA_LEVEL (new_isa);
14126       abiflags->isa_rev = ISA_REV (new_isa);
14127     }
14128
14129   /* Update the isa_ext if ABFD describes a further extension.  */
14130   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14131                            bfd_get_mach (abfd)))
14132     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14133 }
14134
14135 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14136
14137 static bfd_boolean
14138 mips_32bit_flags_p (flagword flags)
14139 {
14140   return ((flags & EF_MIPS_32BITMODE) != 0
14141           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14142           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14143           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14144           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14145           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14146           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14147           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14148 }
14149
14150 /* Infer the content of the ABI flags based on the elf header.  */
14151
14152 static void
14153 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14154 {
14155   obj_attribute *in_attr;
14156
14157   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14158   update_mips_abiflags_isa (abfd, abiflags);
14159
14160   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14161     abiflags->gpr_size = AFL_REG_32;
14162   else
14163     abiflags->gpr_size = AFL_REG_64;
14164
14165   abiflags->cpr1_size = AFL_REG_NONE;
14166
14167   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14168   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14169
14170   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14171       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14172       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14173           && abiflags->gpr_size == AFL_REG_32))
14174     abiflags->cpr1_size = AFL_REG_32;
14175   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14176            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14177            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14178     abiflags->cpr1_size = AFL_REG_64;
14179
14180   abiflags->cpr2_size = AFL_REG_NONE;
14181
14182   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14183     abiflags->ases |= AFL_ASE_MDMX;
14184   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14185     abiflags->ases |= AFL_ASE_MIPS16;
14186   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14187     abiflags->ases |= AFL_ASE_MICROMIPS;
14188
14189   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14190       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14191       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14192       && abiflags->isa_level >= 32
14193       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14194     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14195 }
14196
14197 /* We need to use a special link routine to handle the .reginfo and
14198    the .mdebug sections.  We need to merge all instances of these
14199    sections together, not write them all out sequentially.  */
14200
14201 bfd_boolean
14202 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14203 {
14204   asection *o;
14205   struct bfd_link_order *p;
14206   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14207   asection *rtproc_sec, *abiflags_sec;
14208   Elf32_RegInfo reginfo;
14209   struct ecoff_debug_info debug;
14210   struct mips_htab_traverse_info hti;
14211   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14212   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14213   HDRR *symhdr = &debug.symbolic_header;
14214   void *mdebug_handle = NULL;
14215   asection *s;
14216   EXTR esym;
14217   unsigned int i;
14218   bfd_size_type amt;
14219   struct mips_elf_link_hash_table *htab;
14220
14221   static const char * const secname[] =
14222   {
14223     ".text", ".init", ".fini", ".data",
14224     ".rodata", ".sdata", ".sbss", ".bss"
14225   };
14226   static const int sc[] =
14227   {
14228     scText, scInit, scFini, scData,
14229     scRData, scSData, scSBss, scBss
14230   };
14231
14232   /* Sort the dynamic symbols so that those with GOT entries come after
14233      those without.  */
14234   htab = mips_elf_hash_table (info);
14235   BFD_ASSERT (htab != NULL);
14236
14237   if (!mips_elf_sort_hash_table (abfd, info))
14238     return FALSE;
14239
14240   /* Create any scheduled LA25 stubs.  */
14241   hti.info = info;
14242   hti.output_bfd = abfd;
14243   hti.error = FALSE;
14244   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14245   if (hti.error)
14246     return FALSE;
14247
14248   /* Get a value for the GP register.  */
14249   if (elf_gp (abfd) == 0)
14250     {
14251       struct bfd_link_hash_entry *h;
14252
14253       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14254       if (h != NULL && h->type == bfd_link_hash_defined)
14255         elf_gp (abfd) = (h->u.def.value
14256                          + h->u.def.section->output_section->vma
14257                          + h->u.def.section->output_offset);
14258       else if (htab->is_vxworks
14259                && (h = bfd_link_hash_lookup (info->hash,
14260                                              "_GLOBAL_OFFSET_TABLE_",
14261                                              FALSE, FALSE, TRUE))
14262                && h->type == bfd_link_hash_defined)
14263         elf_gp (abfd) = (h->u.def.section->output_section->vma
14264                          + h->u.def.section->output_offset
14265                          + h->u.def.value);
14266       else if (bfd_link_relocatable (info))
14267         {
14268           bfd_vma lo = MINUS_ONE;
14269
14270           /* Find the GP-relative section with the lowest offset.  */
14271           for (o = abfd->sections; o != NULL; o = o->next)
14272             if (o->vma < lo
14273                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14274               lo = o->vma;
14275
14276           /* And calculate GP relative to that.  */
14277           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14278         }
14279       else
14280         {
14281           /* If the relocate_section function needs to do a reloc
14282              involving the GP value, it should make a reloc_dangerous
14283              callback to warn that GP is not defined.  */
14284         }
14285     }
14286
14287   /* Go through the sections and collect the .reginfo and .mdebug
14288      information.  */
14289   abiflags_sec = NULL;
14290   reginfo_sec = NULL;
14291   mdebug_sec = NULL;
14292   gptab_data_sec = NULL;
14293   gptab_bss_sec = NULL;
14294   for (o = abfd->sections; o != NULL; o = o->next)
14295     {
14296       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14297         {
14298           /* We have found the .MIPS.abiflags section in the output file.
14299              Look through all the link_orders comprising it and remove them.
14300              The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14301           for (p = o->map_head.link_order; p != NULL; p = p->next)
14302             {
14303               asection *input_section;
14304
14305               if (p->type != bfd_indirect_link_order)
14306                 {
14307                   if (p->type == bfd_data_link_order)
14308                     continue;
14309                   abort ();
14310                 }
14311
14312               input_section = p->u.indirect.section;
14313
14314               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14315                  elf_link_input_bfd ignores this section.  */
14316               input_section->flags &= ~SEC_HAS_CONTENTS;
14317             }
14318
14319           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14320           BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14321
14322           /* Skip this section later on (I don't think this currently
14323              matters, but someday it might).  */
14324           o->map_head.link_order = NULL;
14325
14326           abiflags_sec = o;
14327         }
14328
14329       if (strcmp (o->name, ".reginfo") == 0)
14330         {
14331           memset (&reginfo, 0, sizeof reginfo);
14332
14333           /* We have found the .reginfo section in the output file.
14334              Look through all the link_orders comprising it and merge
14335              the information together.  */
14336           for (p = o->map_head.link_order; p != NULL; p = p->next)
14337             {
14338               asection *input_section;
14339               bfd *input_bfd;
14340               Elf32_External_RegInfo ext;
14341               Elf32_RegInfo sub;
14342
14343               if (p->type != bfd_indirect_link_order)
14344                 {
14345                   if (p->type == bfd_data_link_order)
14346                     continue;
14347                   abort ();
14348                 }
14349
14350               input_section = p->u.indirect.section;
14351               input_bfd = input_section->owner;
14352
14353               if (! bfd_get_section_contents (input_bfd, input_section,
14354                                               &ext, 0, sizeof ext))
14355                 return FALSE;
14356
14357               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14358
14359               reginfo.ri_gprmask |= sub.ri_gprmask;
14360               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14361               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14362               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14363               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14364
14365               /* ri_gp_value is set by the function
14366                  mips_elf32_section_processing when the section is
14367                  finally written out.  */
14368
14369               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14370                  elf_link_input_bfd ignores this section.  */
14371               input_section->flags &= ~SEC_HAS_CONTENTS;
14372             }
14373
14374           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14375           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14376
14377           /* Skip this section later on (I don't think this currently
14378              matters, but someday it might).  */
14379           o->map_head.link_order = NULL;
14380
14381           reginfo_sec = o;
14382         }
14383
14384       if (strcmp (o->name, ".mdebug") == 0)
14385         {
14386           struct extsym_info einfo;
14387           bfd_vma last;
14388
14389           /* We have found the .mdebug section in the output file.
14390              Look through all the link_orders comprising it and merge
14391              the information together.  */
14392           symhdr->magic = swap->sym_magic;
14393           /* FIXME: What should the version stamp be?  */
14394           symhdr->vstamp = 0;
14395           symhdr->ilineMax = 0;
14396           symhdr->cbLine = 0;
14397           symhdr->idnMax = 0;
14398           symhdr->ipdMax = 0;
14399           symhdr->isymMax = 0;
14400           symhdr->ioptMax = 0;
14401           symhdr->iauxMax = 0;
14402           symhdr->issMax = 0;
14403           symhdr->issExtMax = 0;
14404           symhdr->ifdMax = 0;
14405           symhdr->crfd = 0;
14406           symhdr->iextMax = 0;
14407
14408           /* We accumulate the debugging information itself in the
14409              debug_info structure.  */
14410           debug.line = NULL;
14411           debug.external_dnr = NULL;
14412           debug.external_pdr = NULL;
14413           debug.external_sym = NULL;
14414           debug.external_opt = NULL;
14415           debug.external_aux = NULL;
14416           debug.ss = NULL;
14417           debug.ssext = debug.ssext_end = NULL;
14418           debug.external_fdr = NULL;
14419           debug.external_rfd = NULL;
14420           debug.external_ext = debug.external_ext_end = NULL;
14421
14422           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14423           if (mdebug_handle == NULL)
14424             return FALSE;
14425
14426           esym.jmptbl = 0;
14427           esym.cobol_main = 0;
14428           esym.weakext = 0;
14429           esym.reserved = 0;
14430           esym.ifd = ifdNil;
14431           esym.asym.iss = issNil;
14432           esym.asym.st = stLocal;
14433           esym.asym.reserved = 0;
14434           esym.asym.index = indexNil;
14435           last = 0;
14436           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14437             {
14438               esym.asym.sc = sc[i];
14439               s = bfd_get_section_by_name (abfd, secname[i]);
14440               if (s != NULL)
14441                 {
14442                   esym.asym.value = s->vma;
14443                   last = s->vma + s->size;
14444                 }
14445               else
14446                 esym.asym.value = last;
14447               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14448                                                  secname[i], &esym))
14449                 return FALSE;
14450             }
14451
14452           for (p = o->map_head.link_order; p != NULL; p = p->next)
14453             {
14454               asection *input_section;
14455               bfd *input_bfd;
14456               const struct ecoff_debug_swap *input_swap;
14457               struct ecoff_debug_info input_debug;
14458               char *eraw_src;
14459               char *eraw_end;
14460
14461               if (p->type != bfd_indirect_link_order)
14462                 {
14463                   if (p->type == bfd_data_link_order)
14464                     continue;
14465                   abort ();
14466                 }
14467
14468               input_section = p->u.indirect.section;
14469               input_bfd = input_section->owner;
14470
14471               if (!is_mips_elf (input_bfd))
14472                 {
14473                   /* I don't know what a non MIPS ELF bfd would be
14474                      doing with a .mdebug section, but I don't really
14475                      want to deal with it.  */
14476                   continue;
14477                 }
14478
14479               input_swap = (get_elf_backend_data (input_bfd)
14480                             ->elf_backend_ecoff_debug_swap);
14481
14482               BFD_ASSERT (p->size == input_section->size);
14483
14484               /* The ECOFF linking code expects that we have already
14485                  read in the debugging information and set up an
14486                  ecoff_debug_info structure, so we do that now.  */
14487               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14488                                                    &input_debug))
14489                 return FALSE;
14490
14491               if (! (bfd_ecoff_debug_accumulate
14492                      (mdebug_handle, abfd, &debug, swap, input_bfd,
14493                       &input_debug, input_swap, info)))
14494                 return FALSE;
14495
14496               /* Loop through the external symbols.  For each one with
14497                  interesting information, try to find the symbol in
14498                  the linker global hash table and save the information
14499                  for the output external symbols.  */
14500               eraw_src = input_debug.external_ext;
14501               eraw_end = (eraw_src
14502                           + (input_debug.symbolic_header.iextMax
14503                              * input_swap->external_ext_size));
14504               for (;
14505                    eraw_src < eraw_end;
14506                    eraw_src += input_swap->external_ext_size)
14507                 {
14508                   EXTR ext;
14509                   const char *name;
14510                   struct mips_elf_link_hash_entry *h;
14511
14512                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14513                   if (ext.asym.sc == scNil
14514                       || ext.asym.sc == scUndefined
14515                       || ext.asym.sc == scSUndefined)
14516                     continue;
14517
14518                   name = input_debug.ssext + ext.asym.iss;
14519                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14520                                                  name, FALSE, FALSE, TRUE);
14521                   if (h == NULL || h->esym.ifd != -2)
14522                     continue;
14523
14524                   if (ext.ifd != -1)
14525                     {
14526                       BFD_ASSERT (ext.ifd
14527                                   < input_debug.symbolic_header.ifdMax);
14528                       ext.ifd = input_debug.ifdmap[ext.ifd];
14529                     }
14530
14531                   h->esym = ext;
14532                 }
14533
14534               /* Free up the information we just read.  */
14535               free (input_debug.line);
14536               free (input_debug.external_dnr);
14537               free (input_debug.external_pdr);
14538               free (input_debug.external_sym);
14539               free (input_debug.external_opt);
14540               free (input_debug.external_aux);
14541               free (input_debug.ss);
14542               free (input_debug.ssext);
14543               free (input_debug.external_fdr);
14544               free (input_debug.external_rfd);
14545               free (input_debug.external_ext);
14546
14547               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14548                  elf_link_input_bfd ignores this section.  */
14549               input_section->flags &= ~SEC_HAS_CONTENTS;
14550             }
14551
14552           if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14553             {
14554               /* Create .rtproc section.  */
14555               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14556               if (rtproc_sec == NULL)
14557                 {
14558                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14559                                     | SEC_LINKER_CREATED | SEC_READONLY);
14560
14561                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14562                                                                    ".rtproc",
14563                                                                    flags);
14564                   if (rtproc_sec == NULL
14565                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14566                     return FALSE;
14567                 }
14568
14569               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14570                                                      info, rtproc_sec,
14571                                                      &debug))
14572                 return FALSE;
14573             }
14574
14575           /* Build the external symbol information.  */
14576           einfo.abfd = abfd;
14577           einfo.info = info;
14578           einfo.debug = &debug;
14579           einfo.swap = swap;
14580           einfo.failed = FALSE;
14581           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14582                                        mips_elf_output_extsym, &einfo);
14583           if (einfo.failed)
14584             return FALSE;
14585
14586           /* Set the size of the .mdebug section.  */
14587           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14588
14589           /* Skip this section later on (I don't think this currently
14590              matters, but someday it might).  */
14591           o->map_head.link_order = NULL;
14592
14593           mdebug_sec = o;
14594         }
14595
14596       if (CONST_STRNEQ (o->name, ".gptab."))
14597         {
14598           const char *subname;
14599           unsigned int c;
14600           Elf32_gptab *tab;
14601           Elf32_External_gptab *ext_tab;
14602           unsigned int j;
14603
14604           /* The .gptab.sdata and .gptab.sbss sections hold
14605              information describing how the small data area would
14606              change depending upon the -G switch.  These sections
14607              not used in executables files.  */
14608           if (! bfd_link_relocatable (info))
14609             {
14610               for (p = o->map_head.link_order; p != NULL; p = p->next)
14611                 {
14612                   asection *input_section;
14613
14614                   if (p->type != bfd_indirect_link_order)
14615                     {
14616                       if (p->type == bfd_data_link_order)
14617                         continue;
14618                       abort ();
14619                     }
14620
14621                   input_section = p->u.indirect.section;
14622
14623                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
14624                      elf_link_input_bfd ignores this section.  */
14625                   input_section->flags &= ~SEC_HAS_CONTENTS;
14626                 }
14627
14628               /* Skip this section later on (I don't think this
14629                  currently matters, but someday it might).  */
14630               o->map_head.link_order = NULL;
14631
14632               /* Really remove the section.  */
14633               bfd_section_list_remove (abfd, o);
14634               --abfd->section_count;
14635
14636               continue;
14637             }
14638
14639           /* There is one gptab for initialized data, and one for
14640              uninitialized data.  */
14641           if (strcmp (o->name, ".gptab.sdata") == 0)
14642             gptab_data_sec = o;
14643           else if (strcmp (o->name, ".gptab.sbss") == 0)
14644             gptab_bss_sec = o;
14645           else
14646             {
14647               (*_bfd_error_handler)
14648                 (_("%s: illegal section name `%s'"),
14649                  bfd_get_filename (abfd), o->name);
14650               bfd_set_error (bfd_error_nonrepresentable_section);
14651               return FALSE;
14652             }
14653
14654           /* The linker script always combines .gptab.data and
14655              .gptab.sdata into .gptab.sdata, and likewise for
14656              .gptab.bss and .gptab.sbss.  It is possible that there is
14657              no .sdata or .sbss section in the output file, in which
14658              case we must change the name of the output section.  */
14659           subname = o->name + sizeof ".gptab" - 1;
14660           if (bfd_get_section_by_name (abfd, subname) == NULL)
14661             {
14662               if (o == gptab_data_sec)
14663                 o->name = ".gptab.data";
14664               else
14665                 o->name = ".gptab.bss";
14666               subname = o->name + sizeof ".gptab" - 1;
14667               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14668             }
14669
14670           /* Set up the first entry.  */
14671           c = 1;
14672           amt = c * sizeof (Elf32_gptab);
14673           tab = bfd_malloc (amt);
14674           if (tab == NULL)
14675             return FALSE;
14676           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14677           tab[0].gt_header.gt_unused = 0;
14678
14679           /* Combine the input sections.  */
14680           for (p = o->map_head.link_order; p != NULL; p = p->next)
14681             {
14682               asection *input_section;
14683               bfd *input_bfd;
14684               bfd_size_type size;
14685               unsigned long last;
14686               bfd_size_type gpentry;
14687
14688               if (p->type != bfd_indirect_link_order)
14689                 {
14690                   if (p->type == bfd_data_link_order)
14691                     continue;
14692                   abort ();
14693                 }
14694
14695               input_section = p->u.indirect.section;
14696               input_bfd = input_section->owner;
14697
14698               /* Combine the gptab entries for this input section one
14699                  by one.  We know that the input gptab entries are
14700                  sorted by ascending -G value.  */
14701               size = input_section->size;
14702               last = 0;
14703               for (gpentry = sizeof (Elf32_External_gptab);
14704                    gpentry < size;
14705                    gpentry += sizeof (Elf32_External_gptab))
14706                 {
14707                   Elf32_External_gptab ext_gptab;
14708                   Elf32_gptab int_gptab;
14709                   unsigned long val;
14710                   unsigned long add;
14711                   bfd_boolean exact;
14712                   unsigned int look;
14713
14714                   if (! (bfd_get_section_contents
14715                          (input_bfd, input_section, &ext_gptab, gpentry,
14716                           sizeof (Elf32_External_gptab))))
14717                     {
14718                       free (tab);
14719                       return FALSE;
14720                     }
14721
14722                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14723                                                 &int_gptab);
14724                   val = int_gptab.gt_entry.gt_g_value;
14725                   add = int_gptab.gt_entry.gt_bytes - last;
14726
14727                   exact = FALSE;
14728                   for (look = 1; look < c; look++)
14729                     {
14730                       if (tab[look].gt_entry.gt_g_value >= val)
14731                         tab[look].gt_entry.gt_bytes += add;
14732
14733                       if (tab[look].gt_entry.gt_g_value == val)
14734                         exact = TRUE;
14735                     }
14736
14737                   if (! exact)
14738                     {
14739                       Elf32_gptab *new_tab;
14740                       unsigned int max;
14741
14742                       /* We need a new table entry.  */
14743                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14744                       new_tab = bfd_realloc (tab, amt);
14745                       if (new_tab == NULL)
14746                         {
14747                           free (tab);
14748                           return FALSE;
14749                         }
14750                       tab = new_tab;
14751                       tab[c].gt_entry.gt_g_value = val;
14752                       tab[c].gt_entry.gt_bytes = add;
14753
14754                       /* Merge in the size for the next smallest -G
14755                          value, since that will be implied by this new
14756                          value.  */
14757                       max = 0;
14758                       for (look = 1; look < c; look++)
14759                         {
14760                           if (tab[look].gt_entry.gt_g_value < val
14761                               && (max == 0
14762                                   || (tab[look].gt_entry.gt_g_value
14763                                       > tab[max].gt_entry.gt_g_value)))
14764                             max = look;
14765                         }
14766                       if (max != 0)
14767                         tab[c].gt_entry.gt_bytes +=
14768                           tab[max].gt_entry.gt_bytes;
14769
14770                       ++c;
14771                     }
14772
14773                   last = int_gptab.gt_entry.gt_bytes;
14774                 }
14775
14776               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14777                  elf_link_input_bfd ignores this section.  */
14778               input_section->flags &= ~SEC_HAS_CONTENTS;
14779             }
14780
14781           /* The table must be sorted by -G value.  */
14782           if (c > 2)
14783             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14784
14785           /* Swap out the table.  */
14786           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14787           ext_tab = bfd_alloc (abfd, amt);
14788           if (ext_tab == NULL)
14789             {
14790               free (tab);
14791               return FALSE;
14792             }
14793
14794           for (j = 0; j < c; j++)
14795             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14796           free (tab);
14797
14798           o->size = c * sizeof (Elf32_External_gptab);
14799           o->contents = (bfd_byte *) ext_tab;
14800
14801           /* Skip this section later on (I don't think this currently
14802              matters, but someday it might).  */
14803           o->map_head.link_order = NULL;
14804         }
14805     }
14806
14807   /* Invoke the regular ELF backend linker to do all the work.  */
14808   if (!bfd_elf_final_link (abfd, info))
14809     return FALSE;
14810
14811   /* Now write out the computed sections.  */
14812
14813   if (abiflags_sec != NULL)
14814     {
14815       Elf_External_ABIFlags_v0 ext;
14816       Elf_Internal_ABIFlags_v0 *abiflags;
14817
14818       abiflags = &mips_elf_tdata (abfd)->abiflags;
14819
14820       /* Set up the abiflags if no valid input sections were found.  */
14821       if (!mips_elf_tdata (abfd)->abiflags_valid)
14822         {
14823           infer_mips_abiflags (abfd, abiflags);
14824           mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14825         }
14826       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14827       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14828         return FALSE;
14829     }
14830
14831   if (reginfo_sec != NULL)
14832     {
14833       Elf32_External_RegInfo ext;
14834
14835       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14836       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14837         return FALSE;
14838     }
14839
14840   if (mdebug_sec != NULL)
14841     {
14842       BFD_ASSERT (abfd->output_has_begun);
14843       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14844                                                swap, info,
14845                                                mdebug_sec->filepos))
14846         return FALSE;
14847
14848       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14849     }
14850
14851   if (gptab_data_sec != NULL)
14852     {
14853       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14854                                       gptab_data_sec->contents,
14855                                       0, gptab_data_sec->size))
14856         return FALSE;
14857     }
14858
14859   if (gptab_bss_sec != NULL)
14860     {
14861       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14862                                       gptab_bss_sec->contents,
14863                                       0, gptab_bss_sec->size))
14864         return FALSE;
14865     }
14866
14867   if (SGI_COMPAT (abfd))
14868     {
14869       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14870       if (rtproc_sec != NULL)
14871         {
14872           if (! bfd_set_section_contents (abfd, rtproc_sec,
14873                                           rtproc_sec->contents,
14874                                           0, rtproc_sec->size))
14875             return FALSE;
14876         }
14877     }
14878
14879   return TRUE;
14880 }
14881 \f
14882 /* Merge object file header flags from IBFD into OBFD.  Raise an error
14883    if there are conflicting settings.  */
14884
14885 static bfd_boolean
14886 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
14887 {
14888   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
14889   flagword old_flags;
14890   flagword new_flags;
14891   bfd_boolean ok;
14892
14893   new_flags = elf_elfheader (ibfd)->e_flags;
14894   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14895   old_flags = elf_elfheader (obfd)->e_flags;
14896
14897   /* Check flag compatibility.  */
14898
14899   new_flags &= ~EF_MIPS_NOREORDER;
14900   old_flags &= ~EF_MIPS_NOREORDER;
14901
14902   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14903      doesn't seem to matter.  */
14904   new_flags &= ~EF_MIPS_XGOT;
14905   old_flags &= ~EF_MIPS_XGOT;
14906
14907   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14908      just be able to ignore this.  */
14909   new_flags &= ~EF_MIPS_UCODE;
14910   old_flags &= ~EF_MIPS_UCODE;
14911
14912   /* DSOs should only be linked with CPIC code.  */
14913   if ((ibfd->flags & DYNAMIC) != 0)
14914     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14915
14916   if (new_flags == old_flags)
14917     return TRUE;
14918
14919   ok = TRUE;
14920
14921   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14922       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14923     {
14924       (*_bfd_error_handler)
14925         (_("%B: warning: linking abicalls files with non-abicalls files"),
14926          ibfd);
14927       ok = TRUE;
14928     }
14929
14930   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14931     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14932   if (! (new_flags & EF_MIPS_PIC))
14933     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14934
14935   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14936   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14937
14938   /* Compare the ISAs.  */
14939   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14940     {
14941       (*_bfd_error_handler)
14942         (_("%B: linking 32-bit code with 64-bit code"),
14943          ibfd);
14944       ok = FALSE;
14945     }
14946   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14947     {
14948       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14949       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14950         {
14951           /* Copy the architecture info from IBFD to OBFD.  Also copy
14952              the 32-bit flag (if set) so that we continue to recognise
14953              OBFD as a 32-bit binary.  */
14954           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14955           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14956           elf_elfheader (obfd)->e_flags
14957             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14958
14959           /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
14960           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
14961
14962           /* Copy across the ABI flags if OBFD doesn't use them
14963              and if that was what caused us to treat IBFD as 32-bit.  */
14964           if ((old_flags & EF_MIPS_ABI) == 0
14965               && mips_32bit_flags_p (new_flags)
14966               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14967             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
14968         }
14969       else
14970         {
14971           /* The ISAs aren't compatible.  */
14972           (*_bfd_error_handler)
14973             (_("%B: linking %s module with previous %s modules"),
14974              ibfd,
14975              bfd_printable_name (ibfd),
14976              bfd_printable_name (obfd));
14977           ok = FALSE;
14978         }
14979     }
14980
14981   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14982   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14983
14984   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
14985      does set EI_CLASS differently from any 32-bit ABI.  */
14986   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
14987       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14988           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14989     {
14990       /* Only error if both are set (to different values).  */
14991       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
14992           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
14993               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
14994         {
14995           (*_bfd_error_handler)
14996             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
14997              ibfd,
14998              elf_mips_abi_name (ibfd),
14999              elf_mips_abi_name (obfd));
15000           ok = FALSE;
15001         }
15002       new_flags &= ~EF_MIPS_ABI;
15003       old_flags &= ~EF_MIPS_ABI;
15004     }
15005
15006   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15007      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15008   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15009     {
15010       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15011       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15012       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15013       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15014       int micro_mis = old_m16 && new_micro;
15015       int m16_mis = old_micro && new_m16;
15016
15017       if (m16_mis || micro_mis)
15018         {
15019           (*_bfd_error_handler)
15020             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15021              ibfd,
15022              m16_mis ? "MIPS16" : "microMIPS",
15023              m16_mis ? "microMIPS" : "MIPS16");
15024           ok = FALSE;
15025         }
15026
15027       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15028
15029       new_flags &= ~ EF_MIPS_ARCH_ASE;
15030       old_flags &= ~ EF_MIPS_ARCH_ASE;
15031     }
15032
15033   /* Compare NaN encodings.  */
15034   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15035     {
15036       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15037                           ibfd,
15038                           (new_flags & EF_MIPS_NAN2008
15039                            ? "-mnan=2008" : "-mnan=legacy"),
15040                           (old_flags & EF_MIPS_NAN2008
15041                            ? "-mnan=2008" : "-mnan=legacy"));
15042       ok = FALSE;
15043       new_flags &= ~EF_MIPS_NAN2008;
15044       old_flags &= ~EF_MIPS_NAN2008;
15045     }
15046
15047   /* Compare FP64 state.  */
15048   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15049     {
15050       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15051                           ibfd,
15052                           (new_flags & EF_MIPS_FP64
15053                            ? "-mfp64" : "-mfp32"),
15054                           (old_flags & EF_MIPS_FP64
15055                            ? "-mfp64" : "-mfp32"));
15056       ok = FALSE;
15057       new_flags &= ~EF_MIPS_FP64;
15058       old_flags &= ~EF_MIPS_FP64;
15059     }
15060
15061   /* Warn about any other mismatches */
15062   if (new_flags != old_flags)
15063     {
15064       (*_bfd_error_handler)
15065         (_("%B: uses different e_flags (0x%lx) fields than previous modules "
15066            "(0x%lx)"),
15067          ibfd, (unsigned long) new_flags,
15068          (unsigned long) old_flags);
15069       ok = FALSE;
15070     }
15071
15072   return ok;
15073 }
15074
15075 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15076    there are conflicting attributes.  */
15077 static bfd_boolean
15078 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15079 {
15080   obj_attribute *in_attr;
15081   obj_attribute *out_attr;
15082   bfd *abi_fp_bfd;
15083   bfd *abi_msa_bfd;
15084
15085   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15086   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15087   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15088     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15089
15090   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15091   if (!abi_msa_bfd
15092       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15093     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15094
15095   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15096     {
15097       /* This is the first object.  Copy the attributes.  */
15098       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15099
15100       /* Use the Tag_null value to indicate the attributes have been
15101          initialized.  */
15102       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15103
15104       return TRUE;
15105     }
15106
15107   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15108      non-conflicting ones.  */
15109   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15110   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15111     {
15112       int out_fp, in_fp;
15113
15114       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15115       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15116       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15117       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15118         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15119       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15120                && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15121                    || in_fp == Val_GNU_MIPS_ABI_FP_64
15122                    || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15123         {
15124           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15125           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15126         }
15127       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15128                && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15129                    || out_fp == Val_GNU_MIPS_ABI_FP_64
15130                    || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15131         /* Keep the current setting.  */;
15132       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15133                && in_fp == Val_GNU_MIPS_ABI_FP_64)
15134         {
15135           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15136           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15137         }
15138       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15139                && out_fp == Val_GNU_MIPS_ABI_FP_64)
15140         /* Keep the current setting.  */;
15141       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15142         {
15143           const char *out_string, *in_string;
15144
15145           out_string = _bfd_mips_fp_abi_string (out_fp);
15146           in_string = _bfd_mips_fp_abi_string (in_fp);
15147           /* First warn about cases involving unrecognised ABIs.  */
15148           if (!out_string && !in_string)
15149             _bfd_error_handler
15150               (_("Warning: %B uses unknown floating point ABI %d "
15151                  "(set by %B), %B uses unknown floating point ABI %d"),
15152                obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15153           else if (!out_string)
15154             _bfd_error_handler
15155               (_("Warning: %B uses unknown floating point ABI %d "
15156                  "(set by %B), %B uses %s"),
15157                obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15158           else if (!in_string)
15159             _bfd_error_handler
15160               (_("Warning: %B uses %s (set by %B), "
15161                  "%B uses unknown floating point ABI %d"),
15162                obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15163           else
15164             {
15165               /* If one of the bfds is soft-float, the other must be
15166                  hard-float.  The exact choice of hard-float ABI isn't
15167                  really relevant to the error message.  */
15168               if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15169                 out_string = "-mhard-float";
15170               else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15171                 in_string = "-mhard-float";
15172               _bfd_error_handler
15173                 (_("Warning: %B uses %s (set by %B), %B uses %s"),
15174                  obfd, abi_fp_bfd, ibfd, out_string, in_string);
15175             }
15176         }
15177     }
15178
15179   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15180      non-conflicting ones.  */
15181   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15182     {
15183       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15184       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15185         out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15186       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15187         switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15188           {
15189           case Val_GNU_MIPS_ABI_MSA_128:
15190             _bfd_error_handler
15191               (_("Warning: %B uses %s (set by %B), "
15192                  "%B uses unknown MSA ABI %d"),
15193                obfd, abi_msa_bfd, ibfd,
15194                "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15195             break;
15196
15197           default:
15198             switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15199               {
15200               case Val_GNU_MIPS_ABI_MSA_128:
15201                 _bfd_error_handler
15202                   (_("Warning: %B uses unknown MSA ABI %d "
15203                      "(set by %B), %B uses %s"),
15204                      obfd, abi_msa_bfd, ibfd,
15205                      out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15206                   break;
15207
15208               default:
15209                 _bfd_error_handler
15210                   (_("Warning: %B uses unknown MSA ABI %d "
15211                      "(set by %B), %B uses unknown MSA ABI %d"),
15212                    obfd, abi_msa_bfd, ibfd,
15213                    out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15214                    in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15215                 break;
15216               }
15217           }
15218     }
15219
15220   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15221   return _bfd_elf_merge_object_attributes (ibfd, obfd);
15222 }
15223
15224 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15225    there are conflicting settings.  */
15226
15227 static bfd_boolean
15228 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15229 {
15230   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15231   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15232   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15233
15234   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15235   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15236
15237 #define max(a, b) ((a) > (b) ? (a) : (b))
15238   /* Merge abiflags.  */
15239   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15240                                        in_tdata->abiflags.isa_level);
15241   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15242                                      in_tdata->abiflags.isa_rev);
15243   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15244                                       in_tdata->abiflags.gpr_size);
15245   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15246                                        in_tdata->abiflags.cpr1_size);
15247   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15248                                        in_tdata->abiflags.cpr2_size);
15249 #undef max
15250   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15251   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15252
15253   return TRUE;
15254 }
15255
15256 /* Merge backend specific data from an object file to the output
15257    object file when linking.  */
15258
15259 bfd_boolean
15260 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15261 {
15262   struct mips_elf_obj_tdata *out_tdata;
15263   struct mips_elf_obj_tdata *in_tdata;
15264   bfd_boolean null_input_bfd = TRUE;
15265   asection *sec;
15266   bfd_boolean ok;
15267
15268   /* Check if we have the same endianness.  */
15269   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15270     {
15271       (*_bfd_error_handler)
15272         (_("%B: endianness incompatible with that of the selected emulation"),
15273          ibfd);
15274       return FALSE;
15275     }
15276
15277   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15278     return TRUE;
15279
15280   in_tdata = mips_elf_tdata (ibfd);
15281   out_tdata = mips_elf_tdata (obfd);
15282
15283   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15284     {
15285       (*_bfd_error_handler)
15286         (_("%B: ABI is incompatible with that of the selected emulation"),
15287          ibfd);
15288       return FALSE;
15289     }
15290
15291   /* Check to see if the input BFD actually contains any sections.  If not,
15292      then it has no attributes, and its flags may not have been initialized
15293      either, but it cannot actually cause any incompatibility.  */
15294   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15295     {
15296       /* Ignore synthetic sections and empty .text, .data and .bss sections
15297          which are automatically generated by gas.  Also ignore fake
15298          (s)common sections, since merely defining a common symbol does
15299          not affect compatibility.  */
15300       if ((sec->flags & SEC_IS_COMMON) == 0
15301           && strcmp (sec->name, ".reginfo")
15302           && strcmp (sec->name, ".mdebug")
15303           && (sec->size != 0
15304               || (strcmp (sec->name, ".text")
15305                   && strcmp (sec->name, ".data")
15306                   && strcmp (sec->name, ".bss"))))
15307         {
15308           null_input_bfd = FALSE;
15309           break;
15310         }
15311     }
15312   if (null_input_bfd)
15313     return TRUE;
15314
15315   /* Populate abiflags using existing information.  */
15316   if (in_tdata->abiflags_valid)
15317     {
15318       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15319       Elf_Internal_ABIFlags_v0 in_abiflags;
15320       Elf_Internal_ABIFlags_v0 abiflags;
15321
15322       /* Set up the FP ABI attribute from the abiflags if it is not already
15323          set.  */
15324       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15325         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15326
15327       infer_mips_abiflags (ibfd, &abiflags);
15328       in_abiflags = in_tdata->abiflags;
15329
15330       /* It is not possible to infer the correct ISA revision
15331          for R3 or R5 so drop down to R2 for the checks.  */
15332       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15333         in_abiflags.isa_rev = 2;
15334
15335       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15336           < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15337         (*_bfd_error_handler)
15338           (_("%B: warning: Inconsistent ISA between e_flags and "
15339              ".MIPS.abiflags"), ibfd);
15340       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15341           && in_abiflags.fp_abi != abiflags.fp_abi)
15342         (*_bfd_error_handler)
15343           (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15344              ".MIPS.abiflags"), ibfd);
15345       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15346         (*_bfd_error_handler)
15347           (_("%B: warning: Inconsistent ASEs between e_flags and "
15348              ".MIPS.abiflags"), ibfd);
15349       /* The isa_ext is allowed to be an extension of what can be inferred
15350          from e_flags.  */
15351       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15352                                 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15353         (*_bfd_error_handler)
15354           (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15355              ".MIPS.abiflags"), ibfd);
15356       if (in_abiflags.flags2 != 0)
15357         (*_bfd_error_handler)
15358           (_("%B: warning: Unexpected flag in the flags2 field of "
15359              ".MIPS.abiflags (0x%lx)"), ibfd,
15360            (unsigned long) in_abiflags.flags2);
15361     }
15362   else
15363     {
15364       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15365       in_tdata->abiflags_valid = TRUE;
15366     }
15367
15368   if (!out_tdata->abiflags_valid)
15369     {
15370       /* Copy input abiflags if output abiflags are not already valid.  */
15371       out_tdata->abiflags = in_tdata->abiflags;
15372       out_tdata->abiflags_valid = TRUE;
15373     }
15374
15375   if (! elf_flags_init (obfd))
15376     {
15377       elf_flags_init (obfd) = TRUE;
15378       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15379       elf_elfheader (obfd)->e_ident[EI_CLASS]
15380         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15381
15382       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15383           && (bfd_get_arch_info (obfd)->the_default
15384               || mips_mach_extends_p (bfd_get_mach (obfd),
15385                                       bfd_get_mach (ibfd))))
15386         {
15387           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15388                                    bfd_get_mach (ibfd)))
15389             return FALSE;
15390
15391           /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15392           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15393         }
15394
15395       ok = TRUE;
15396     }
15397   else
15398     ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15399
15400   ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15401
15402   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15403
15404   if (!ok)
15405     {
15406       bfd_set_error (bfd_error_bad_value);
15407       return FALSE;
15408     }
15409
15410   return TRUE;
15411 }
15412
15413 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15414
15415 bfd_boolean
15416 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15417 {
15418   BFD_ASSERT (!elf_flags_init (abfd)
15419               || elf_elfheader (abfd)->e_flags == flags);
15420
15421   elf_elfheader (abfd)->e_flags = flags;
15422   elf_flags_init (abfd) = TRUE;
15423   return TRUE;
15424 }
15425
15426 char *
15427 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15428 {
15429   switch (dtag)
15430     {
15431     default: return "";
15432     case DT_MIPS_RLD_VERSION:
15433       return "MIPS_RLD_VERSION";
15434     case DT_MIPS_TIME_STAMP:
15435       return "MIPS_TIME_STAMP";
15436     case DT_MIPS_ICHECKSUM:
15437       return "MIPS_ICHECKSUM";
15438     case DT_MIPS_IVERSION:
15439       return "MIPS_IVERSION";
15440     case DT_MIPS_FLAGS:
15441       return "MIPS_FLAGS";
15442     case DT_MIPS_BASE_ADDRESS:
15443       return "MIPS_BASE_ADDRESS";
15444     case DT_MIPS_MSYM:
15445       return "MIPS_MSYM";
15446     case DT_MIPS_CONFLICT:
15447       return "MIPS_CONFLICT";
15448     case DT_MIPS_LIBLIST:
15449       return "MIPS_LIBLIST";
15450     case DT_MIPS_LOCAL_GOTNO:
15451       return "MIPS_LOCAL_GOTNO";
15452     case DT_MIPS_CONFLICTNO:
15453       return "MIPS_CONFLICTNO";
15454     case DT_MIPS_LIBLISTNO:
15455       return "MIPS_LIBLISTNO";
15456     case DT_MIPS_SYMTABNO:
15457       return "MIPS_SYMTABNO";
15458     case DT_MIPS_UNREFEXTNO:
15459       return "MIPS_UNREFEXTNO";
15460     case DT_MIPS_GOTSYM:
15461       return "MIPS_GOTSYM";
15462     case DT_MIPS_HIPAGENO:
15463       return "MIPS_HIPAGENO";
15464     case DT_MIPS_RLD_MAP:
15465       return "MIPS_RLD_MAP";
15466     case DT_MIPS_RLD_MAP_REL:
15467       return "MIPS_RLD_MAP_REL";
15468     case DT_MIPS_DELTA_CLASS:
15469       return "MIPS_DELTA_CLASS";
15470     case DT_MIPS_DELTA_CLASS_NO:
15471       return "MIPS_DELTA_CLASS_NO";
15472     case DT_MIPS_DELTA_INSTANCE:
15473       return "MIPS_DELTA_INSTANCE";
15474     case DT_MIPS_DELTA_INSTANCE_NO:
15475       return "MIPS_DELTA_INSTANCE_NO";
15476     case DT_MIPS_DELTA_RELOC:
15477       return "MIPS_DELTA_RELOC";
15478     case DT_MIPS_DELTA_RELOC_NO:
15479       return "MIPS_DELTA_RELOC_NO";
15480     case DT_MIPS_DELTA_SYM:
15481       return "MIPS_DELTA_SYM";
15482     case DT_MIPS_DELTA_SYM_NO:
15483       return "MIPS_DELTA_SYM_NO";
15484     case DT_MIPS_DELTA_CLASSSYM:
15485       return "MIPS_DELTA_CLASSSYM";
15486     case DT_MIPS_DELTA_CLASSSYM_NO:
15487       return "MIPS_DELTA_CLASSSYM_NO";
15488     case DT_MIPS_CXX_FLAGS:
15489       return "MIPS_CXX_FLAGS";
15490     case DT_MIPS_PIXIE_INIT:
15491       return "MIPS_PIXIE_INIT";
15492     case DT_MIPS_SYMBOL_LIB:
15493       return "MIPS_SYMBOL_LIB";
15494     case DT_MIPS_LOCALPAGE_GOTIDX:
15495       return "MIPS_LOCALPAGE_GOTIDX";
15496     case DT_MIPS_LOCAL_GOTIDX:
15497       return "MIPS_LOCAL_GOTIDX";
15498     case DT_MIPS_HIDDEN_GOTIDX:
15499       return "MIPS_HIDDEN_GOTIDX";
15500     case DT_MIPS_PROTECTED_GOTIDX:
15501       return "MIPS_PROTECTED_GOT_IDX";
15502     case DT_MIPS_OPTIONS:
15503       return "MIPS_OPTIONS";
15504     case DT_MIPS_INTERFACE:
15505       return "MIPS_INTERFACE";
15506     case DT_MIPS_DYNSTR_ALIGN:
15507       return "DT_MIPS_DYNSTR_ALIGN";
15508     case DT_MIPS_INTERFACE_SIZE:
15509       return "DT_MIPS_INTERFACE_SIZE";
15510     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15511       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15512     case DT_MIPS_PERF_SUFFIX:
15513       return "DT_MIPS_PERF_SUFFIX";
15514     case DT_MIPS_COMPACT_SIZE:
15515       return "DT_MIPS_COMPACT_SIZE";
15516     case DT_MIPS_GP_VALUE:
15517       return "DT_MIPS_GP_VALUE";
15518     case DT_MIPS_AUX_DYNAMIC:
15519       return "DT_MIPS_AUX_DYNAMIC";
15520     case DT_MIPS_PLTGOT:
15521       return "DT_MIPS_PLTGOT";
15522     case DT_MIPS_RWPLT:
15523       return "DT_MIPS_RWPLT";
15524     }
15525 }
15526
15527 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15528    not known.  */
15529
15530 const char *
15531 _bfd_mips_fp_abi_string (int fp)
15532 {
15533   switch (fp)
15534     {
15535       /* These strings aren't translated because they're simply
15536          option lists.  */
15537     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15538       return "-mdouble-float";
15539
15540     case Val_GNU_MIPS_ABI_FP_SINGLE:
15541       return "-msingle-float";
15542
15543     case Val_GNU_MIPS_ABI_FP_SOFT:
15544       return "-msoft-float";
15545
15546     case Val_GNU_MIPS_ABI_FP_OLD_64:
15547       return _("-mips32r2 -mfp64 (12 callee-saved)");
15548
15549     case Val_GNU_MIPS_ABI_FP_XX:
15550       return "-mfpxx";
15551
15552     case Val_GNU_MIPS_ABI_FP_64:
15553       return "-mgp32 -mfp64";
15554
15555     case Val_GNU_MIPS_ABI_FP_64A:
15556       return "-mgp32 -mfp64 -mno-odd-spreg";
15557
15558     default:
15559       return 0;
15560     }
15561 }
15562
15563 static void
15564 print_mips_ases (FILE *file, unsigned int mask)
15565 {
15566   if (mask & AFL_ASE_DSP)
15567     fputs ("\n\tDSP ASE", file);
15568   if (mask & AFL_ASE_DSPR2)
15569     fputs ("\n\tDSP R2 ASE", file);
15570   if (mask & AFL_ASE_DSPR3)
15571     fputs ("\n\tDSP R3 ASE", file);
15572   if (mask & AFL_ASE_EVA)
15573     fputs ("\n\tEnhanced VA Scheme", file);
15574   if (mask & AFL_ASE_MCU)
15575     fputs ("\n\tMCU (MicroController) ASE", file);
15576   if (mask & AFL_ASE_MDMX)
15577     fputs ("\n\tMDMX ASE", file);
15578   if (mask & AFL_ASE_MIPS3D)
15579     fputs ("\n\tMIPS-3D ASE", file);
15580   if (mask & AFL_ASE_MT)
15581     fputs ("\n\tMT ASE", file);
15582   if (mask & AFL_ASE_SMARTMIPS)
15583     fputs ("\n\tSmartMIPS ASE", file);
15584   if (mask & AFL_ASE_VIRT)
15585     fputs ("\n\tVZ ASE", file);
15586   if (mask & AFL_ASE_MSA)
15587     fputs ("\n\tMSA ASE", file);
15588   if (mask & AFL_ASE_MIPS16)
15589     fputs ("\n\tMIPS16 ASE", file);
15590   if (mask & AFL_ASE_MICROMIPS)
15591     fputs ("\n\tMICROMIPS ASE", file);
15592   if (mask & AFL_ASE_XPA)
15593     fputs ("\n\tXPA ASE", file);
15594   if (mask == 0)
15595     fprintf (file, "\n\t%s", _("None"));
15596   else if ((mask & ~AFL_ASE_MASK) != 0)
15597     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15598 }
15599
15600 static void
15601 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15602 {
15603   switch (isa_ext)
15604     {
15605     case 0:
15606       fputs (_("None"), file);
15607       break;
15608     case AFL_EXT_XLR:
15609       fputs ("RMI XLR", file);
15610       break;
15611     case AFL_EXT_OCTEON3:
15612       fputs ("Cavium Networks Octeon3", file);
15613       break;
15614     case AFL_EXT_OCTEON2:
15615       fputs ("Cavium Networks Octeon2", file);
15616       break;
15617     case AFL_EXT_OCTEONP:
15618       fputs ("Cavium Networks OcteonP", file);
15619       break;
15620     case AFL_EXT_LOONGSON_3A:
15621       fputs ("Loongson 3A", file);
15622       break;
15623     case AFL_EXT_OCTEON:
15624       fputs ("Cavium Networks Octeon", file);
15625       break;
15626     case AFL_EXT_5900:
15627       fputs ("Toshiba R5900", file);
15628       break;
15629     case AFL_EXT_4650:
15630       fputs ("MIPS R4650", file);
15631       break;
15632     case AFL_EXT_4010:
15633       fputs ("LSI R4010", file);
15634       break;
15635     case AFL_EXT_4100:
15636       fputs ("NEC VR4100", file);
15637       break;
15638     case AFL_EXT_3900:
15639       fputs ("Toshiba R3900", file);
15640       break;
15641     case AFL_EXT_10000:
15642       fputs ("MIPS R10000", file);
15643       break;
15644     case AFL_EXT_SB1:
15645       fputs ("Broadcom SB-1", file);
15646       break;
15647     case AFL_EXT_4111:
15648       fputs ("NEC VR4111/VR4181", file);
15649       break;
15650     case AFL_EXT_4120:
15651       fputs ("NEC VR4120", file);
15652       break;
15653     case AFL_EXT_5400:
15654       fputs ("NEC VR5400", file);
15655       break;
15656     case AFL_EXT_5500:
15657       fputs ("NEC VR5500", file);
15658       break;
15659     case AFL_EXT_LOONGSON_2E:
15660       fputs ("ST Microelectronics Loongson 2E", file);
15661       break;
15662     case AFL_EXT_LOONGSON_2F:
15663       fputs ("ST Microelectronics Loongson 2F", file);
15664       break;
15665     default:
15666       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15667       break;
15668     }
15669 }
15670
15671 static void
15672 print_mips_fp_abi_value (FILE *file, int val)
15673 {
15674   switch (val)
15675     {
15676     case Val_GNU_MIPS_ABI_FP_ANY:
15677       fprintf (file, _("Hard or soft float\n"));
15678       break;
15679     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15680       fprintf (file, _("Hard float (double precision)\n"));
15681       break;
15682     case Val_GNU_MIPS_ABI_FP_SINGLE:
15683       fprintf (file, _("Hard float (single precision)\n"));
15684       break;
15685     case Val_GNU_MIPS_ABI_FP_SOFT:
15686       fprintf (file, _("Soft float\n"));
15687       break;
15688     case Val_GNU_MIPS_ABI_FP_OLD_64:
15689       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15690       break;
15691     case Val_GNU_MIPS_ABI_FP_XX:
15692       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15693       break;
15694     case Val_GNU_MIPS_ABI_FP_64:
15695       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15696       break;
15697     case Val_GNU_MIPS_ABI_FP_64A:
15698       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15699       break;
15700     default:
15701       fprintf (file, "??? (%d)\n", val);
15702       break;
15703     }
15704 }
15705
15706 static int
15707 get_mips_reg_size (int reg_size)
15708 {
15709   return (reg_size == AFL_REG_NONE) ? 0
15710          : (reg_size == AFL_REG_32) ? 32
15711          : (reg_size == AFL_REG_64) ? 64
15712          : (reg_size == AFL_REG_128) ? 128
15713          : -1;
15714 }
15715
15716 bfd_boolean
15717 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15718 {
15719   FILE *file = ptr;
15720
15721   BFD_ASSERT (abfd != NULL && ptr != NULL);
15722
15723   /* Print normal ELF private data.  */
15724   _bfd_elf_print_private_bfd_data (abfd, ptr);
15725
15726   /* xgettext:c-format */
15727   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15728
15729   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15730     fprintf (file, _(" [abi=O32]"));
15731   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15732     fprintf (file, _(" [abi=O64]"));
15733   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15734     fprintf (file, _(" [abi=EABI32]"));
15735   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15736     fprintf (file, _(" [abi=EABI64]"));
15737   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15738     fprintf (file, _(" [abi unknown]"));
15739   else if (ABI_N32_P (abfd))
15740     fprintf (file, _(" [abi=N32]"));
15741   else if (ABI_64_P (abfd))
15742     fprintf (file, _(" [abi=64]"));
15743   else
15744     fprintf (file, _(" [no abi set]"));
15745
15746   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15747     fprintf (file, " [mips1]");
15748   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15749     fprintf (file, " [mips2]");
15750   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15751     fprintf (file, " [mips3]");
15752   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15753     fprintf (file, " [mips4]");
15754   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15755     fprintf (file, " [mips5]");
15756   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15757     fprintf (file, " [mips32]");
15758   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15759     fprintf (file, " [mips64]");
15760   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15761     fprintf (file, " [mips32r2]");
15762   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15763     fprintf (file, " [mips64r2]");
15764   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15765     fprintf (file, " [mips32r6]");
15766   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15767     fprintf (file, " [mips64r6]");
15768   else
15769     fprintf (file, _(" [unknown ISA]"));
15770
15771   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15772     fprintf (file, " [mdmx]");
15773
15774   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15775     fprintf (file, " [mips16]");
15776
15777   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15778     fprintf (file, " [micromips]");
15779
15780   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15781     fprintf (file, " [nan2008]");
15782
15783   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15784     fprintf (file, " [old fp64]");
15785
15786   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15787     fprintf (file, " [32bitmode]");
15788   else
15789     fprintf (file, _(" [not 32bitmode]"));
15790
15791   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15792     fprintf (file, " [noreorder]");
15793
15794   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15795     fprintf (file, " [PIC]");
15796
15797   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15798     fprintf (file, " [CPIC]");
15799
15800   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15801     fprintf (file, " [XGOT]");
15802
15803   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15804     fprintf (file, " [UCODE]");
15805
15806   fputc ('\n', file);
15807
15808   if (mips_elf_tdata (abfd)->abiflags_valid)
15809     {
15810       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15811       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15812       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15813       if (abiflags->isa_rev > 1)
15814         fprintf (file, "r%d", abiflags->isa_rev);
15815       fprintf (file, "\nGPR size: %d",
15816                get_mips_reg_size (abiflags->gpr_size));
15817       fprintf (file, "\nCPR1 size: %d",
15818                get_mips_reg_size (abiflags->cpr1_size));
15819       fprintf (file, "\nCPR2 size: %d",
15820                get_mips_reg_size (abiflags->cpr2_size));
15821       fputs ("\nFP ABI: ", file);
15822       print_mips_fp_abi_value (file, abiflags->fp_abi);
15823       fputs ("ISA Extension: ", file);
15824       print_mips_isa_ext (file, abiflags->isa_ext);
15825       fputs ("\nASEs:", file);
15826       print_mips_ases (file, abiflags->ases);
15827       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15828       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15829       fputc ('\n', file);
15830     }
15831
15832   return TRUE;
15833 }
15834
15835 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15836 {
15837   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15838   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15839   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15840   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15841   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15842   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15843   { NULL,                     0,  0, 0,              0 }
15844 };
15845
15846 /* Merge non visibility st_other attributes.  Ensure that the
15847    STO_OPTIONAL flag is copied into h->other, even if this is not a
15848    definiton of the symbol.  */
15849 void
15850 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15851                                       const Elf_Internal_Sym *isym,
15852                                       bfd_boolean definition,
15853                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
15854 {
15855   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15856     {
15857       unsigned char other;
15858
15859       other = (definition ? isym->st_other : h->other);
15860       other &= ~ELF_ST_VISIBILITY (-1);
15861       h->other = other | ELF_ST_VISIBILITY (h->other);
15862     }
15863
15864   if (!definition
15865       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15866     h->other |= STO_OPTIONAL;
15867 }
15868
15869 /* Decide whether an undefined symbol is special and can be ignored.
15870    This is the case for OPTIONAL symbols on IRIX.  */
15871 bfd_boolean
15872 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15873 {
15874   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15875 }
15876
15877 bfd_boolean
15878 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15879 {
15880   return (sym->st_shndx == SHN_COMMON
15881           || sym->st_shndx == SHN_MIPS_ACOMMON
15882           || sym->st_shndx == SHN_MIPS_SCOMMON);
15883 }
15884
15885 /* Return address for Ith PLT stub in section PLT, for relocation REL
15886    or (bfd_vma) -1 if it should not be included.  */
15887
15888 bfd_vma
15889 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15890                            const arelent *rel ATTRIBUTE_UNUSED)
15891 {
15892   return (plt->vma
15893           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15894           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15895 }
15896
15897 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15898    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15899    and .got.plt and also the slots may be of a different size each we walk
15900    the PLT manually fetching instructions and matching them against known
15901    patterns.  To make things easier standard MIPS slots, if any, always come
15902    first.  As we don't create proper ELF symbols we use the UDATA.I member
15903    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15904    with the ST_OTHER member of the ELF symbol.  */
15905
15906 long
15907 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15908                                     long symcount ATTRIBUTE_UNUSED,
15909                                     asymbol **syms ATTRIBUTE_UNUSED,
15910                                     long dynsymcount, asymbol **dynsyms,
15911                                     asymbol **ret)
15912 {
15913   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15914   static const char microsuffix[] = "@micromipsplt";
15915   static const char m16suffix[] = "@mips16plt";
15916   static const char mipssuffix[] = "@plt";
15917
15918   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15919   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15920   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15921   Elf_Internal_Shdr *hdr;
15922   bfd_byte *plt_data;
15923   bfd_vma plt_offset;
15924   unsigned int other;
15925   bfd_vma entry_size;
15926   bfd_vma plt0_size;
15927   asection *relplt;
15928   bfd_vma opcode;
15929   asection *plt;
15930   asymbol *send;
15931   size_t size;
15932   char *names;
15933   long counti;
15934   arelent *p;
15935   asymbol *s;
15936   char *nend;
15937   long count;
15938   long pi;
15939   long i;
15940   long n;
15941
15942   *ret = NULL;
15943
15944   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15945     return 0;
15946
15947   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15948   if (relplt == NULL)
15949     return 0;
15950
15951   hdr = &elf_section_data (relplt)->this_hdr;
15952   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15953     return 0;
15954
15955   plt = bfd_get_section_by_name (abfd, ".plt");
15956   if (plt == NULL)
15957     return 0;
15958
15959   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15960   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15961     return -1;
15962   p = relplt->relocation;
15963
15964   /* Calculating the exact amount of space required for symbols would
15965      require two passes over the PLT, so just pessimise assuming two
15966      PLT slots per relocation.  */
15967   count = relplt->size / hdr->sh_entsize;
15968   counti = count * bed->s->int_rels_per_ext_rel;
15969   size = 2 * count * sizeof (asymbol);
15970   size += count * (sizeof (mipssuffix) +
15971                    (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
15972   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
15973     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
15974
15975   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
15976   size += sizeof (asymbol) + sizeof (pltname);
15977
15978   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
15979     return -1;
15980
15981   if (plt->size < 16)
15982     return -1;
15983
15984   s = *ret = bfd_malloc (size);
15985   if (s == NULL)
15986     return -1;
15987   send = s + 2 * count + 1;
15988
15989   names = (char *) send;
15990   nend = (char *) s + size;
15991   n = 0;
15992
15993   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
15994   if (opcode == 0x3302fffe)
15995     {
15996       if (!micromips_p)
15997         return -1;
15998       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
15999       other = STO_MICROMIPS;
16000     }
16001   else if (opcode == 0x0398c1d0)
16002     {
16003       if (!micromips_p)
16004         return -1;
16005       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16006       other = STO_MICROMIPS;
16007     }
16008   else
16009     {
16010       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16011       other = 0;
16012     }
16013
16014   s->the_bfd = abfd;
16015   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16016   s->section = plt;
16017   s->value = 0;
16018   s->name = names;
16019   s->udata.i = other;
16020   memcpy (names, pltname, sizeof (pltname));
16021   names += sizeof (pltname);
16022   ++s, ++n;
16023
16024   pi = 0;
16025   for (plt_offset = plt0_size;
16026        plt_offset + 8 <= plt->size && s < send;
16027        plt_offset += entry_size)
16028     {
16029       bfd_vma gotplt_addr;
16030       const char *suffix;
16031       bfd_vma gotplt_hi;
16032       bfd_vma gotplt_lo;
16033       size_t suffixlen;
16034
16035       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16036
16037       /* Check if the second word matches the expected MIPS16 instruction.  */
16038       if (opcode == 0x651aeb00)
16039         {
16040           if (micromips_p)
16041             return -1;
16042           /* Truncated table???  */
16043           if (plt_offset + 16 > plt->size)
16044             break;
16045           gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16046           entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16047           suffixlen = sizeof (m16suffix);
16048           suffix = m16suffix;
16049           other = STO_MIPS16;
16050         }
16051       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16052       else if (opcode == 0xff220000)
16053         {
16054           if (!micromips_p)
16055             return -1;
16056           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16057           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16058           gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16059           gotplt_lo <<= 2;
16060           gotplt_addr = gotplt_hi + gotplt_lo;
16061           gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16062           entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16063           suffixlen = sizeof (microsuffix);
16064           suffix = microsuffix;
16065           other = STO_MICROMIPS;
16066         }
16067       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16068       else if ((opcode & 0xffff0000) == 0xff2f0000)
16069         {
16070           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16071           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16072           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16073           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16074           gotplt_addr = gotplt_hi + gotplt_lo;
16075           entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16076           suffixlen = sizeof (microsuffix);
16077           suffix = microsuffix;
16078           other = STO_MICROMIPS;
16079         }
16080       /* Otherwise assume standard MIPS code.  */
16081       else
16082         {
16083           gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16084           gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16085           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16086           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16087           gotplt_addr = gotplt_hi + gotplt_lo;
16088           entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16089           suffixlen = sizeof (mipssuffix);
16090           suffix = mipssuffix;
16091           other = 0;
16092         }
16093       /* Truncated table???  */
16094       if (plt_offset + entry_size > plt->size)
16095         break;
16096
16097       for (i = 0;
16098            i < count && p[pi].address != gotplt_addr;
16099            i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16100
16101       if (i < count)
16102         {
16103           size_t namelen;
16104           size_t len;
16105
16106           *s = **p[pi].sym_ptr_ptr;
16107           /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16108              we are defining a symbol, ensure one of them is set.  */
16109           if ((s->flags & BSF_LOCAL) == 0)
16110             s->flags |= BSF_GLOBAL;
16111           s->flags |= BSF_SYNTHETIC;
16112           s->section = plt;
16113           s->value = plt_offset;
16114           s->name = names;
16115           s->udata.i = other;
16116
16117           len = strlen ((*p[pi].sym_ptr_ptr)->name);
16118           namelen = len + suffixlen;
16119           if (names + namelen > nend)
16120             break;
16121
16122           memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16123           names += len;
16124           memcpy (names, suffix, suffixlen);
16125           names += suffixlen;
16126
16127           ++s, ++n;
16128           pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16129         }
16130     }
16131
16132   free (plt_data);
16133
16134   return n;
16135 }
16136
16137 void
16138 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16139 {
16140   struct mips_elf_link_hash_table *htab;
16141   Elf_Internal_Ehdr *i_ehdrp;
16142
16143   i_ehdrp = elf_elfheader (abfd);
16144   if (link_info)
16145     {
16146       htab = mips_elf_hash_table (link_info);
16147       BFD_ASSERT (htab != NULL);
16148
16149       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16150         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16151     }
16152
16153   _bfd_elf_post_process_headers (abfd, link_info);
16154
16155   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16156       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16157     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16158
16159   if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16160     i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16161 }
16162
16163 int
16164 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16165 {
16166   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16167 }
16168
16169 /* Return the opcode for can't unwind.  */
16170
16171 int
16172 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16173 {
16174   return COMPACT_EH_CANT_UNWIND_OPCODE;
16175 }