Convert indirect calls to direct when possible.
[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    Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2096    relocatable field is shifted by 1 rather than 2 and the same bit
2097    shuffling is done as with the relocations above.  */
2098
2099 static inline bfd_boolean
2100 mips16_reloc_p (int r_type)
2101 {
2102   switch (r_type)
2103     {
2104     case R_MIPS16_26:
2105     case R_MIPS16_GPREL:
2106     case R_MIPS16_GOT16:
2107     case R_MIPS16_CALL16:
2108     case R_MIPS16_HI16:
2109     case R_MIPS16_LO16:
2110     case R_MIPS16_TLS_GD:
2111     case R_MIPS16_TLS_LDM:
2112     case R_MIPS16_TLS_DTPREL_HI16:
2113     case R_MIPS16_TLS_DTPREL_LO16:
2114     case R_MIPS16_TLS_GOTTPREL:
2115     case R_MIPS16_TLS_TPREL_HI16:
2116     case R_MIPS16_TLS_TPREL_LO16:
2117     case R_MIPS16_PC16_S1:
2118       return TRUE;
2119
2120     default:
2121       return FALSE;
2122     }
2123 }
2124
2125 /* Check if a microMIPS reloc.  */
2126
2127 static inline bfd_boolean
2128 micromips_reloc_p (unsigned int r_type)
2129 {
2130   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2131 }
2132
2133 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2134    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2135    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2136
2137 static inline bfd_boolean
2138 micromips_reloc_shuffle_p (unsigned int r_type)
2139 {
2140   return (micromips_reloc_p (r_type)
2141           && r_type != R_MICROMIPS_PC7_S1
2142           && r_type != R_MICROMIPS_PC10_S1);
2143 }
2144
2145 static inline bfd_boolean
2146 got16_reloc_p (int r_type)
2147 {
2148   return (r_type == R_MIPS_GOT16
2149           || r_type == R_MIPS16_GOT16
2150           || r_type == R_MICROMIPS_GOT16);
2151 }
2152
2153 static inline bfd_boolean
2154 call16_reloc_p (int r_type)
2155 {
2156   return (r_type == R_MIPS_CALL16
2157           || r_type == R_MIPS16_CALL16
2158           || r_type == R_MICROMIPS_CALL16);
2159 }
2160
2161 static inline bfd_boolean
2162 got_disp_reloc_p (unsigned int r_type)
2163 {
2164   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2165 }
2166
2167 static inline bfd_boolean
2168 got_page_reloc_p (unsigned int r_type)
2169 {
2170   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2171 }
2172
2173 static inline bfd_boolean
2174 got_lo16_reloc_p (unsigned int r_type)
2175 {
2176   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2177 }
2178
2179 static inline bfd_boolean
2180 call_hi16_reloc_p (unsigned int r_type)
2181 {
2182   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2183 }
2184
2185 static inline bfd_boolean
2186 call_lo16_reloc_p (unsigned int r_type)
2187 {
2188   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2189 }
2190
2191 static inline bfd_boolean
2192 hi16_reloc_p (int r_type)
2193 {
2194   return (r_type == R_MIPS_HI16
2195           || r_type == R_MIPS16_HI16
2196           || r_type == R_MICROMIPS_HI16
2197           || r_type == R_MIPS_PCHI16);
2198 }
2199
2200 static inline bfd_boolean
2201 lo16_reloc_p (int r_type)
2202 {
2203   return (r_type == R_MIPS_LO16
2204           || r_type == R_MIPS16_LO16
2205           || r_type == R_MICROMIPS_LO16
2206           || r_type == R_MIPS_PCLO16);
2207 }
2208
2209 static inline bfd_boolean
2210 mips16_call_reloc_p (int r_type)
2211 {
2212   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2213 }
2214
2215 static inline bfd_boolean
2216 jal_reloc_p (int r_type)
2217 {
2218   return (r_type == R_MIPS_26
2219           || r_type == R_MIPS16_26
2220           || r_type == R_MICROMIPS_26_S1);
2221 }
2222
2223 static inline bfd_boolean
2224 b_reloc_p (int r_type)
2225 {
2226   return (r_type == R_MIPS_PC26_S2
2227           || r_type == R_MIPS_PC21_S2
2228           || r_type == R_MIPS_PC16
2229           || r_type == R_MIPS_GNU_REL16_S2
2230           || r_type == R_MIPS16_PC16_S1);
2231 }
2232
2233 static inline bfd_boolean
2234 aligned_pcrel_reloc_p (int r_type)
2235 {
2236   return (r_type == R_MIPS_PC18_S3
2237           || r_type == R_MIPS_PC19_S2);
2238 }
2239
2240 static inline bfd_boolean
2241 mips16_branch_reloc_p (int r_type)
2242 {
2243   return (r_type == R_MIPS16_26
2244           || r_type == R_MIPS16_PC16_S1);
2245 }
2246
2247 static inline bfd_boolean
2248 micromips_branch_reloc_p (int r_type)
2249 {
2250   return (r_type == R_MICROMIPS_26_S1
2251           || r_type == R_MICROMIPS_PC16_S1
2252           || r_type == R_MICROMIPS_PC10_S1
2253           || r_type == R_MICROMIPS_PC7_S1);
2254 }
2255
2256 static inline bfd_boolean
2257 tls_gd_reloc_p (unsigned int r_type)
2258 {
2259   return (r_type == R_MIPS_TLS_GD
2260           || r_type == R_MIPS16_TLS_GD
2261           || r_type == R_MICROMIPS_TLS_GD);
2262 }
2263
2264 static inline bfd_boolean
2265 tls_ldm_reloc_p (unsigned int r_type)
2266 {
2267   return (r_type == R_MIPS_TLS_LDM
2268           || r_type == R_MIPS16_TLS_LDM
2269           || r_type == R_MICROMIPS_TLS_LDM);
2270 }
2271
2272 static inline bfd_boolean
2273 tls_gottprel_reloc_p (unsigned int r_type)
2274 {
2275   return (r_type == R_MIPS_TLS_GOTTPREL
2276           || r_type == R_MIPS16_TLS_GOTTPREL
2277           || r_type == R_MICROMIPS_TLS_GOTTPREL);
2278 }
2279
2280 void
2281 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2282                                bfd_boolean jal_shuffle, bfd_byte *data)
2283 {
2284   bfd_vma first, second, val;
2285
2286   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2287     return;
2288
2289   /* Pick up the first and second halfwords of the instruction.  */
2290   first = bfd_get_16 (abfd, data);
2291   second = bfd_get_16 (abfd, data + 2);
2292   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2293     val = first << 16 | second;
2294   else if (r_type != R_MIPS16_26)
2295     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2296            | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2297   else
2298     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2299            | ((first & 0x1f) << 21) | second);
2300   bfd_put_32 (abfd, val, data);
2301 }
2302
2303 void
2304 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2305                              bfd_boolean jal_shuffle, bfd_byte *data)
2306 {
2307   bfd_vma first, second, val;
2308
2309   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2310     return;
2311
2312   val = bfd_get_32 (abfd, data);
2313   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2314     {
2315       second = val & 0xffff;
2316       first = val >> 16;
2317     }
2318   else if (r_type != R_MIPS16_26)
2319     {
2320       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2321       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2322     }
2323   else
2324     {
2325       second = val & 0xffff;
2326       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2327                | ((val >> 21) & 0x1f);
2328     }
2329   bfd_put_16 (abfd, second, data + 2);
2330   bfd_put_16 (abfd, first, data);
2331 }
2332
2333 bfd_reloc_status_type
2334 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2335                                arelent *reloc_entry, asection *input_section,
2336                                bfd_boolean relocatable, void *data, bfd_vma gp)
2337 {
2338   bfd_vma relocation;
2339   bfd_signed_vma val;
2340   bfd_reloc_status_type status;
2341
2342   if (bfd_is_com_section (symbol->section))
2343     relocation = 0;
2344   else
2345     relocation = symbol->value;
2346
2347   relocation += symbol->section->output_section->vma;
2348   relocation += symbol->section->output_offset;
2349
2350   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2351     return bfd_reloc_outofrange;
2352
2353   /* Set val to the offset into the section or symbol.  */
2354   val = reloc_entry->addend;
2355
2356   _bfd_mips_elf_sign_extend (val, 16);
2357
2358   /* Adjust val for the final section location and GP value.  If we
2359      are producing relocatable output, we don't want to do this for
2360      an external symbol.  */
2361   if (! relocatable
2362       || (symbol->flags & BSF_SECTION_SYM) != 0)
2363     val += relocation - gp;
2364
2365   if (reloc_entry->howto->partial_inplace)
2366     {
2367       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2368                                        (bfd_byte *) data
2369                                        + reloc_entry->address);
2370       if (status != bfd_reloc_ok)
2371         return status;
2372     }
2373   else
2374     reloc_entry->addend = val;
2375
2376   if (relocatable)
2377     reloc_entry->address += input_section->output_offset;
2378
2379   return bfd_reloc_ok;
2380 }
2381
2382 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2383    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2384    that contains the relocation field and DATA points to the start of
2385    INPUT_SECTION.  */
2386
2387 struct mips_hi16
2388 {
2389   struct mips_hi16 *next;
2390   bfd_byte *data;
2391   asection *input_section;
2392   arelent rel;
2393 };
2394
2395 /* FIXME: This should not be a static variable.  */
2396
2397 static struct mips_hi16 *mips_hi16_list;
2398
2399 /* A howto special_function for REL *HI16 relocations.  We can only
2400    calculate the correct value once we've seen the partnering
2401    *LO16 relocation, so just save the information for later.
2402
2403    The ABI requires that the *LO16 immediately follow the *HI16.
2404    However, as a GNU extension, we permit an arbitrary number of
2405    *HI16s to be associated with a single *LO16.  This significantly
2406    simplies the relocation handling in gcc.  */
2407
2408 bfd_reloc_status_type
2409 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2410                           asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2411                           asection *input_section, bfd *output_bfd,
2412                           char **error_message ATTRIBUTE_UNUSED)
2413 {
2414   struct mips_hi16 *n;
2415
2416   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2417     return bfd_reloc_outofrange;
2418
2419   n = bfd_malloc (sizeof *n);
2420   if (n == NULL)
2421     return bfd_reloc_outofrange;
2422
2423   n->next = mips_hi16_list;
2424   n->data = data;
2425   n->input_section = input_section;
2426   n->rel = *reloc_entry;
2427   mips_hi16_list = n;
2428
2429   if (output_bfd != NULL)
2430     reloc_entry->address += input_section->output_offset;
2431
2432   return bfd_reloc_ok;
2433 }
2434
2435 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2436    like any other 16-bit relocation when applied to global symbols, but is
2437    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2438
2439 bfd_reloc_status_type
2440 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2441                            void *data, asection *input_section,
2442                            bfd *output_bfd, char **error_message)
2443 {
2444   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2445       || bfd_is_und_section (bfd_get_section (symbol))
2446       || bfd_is_com_section (bfd_get_section (symbol)))
2447     /* The relocation is against a global symbol.  */
2448     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2449                                         input_section, output_bfd,
2450                                         error_message);
2451
2452   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2453                                    input_section, output_bfd, error_message);
2454 }
2455
2456 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2457    is a straightforward 16 bit inplace relocation, but we must deal with
2458    any partnering high-part relocations as well.  */
2459
2460 bfd_reloc_status_type
2461 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2462                           void *data, asection *input_section,
2463                           bfd *output_bfd, char **error_message)
2464 {
2465   bfd_vma vallo;
2466   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2467
2468   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2469     return bfd_reloc_outofrange;
2470
2471   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2472                                  location);
2473   vallo = bfd_get_32 (abfd, location);
2474   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2475                                location);
2476
2477   while (mips_hi16_list != NULL)
2478     {
2479       bfd_reloc_status_type ret;
2480       struct mips_hi16 *hi;
2481
2482       hi = mips_hi16_list;
2483
2484       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2485          want to install the addend in the same way as for a R_MIPS*_HI16
2486          relocation (with a rightshift of 16).  However, since GOT16
2487          relocations can also be used with global symbols, their howto
2488          has a rightshift of 0.  */
2489       if (hi->rel.howto->type == R_MIPS_GOT16)
2490         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2491       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2492         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2493       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2494         hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2495
2496       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2497          carry or borrow will induce a change of +1 or -1 in the high part.  */
2498       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2499
2500       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2501                                          hi->input_section, output_bfd,
2502                                          error_message);
2503       if (ret != bfd_reloc_ok)
2504         return ret;
2505
2506       mips_hi16_list = hi->next;
2507       free (hi);
2508     }
2509
2510   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2511                                       input_section, output_bfd,
2512                                       error_message);
2513 }
2514
2515 /* A generic howto special_function.  This calculates and installs the
2516    relocation itself, thus avoiding the oft-discussed problems in
2517    bfd_perform_relocation and bfd_install_relocation.  */
2518
2519 bfd_reloc_status_type
2520 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2521                              asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2522                              asection *input_section, bfd *output_bfd,
2523                              char **error_message ATTRIBUTE_UNUSED)
2524 {
2525   bfd_signed_vma val;
2526   bfd_reloc_status_type status;
2527   bfd_boolean relocatable;
2528
2529   relocatable = (output_bfd != NULL);
2530
2531   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2532     return bfd_reloc_outofrange;
2533
2534   /* Build up the field adjustment in VAL.  */
2535   val = 0;
2536   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2537     {
2538       /* Either we're calculating the final field value or we have a
2539          relocation against a section symbol.  Add in the section's
2540          offset or address.  */
2541       val += symbol->section->output_section->vma;
2542       val += symbol->section->output_offset;
2543     }
2544
2545   if (!relocatable)
2546     {
2547       /* We're calculating the final field value.  Add in the symbol's value
2548          and, if pc-relative, subtract the address of the field itself.  */
2549       val += symbol->value;
2550       if (reloc_entry->howto->pc_relative)
2551         {
2552           val -= input_section->output_section->vma;
2553           val -= input_section->output_offset;
2554           val -= reloc_entry->address;
2555         }
2556     }
2557
2558   /* VAL is now the final adjustment.  If we're keeping this relocation
2559      in the output file, and if the relocation uses a separate addend,
2560      we just need to add VAL to that addend.  Otherwise we need to add
2561      VAL to the relocation field itself.  */
2562   if (relocatable && !reloc_entry->howto->partial_inplace)
2563     reloc_entry->addend += val;
2564   else
2565     {
2566       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2567
2568       /* Add in the separate addend, if any.  */
2569       val += reloc_entry->addend;
2570
2571       /* Add VAL to the relocation field.  */
2572       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2573                                      location);
2574       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2575                                        location);
2576       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2577                                    location);
2578
2579       if (status != bfd_reloc_ok)
2580         return status;
2581     }
2582
2583   if (relocatable)
2584     reloc_entry->address += input_section->output_offset;
2585
2586   return bfd_reloc_ok;
2587 }
2588 \f
2589 /* Swap an entry in a .gptab section.  Note that these routines rely
2590    on the equivalence of the two elements of the union.  */
2591
2592 static void
2593 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2594                               Elf32_gptab *in)
2595 {
2596   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2597   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2598 }
2599
2600 static void
2601 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2602                                Elf32_External_gptab *ex)
2603 {
2604   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2605   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2606 }
2607
2608 static void
2609 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2610                                 Elf32_External_compact_rel *ex)
2611 {
2612   H_PUT_32 (abfd, in->id1, ex->id1);
2613   H_PUT_32 (abfd, in->num, ex->num);
2614   H_PUT_32 (abfd, in->id2, ex->id2);
2615   H_PUT_32 (abfd, in->offset, ex->offset);
2616   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2617   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2618 }
2619
2620 static void
2621 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2622                            Elf32_External_crinfo *ex)
2623 {
2624   unsigned long l;
2625
2626   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2627        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2628        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2629        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2630   H_PUT_32 (abfd, l, ex->info);
2631   H_PUT_32 (abfd, in->konst, ex->konst);
2632   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2633 }
2634 \f
2635 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2636    routines swap this structure in and out.  They are used outside of
2637    BFD, so they are globally visible.  */
2638
2639 void
2640 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2641                                 Elf32_RegInfo *in)
2642 {
2643   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2644   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2645   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2646   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2647   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2648   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2649 }
2650
2651 void
2652 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2653                                  Elf32_External_RegInfo *ex)
2654 {
2655   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2656   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2657   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2658   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2659   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2660   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2661 }
2662
2663 /* In the 64 bit ABI, the .MIPS.options section holds register
2664    information in an Elf64_Reginfo structure.  These routines swap
2665    them in and out.  They are globally visible because they are used
2666    outside of BFD.  These routines are here so that gas can call them
2667    without worrying about whether the 64 bit ABI has been included.  */
2668
2669 void
2670 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2671                                 Elf64_Internal_RegInfo *in)
2672 {
2673   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2674   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2675   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2676   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2677   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2678   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2679   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2680 }
2681
2682 void
2683 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2684                                  Elf64_External_RegInfo *ex)
2685 {
2686   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2687   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2688   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2689   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2690   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2691   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2692   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2693 }
2694
2695 /* Swap in an options header.  */
2696
2697 void
2698 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2699                               Elf_Internal_Options *in)
2700 {
2701   in->kind = H_GET_8 (abfd, ex->kind);
2702   in->size = H_GET_8 (abfd, ex->size);
2703   in->section = H_GET_16 (abfd, ex->section);
2704   in->info = H_GET_32 (abfd, ex->info);
2705 }
2706
2707 /* Swap out an options header.  */
2708
2709 void
2710 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2711                                Elf_External_Options *ex)
2712 {
2713   H_PUT_8 (abfd, in->kind, ex->kind);
2714   H_PUT_8 (abfd, in->size, ex->size);
2715   H_PUT_16 (abfd, in->section, ex->section);
2716   H_PUT_32 (abfd, in->info, ex->info);
2717 }
2718
2719 /* Swap in an abiflags structure.  */
2720
2721 void
2722 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2723                                   const Elf_External_ABIFlags_v0 *ex,
2724                                   Elf_Internal_ABIFlags_v0 *in)
2725 {
2726   in->version = H_GET_16 (abfd, ex->version);
2727   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2728   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2729   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2730   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2731   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2732   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2733   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2734   in->ases = H_GET_32 (abfd, ex->ases);
2735   in->flags1 = H_GET_32 (abfd, ex->flags1);
2736   in->flags2 = H_GET_32 (abfd, ex->flags2);
2737 }
2738
2739 /* Swap out an abiflags structure.  */
2740
2741 void
2742 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2743                                    const Elf_Internal_ABIFlags_v0 *in,
2744                                    Elf_External_ABIFlags_v0 *ex)
2745 {
2746   H_PUT_16 (abfd, in->version, ex->version);
2747   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2748   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2749   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2750   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2751   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2752   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2753   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2754   H_PUT_32 (abfd, in->ases, ex->ases);
2755   H_PUT_32 (abfd, in->flags1, ex->flags1);
2756   H_PUT_32 (abfd, in->flags2, ex->flags2);
2757 }
2758 \f
2759 /* This function is called via qsort() to sort the dynamic relocation
2760    entries by increasing r_symndx value.  */
2761
2762 static int
2763 sort_dynamic_relocs (const void *arg1, const void *arg2)
2764 {
2765   Elf_Internal_Rela int_reloc1;
2766   Elf_Internal_Rela int_reloc2;
2767   int diff;
2768
2769   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2770   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2771
2772   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2773   if (diff != 0)
2774     return diff;
2775
2776   if (int_reloc1.r_offset < int_reloc2.r_offset)
2777     return -1;
2778   if (int_reloc1.r_offset > int_reloc2.r_offset)
2779     return 1;
2780   return 0;
2781 }
2782
2783 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2784
2785 static int
2786 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2787                         const void *arg2 ATTRIBUTE_UNUSED)
2788 {
2789 #ifdef BFD64
2790   Elf_Internal_Rela int_reloc1[3];
2791   Elf_Internal_Rela int_reloc2[3];
2792
2793   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2794     (reldyn_sorting_bfd, arg1, int_reloc1);
2795   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2796     (reldyn_sorting_bfd, arg2, int_reloc2);
2797
2798   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2799     return -1;
2800   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2801     return 1;
2802
2803   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2804     return -1;
2805   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2806     return 1;
2807   return 0;
2808 #else
2809   abort ();
2810 #endif
2811 }
2812
2813
2814 /* This routine is used to write out ECOFF debugging external symbol
2815    information.  It is called via mips_elf_link_hash_traverse.  The
2816    ECOFF external symbol information must match the ELF external
2817    symbol information.  Unfortunately, at this point we don't know
2818    whether a symbol is required by reloc information, so the two
2819    tables may wind up being different.  We must sort out the external
2820    symbol information before we can set the final size of the .mdebug
2821    section, and we must set the size of the .mdebug section before we
2822    can relocate any sections, and we can't know which symbols are
2823    required by relocation until we relocate the sections.
2824    Fortunately, it is relatively unlikely that any symbol will be
2825    stripped but required by a reloc.  In particular, it can not happen
2826    when generating a final executable.  */
2827
2828 static bfd_boolean
2829 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2830 {
2831   struct extsym_info *einfo = data;
2832   bfd_boolean strip;
2833   asection *sec, *output_section;
2834
2835   if (h->root.indx == -2)
2836     strip = FALSE;
2837   else if ((h->root.def_dynamic
2838             || h->root.ref_dynamic
2839             || h->root.type == bfd_link_hash_new)
2840            && !h->root.def_regular
2841            && !h->root.ref_regular)
2842     strip = TRUE;
2843   else if (einfo->info->strip == strip_all
2844            || (einfo->info->strip == strip_some
2845                && bfd_hash_lookup (einfo->info->keep_hash,
2846                                    h->root.root.root.string,
2847                                    FALSE, FALSE) == NULL))
2848     strip = TRUE;
2849   else
2850     strip = FALSE;
2851
2852   if (strip)
2853     return TRUE;
2854
2855   if (h->esym.ifd == -2)
2856     {
2857       h->esym.jmptbl = 0;
2858       h->esym.cobol_main = 0;
2859       h->esym.weakext = 0;
2860       h->esym.reserved = 0;
2861       h->esym.ifd = ifdNil;
2862       h->esym.asym.value = 0;
2863       h->esym.asym.st = stGlobal;
2864
2865       if (h->root.root.type == bfd_link_hash_undefined
2866           || h->root.root.type == bfd_link_hash_undefweak)
2867         {
2868           const char *name;
2869
2870           /* Use undefined class.  Also, set class and type for some
2871              special symbols.  */
2872           name = h->root.root.root.string;
2873           if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2874               || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2875             {
2876               h->esym.asym.sc = scData;
2877               h->esym.asym.st = stLabel;
2878               h->esym.asym.value = 0;
2879             }
2880           else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2881             {
2882               h->esym.asym.sc = scAbs;
2883               h->esym.asym.st = stLabel;
2884               h->esym.asym.value =
2885                 mips_elf_hash_table (einfo->info)->procedure_count;
2886             }
2887           else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2888             {
2889               h->esym.asym.sc = scAbs;
2890               h->esym.asym.st = stLabel;
2891               h->esym.asym.value = elf_gp (einfo->abfd);
2892             }
2893           else
2894             h->esym.asym.sc = scUndefined;
2895         }
2896       else if (h->root.root.type != bfd_link_hash_defined
2897           && h->root.root.type != bfd_link_hash_defweak)
2898         h->esym.asym.sc = scAbs;
2899       else
2900         {
2901           const char *name;
2902
2903           sec = h->root.root.u.def.section;
2904           output_section = sec->output_section;
2905
2906           /* When making a shared library and symbol h is the one from
2907              the another shared library, OUTPUT_SECTION may be null.  */
2908           if (output_section == NULL)
2909             h->esym.asym.sc = scUndefined;
2910           else
2911             {
2912               name = bfd_section_name (output_section->owner, output_section);
2913
2914               if (strcmp (name, ".text") == 0)
2915                 h->esym.asym.sc = scText;
2916               else if (strcmp (name, ".data") == 0)
2917                 h->esym.asym.sc = scData;
2918               else if (strcmp (name, ".sdata") == 0)
2919                 h->esym.asym.sc = scSData;
2920               else if (strcmp (name, ".rodata") == 0
2921                        || strcmp (name, ".rdata") == 0)
2922                 h->esym.asym.sc = scRData;
2923               else if (strcmp (name, ".bss") == 0)
2924                 h->esym.asym.sc = scBss;
2925               else if (strcmp (name, ".sbss") == 0)
2926                 h->esym.asym.sc = scSBss;
2927               else if (strcmp (name, ".init") == 0)
2928                 h->esym.asym.sc = scInit;
2929               else if (strcmp (name, ".fini") == 0)
2930                 h->esym.asym.sc = scFini;
2931               else
2932                 h->esym.asym.sc = scAbs;
2933             }
2934         }
2935
2936       h->esym.asym.reserved = 0;
2937       h->esym.asym.index = indexNil;
2938     }
2939
2940   if (h->root.root.type == bfd_link_hash_common)
2941     h->esym.asym.value = h->root.root.u.c.size;
2942   else if (h->root.root.type == bfd_link_hash_defined
2943            || h->root.root.type == bfd_link_hash_defweak)
2944     {
2945       if (h->esym.asym.sc == scCommon)
2946         h->esym.asym.sc = scBss;
2947       else if (h->esym.asym.sc == scSCommon)
2948         h->esym.asym.sc = scSBss;
2949
2950       sec = h->root.root.u.def.section;
2951       output_section = sec->output_section;
2952       if (output_section != NULL)
2953         h->esym.asym.value = (h->root.root.u.def.value
2954                               + sec->output_offset
2955                               + output_section->vma);
2956       else
2957         h->esym.asym.value = 0;
2958     }
2959   else
2960     {
2961       struct mips_elf_link_hash_entry *hd = h;
2962
2963       while (hd->root.root.type == bfd_link_hash_indirect)
2964         hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2965
2966       if (hd->needs_lazy_stub)
2967         {
2968           BFD_ASSERT (hd->root.plt.plist != NULL);
2969           BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2970           /* Set type and value for a symbol with a function stub.  */
2971           h->esym.asym.st = stProc;
2972           sec = hd->root.root.u.def.section;
2973           if (sec == NULL)
2974             h->esym.asym.value = 0;
2975           else
2976             {
2977               output_section = sec->output_section;
2978               if (output_section != NULL)
2979                 h->esym.asym.value = (hd->root.plt.plist->stub_offset
2980                                       + sec->output_offset
2981                                       + output_section->vma);
2982               else
2983                 h->esym.asym.value = 0;
2984             }
2985         }
2986     }
2987
2988   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2989                                       h->root.root.root.string,
2990                                       &h->esym))
2991     {
2992       einfo->failed = TRUE;
2993       return FALSE;
2994     }
2995
2996   return TRUE;
2997 }
2998
2999 /* A comparison routine used to sort .gptab entries.  */
3000
3001 static int
3002 gptab_compare (const void *p1, const void *p2)
3003 {
3004   const Elf32_gptab *a1 = p1;
3005   const Elf32_gptab *a2 = p2;
3006
3007   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3008 }
3009 \f
3010 /* Functions to manage the got entry hash table.  */
3011
3012 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3013    hash number.  */
3014
3015 static INLINE hashval_t
3016 mips_elf_hash_bfd_vma (bfd_vma addr)
3017 {
3018 #ifdef BFD64
3019   return addr + (addr >> 32);
3020 #else
3021   return addr;
3022 #endif
3023 }
3024
3025 static hashval_t
3026 mips_elf_got_entry_hash (const void *entry_)
3027 {
3028   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3029
3030   return (entry->symndx
3031           + ((entry->tls_type == GOT_TLS_LDM) << 18)
3032           + (entry->tls_type == GOT_TLS_LDM ? 0
3033              : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3034              : entry->symndx >= 0 ? (entry->abfd->id
3035                                      + mips_elf_hash_bfd_vma (entry->d.addend))
3036              : entry->d.h->root.root.root.hash));
3037 }
3038
3039 static int
3040 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3041 {
3042   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3043   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3044
3045   return (e1->symndx == e2->symndx
3046           && e1->tls_type == e2->tls_type
3047           && (e1->tls_type == GOT_TLS_LDM ? TRUE
3048               : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3049               : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3050                                    && e1->d.addend == e2->d.addend)
3051               : e2->abfd && e1->d.h == e2->d.h));
3052 }
3053
3054 static hashval_t
3055 mips_got_page_ref_hash (const void *ref_)
3056 {
3057   const struct mips_got_page_ref *ref;
3058
3059   ref = (const struct mips_got_page_ref *) ref_;
3060   return ((ref->symndx >= 0
3061            ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3062            : ref->u.h->root.root.root.hash)
3063           + mips_elf_hash_bfd_vma (ref->addend));
3064 }
3065
3066 static int
3067 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3068 {
3069   const struct mips_got_page_ref *ref1, *ref2;
3070
3071   ref1 = (const struct mips_got_page_ref *) ref1_;
3072   ref2 = (const struct mips_got_page_ref *) ref2_;
3073   return (ref1->symndx == ref2->symndx
3074           && (ref1->symndx < 0
3075               ? ref1->u.h == ref2->u.h
3076               : ref1->u.abfd == ref2->u.abfd)
3077           && ref1->addend == ref2->addend);
3078 }
3079
3080 static hashval_t
3081 mips_got_page_entry_hash (const void *entry_)
3082 {
3083   const struct mips_got_page_entry *entry;
3084
3085   entry = (const struct mips_got_page_entry *) entry_;
3086   return entry->sec->id;
3087 }
3088
3089 static int
3090 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3091 {
3092   const struct mips_got_page_entry *entry1, *entry2;
3093
3094   entry1 = (const struct mips_got_page_entry *) entry1_;
3095   entry2 = (const struct mips_got_page_entry *) entry2_;
3096   return entry1->sec == entry2->sec;
3097 }
3098 \f
3099 /* Create and return a new mips_got_info structure.  */
3100
3101 static struct mips_got_info *
3102 mips_elf_create_got_info (bfd *abfd)
3103 {
3104   struct mips_got_info *g;
3105
3106   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3107   if (g == NULL)
3108     return NULL;
3109
3110   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3111                                     mips_elf_got_entry_eq, NULL);
3112   if (g->got_entries == NULL)
3113     return NULL;
3114
3115   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3116                                       mips_got_page_ref_eq, NULL);
3117   if (g->got_page_refs == NULL)
3118     return NULL;
3119
3120   return g;
3121 }
3122
3123 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3124    CREATE_P and if ABFD doesn't already have a GOT.  */
3125
3126 static struct mips_got_info *
3127 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3128 {
3129   struct mips_elf_obj_tdata *tdata;
3130
3131   if (!is_mips_elf (abfd))
3132     return NULL;
3133
3134   tdata = mips_elf_tdata (abfd);
3135   if (!tdata->got && create_p)
3136     tdata->got = mips_elf_create_got_info (abfd);
3137   return tdata->got;
3138 }
3139
3140 /* Record that ABFD should use output GOT G.  */
3141
3142 static void
3143 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3144 {
3145   struct mips_elf_obj_tdata *tdata;
3146
3147   BFD_ASSERT (is_mips_elf (abfd));
3148   tdata = mips_elf_tdata (abfd);
3149   if (tdata->got)
3150     {
3151       /* The GOT structure itself and the hash table entries are
3152          allocated to a bfd, but the hash tables aren't.  */
3153       htab_delete (tdata->got->got_entries);
3154       htab_delete (tdata->got->got_page_refs);
3155       if (tdata->got->got_page_entries)
3156         htab_delete (tdata->got->got_page_entries);
3157     }
3158   tdata->got = g;
3159 }
3160
3161 /* Return the dynamic relocation section.  If it doesn't exist, try to
3162    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3163    if creation fails.  */
3164
3165 static asection *
3166 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3167 {
3168   const char *dname;
3169   asection *sreloc;
3170   bfd *dynobj;
3171
3172   dname = MIPS_ELF_REL_DYN_NAME (info);
3173   dynobj = elf_hash_table (info)->dynobj;
3174   sreloc = bfd_get_linker_section (dynobj, dname);
3175   if (sreloc == NULL && create_p)
3176     {
3177       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3178                                                    (SEC_ALLOC
3179                                                     | SEC_LOAD
3180                                                     | SEC_HAS_CONTENTS
3181                                                     | SEC_IN_MEMORY
3182                                                     | SEC_LINKER_CREATED
3183                                                     | SEC_READONLY));
3184       if (sreloc == NULL
3185           || ! bfd_set_section_alignment (dynobj, sreloc,
3186                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3187         return NULL;
3188     }
3189   return sreloc;
3190 }
3191
3192 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3193
3194 static int
3195 mips_elf_reloc_tls_type (unsigned int r_type)
3196 {
3197   if (tls_gd_reloc_p (r_type))
3198     return GOT_TLS_GD;
3199
3200   if (tls_ldm_reloc_p (r_type))
3201     return GOT_TLS_LDM;
3202
3203   if (tls_gottprel_reloc_p (r_type))
3204     return GOT_TLS_IE;
3205
3206   return GOT_TLS_NONE;
3207 }
3208
3209 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3210
3211 static int
3212 mips_tls_got_entries (unsigned int type)
3213 {
3214   switch (type)
3215     {
3216     case GOT_TLS_GD:
3217     case GOT_TLS_LDM:
3218       return 2;
3219
3220     case GOT_TLS_IE:
3221       return 1;
3222
3223     case GOT_TLS_NONE:
3224       return 0;
3225     }
3226   abort ();
3227 }
3228
3229 /* Count the number of relocations needed for a TLS GOT entry, with
3230    access types from TLS_TYPE, and symbol H (or a local symbol if H
3231    is NULL).  */
3232
3233 static int
3234 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3235                      struct elf_link_hash_entry *h)
3236 {
3237   int indx = 0;
3238   bfd_boolean need_relocs = FALSE;
3239   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3240
3241   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3242       && (!bfd_link_pic (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3243     indx = h->dynindx;
3244
3245   if ((bfd_link_pic (info) || indx != 0)
3246       && (h == NULL
3247           || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3248           || h->root.type != bfd_link_hash_undefweak))
3249     need_relocs = TRUE;
3250
3251   if (!need_relocs)
3252     return 0;
3253
3254   switch (tls_type)
3255     {
3256     case GOT_TLS_GD:
3257       return indx != 0 ? 2 : 1;
3258
3259     case GOT_TLS_IE:
3260       return 1;
3261
3262     case GOT_TLS_LDM:
3263       return bfd_link_pic (info) ? 1 : 0;
3264
3265     default:
3266       return 0;
3267     }
3268 }
3269
3270 /* Add the number of GOT entries and TLS relocations required by ENTRY
3271    to G.  */
3272
3273 static void
3274 mips_elf_count_got_entry (struct bfd_link_info *info,
3275                           struct mips_got_info *g,
3276                           struct mips_got_entry *entry)
3277 {
3278   if (entry->tls_type)
3279     {
3280       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3281       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3282                                         entry->symndx < 0
3283                                         ? &entry->d.h->root : NULL);
3284     }
3285   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3286     g->local_gotno += 1;
3287   else
3288     g->global_gotno += 1;
3289 }
3290
3291 /* Output a simple dynamic relocation into SRELOC.  */
3292
3293 static void
3294 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3295                                     asection *sreloc,
3296                                     unsigned long reloc_index,
3297                                     unsigned long indx,
3298                                     int r_type,
3299                                     bfd_vma offset)
3300 {
3301   Elf_Internal_Rela rel[3];
3302
3303   memset (rel, 0, sizeof (rel));
3304
3305   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3306   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3307
3308   if (ABI_64_P (output_bfd))
3309     {
3310       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3311         (output_bfd, &rel[0],
3312          (sreloc->contents
3313           + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3314     }
3315   else
3316     bfd_elf32_swap_reloc_out
3317       (output_bfd, &rel[0],
3318        (sreloc->contents
3319         + reloc_index * sizeof (Elf32_External_Rel)));
3320 }
3321
3322 /* Initialize a set of TLS GOT entries for one symbol.  */
3323
3324 static void
3325 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3326                                struct mips_got_entry *entry,
3327                                struct mips_elf_link_hash_entry *h,
3328                                bfd_vma value)
3329 {
3330   struct mips_elf_link_hash_table *htab;
3331   int indx;
3332   asection *sreloc, *sgot;
3333   bfd_vma got_offset, got_offset2;
3334   bfd_boolean need_relocs = FALSE;
3335
3336   htab = mips_elf_hash_table (info);
3337   if (htab == NULL)
3338     return;
3339
3340   sgot = htab->sgot;
3341
3342   indx = 0;
3343   if (h != NULL)
3344     {
3345       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3346
3347       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info),
3348                                            &h->root)
3349           && (!bfd_link_pic (info)
3350               || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3351         indx = h->root.dynindx;
3352     }
3353
3354   if (entry->tls_initialized)
3355     return;
3356
3357   if ((bfd_link_pic (info) || indx != 0)
3358       && (h == NULL
3359           || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3360           || h->root.type != bfd_link_hash_undefweak))
3361     need_relocs = TRUE;
3362
3363   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3364      be defined at all; assume that the value doesn't matter in that
3365      case.  Otherwise complain if we would use the value.  */
3366   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3367               || h->root.root.type == bfd_link_hash_undefweak);
3368
3369   /* Emit necessary relocations.  */
3370   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3371   got_offset = entry->gotidx;
3372
3373   switch (entry->tls_type)
3374     {
3375     case GOT_TLS_GD:
3376       /* General Dynamic.  */
3377       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3378
3379       if (need_relocs)
3380         {
3381           mips_elf_output_dynamic_relocation
3382             (abfd, sreloc, sreloc->reloc_count++, indx,
3383              ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3384              sgot->output_offset + sgot->output_section->vma + got_offset);
3385
3386           if (indx)
3387             mips_elf_output_dynamic_relocation
3388               (abfd, sreloc, sreloc->reloc_count++, indx,
3389                ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3390                sgot->output_offset + sgot->output_section->vma + got_offset2);
3391           else
3392             MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3393                                sgot->contents + got_offset2);
3394         }
3395       else
3396         {
3397           MIPS_ELF_PUT_WORD (abfd, 1,
3398                              sgot->contents + got_offset);
3399           MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3400                              sgot->contents + got_offset2);
3401         }
3402       break;
3403
3404     case GOT_TLS_IE:
3405       /* Initial Exec model.  */
3406       if (need_relocs)
3407         {
3408           if (indx == 0)
3409             MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3410                                sgot->contents + got_offset);
3411           else
3412             MIPS_ELF_PUT_WORD (abfd, 0,
3413                                sgot->contents + got_offset);
3414
3415           mips_elf_output_dynamic_relocation
3416             (abfd, sreloc, sreloc->reloc_count++, indx,
3417              ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3418              sgot->output_offset + sgot->output_section->vma + got_offset);
3419         }
3420       else
3421         MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3422                            sgot->contents + got_offset);
3423       break;
3424
3425     case GOT_TLS_LDM:
3426       /* The initial offset is zero, and the LD offsets will include the
3427          bias by DTP_OFFSET.  */
3428       MIPS_ELF_PUT_WORD (abfd, 0,
3429                          sgot->contents + got_offset
3430                          + MIPS_ELF_GOT_SIZE (abfd));
3431
3432       if (!bfd_link_pic (info))
3433         MIPS_ELF_PUT_WORD (abfd, 1,
3434                            sgot->contents + got_offset);
3435       else
3436         mips_elf_output_dynamic_relocation
3437           (abfd, sreloc, sreloc->reloc_count++, indx,
3438            ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3439            sgot->output_offset + sgot->output_section->vma + got_offset);
3440       break;
3441
3442     default:
3443       abort ();
3444     }
3445
3446   entry->tls_initialized = TRUE;
3447 }
3448
3449 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3450    for global symbol H.  .got.plt comes before the GOT, so the offset
3451    will be negative.  */
3452
3453 static bfd_vma
3454 mips_elf_gotplt_index (struct bfd_link_info *info,
3455                        struct elf_link_hash_entry *h)
3456 {
3457   bfd_vma got_address, got_value;
3458   struct mips_elf_link_hash_table *htab;
3459
3460   htab = mips_elf_hash_table (info);
3461   BFD_ASSERT (htab != NULL);
3462
3463   BFD_ASSERT (h->plt.plist != NULL);
3464   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3465
3466   /* Calculate the address of the associated .got.plt entry.  */
3467   got_address = (htab->sgotplt->output_section->vma
3468                  + htab->sgotplt->output_offset
3469                  + (h->plt.plist->gotplt_index
3470                     * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3471
3472   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3473   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3474                + htab->root.hgot->root.u.def.section->output_offset
3475                + htab->root.hgot->root.u.def.value);
3476
3477   return got_address - got_value;
3478 }
3479
3480 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3481    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3482    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3483    offset can be found.  */
3484
3485 static bfd_vma
3486 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3487                           bfd_vma value, unsigned long r_symndx,
3488                           struct mips_elf_link_hash_entry *h, int r_type)
3489 {
3490   struct mips_elf_link_hash_table *htab;
3491   struct mips_got_entry *entry;
3492
3493   htab = mips_elf_hash_table (info);
3494   BFD_ASSERT (htab != NULL);
3495
3496   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3497                                            r_symndx, h, r_type);
3498   if (!entry)
3499     return MINUS_ONE;
3500
3501   if (entry->tls_type)
3502     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3503   return entry->gotidx;
3504 }
3505
3506 /* Return the GOT index of global symbol H in the primary GOT.  */
3507
3508 static bfd_vma
3509 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3510                                    struct elf_link_hash_entry *h)
3511 {
3512   struct mips_elf_link_hash_table *htab;
3513   long global_got_dynindx;
3514   struct mips_got_info *g;
3515   bfd_vma got_index;
3516
3517   htab = mips_elf_hash_table (info);
3518   BFD_ASSERT (htab != NULL);
3519
3520   global_got_dynindx = 0;
3521   if (htab->global_gotsym != NULL)
3522     global_got_dynindx = htab->global_gotsym->dynindx;
3523
3524   /* Once we determine the global GOT entry with the lowest dynamic
3525      symbol table index, we must put all dynamic symbols with greater
3526      indices into the primary GOT.  That makes it easy to calculate the
3527      GOT offset.  */
3528   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3529   g = mips_elf_bfd_got (obfd, FALSE);
3530   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3531                * MIPS_ELF_GOT_SIZE (obfd));
3532   BFD_ASSERT (got_index < htab->sgot->size);
3533
3534   return got_index;
3535 }
3536
3537 /* Return the GOT index for the global symbol indicated by H, which is
3538    referenced by a relocation of type R_TYPE in IBFD.  */
3539
3540 static bfd_vma
3541 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3542                            struct elf_link_hash_entry *h, int r_type)
3543 {
3544   struct mips_elf_link_hash_table *htab;
3545   struct mips_got_info *g;
3546   struct mips_got_entry lookup, *entry;
3547   bfd_vma gotidx;
3548
3549   htab = mips_elf_hash_table (info);
3550   BFD_ASSERT (htab != NULL);
3551
3552   g = mips_elf_bfd_got (ibfd, FALSE);
3553   BFD_ASSERT (g);
3554
3555   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3556   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3557     return mips_elf_primary_global_got_index (obfd, info, h);
3558
3559   lookup.abfd = ibfd;
3560   lookup.symndx = -1;
3561   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3562   entry = htab_find (g->got_entries, &lookup);
3563   BFD_ASSERT (entry);
3564
3565   gotidx = entry->gotidx;
3566   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3567
3568   if (lookup.tls_type)
3569     {
3570       bfd_vma value = MINUS_ONE;
3571
3572       if ((h->root.type == bfd_link_hash_defined
3573            || h->root.type == bfd_link_hash_defweak)
3574           && h->root.u.def.section->output_section)
3575         value = (h->root.u.def.value
3576                  + h->root.u.def.section->output_offset
3577                  + h->root.u.def.section->output_section->vma);
3578
3579       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3580     }
3581   return gotidx;
3582 }
3583
3584 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3585    entries are supposed to be placed at small offsets in the GOT, i.e.,
3586    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3587    entry could be created.  If OFFSETP is nonnull, use it to return the
3588    offset of the GOT entry from VALUE.  */
3589
3590 static bfd_vma
3591 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3592                    bfd_vma value, bfd_vma *offsetp)
3593 {
3594   bfd_vma page, got_index;
3595   struct mips_got_entry *entry;
3596
3597   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3598   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3599                                            NULL, R_MIPS_GOT_PAGE);
3600
3601   if (!entry)
3602     return MINUS_ONE;
3603
3604   got_index = entry->gotidx;
3605
3606   if (offsetp)
3607     *offsetp = value - entry->d.address;
3608
3609   return got_index;
3610 }
3611
3612 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3613    EXTERNAL is true if the relocation was originally against a global
3614    symbol that binds locally.  */
3615
3616 static bfd_vma
3617 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3618                       bfd_vma value, bfd_boolean external)
3619 {
3620   struct mips_got_entry *entry;
3621
3622   /* GOT16 relocations against local symbols are followed by a LO16
3623      relocation; those against global symbols are not.  Thus if the
3624      symbol was originally local, the GOT16 relocation should load the
3625      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3626   if (! external)
3627     value = mips_elf_high (value) << 16;
3628
3629   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3630      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3631      same in all cases.  */
3632   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3633                                            NULL, R_MIPS_GOT16);
3634   if (entry)
3635     return entry->gotidx;
3636   else
3637     return MINUS_ONE;
3638 }
3639
3640 /* Returns the offset for the entry at the INDEXth position
3641    in the GOT.  */
3642
3643 static bfd_vma
3644 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3645                                 bfd *input_bfd, bfd_vma got_index)
3646 {
3647   struct mips_elf_link_hash_table *htab;
3648   asection *sgot;
3649   bfd_vma gp;
3650
3651   htab = mips_elf_hash_table (info);
3652   BFD_ASSERT (htab != NULL);
3653
3654   sgot = htab->sgot;
3655   gp = _bfd_get_gp_value (output_bfd)
3656     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3657
3658   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3659 }
3660
3661 /* Create and return a local GOT entry for VALUE, which was calculated
3662    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3663    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3664    instead.  */
3665
3666 static struct mips_got_entry *
3667 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3668                                  bfd *ibfd, bfd_vma value,
3669                                  unsigned long r_symndx,
3670                                  struct mips_elf_link_hash_entry *h,
3671                                  int r_type)
3672 {
3673   struct mips_got_entry lookup, *entry;
3674   void **loc;
3675   struct mips_got_info *g;
3676   struct mips_elf_link_hash_table *htab;
3677   bfd_vma gotidx;
3678
3679   htab = mips_elf_hash_table (info);
3680   BFD_ASSERT (htab != NULL);
3681
3682   g = mips_elf_bfd_got (ibfd, FALSE);
3683   if (g == NULL)
3684     {
3685       g = mips_elf_bfd_got (abfd, FALSE);
3686       BFD_ASSERT (g != NULL);
3687     }
3688
3689   /* This function shouldn't be called for symbols that live in the global
3690      area of the GOT.  */
3691   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3692
3693   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3694   if (lookup.tls_type)
3695     {
3696       lookup.abfd = ibfd;
3697       if (tls_ldm_reloc_p (r_type))
3698         {
3699           lookup.symndx = 0;
3700           lookup.d.addend = 0;
3701         }
3702       else if (h == NULL)
3703         {
3704           lookup.symndx = r_symndx;
3705           lookup.d.addend = 0;
3706         }
3707       else
3708         {
3709           lookup.symndx = -1;
3710           lookup.d.h = h;
3711         }
3712
3713       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3714       BFD_ASSERT (entry);
3715
3716       gotidx = entry->gotidx;
3717       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3718
3719       return entry;
3720     }
3721
3722   lookup.abfd = NULL;
3723   lookup.symndx = -1;
3724   lookup.d.address = value;
3725   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3726   if (!loc)
3727     return NULL;
3728
3729   entry = (struct mips_got_entry *) *loc;
3730   if (entry)
3731     return entry;
3732
3733   if (g->assigned_low_gotno > g->assigned_high_gotno)
3734     {
3735       /* We didn't allocate enough space in the GOT.  */
3736       (*_bfd_error_handler)
3737         (_("not enough GOT space for local GOT entries"));
3738       bfd_set_error (bfd_error_bad_value);
3739       return NULL;
3740     }
3741
3742   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3743   if (!entry)
3744     return NULL;
3745
3746   if (got16_reloc_p (r_type)
3747       || call16_reloc_p (r_type)
3748       || got_page_reloc_p (r_type)
3749       || got_disp_reloc_p (r_type))
3750     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3751   else
3752     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3753
3754   *entry = lookup;
3755   *loc = entry;
3756
3757   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3758
3759   /* These GOT entries need a dynamic relocation on VxWorks.  */
3760   if (htab->is_vxworks)
3761     {
3762       Elf_Internal_Rela outrel;
3763       asection *s;
3764       bfd_byte *rloc;
3765       bfd_vma got_address;
3766
3767       s = mips_elf_rel_dyn_section (info, FALSE);
3768       got_address = (htab->sgot->output_section->vma
3769                      + htab->sgot->output_offset
3770                      + entry->gotidx);
3771
3772       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3773       outrel.r_offset = got_address;
3774       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3775       outrel.r_addend = value;
3776       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3777     }
3778
3779   return entry;
3780 }
3781
3782 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3783    The number might be exact or a worst-case estimate, depending on how
3784    much information is available to elf_backend_omit_section_dynsym at
3785    the current linking stage.  */
3786
3787 static bfd_size_type
3788 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3789 {
3790   bfd_size_type count;
3791
3792   count = 0;
3793   if (bfd_link_pic (info)
3794       || elf_hash_table (info)->is_relocatable_executable)
3795     {
3796       asection *p;
3797       const struct elf_backend_data *bed;
3798
3799       bed = get_elf_backend_data (output_bfd);
3800       for (p = output_bfd->sections; p ; p = p->next)
3801         if ((p->flags & SEC_EXCLUDE) == 0
3802             && (p->flags & SEC_ALLOC) != 0
3803             && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3804           ++count;
3805     }
3806   return count;
3807 }
3808
3809 /* Sort the dynamic symbol table so that symbols that need GOT entries
3810    appear towards the end.  */
3811
3812 static bfd_boolean
3813 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3814 {
3815   struct mips_elf_link_hash_table *htab;
3816   struct mips_elf_hash_sort_data hsd;
3817   struct mips_got_info *g;
3818
3819   if (elf_hash_table (info)->dynsymcount == 0)
3820     return TRUE;
3821
3822   htab = mips_elf_hash_table (info);
3823   BFD_ASSERT (htab != NULL);
3824
3825   g = htab->got_info;
3826   if (g == NULL)
3827     return TRUE;
3828
3829   hsd.low = NULL;
3830   hsd.max_unref_got_dynindx
3831     = hsd.min_got_dynindx
3832     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3833   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3834   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3835                                 elf_hash_table (info)),
3836                                mips_elf_sort_hash_table_f,
3837                                &hsd);
3838
3839   /* There should have been enough room in the symbol table to
3840      accommodate both the GOT and non-GOT symbols.  */
3841   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3842   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3843               == elf_hash_table (info)->dynsymcount);
3844   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3845               == g->global_gotno);
3846
3847   /* Now we know which dynamic symbol has the lowest dynamic symbol
3848      table index in the GOT.  */
3849   htab->global_gotsym = hsd.low;
3850
3851   return TRUE;
3852 }
3853
3854 /* If H needs a GOT entry, assign it the highest available dynamic
3855    index.  Otherwise, assign it the lowest available dynamic
3856    index.  */
3857
3858 static bfd_boolean
3859 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3860 {
3861   struct mips_elf_hash_sort_data *hsd = data;
3862
3863   /* Symbols without dynamic symbol table entries aren't interesting
3864      at all.  */
3865   if (h->root.dynindx == -1)
3866     return TRUE;
3867
3868   switch (h->global_got_area)
3869     {
3870     case GGA_NONE:
3871       h->root.dynindx = hsd->max_non_got_dynindx++;
3872       break;
3873
3874     case GGA_NORMAL:
3875       h->root.dynindx = --hsd->min_got_dynindx;
3876       hsd->low = (struct elf_link_hash_entry *) h;
3877       break;
3878
3879     case GGA_RELOC_ONLY:
3880       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3881         hsd->low = (struct elf_link_hash_entry *) h;
3882       h->root.dynindx = hsd->max_unref_got_dynindx++;
3883       break;
3884     }
3885
3886   return TRUE;
3887 }
3888
3889 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3890    (which is owned by the caller and shouldn't be added to the
3891    hash table directly).  */
3892
3893 static bfd_boolean
3894 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3895                            struct mips_got_entry *lookup)
3896 {
3897   struct mips_elf_link_hash_table *htab;
3898   struct mips_got_entry *entry;
3899   struct mips_got_info *g;
3900   void **loc, **bfd_loc;
3901
3902   /* Make sure there's a slot for this entry in the master GOT.  */
3903   htab = mips_elf_hash_table (info);
3904   g = htab->got_info;
3905   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3906   if (!loc)
3907     return FALSE;
3908
3909   /* Populate the entry if it isn't already.  */
3910   entry = (struct mips_got_entry *) *loc;
3911   if (!entry)
3912     {
3913       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3914       if (!entry)
3915         return FALSE;
3916
3917       lookup->tls_initialized = FALSE;
3918       lookup->gotidx = -1;
3919       *entry = *lookup;
3920       *loc = entry;
3921     }
3922
3923   /* Reuse the same GOT entry for the BFD's GOT.  */
3924   g = mips_elf_bfd_got (abfd, TRUE);
3925   if (!g)
3926     return FALSE;
3927
3928   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3929   if (!bfd_loc)
3930     return FALSE;
3931
3932   if (!*bfd_loc)
3933     *bfd_loc = entry;
3934   return TRUE;
3935 }
3936
3937 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3938    entry for it.  FOR_CALL is true if the caller is only interested in
3939    using the GOT entry for calls.  */
3940
3941 static bfd_boolean
3942 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3943                                    bfd *abfd, struct bfd_link_info *info,
3944                                    bfd_boolean for_call, int r_type)
3945 {
3946   struct mips_elf_link_hash_table *htab;
3947   struct mips_elf_link_hash_entry *hmips;
3948   struct mips_got_entry entry;
3949   unsigned char tls_type;
3950
3951   htab = mips_elf_hash_table (info);
3952   BFD_ASSERT (htab != NULL);
3953
3954   hmips = (struct mips_elf_link_hash_entry *) h;
3955   if (!for_call)
3956     hmips->got_only_for_calls = FALSE;
3957
3958   /* A global symbol in the GOT must also be in the dynamic symbol
3959      table.  */
3960   if (h->dynindx == -1)
3961     {
3962       switch (ELF_ST_VISIBILITY (h->other))
3963         {
3964         case STV_INTERNAL:
3965         case STV_HIDDEN:
3966           _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3967           break;
3968         }
3969       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3970         return FALSE;
3971     }
3972
3973   tls_type = mips_elf_reloc_tls_type (r_type);
3974   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3975     hmips->global_got_area = GGA_NORMAL;
3976
3977   entry.abfd = abfd;
3978   entry.symndx = -1;
3979   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3980   entry.tls_type = tls_type;
3981   return mips_elf_record_got_entry (info, abfd, &entry);
3982 }
3983
3984 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3985    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3986
3987 static bfd_boolean
3988 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3989                                   struct bfd_link_info *info, int r_type)
3990 {
3991   struct mips_elf_link_hash_table *htab;
3992   struct mips_got_info *g;
3993   struct mips_got_entry entry;
3994
3995   htab = mips_elf_hash_table (info);
3996   BFD_ASSERT (htab != NULL);
3997
3998   g = htab->got_info;
3999   BFD_ASSERT (g != NULL);
4000
4001   entry.abfd = abfd;
4002   entry.symndx = symndx;
4003   entry.d.addend = addend;
4004   entry.tls_type = mips_elf_reloc_tls_type (r_type);
4005   return mips_elf_record_got_entry (info, abfd, &entry);
4006 }
4007
4008 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4009    H is the symbol's hash table entry, or null if SYMNDX is local
4010    to ABFD.  */
4011
4012 static bfd_boolean
4013 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4014                               long symndx, struct elf_link_hash_entry *h,
4015                               bfd_signed_vma addend)
4016 {
4017   struct mips_elf_link_hash_table *htab;
4018   struct mips_got_info *g1, *g2;
4019   struct mips_got_page_ref lookup, *entry;
4020   void **loc, **bfd_loc;
4021
4022   htab = mips_elf_hash_table (info);
4023   BFD_ASSERT (htab != NULL);
4024
4025   g1 = htab->got_info;
4026   BFD_ASSERT (g1 != NULL);
4027
4028   if (h)
4029     {
4030       lookup.symndx = -1;
4031       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4032     }
4033   else
4034     {
4035       lookup.symndx = symndx;
4036       lookup.u.abfd = abfd;
4037     }
4038   lookup.addend = addend;
4039   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4040   if (loc == NULL)
4041     return FALSE;
4042
4043   entry = (struct mips_got_page_ref *) *loc;
4044   if (!entry)
4045     {
4046       entry = bfd_alloc (abfd, sizeof (*entry));
4047       if (!entry)
4048         return FALSE;
4049
4050       *entry = lookup;
4051       *loc = entry;
4052     }
4053
4054   /* Add the same entry to the BFD's GOT.  */
4055   g2 = mips_elf_bfd_got (abfd, TRUE);
4056   if (!g2)
4057     return FALSE;
4058
4059   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4060   if (!bfd_loc)
4061     return FALSE;
4062
4063   if (!*bfd_loc)
4064     *bfd_loc = entry;
4065
4066   return TRUE;
4067 }
4068
4069 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4070
4071 static void
4072 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4073                                        unsigned int n)
4074 {
4075   asection *s;
4076   struct mips_elf_link_hash_table *htab;
4077
4078   htab = mips_elf_hash_table (info);
4079   BFD_ASSERT (htab != NULL);
4080
4081   s = mips_elf_rel_dyn_section (info, FALSE);
4082   BFD_ASSERT (s != NULL);
4083
4084   if (htab->is_vxworks)
4085     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4086   else
4087     {
4088       if (s->size == 0)
4089         {
4090           /* Make room for a null element.  */
4091           s->size += MIPS_ELF_REL_SIZE (abfd);
4092           ++s->reloc_count;
4093         }
4094       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4095     }
4096 }
4097 \f
4098 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4099    mips_elf_traverse_got_arg structure.  Count the number of GOT
4100    entries and TLS relocs.  Set DATA->value to true if we need
4101    to resolve indirect or warning symbols and then recreate the GOT.  */
4102
4103 static int
4104 mips_elf_check_recreate_got (void **entryp, void *data)
4105 {
4106   struct mips_got_entry *entry;
4107   struct mips_elf_traverse_got_arg *arg;
4108
4109   entry = (struct mips_got_entry *) *entryp;
4110   arg = (struct mips_elf_traverse_got_arg *) data;
4111   if (entry->abfd != NULL && entry->symndx == -1)
4112     {
4113       struct mips_elf_link_hash_entry *h;
4114
4115       h = entry->d.h;
4116       if (h->root.root.type == bfd_link_hash_indirect
4117           || h->root.root.type == bfd_link_hash_warning)
4118         {
4119           arg->value = TRUE;
4120           return 0;
4121         }
4122     }
4123   mips_elf_count_got_entry (arg->info, arg->g, entry);
4124   return 1;
4125 }
4126
4127 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4128    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4129    converting entries for indirect and warning symbols into entries
4130    for the target symbol.  Set DATA->g to null on error.  */
4131
4132 static int
4133 mips_elf_recreate_got (void **entryp, void *data)
4134 {
4135   struct mips_got_entry new_entry, *entry;
4136   struct mips_elf_traverse_got_arg *arg;
4137   void **slot;
4138
4139   entry = (struct mips_got_entry *) *entryp;
4140   arg = (struct mips_elf_traverse_got_arg *) data;
4141   if (entry->abfd != NULL
4142       && entry->symndx == -1
4143       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4144           || entry->d.h->root.root.type == bfd_link_hash_warning))
4145     {
4146       struct mips_elf_link_hash_entry *h;
4147
4148       new_entry = *entry;
4149       entry = &new_entry;
4150       h = entry->d.h;
4151       do
4152         {
4153           BFD_ASSERT (h->global_got_area == GGA_NONE);
4154           h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4155         }
4156       while (h->root.root.type == bfd_link_hash_indirect
4157              || h->root.root.type == bfd_link_hash_warning);
4158       entry->d.h = h;
4159     }
4160   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4161   if (slot == NULL)
4162     {
4163       arg->g = NULL;
4164       return 0;
4165     }
4166   if (*slot == NULL)
4167     {
4168       if (entry == &new_entry)
4169         {
4170           entry = bfd_alloc (entry->abfd, sizeof (*entry));
4171           if (!entry)
4172             {
4173               arg->g = NULL;
4174               return 0;
4175             }
4176           *entry = new_entry;
4177         }
4178       *slot = entry;
4179       mips_elf_count_got_entry (arg->info, arg->g, entry);
4180     }
4181   return 1;
4182 }
4183
4184 /* Return the maximum number of GOT page entries required for RANGE.  */
4185
4186 static bfd_vma
4187 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4188 {
4189   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4190 }
4191
4192 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4193
4194 static bfd_boolean
4195 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4196                                 asection *sec, bfd_signed_vma addend)
4197 {
4198   struct mips_got_info *g = arg->g;
4199   struct mips_got_page_entry lookup, *entry;
4200   struct mips_got_page_range **range_ptr, *range;
4201   bfd_vma old_pages, new_pages;
4202   void **loc;
4203
4204   /* Find the mips_got_page_entry hash table entry for this section.  */
4205   lookup.sec = sec;
4206   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4207   if (loc == NULL)
4208     return FALSE;
4209
4210   /* Create a mips_got_page_entry if this is the first time we've
4211      seen the section.  */
4212   entry = (struct mips_got_page_entry *) *loc;
4213   if (!entry)
4214     {
4215       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4216       if (!entry)
4217         return FALSE;
4218
4219       entry->sec = sec;
4220       *loc = entry;
4221     }
4222
4223   /* Skip over ranges whose maximum extent cannot share a page entry
4224      with ADDEND.  */
4225   range_ptr = &entry->ranges;
4226   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4227     range_ptr = &(*range_ptr)->next;
4228
4229   /* If we scanned to the end of the list, or found a range whose
4230      minimum extent cannot share a page entry with ADDEND, create
4231      a new singleton range.  */
4232   range = *range_ptr;
4233   if (!range || addend < range->min_addend - 0xffff)
4234     {
4235       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4236       if (!range)
4237         return FALSE;
4238
4239       range->next = *range_ptr;
4240       range->min_addend = addend;
4241       range->max_addend = addend;
4242
4243       *range_ptr = range;
4244       entry->num_pages++;
4245       g->page_gotno++;
4246       return TRUE;
4247     }
4248
4249   /* Remember how many pages the old range contributed.  */
4250   old_pages = mips_elf_pages_for_range (range);
4251
4252   /* Update the ranges.  */
4253   if (addend < range->min_addend)
4254     range->min_addend = addend;
4255   else if (addend > range->max_addend)
4256     {
4257       if (range->next && addend >= range->next->min_addend - 0xffff)
4258         {
4259           old_pages += mips_elf_pages_for_range (range->next);
4260           range->max_addend = range->next->max_addend;
4261           range->next = range->next->next;
4262         }
4263       else
4264         range->max_addend = addend;
4265     }
4266
4267   /* Record any change in the total estimate.  */
4268   new_pages = mips_elf_pages_for_range (range);
4269   if (old_pages != new_pages)
4270     {
4271       entry->num_pages += new_pages - old_pages;
4272       g->page_gotno += new_pages - old_pages;
4273     }
4274
4275   return TRUE;
4276 }
4277
4278 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4279    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4280    whether the page reference described by *REFP needs a GOT page entry,
4281    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4282
4283 static bfd_boolean
4284 mips_elf_resolve_got_page_ref (void **refp, void *data)
4285 {
4286   struct mips_got_page_ref *ref;
4287   struct mips_elf_traverse_got_arg *arg;
4288   struct mips_elf_link_hash_table *htab;
4289   asection *sec;
4290   bfd_vma addend;
4291
4292   ref = (struct mips_got_page_ref *) *refp;
4293   arg = (struct mips_elf_traverse_got_arg *) data;
4294   htab = mips_elf_hash_table (arg->info);
4295
4296   if (ref->symndx < 0)
4297     {
4298       struct mips_elf_link_hash_entry *h;
4299
4300       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4301       h = ref->u.h;
4302       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4303         return 1;
4304
4305       /* Ignore undefined symbols; we'll issue an error later if
4306          appropriate.  */
4307       if (!((h->root.root.type == bfd_link_hash_defined
4308              || h->root.root.type == bfd_link_hash_defweak)
4309             && h->root.root.u.def.section))
4310         return 1;
4311
4312       sec = h->root.root.u.def.section;
4313       addend = h->root.root.u.def.value + ref->addend;
4314     }
4315   else
4316     {
4317       Elf_Internal_Sym *isym;
4318
4319       /* Read in the symbol.  */
4320       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4321                                     ref->symndx);
4322       if (isym == NULL)
4323         {
4324           arg->g = NULL;
4325           return 0;
4326         }
4327
4328       /* Get the associated input section.  */
4329       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4330       if (sec == NULL)
4331         {
4332           arg->g = NULL;
4333           return 0;
4334         }
4335
4336       /* If this is a mergable section, work out the section and offset
4337          of the merged data.  For section symbols, the addend specifies
4338          of the offset _of_ the first byte in the data, otherwise it
4339          specifies the offset _from_ the first byte.  */
4340       if (sec->flags & SEC_MERGE)
4341         {
4342           void *secinfo;
4343
4344           secinfo = elf_section_data (sec)->sec_info;
4345           if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4346             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4347                                                  isym->st_value + ref->addend);
4348           else
4349             addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4350                                                  isym->st_value) + ref->addend;
4351         }
4352       else
4353         addend = isym->st_value + ref->addend;
4354     }
4355   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4356     {
4357       arg->g = NULL;
4358       return 0;
4359     }
4360   return 1;
4361 }
4362
4363 /* If any entries in G->got_entries are for indirect or warning symbols,
4364    replace them with entries for the target symbol.  Convert g->got_page_refs
4365    into got_page_entry structures and estimate the number of page entries
4366    that they require.  */
4367
4368 static bfd_boolean
4369 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4370                                     struct mips_got_info *g)
4371 {
4372   struct mips_elf_traverse_got_arg tga;
4373   struct mips_got_info oldg;
4374
4375   oldg = *g;
4376
4377   tga.info = info;
4378   tga.g = g;
4379   tga.value = FALSE;
4380   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4381   if (tga.value)
4382     {
4383       *g = oldg;
4384       g->got_entries = htab_create (htab_size (oldg.got_entries),
4385                                     mips_elf_got_entry_hash,
4386                                     mips_elf_got_entry_eq, NULL);
4387       if (!g->got_entries)
4388         return FALSE;
4389
4390       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4391       if (!tga.g)
4392         return FALSE;
4393
4394       htab_delete (oldg.got_entries);
4395     }
4396
4397   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4398                                          mips_got_page_entry_eq, NULL);
4399   if (g->got_page_entries == NULL)
4400     return FALSE;
4401
4402   tga.info = info;
4403   tga.g = g;
4404   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4405
4406   return TRUE;
4407 }
4408
4409 /* Return true if a GOT entry for H should live in the local rather than
4410    global GOT area.  */
4411
4412 static bfd_boolean
4413 mips_use_local_got_p (struct bfd_link_info *info,
4414                       struct mips_elf_link_hash_entry *h)
4415 {
4416   /* Symbols that aren't in the dynamic symbol table must live in the
4417      local GOT.  This includes symbols that are completely undefined
4418      and which therefore don't bind locally.  We'll report undefined
4419      symbols later if appropriate.  */
4420   if (h->root.dynindx == -1)
4421     return TRUE;
4422
4423   /* Symbols that bind locally can (and in the case of forced-local
4424      symbols, must) live in the local GOT.  */
4425   if (h->got_only_for_calls
4426       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4427       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4428     return TRUE;
4429
4430   /* If this is an executable that must provide a definition of the symbol,
4431      either though PLTs or copy relocations, then that address should go in
4432      the local rather than global GOT.  */
4433   if (bfd_link_executable (info) && h->has_static_relocs)
4434     return TRUE;
4435
4436   return FALSE;
4437 }
4438
4439 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4440    link_info structure.  Decide whether the hash entry needs an entry in
4441    the global part of the primary GOT, setting global_got_area accordingly.
4442    Count the number of global symbols that are in the primary GOT only
4443    because they have relocations against them (reloc_only_gotno).  */
4444
4445 static int
4446 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4447 {
4448   struct bfd_link_info *info;
4449   struct mips_elf_link_hash_table *htab;
4450   struct mips_got_info *g;
4451
4452   info = (struct bfd_link_info *) data;
4453   htab = mips_elf_hash_table (info);
4454   g = htab->got_info;
4455   if (h->global_got_area != GGA_NONE)
4456     {
4457       /* Make a final decision about whether the symbol belongs in the
4458          local or global GOT.  */
4459       if (mips_use_local_got_p (info, h))
4460         /* The symbol belongs in the local GOT.  We no longer need this
4461            entry if it was only used for relocations; those relocations
4462            will be against the null or section symbol instead of H.  */
4463         h->global_got_area = GGA_NONE;
4464       else if (htab->is_vxworks
4465                && h->got_only_for_calls
4466                && h->root.plt.plist->mips_offset != MINUS_ONE)
4467         /* On VxWorks, calls can refer directly to the .got.plt entry;
4468            they don't need entries in the regular GOT.  .got.plt entries
4469            will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4470         h->global_got_area = GGA_NONE;
4471       else if (h->global_got_area == GGA_RELOC_ONLY)
4472         {
4473           g->reloc_only_gotno++;
4474           g->global_gotno++;
4475         }
4476     }
4477   return 1;
4478 }
4479 \f
4480 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4481    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4482
4483 static int
4484 mips_elf_add_got_entry (void **entryp, void *data)
4485 {
4486   struct mips_got_entry *entry;
4487   struct mips_elf_traverse_got_arg *arg;
4488   void **slot;
4489
4490   entry = (struct mips_got_entry *) *entryp;
4491   arg = (struct mips_elf_traverse_got_arg *) data;
4492   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4493   if (!slot)
4494     {
4495       arg->g = NULL;
4496       return 0;
4497     }
4498   if (!*slot)
4499     {
4500       *slot = entry;
4501       mips_elf_count_got_entry (arg->info, arg->g, entry);
4502     }
4503   return 1;
4504 }
4505
4506 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4507    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4508
4509 static int
4510 mips_elf_add_got_page_entry (void **entryp, void *data)
4511 {
4512   struct mips_got_page_entry *entry;
4513   struct mips_elf_traverse_got_arg *arg;
4514   void **slot;
4515
4516   entry = (struct mips_got_page_entry *) *entryp;
4517   arg = (struct mips_elf_traverse_got_arg *) data;
4518   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4519   if (!slot)
4520     {
4521       arg->g = NULL;
4522       return 0;
4523     }
4524   if (!*slot)
4525     {
4526       *slot = entry;
4527       arg->g->page_gotno += entry->num_pages;
4528     }
4529   return 1;
4530 }
4531
4532 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4533    this would lead to overflow, 1 if they were merged successfully,
4534    and 0 if a merge failed due to lack of memory.  (These values are chosen
4535    so that nonnegative return values can be returned by a htab_traverse
4536    callback.)  */
4537
4538 static int
4539 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4540                          struct mips_got_info *to,
4541                          struct mips_elf_got_per_bfd_arg *arg)
4542 {
4543   struct mips_elf_traverse_got_arg tga;
4544   unsigned int estimate;
4545
4546   /* Work out how many page entries we would need for the combined GOT.  */
4547   estimate = arg->max_pages;
4548   if (estimate >= from->page_gotno + to->page_gotno)
4549     estimate = from->page_gotno + to->page_gotno;
4550
4551   /* And conservatively estimate how many local and TLS entries
4552      would be needed.  */
4553   estimate += from->local_gotno + to->local_gotno;
4554   estimate += from->tls_gotno + to->tls_gotno;
4555
4556   /* If we're merging with the primary got, any TLS relocations will
4557      come after the full set of global entries.  Otherwise estimate those
4558      conservatively as well.  */
4559   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4560     estimate += arg->global_count;
4561   else
4562     estimate += from->global_gotno + to->global_gotno;
4563
4564   /* Bail out if the combined GOT might be too big.  */
4565   if (estimate > arg->max_count)
4566     return -1;
4567
4568   /* Transfer the bfd's got information from FROM to TO.  */
4569   tga.info = arg->info;
4570   tga.g = to;
4571   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4572   if (!tga.g)
4573     return 0;
4574
4575   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4576   if (!tga.g)
4577     return 0;
4578
4579   mips_elf_replace_bfd_got (abfd, to);
4580   return 1;
4581 }
4582
4583 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4584    as possible of the primary got, since it doesn't require explicit
4585    dynamic relocations, but don't use bfds that would reference global
4586    symbols out of the addressable range.  Failing the primary got,
4587    attempt to merge with the current got, or finish the current got
4588    and then make make the new got current.  */
4589
4590 static bfd_boolean
4591 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4592                     struct mips_elf_got_per_bfd_arg *arg)
4593 {
4594   unsigned int estimate;
4595   int result;
4596
4597   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4598     return FALSE;
4599
4600   /* Work out the number of page, local and TLS entries.  */
4601   estimate = arg->max_pages;
4602   if (estimate > g->page_gotno)
4603     estimate = g->page_gotno;
4604   estimate += g->local_gotno + g->tls_gotno;
4605
4606   /* We place TLS GOT entries after both locals and globals.  The globals
4607      for the primary GOT may overflow the normal GOT size limit, so be
4608      sure not to merge a GOT which requires TLS with the primary GOT in that
4609      case.  This doesn't affect non-primary GOTs.  */
4610   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4611
4612   if (estimate <= arg->max_count)
4613     {
4614       /* If we don't have a primary GOT, use it as
4615          a starting point for the primary GOT.  */
4616       if (!arg->primary)
4617         {
4618           arg->primary = g;
4619           return TRUE;
4620         }
4621
4622       /* Try merging with the primary GOT.  */
4623       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4624       if (result >= 0)
4625         return result;
4626     }
4627
4628   /* If we can merge with the last-created got, do it.  */
4629   if (arg->current)
4630     {
4631       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4632       if (result >= 0)
4633         return result;
4634     }
4635
4636   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4637      fits; if it turns out that it doesn't, we'll get relocation
4638      overflows anyway.  */
4639   g->next = arg->current;
4640   arg->current = g;
4641
4642   return TRUE;
4643 }
4644
4645 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4646    to GOTIDX, duplicating the entry if it has already been assigned
4647    an index in a different GOT.  */
4648
4649 static bfd_boolean
4650 mips_elf_set_gotidx (void **entryp, long gotidx)
4651 {
4652   struct mips_got_entry *entry;
4653
4654   entry = (struct mips_got_entry *) *entryp;
4655   if (entry->gotidx > 0)
4656     {
4657       struct mips_got_entry *new_entry;
4658
4659       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4660       if (!new_entry)
4661         return FALSE;
4662
4663       *new_entry = *entry;
4664       *entryp = new_entry;
4665       entry = new_entry;
4666     }
4667   entry->gotidx = gotidx;
4668   return TRUE;
4669 }
4670
4671 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4672    mips_elf_traverse_got_arg in which DATA->value is the size of one
4673    GOT entry.  Set DATA->g to null on failure.  */
4674
4675 static int
4676 mips_elf_initialize_tls_index (void **entryp, void *data)
4677 {
4678   struct mips_got_entry *entry;
4679   struct mips_elf_traverse_got_arg *arg;
4680
4681   /* We're only interested in TLS symbols.  */
4682   entry = (struct mips_got_entry *) *entryp;
4683   if (entry->tls_type == GOT_TLS_NONE)
4684     return 1;
4685
4686   arg = (struct mips_elf_traverse_got_arg *) data;
4687   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4688     {
4689       arg->g = NULL;
4690       return 0;
4691     }
4692
4693   /* Account for the entries we've just allocated.  */
4694   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4695   return 1;
4696 }
4697
4698 /* A htab_traverse callback for GOT entries, where DATA points to a
4699    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4700    symbol to DATA->value.  */
4701
4702 static int
4703 mips_elf_set_global_got_area (void **entryp, void *data)
4704 {
4705   struct mips_got_entry *entry;
4706   struct mips_elf_traverse_got_arg *arg;
4707
4708   entry = (struct mips_got_entry *) *entryp;
4709   arg = (struct mips_elf_traverse_got_arg *) data;
4710   if (entry->abfd != NULL
4711       && entry->symndx == -1
4712       && entry->d.h->global_got_area != GGA_NONE)
4713     entry->d.h->global_got_area = arg->value;
4714   return 1;
4715 }
4716
4717 /* A htab_traverse callback for secondary GOT entries, where DATA points
4718    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4719    and record the number of relocations they require.  DATA->value is
4720    the size of one GOT entry.  Set DATA->g to null on failure.  */
4721
4722 static int
4723 mips_elf_set_global_gotidx (void **entryp, void *data)
4724 {
4725   struct mips_got_entry *entry;
4726   struct mips_elf_traverse_got_arg *arg;
4727
4728   entry = (struct mips_got_entry *) *entryp;
4729   arg = (struct mips_elf_traverse_got_arg *) data;
4730   if (entry->abfd != NULL
4731       && entry->symndx == -1
4732       && entry->d.h->global_got_area != GGA_NONE)
4733     {
4734       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4735         {
4736           arg->g = NULL;
4737           return 0;
4738         }
4739       arg->g->assigned_low_gotno += 1;
4740
4741       if (bfd_link_pic (arg->info)
4742           || (elf_hash_table (arg->info)->dynamic_sections_created
4743               && entry->d.h->root.def_dynamic
4744               && !entry->d.h->root.def_regular))
4745         arg->g->relocs += 1;
4746     }
4747
4748   return 1;
4749 }
4750
4751 /* A htab_traverse callback for GOT entries for which DATA is the
4752    bfd_link_info.  Forbid any global symbols from having traditional
4753    lazy-binding stubs.  */
4754
4755 static int
4756 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4757 {
4758   struct bfd_link_info *info;
4759   struct mips_elf_link_hash_table *htab;
4760   struct mips_got_entry *entry;
4761
4762   entry = (struct mips_got_entry *) *entryp;
4763   info = (struct bfd_link_info *) data;
4764   htab = mips_elf_hash_table (info);
4765   BFD_ASSERT (htab != NULL);
4766
4767   if (entry->abfd != NULL
4768       && entry->symndx == -1
4769       && entry->d.h->needs_lazy_stub)
4770     {
4771       entry->d.h->needs_lazy_stub = FALSE;
4772       htab->lazy_stub_count--;
4773     }
4774
4775   return 1;
4776 }
4777
4778 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4779    the primary GOT.  */
4780 static bfd_vma
4781 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4782 {
4783   if (!g->next)
4784     return 0;
4785
4786   g = mips_elf_bfd_got (ibfd, FALSE);
4787   if (! g)
4788     return 0;
4789
4790   BFD_ASSERT (g->next);
4791
4792   g = g->next;
4793
4794   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4795     * MIPS_ELF_GOT_SIZE (abfd);
4796 }
4797
4798 /* Turn a single GOT that is too big for 16-bit addressing into
4799    a sequence of GOTs, each one 16-bit addressable.  */
4800
4801 static bfd_boolean
4802 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4803                     asection *got, bfd_size_type pages)
4804 {
4805   struct mips_elf_link_hash_table *htab;
4806   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4807   struct mips_elf_traverse_got_arg tga;
4808   struct mips_got_info *g, *gg;
4809   unsigned int assign, needed_relocs;
4810   bfd *dynobj, *ibfd;
4811
4812   dynobj = elf_hash_table (info)->dynobj;
4813   htab = mips_elf_hash_table (info);
4814   BFD_ASSERT (htab != NULL);
4815
4816   g = htab->got_info;
4817
4818   got_per_bfd_arg.obfd = abfd;
4819   got_per_bfd_arg.info = info;
4820   got_per_bfd_arg.current = NULL;
4821   got_per_bfd_arg.primary = NULL;
4822   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4823                                 / MIPS_ELF_GOT_SIZE (abfd))
4824                                - htab->reserved_gotno);
4825   got_per_bfd_arg.max_pages = pages;
4826   /* The number of globals that will be included in the primary GOT.
4827      See the calls to mips_elf_set_global_got_area below for more
4828      information.  */
4829   got_per_bfd_arg.global_count = g->global_gotno;
4830
4831   /* Try to merge the GOTs of input bfds together, as long as they
4832      don't seem to exceed the maximum GOT size, choosing one of them
4833      to be the primary GOT.  */
4834   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4835     {
4836       gg = mips_elf_bfd_got (ibfd, FALSE);
4837       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4838         return FALSE;
4839     }
4840
4841   /* If we do not find any suitable primary GOT, create an empty one.  */
4842   if (got_per_bfd_arg.primary == NULL)
4843     g->next = mips_elf_create_got_info (abfd);
4844   else
4845     g->next = got_per_bfd_arg.primary;
4846   g->next->next = got_per_bfd_arg.current;
4847
4848   /* GG is now the master GOT, and G is the primary GOT.  */
4849   gg = g;
4850   g = g->next;
4851
4852   /* Map the output bfd to the primary got.  That's what we're going
4853      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4854      didn't mark in check_relocs, and we want a quick way to find it.
4855      We can't just use gg->next because we're going to reverse the
4856      list.  */
4857   mips_elf_replace_bfd_got (abfd, g);
4858
4859   /* Every symbol that is referenced in a dynamic relocation must be
4860      present in the primary GOT, so arrange for them to appear after
4861      those that are actually referenced.  */
4862   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4863   g->global_gotno = gg->global_gotno;
4864
4865   tga.info = info;
4866   tga.value = GGA_RELOC_ONLY;
4867   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4868   tga.value = GGA_NORMAL;
4869   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4870
4871   /* Now go through the GOTs assigning them offset ranges.
4872      [assigned_low_gotno, local_gotno[ will be set to the range of local
4873      entries in each GOT.  We can then compute the end of a GOT by
4874      adding local_gotno to global_gotno.  We reverse the list and make
4875      it circular since then we'll be able to quickly compute the
4876      beginning of a GOT, by computing the end of its predecessor.  To
4877      avoid special cases for the primary GOT, while still preserving
4878      assertions that are valid for both single- and multi-got links,
4879      we arrange for the main got struct to have the right number of
4880      global entries, but set its local_gotno such that the initial
4881      offset of the primary GOT is zero.  Remember that the primary GOT
4882      will become the last item in the circular linked list, so it
4883      points back to the master GOT.  */
4884   gg->local_gotno = -g->global_gotno;
4885   gg->global_gotno = g->global_gotno;
4886   gg->tls_gotno = 0;
4887   assign = 0;
4888   gg->next = gg;
4889
4890   do
4891     {
4892       struct mips_got_info *gn;
4893
4894       assign += htab->reserved_gotno;
4895       g->assigned_low_gotno = assign;
4896       g->local_gotno += assign;
4897       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4898       g->assigned_high_gotno = g->local_gotno - 1;
4899       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4900
4901       /* Take g out of the direct list, and push it onto the reversed
4902          list that gg points to.  g->next is guaranteed to be nonnull after
4903          this operation, as required by mips_elf_initialize_tls_index. */
4904       gn = g->next;
4905       g->next = gg->next;
4906       gg->next = g;
4907
4908       /* Set up any TLS entries.  We always place the TLS entries after
4909          all non-TLS entries.  */
4910       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4911       tga.g = g;
4912       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4913       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4914       if (!tga.g)
4915         return FALSE;
4916       BFD_ASSERT (g->tls_assigned_gotno == assign);
4917
4918       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4919       g = gn;
4920
4921       /* Forbid global symbols in every non-primary GOT from having
4922          lazy-binding stubs.  */
4923       if (g)
4924         htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4925     }
4926   while (g);
4927
4928   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4929
4930   needed_relocs = 0;
4931   for (g = gg->next; g && g->next != gg; g = g->next)
4932     {
4933       unsigned int save_assign;
4934
4935       /* Assign offsets to global GOT entries and count how many
4936          relocations they need.  */
4937       save_assign = g->assigned_low_gotno;
4938       g->assigned_low_gotno = g->local_gotno;
4939       tga.info = info;
4940       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4941       tga.g = g;
4942       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4943       if (!tga.g)
4944         return FALSE;
4945       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4946       g->assigned_low_gotno = save_assign;
4947
4948       if (bfd_link_pic (info))
4949         {
4950           g->relocs += g->local_gotno - g->assigned_low_gotno;
4951           BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4952                       + g->next->global_gotno
4953                       + g->next->tls_gotno
4954                       + htab->reserved_gotno);
4955         }
4956       needed_relocs += g->relocs;
4957     }
4958   needed_relocs += g->relocs;
4959
4960   if (needed_relocs)
4961     mips_elf_allocate_dynamic_relocations (dynobj, info,
4962                                            needed_relocs);
4963
4964   return TRUE;
4965 }
4966
4967 \f
4968 /* Returns the first relocation of type r_type found, beginning with
4969    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4970
4971 static const Elf_Internal_Rela *
4972 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4973                           const Elf_Internal_Rela *relocation,
4974                           const Elf_Internal_Rela *relend)
4975 {
4976   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4977
4978   while (relocation < relend)
4979     {
4980       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4981           && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4982         return relocation;
4983
4984       ++relocation;
4985     }
4986
4987   /* We didn't find it.  */
4988   return NULL;
4989 }
4990
4991 /* Return whether an input relocation is against a local symbol.  */
4992
4993 static bfd_boolean
4994 mips_elf_local_relocation_p (bfd *input_bfd,
4995                              const Elf_Internal_Rela *relocation,
4996                              asection **local_sections)
4997 {
4998   unsigned long r_symndx;
4999   Elf_Internal_Shdr *symtab_hdr;
5000   size_t extsymoff;
5001
5002   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5003   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5004   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5005
5006   if (r_symndx < extsymoff)
5007     return TRUE;
5008   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5009     return TRUE;
5010
5011   return FALSE;
5012 }
5013 \f
5014 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5015
5016 bfd_vma
5017 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5018 {
5019   if (value & ((bfd_vma) 1 << (bits - 1)))
5020     /* VALUE is negative.  */
5021     value |= ((bfd_vma) - 1) << bits;
5022
5023   return value;
5024 }
5025
5026 /* Return non-zero if the indicated VALUE has overflowed the maximum
5027    range expressible by a signed number with the indicated number of
5028    BITS.  */
5029
5030 static bfd_boolean
5031 mips_elf_overflow_p (bfd_vma value, int bits)
5032 {
5033   bfd_signed_vma svalue = (bfd_signed_vma) value;
5034
5035   if (svalue > (1 << (bits - 1)) - 1)
5036     /* The value is too big.  */
5037     return TRUE;
5038   else if (svalue < -(1 << (bits - 1)))
5039     /* The value is too small.  */
5040     return TRUE;
5041
5042   /* All is well.  */
5043   return FALSE;
5044 }
5045
5046 /* Calculate the %high function.  */
5047
5048 static bfd_vma
5049 mips_elf_high (bfd_vma value)
5050 {
5051   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5052 }
5053
5054 /* Calculate the %higher function.  */
5055
5056 static bfd_vma
5057 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5058 {
5059 #ifdef BFD64
5060   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5061 #else
5062   abort ();
5063   return MINUS_ONE;
5064 #endif
5065 }
5066
5067 /* Calculate the %highest function.  */
5068
5069 static bfd_vma
5070 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5071 {
5072 #ifdef BFD64
5073   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5074 #else
5075   abort ();
5076   return MINUS_ONE;
5077 #endif
5078 }
5079 \f
5080 /* Create the .compact_rel section.  */
5081
5082 static bfd_boolean
5083 mips_elf_create_compact_rel_section
5084   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5085 {
5086   flagword flags;
5087   register asection *s;
5088
5089   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5090     {
5091       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5092                | SEC_READONLY);
5093
5094       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5095       if (s == NULL
5096           || ! bfd_set_section_alignment (abfd, s,
5097                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5098         return FALSE;
5099
5100       s->size = sizeof (Elf32_External_compact_rel);
5101     }
5102
5103   return TRUE;
5104 }
5105
5106 /* Create the .got section to hold the global offset table.  */
5107
5108 static bfd_boolean
5109 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5110 {
5111   flagword flags;
5112   register asection *s;
5113   struct elf_link_hash_entry *h;
5114   struct bfd_link_hash_entry *bh;
5115   struct mips_elf_link_hash_table *htab;
5116
5117   htab = mips_elf_hash_table (info);
5118   BFD_ASSERT (htab != NULL);
5119
5120   /* This function may be called more than once.  */
5121   if (htab->sgot)
5122     return TRUE;
5123
5124   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5125            | SEC_LINKER_CREATED);
5126
5127   /* We have to use an alignment of 2**4 here because this is hardcoded
5128      in the function stub generation and in the linker script.  */
5129   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5130   if (s == NULL
5131       || ! bfd_set_section_alignment (abfd, s, 4))
5132     return FALSE;
5133   htab->sgot = s;
5134
5135   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5136      linker script because we don't want to define the symbol if we
5137      are not creating a global offset table.  */
5138   bh = NULL;
5139   if (! (_bfd_generic_link_add_one_symbol
5140          (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5141           0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5142     return FALSE;
5143
5144   h = (struct elf_link_hash_entry *) bh;
5145   h->non_elf = 0;
5146   h->def_regular = 1;
5147   h->type = STT_OBJECT;
5148   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5149   elf_hash_table (info)->hgot = h;
5150
5151   if (bfd_link_pic (info)
5152       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5153     return FALSE;
5154
5155   htab->got_info = mips_elf_create_got_info (abfd);
5156   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5157     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5158
5159   /* We also need a .got.plt section when generating PLTs.  */
5160   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5161                                           SEC_ALLOC | SEC_LOAD
5162                                           | SEC_HAS_CONTENTS
5163                                           | SEC_IN_MEMORY
5164                                           | SEC_LINKER_CREATED);
5165   if (s == NULL)
5166     return FALSE;
5167   htab->sgotplt = s;
5168
5169   return TRUE;
5170 }
5171 \f
5172 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5173    __GOTT_INDEX__ symbols.  These symbols are only special for
5174    shared objects; they are not used in executables.  */
5175
5176 static bfd_boolean
5177 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5178 {
5179   return (mips_elf_hash_table (info)->is_vxworks
5180           && bfd_link_pic (info)
5181           && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5182               || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5183 }
5184
5185 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5186    require an la25 stub.  See also mips_elf_local_pic_function_p,
5187    which determines whether the destination function ever requires a
5188    stub.  */
5189
5190 static bfd_boolean
5191 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5192                                      bfd_boolean target_is_16_bit_code_p)
5193 {
5194   /* We specifically ignore branches and jumps from EF_PIC objects,
5195      where the onus is on the compiler or programmer to perform any
5196      necessary initialization of $25.  Sometimes such initialization
5197      is unnecessary; for example, -mno-shared functions do not use
5198      the incoming value of $25, and may therefore be called directly.  */
5199   if (PIC_OBJECT_P (input_bfd))
5200     return FALSE;
5201
5202   switch (r_type)
5203     {
5204     case R_MIPS_26:
5205     case R_MIPS_PC16:
5206     case R_MIPS_PC21_S2:
5207     case R_MIPS_PC26_S2:
5208     case R_MICROMIPS_26_S1:
5209     case R_MICROMIPS_PC7_S1:
5210     case R_MICROMIPS_PC10_S1:
5211     case R_MICROMIPS_PC16_S1:
5212     case R_MICROMIPS_PC23_S2:
5213       return TRUE;
5214
5215     case R_MIPS16_26:
5216       return !target_is_16_bit_code_p;
5217
5218     default:
5219       return FALSE;
5220     }
5221 }
5222 \f
5223 /* Calculate the value produced by the RELOCATION (which comes from
5224    the INPUT_BFD).  The ADDEND is the addend to use for this
5225    RELOCATION; RELOCATION->R_ADDEND is ignored.
5226
5227    The result of the relocation calculation is stored in VALUEP.
5228    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5229    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5230
5231    This function returns bfd_reloc_continue if the caller need take no
5232    further action regarding this relocation, bfd_reloc_notsupported if
5233    something goes dramatically wrong, bfd_reloc_overflow if an
5234    overflow occurs, and bfd_reloc_ok to indicate success.  */
5235
5236 static bfd_reloc_status_type
5237 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5238                                asection *input_section,
5239                                struct bfd_link_info *info,
5240                                const Elf_Internal_Rela *relocation,
5241                                bfd_vma addend, reloc_howto_type *howto,
5242                                Elf_Internal_Sym *local_syms,
5243                                asection **local_sections, bfd_vma *valuep,
5244                                const char **namep,
5245                                bfd_boolean *cross_mode_jump_p,
5246                                bfd_boolean save_addend)
5247 {
5248   /* The eventual value we will return.  */
5249   bfd_vma value;
5250   /* The address of the symbol against which the relocation is
5251      occurring.  */
5252   bfd_vma symbol = 0;
5253   /* The final GP value to be used for the relocatable, executable, or
5254      shared object file being produced.  */
5255   bfd_vma gp;
5256   /* The place (section offset or address) of the storage unit being
5257      relocated.  */
5258   bfd_vma p;
5259   /* The value of GP used to create the relocatable object.  */
5260   bfd_vma gp0;
5261   /* The offset into the global offset table at which the address of
5262      the relocation entry symbol, adjusted by the addend, resides
5263      during execution.  */
5264   bfd_vma g = MINUS_ONE;
5265   /* The section in which the symbol referenced by the relocation is
5266      located.  */
5267   asection *sec = NULL;
5268   struct mips_elf_link_hash_entry *h = NULL;
5269   /* TRUE if the symbol referred to by this relocation is a local
5270      symbol.  */
5271   bfd_boolean local_p, was_local_p;
5272   /* TRUE if the symbol referred to by this relocation is a section
5273      symbol.  */
5274   bfd_boolean section_p = FALSE;
5275   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5276   bfd_boolean gp_disp_p = FALSE;
5277   /* TRUE if the symbol referred to by this relocation is
5278      "__gnu_local_gp".  */
5279   bfd_boolean gnu_local_gp_p = FALSE;
5280   Elf_Internal_Shdr *symtab_hdr;
5281   size_t extsymoff;
5282   unsigned long r_symndx;
5283   int r_type;
5284   /* TRUE if overflow occurred during the calculation of the
5285      relocation value.  */
5286   bfd_boolean overflowed_p;
5287   /* TRUE if this relocation refers to a MIPS16 function.  */
5288   bfd_boolean target_is_16_bit_code_p = FALSE;
5289   bfd_boolean target_is_micromips_code_p = FALSE;
5290   struct mips_elf_link_hash_table *htab;
5291   bfd *dynobj;
5292
5293   dynobj = elf_hash_table (info)->dynobj;
5294   htab = mips_elf_hash_table (info);
5295   BFD_ASSERT (htab != NULL);
5296
5297   /* Parse the relocation.  */
5298   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5299   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5300   p = (input_section->output_section->vma
5301        + input_section->output_offset
5302        + relocation->r_offset);
5303
5304   /* Assume that there will be no overflow.  */
5305   overflowed_p = FALSE;
5306
5307   /* Figure out whether or not the symbol is local, and get the offset
5308      used in the array of hash table entries.  */
5309   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5310   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5311                                          local_sections);
5312   was_local_p = local_p;
5313   if (! elf_bad_symtab (input_bfd))
5314     extsymoff = symtab_hdr->sh_info;
5315   else
5316     {
5317       /* The symbol table does not follow the rule that local symbols
5318          must come before globals.  */
5319       extsymoff = 0;
5320     }
5321
5322   /* Figure out the value of the symbol.  */
5323   if (local_p)
5324     {
5325       Elf_Internal_Sym *sym;
5326
5327       sym = local_syms + r_symndx;
5328       sec = local_sections[r_symndx];
5329
5330       section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5331
5332       symbol = sec->output_section->vma + sec->output_offset;
5333       if (!section_p || (sec->flags & SEC_MERGE))
5334         symbol += sym->st_value;
5335       if ((sec->flags & SEC_MERGE) && section_p)
5336         {
5337           addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5338           addend -= symbol;
5339           addend += sec->output_section->vma + sec->output_offset;
5340         }
5341
5342       /* MIPS16/microMIPS text labels should be treated as odd.  */
5343       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5344         ++symbol;
5345
5346       /* Record the name of this symbol, for our caller.  */
5347       *namep = bfd_elf_string_from_elf_section (input_bfd,
5348                                                 symtab_hdr->sh_link,
5349                                                 sym->st_name);
5350       if (*namep == NULL || **namep == '\0')
5351         *namep = bfd_section_name (input_bfd, sec);
5352
5353       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5354       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5355     }
5356   else
5357     {
5358       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5359
5360       /* For global symbols we look up the symbol in the hash-table.  */
5361       h = ((struct mips_elf_link_hash_entry *)
5362            elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5363       /* Find the real hash-table entry for this symbol.  */
5364       while (h->root.root.type == bfd_link_hash_indirect
5365              || h->root.root.type == bfd_link_hash_warning)
5366         h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5367
5368       /* Record the name of this symbol, for our caller.  */
5369       *namep = h->root.root.root.string;
5370
5371       /* See if this is the special _gp_disp symbol.  Note that such a
5372          symbol must always be a global symbol.  */
5373       if (strcmp (*namep, "_gp_disp") == 0
5374           && ! NEWABI_P (input_bfd))
5375         {
5376           /* Relocations against _gp_disp are permitted only with
5377              R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5378           if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5379             return bfd_reloc_notsupported;
5380
5381           gp_disp_p = TRUE;
5382         }
5383       /* See if this is the special _gp symbol.  Note that such a
5384          symbol must always be a global symbol.  */
5385       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5386         gnu_local_gp_p = TRUE;
5387
5388
5389       /* If this symbol is defined, calculate its address.  Note that
5390          _gp_disp is a magic symbol, always implicitly defined by the
5391          linker, so it's inappropriate to check to see whether or not
5392          its defined.  */
5393       else if ((h->root.root.type == bfd_link_hash_defined
5394                 || h->root.root.type == bfd_link_hash_defweak)
5395                && h->root.root.u.def.section)
5396         {
5397           sec = h->root.root.u.def.section;
5398           if (sec->output_section)
5399             symbol = (h->root.root.u.def.value
5400                       + sec->output_section->vma
5401                       + sec->output_offset);
5402           else
5403             symbol = h->root.root.u.def.value;
5404         }
5405       else if (h->root.root.type == bfd_link_hash_undefweak)
5406         /* We allow relocations against undefined weak symbols, giving
5407            it the value zero, so that you can undefined weak functions
5408            and check to see if they exist by looking at their
5409            addresses.  */
5410         symbol = 0;
5411       else if (info->unresolved_syms_in_objects == RM_IGNORE
5412                && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5413         symbol = 0;
5414       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5415                        ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5416         {
5417           /* If this is a dynamic link, we should have created a
5418              _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5419              in in _bfd_mips_elf_create_dynamic_sections.
5420              Otherwise, we should define the symbol with a value of 0.
5421              FIXME: It should probably get into the symbol table
5422              somehow as well.  */
5423           BFD_ASSERT (! bfd_link_pic (info));
5424           BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5425           symbol = 0;
5426         }
5427       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5428         {
5429           /* This is an optional symbol - an Irix specific extension to the
5430              ELF spec.  Ignore it for now.
5431              XXX - FIXME - there is more to the spec for OPTIONAL symbols
5432              than simply ignoring them, but we do not handle this for now.
5433              For information see the "64-bit ELF Object File Specification"
5434              which is available from here:
5435              http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5436           symbol = 0;
5437         }
5438       else
5439         {
5440           (*info->callbacks->undefined_symbol)
5441             (info, h->root.root.root.string, input_bfd,
5442              input_section, relocation->r_offset,
5443              (info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5444              || ELF_ST_VISIBILITY (h->root.other));
5445           return bfd_reloc_undefined;
5446         }
5447
5448       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5449       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5450     }
5451
5452   /* If this is a reference to a 16-bit function with a stub, we need
5453      to redirect the relocation to the stub unless:
5454
5455      (a) the relocation is for a MIPS16 JAL;
5456
5457      (b) the relocation is for a MIPS16 PIC call, and there are no
5458          non-MIPS16 uses of the GOT slot; or
5459
5460      (c) the section allows direct references to MIPS16 functions.  */
5461   if (r_type != R_MIPS16_26
5462       && !bfd_link_relocatable (info)
5463       && ((h != NULL
5464            && h->fn_stub != NULL
5465            && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5466           || (local_p
5467               && mips_elf_tdata (input_bfd)->local_stubs != NULL
5468               && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5469       && !section_allows_mips16_refs_p (input_section))
5470     {
5471       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5472          have already noticed that we were going to need the
5473          stub.  */
5474       if (local_p)
5475         {
5476           sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5477           value = 0;
5478         }
5479       else
5480         {
5481           BFD_ASSERT (h->need_fn_stub);
5482           if (h->la25_stub)
5483             {
5484               /* If a LA25 header for the stub itself exists, point to the
5485                  prepended LUI/ADDIU sequence.  */
5486               sec = h->la25_stub->stub_section;
5487               value = h->la25_stub->offset;
5488             }
5489           else
5490             {
5491               sec = h->fn_stub;
5492               value = 0;
5493             }
5494         }
5495
5496       symbol = sec->output_section->vma + sec->output_offset + value;
5497       /* The target is 16-bit, but the stub isn't.  */
5498       target_is_16_bit_code_p = FALSE;
5499     }
5500   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5501      to a standard MIPS function, we need to redirect the call to the stub.
5502      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5503      indirect calls should use an indirect stub instead.  */
5504   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5505            && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5506                || (local_p
5507                    && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5508                    && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5509            && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5510     {
5511       if (local_p)
5512         sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5513       else
5514         {
5515           /* If both call_stub and call_fp_stub are defined, we can figure
5516              out which one to use by checking which one appears in the input
5517              file.  */
5518           if (h->call_stub != NULL && h->call_fp_stub != NULL)
5519             {
5520               asection *o;
5521
5522               sec = NULL;
5523               for (o = input_bfd->sections; o != NULL; o = o->next)
5524                 {
5525                   if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5526                     {
5527                       sec = h->call_fp_stub;
5528                       break;
5529                     }
5530                 }
5531               if (sec == NULL)
5532                 sec = h->call_stub;
5533             }
5534           else if (h->call_stub != NULL)
5535             sec = h->call_stub;
5536           else
5537             sec = h->call_fp_stub;
5538         }
5539
5540       BFD_ASSERT (sec->size > 0);
5541       symbol = sec->output_section->vma + sec->output_offset;
5542     }
5543   /* If this is a direct call to a PIC function, redirect to the
5544      non-PIC stub.  */
5545   else if (h != NULL && h->la25_stub
5546            && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5547                                                    target_is_16_bit_code_p))
5548     symbol = (h->la25_stub->stub_section->output_section->vma
5549               + h->la25_stub->stub_section->output_offset
5550               + h->la25_stub->offset);
5551   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5552      entry is used if a standard PLT entry has also been made.  In this
5553      case the symbol will have been set by mips_elf_set_plt_sym_value
5554      to point to the standard PLT entry, so redirect to the compressed
5555      one.  */
5556   else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
5557            && !bfd_link_relocatable (info)
5558            && h != NULL
5559            && h->use_plt_entry
5560            && h->root.plt.plist->comp_offset != MINUS_ONE
5561            && h->root.plt.plist->mips_offset != MINUS_ONE)
5562     {
5563       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5564
5565       sec = htab->splt;
5566       symbol = (sec->output_section->vma
5567                 + sec->output_offset
5568                 + htab->plt_header_size
5569                 + htab->plt_mips_offset
5570                 + h->root.plt.plist->comp_offset
5571                 + 1);
5572
5573       target_is_16_bit_code_p = !micromips_p;
5574       target_is_micromips_code_p = micromips_p;
5575     }
5576
5577   /* Make sure MIPS16 and microMIPS are not used together.  */
5578   if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5579       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5580    {
5581       (*_bfd_error_handler)
5582         (_("MIPS16 and microMIPS functions cannot call each other"));
5583       return bfd_reloc_notsupported;
5584    }
5585
5586   /* Calls from 16-bit code to 32-bit code and vice versa require the
5587      mode change.  However, we can ignore calls to undefined weak symbols,
5588      which should never be executed at runtime.  This exception is important
5589      because the assembly writer may have "known" that any definition of the
5590      symbol would be 16-bit code, and that direct jumps were therefore
5591      acceptable.  */
5592   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5593                         && !(h && h->root.root.type == bfd_link_hash_undefweak)
5594                         && ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5595                             || (r_type == R_MICROMIPS_26_S1
5596                                 && !target_is_micromips_code_p)
5597                             || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5598                                 && (target_is_16_bit_code_p
5599                                     || target_is_micromips_code_p))));
5600
5601   local_p = (h == NULL || mips_use_local_got_p (info, h));
5602
5603   gp0 = _bfd_get_gp_value (input_bfd);
5604   gp = _bfd_get_gp_value (abfd);
5605   if (htab->got_info)
5606     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5607
5608   if (gnu_local_gp_p)
5609     symbol = gp;
5610
5611   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5612      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5613      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5614   if (got_page_reloc_p (r_type) && !local_p)
5615     {
5616       r_type = (micromips_reloc_p (r_type)
5617                 ? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5618       addend = 0;
5619     }
5620
5621   /* If we haven't already determined the GOT offset, and we're going
5622      to need it, get it now.  */
5623   switch (r_type)
5624     {
5625     case R_MIPS16_CALL16:
5626     case R_MIPS16_GOT16:
5627     case R_MIPS_CALL16:
5628     case R_MIPS_GOT16:
5629     case R_MIPS_GOT_DISP:
5630     case R_MIPS_GOT_HI16:
5631     case R_MIPS_CALL_HI16:
5632     case R_MIPS_GOT_LO16:
5633     case R_MIPS_CALL_LO16:
5634     case R_MICROMIPS_CALL16:
5635     case R_MICROMIPS_GOT16:
5636     case R_MICROMIPS_GOT_DISP:
5637     case R_MICROMIPS_GOT_HI16:
5638     case R_MICROMIPS_CALL_HI16:
5639     case R_MICROMIPS_GOT_LO16:
5640     case R_MICROMIPS_CALL_LO16:
5641     case R_MIPS_TLS_GD:
5642     case R_MIPS_TLS_GOTTPREL:
5643     case R_MIPS_TLS_LDM:
5644     case R_MIPS16_TLS_GD:
5645     case R_MIPS16_TLS_GOTTPREL:
5646     case R_MIPS16_TLS_LDM:
5647     case R_MICROMIPS_TLS_GD:
5648     case R_MICROMIPS_TLS_GOTTPREL:
5649     case R_MICROMIPS_TLS_LDM:
5650       /* Find the index into the GOT where this value is located.  */
5651       if (tls_ldm_reloc_p (r_type))
5652         {
5653           g = mips_elf_local_got_index (abfd, input_bfd, info,
5654                                         0, 0, NULL, r_type);
5655           if (g == MINUS_ONE)
5656             return bfd_reloc_outofrange;
5657         }
5658       else if (!local_p)
5659         {
5660           /* On VxWorks, CALL relocations should refer to the .got.plt
5661              entry, which is initialized to point at the PLT stub.  */
5662           if (htab->is_vxworks
5663               && (call_hi16_reloc_p (r_type)
5664                   || call_lo16_reloc_p (r_type)
5665                   || call16_reloc_p (r_type)))
5666             {
5667               BFD_ASSERT (addend == 0);
5668               BFD_ASSERT (h->root.needs_plt);
5669               g = mips_elf_gotplt_index (info, &h->root);
5670             }
5671           else
5672             {
5673               BFD_ASSERT (addend == 0);
5674               g = mips_elf_global_got_index (abfd, info, input_bfd,
5675                                              &h->root, r_type);
5676               if (!TLS_RELOC_P (r_type)
5677                   && !elf_hash_table (info)->dynamic_sections_created)
5678                 /* This is a static link.  We must initialize the GOT entry.  */
5679                 MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5680             }
5681         }
5682       else if (!htab->is_vxworks
5683                && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5684         /* The calculation below does not involve "g".  */
5685         break;
5686       else
5687         {
5688           g = mips_elf_local_got_index (abfd, input_bfd, info,
5689                                         symbol + addend, r_symndx, h, r_type);
5690           if (g == MINUS_ONE)
5691             return bfd_reloc_outofrange;
5692         }
5693
5694       /* Convert GOT indices to actual offsets.  */
5695       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5696       break;
5697     }
5698
5699   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5700      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5701   if (h != NULL && is_gott_symbol (info, &h->root))
5702     {
5703       Elf_Internal_Rela outrel;
5704       bfd_byte *loc;
5705       asection *s;
5706
5707       s = mips_elf_rel_dyn_section (info, FALSE);
5708       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5709
5710       outrel.r_offset = (input_section->output_section->vma
5711                          + input_section->output_offset
5712                          + relocation->r_offset);
5713       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5714       outrel.r_addend = addend;
5715       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5716
5717       /* If we've written this relocation for a readonly section,
5718          we need to set DF_TEXTREL again, so that we do not delete the
5719          DT_TEXTREL tag.  */
5720       if (MIPS_ELF_READONLY_SECTION (input_section))
5721         info->flags |= DF_TEXTREL;
5722
5723       *valuep = 0;
5724       return bfd_reloc_ok;
5725     }
5726
5727   /* Figure out what kind of relocation is being performed.  */
5728   switch (r_type)
5729     {
5730     case R_MIPS_NONE:
5731       return bfd_reloc_continue;
5732
5733     case R_MIPS_16:
5734       if (howto->partial_inplace)
5735         addend = _bfd_mips_elf_sign_extend (addend, 16);
5736       value = symbol + addend;
5737       overflowed_p = mips_elf_overflow_p (value, 16);
5738       break;
5739
5740     case R_MIPS_32:
5741     case R_MIPS_REL32:
5742     case R_MIPS_64:
5743       if ((bfd_link_pic (info)
5744            || (htab->root.dynamic_sections_created
5745                && h != NULL
5746                && h->root.def_dynamic
5747                && !h->root.def_regular
5748                && !h->has_static_relocs))
5749           && r_symndx != STN_UNDEF
5750           && (h == NULL
5751               || h->root.root.type != bfd_link_hash_undefweak
5752               || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5753           && (input_section->flags & SEC_ALLOC) != 0)
5754         {
5755           /* If we're creating a shared library, then we can't know
5756              where the symbol will end up.  So, we create a relocation
5757              record in the output, and leave the job up to the dynamic
5758              linker.  We must do the same for executable references to
5759              shared library symbols, unless we've decided to use copy
5760              relocs or PLTs instead.  */
5761           value = addend;
5762           if (!mips_elf_create_dynamic_relocation (abfd,
5763                                                    info,
5764                                                    relocation,
5765                                                    h,
5766                                                    sec,
5767                                                    symbol,
5768                                                    &value,
5769                                                    input_section))
5770             return bfd_reloc_undefined;
5771         }
5772       else
5773         {
5774           if (r_type != R_MIPS_REL32)
5775             value = symbol + addend;
5776           else
5777             value = addend;
5778         }
5779       value &= howto->dst_mask;
5780       break;
5781
5782     case R_MIPS_PC32:
5783       value = symbol + addend - p;
5784       value &= howto->dst_mask;
5785       break;
5786
5787     case R_MIPS16_26:
5788       /* The calculation for R_MIPS16_26 is just the same as for an
5789          R_MIPS_26.  It's only the storage of the relocated field into
5790          the output file that's different.  That's handled in
5791          mips_elf_perform_relocation.  So, we just fall through to the
5792          R_MIPS_26 case here.  */
5793     case R_MIPS_26:
5794     case R_MICROMIPS_26_S1:
5795       {
5796         unsigned int shift;
5797
5798         /* Shift is 2, unusually, for microMIPS JALX.  */
5799         shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5800
5801         if (howto->partial_inplace && !section_p)
5802           value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5803         else
5804           value = addend;
5805         value += symbol;
5806
5807         /* Make sure the target of JALX is word-aligned.  Bit 0 must be
5808            the correct ISA mode selector and bit 1 must be 0.  */
5809         if (*cross_mode_jump_p && (value & 3) != (r_type == R_MIPS_26))
5810           return bfd_reloc_outofrange;
5811
5812         value >>= shift;
5813         if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5814           overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5815         value &= howto->dst_mask;
5816       }
5817       break;
5818
5819     case R_MIPS_TLS_DTPREL_HI16:
5820     case R_MIPS16_TLS_DTPREL_HI16:
5821     case R_MICROMIPS_TLS_DTPREL_HI16:
5822       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5823                & howto->dst_mask);
5824       break;
5825
5826     case R_MIPS_TLS_DTPREL_LO16:
5827     case R_MIPS_TLS_DTPREL32:
5828     case R_MIPS_TLS_DTPREL64:
5829     case R_MIPS16_TLS_DTPREL_LO16:
5830     case R_MICROMIPS_TLS_DTPREL_LO16:
5831       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5832       break;
5833
5834     case R_MIPS_TLS_TPREL_HI16:
5835     case R_MIPS16_TLS_TPREL_HI16:
5836     case R_MICROMIPS_TLS_TPREL_HI16:
5837       value = (mips_elf_high (addend + symbol - tprel_base (info))
5838                & howto->dst_mask);
5839       break;
5840
5841     case R_MIPS_TLS_TPREL_LO16:
5842     case R_MIPS_TLS_TPREL32:
5843     case R_MIPS_TLS_TPREL64:
5844     case R_MIPS16_TLS_TPREL_LO16:
5845     case R_MICROMIPS_TLS_TPREL_LO16:
5846       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5847       break;
5848
5849     case R_MIPS_HI16:
5850     case R_MIPS16_HI16:
5851     case R_MICROMIPS_HI16:
5852       if (!gp_disp_p)
5853         {
5854           value = mips_elf_high (addend + symbol);
5855           value &= howto->dst_mask;
5856         }
5857       else
5858         {
5859           /* For MIPS16 ABI code we generate this sequence
5860                 0: li      $v0,%hi(_gp_disp)
5861                 4: addiupc $v1,%lo(_gp_disp)
5862                 8: sll     $v0,16
5863                12: addu    $v0,$v1
5864                14: move    $gp,$v0
5865              So the offsets of hi and lo relocs are the same, but the
5866              base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5867              ADDIUPC clears the low two bits of the instruction address,
5868              so the base is ($t9 + 4) & ~3.  */
5869           if (r_type == R_MIPS16_HI16)
5870             value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5871           /* The microMIPS .cpload sequence uses the same assembly
5872              instructions as the traditional psABI version, but the
5873              incoming $t9 has the low bit set.  */
5874           else if (r_type == R_MICROMIPS_HI16)
5875             value = mips_elf_high (addend + gp - p - 1);
5876           else
5877             value = mips_elf_high (addend + gp - p);
5878           overflowed_p = mips_elf_overflow_p (value, 16);
5879         }
5880       break;
5881
5882     case R_MIPS_LO16:
5883     case R_MIPS16_LO16:
5884     case R_MICROMIPS_LO16:
5885     case R_MICROMIPS_HI0_LO16:
5886       if (!gp_disp_p)
5887         value = (symbol + addend) & howto->dst_mask;
5888       else
5889         {
5890           /* See the comment for R_MIPS16_HI16 above for the reason
5891              for this conditional.  */
5892           if (r_type == R_MIPS16_LO16)
5893             value = addend + gp - (p & ~(bfd_vma) 0x3);
5894           else if (r_type == R_MICROMIPS_LO16
5895                    || r_type == R_MICROMIPS_HI0_LO16)
5896             value = addend + gp - p + 3;
5897           else
5898             value = addend + gp - p + 4;
5899           /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5900              for overflow.  But, on, say, IRIX5, relocations against
5901              _gp_disp are normally generated from the .cpload
5902              pseudo-op.  It generates code that normally looks like
5903              this:
5904
5905                lui    $gp,%hi(_gp_disp)
5906                addiu  $gp,$gp,%lo(_gp_disp)
5907                addu   $gp,$gp,$t9
5908
5909              Here $t9 holds the address of the function being called,
5910              as required by the MIPS ELF ABI.  The R_MIPS_LO16
5911              relocation can easily overflow in this situation, but the
5912              R_MIPS_HI16 relocation will handle the overflow.
5913              Therefore, we consider this a bug in the MIPS ABI, and do
5914              not check for overflow here.  */
5915         }
5916       break;
5917
5918     case R_MIPS_LITERAL:
5919     case R_MICROMIPS_LITERAL:
5920       /* Because we don't merge literal sections, we can handle this
5921          just like R_MIPS_GPREL16.  In the long run, we should merge
5922          shared literals, and then we will need to additional work
5923          here.  */
5924
5925       /* Fall through.  */
5926
5927     case R_MIPS16_GPREL:
5928       /* The R_MIPS16_GPREL performs the same calculation as
5929          R_MIPS_GPREL16, but stores the relocated bits in a different
5930          order.  We don't need to do anything special here; the
5931          differences are handled in mips_elf_perform_relocation.  */
5932     case R_MIPS_GPREL16:
5933     case R_MICROMIPS_GPREL7_S2:
5934     case R_MICROMIPS_GPREL16:
5935       /* Only sign-extend the addend if it was extracted from the
5936          instruction.  If the addend was separate, leave it alone,
5937          otherwise we may lose significant bits.  */
5938       if (howto->partial_inplace)
5939         addend = _bfd_mips_elf_sign_extend (addend, 16);
5940       value = symbol + addend - gp;
5941       /* If the symbol was local, any earlier relocatable links will
5942          have adjusted its addend with the gp offset, so compensate
5943          for that now.  Don't do it for symbols forced local in this
5944          link, though, since they won't have had the gp offset applied
5945          to them before.  */
5946       if (was_local_p)
5947         value += gp0;
5948       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5949         overflowed_p = mips_elf_overflow_p (value, 16);
5950       break;
5951
5952     case R_MIPS16_GOT16:
5953     case R_MIPS16_CALL16:
5954     case R_MIPS_GOT16:
5955     case R_MIPS_CALL16:
5956     case R_MICROMIPS_GOT16:
5957     case R_MICROMIPS_CALL16:
5958       /* VxWorks does not have separate local and global semantics for
5959          R_MIPS*_GOT16; every relocation evaluates to "G".  */
5960       if (!htab->is_vxworks && local_p)
5961         {
5962           value = mips_elf_got16_entry (abfd, input_bfd, info,
5963                                         symbol + addend, !was_local_p);
5964           if (value == MINUS_ONE)
5965             return bfd_reloc_outofrange;
5966           value
5967             = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5968           overflowed_p = mips_elf_overflow_p (value, 16);
5969           break;
5970         }
5971
5972       /* Fall through.  */
5973
5974     case R_MIPS_TLS_GD:
5975     case R_MIPS_TLS_GOTTPREL:
5976     case R_MIPS_TLS_LDM:
5977     case R_MIPS_GOT_DISP:
5978     case R_MIPS16_TLS_GD:
5979     case R_MIPS16_TLS_GOTTPREL:
5980     case R_MIPS16_TLS_LDM:
5981     case R_MICROMIPS_TLS_GD:
5982     case R_MICROMIPS_TLS_GOTTPREL:
5983     case R_MICROMIPS_TLS_LDM:
5984     case R_MICROMIPS_GOT_DISP:
5985       value = g;
5986       overflowed_p = mips_elf_overflow_p (value, 16);
5987       break;
5988
5989     case R_MIPS_GPREL32:
5990       value = (addend + symbol + gp0 - gp);
5991       if (!save_addend)
5992         value &= howto->dst_mask;
5993       break;
5994
5995     case R_MIPS_PC16:
5996     case R_MIPS_GNU_REL16_S2:
5997       if (howto->partial_inplace)
5998         addend = _bfd_mips_elf_sign_extend (addend, 18);
5999
6000       if ((symbol + addend) & 3)
6001         return bfd_reloc_outofrange;
6002
6003       value = symbol + addend - p;
6004       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6005         overflowed_p = mips_elf_overflow_p (value, 18);
6006       value >>= howto->rightshift;
6007       value &= howto->dst_mask;
6008       break;
6009
6010     case R_MIPS16_PC16_S1:
6011       if (howto->partial_inplace)
6012         addend = _bfd_mips_elf_sign_extend (addend, 17);
6013
6014       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6015           && ((symbol + addend) & 1) == 0)
6016         return bfd_reloc_outofrange;
6017
6018       value = symbol + addend - p;
6019       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6020         overflowed_p = mips_elf_overflow_p (value, 17);
6021       value >>= howto->rightshift;
6022       value &= howto->dst_mask;
6023       break;
6024
6025     case R_MIPS_PC21_S2:
6026       if (howto->partial_inplace)
6027         addend = _bfd_mips_elf_sign_extend (addend, 23);
6028
6029       if ((symbol + addend) & 3)
6030         return bfd_reloc_outofrange;
6031
6032       value = symbol + addend - p;
6033       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6034         overflowed_p = mips_elf_overflow_p (value, 23);
6035       value >>= howto->rightshift;
6036       value &= howto->dst_mask;
6037       break;
6038
6039     case R_MIPS_PC26_S2:
6040       if (howto->partial_inplace)
6041         addend = _bfd_mips_elf_sign_extend (addend, 28);
6042
6043       if ((symbol + addend) & 3)
6044         return bfd_reloc_outofrange;
6045
6046       value = symbol + addend - p;
6047       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6048         overflowed_p = mips_elf_overflow_p (value, 28);
6049       value >>= howto->rightshift;
6050       value &= howto->dst_mask;
6051       break;
6052
6053     case R_MIPS_PC18_S3:
6054       if (howto->partial_inplace)
6055         addend = _bfd_mips_elf_sign_extend (addend, 21);
6056
6057       if ((symbol + addend) & 7)
6058         return bfd_reloc_outofrange;
6059
6060       value = symbol + addend - ((p | 7) ^ 7);
6061       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6062         overflowed_p = mips_elf_overflow_p (value, 21);
6063       value >>= howto->rightshift;
6064       value &= howto->dst_mask;
6065       break;
6066
6067     case R_MIPS_PC19_S2:
6068       if (howto->partial_inplace)
6069         addend = _bfd_mips_elf_sign_extend (addend, 21);
6070
6071       if ((symbol + addend) & 3)
6072         return bfd_reloc_outofrange;
6073
6074       value = symbol + addend - p;
6075       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6076         overflowed_p = mips_elf_overflow_p (value, 21);
6077       value >>= howto->rightshift;
6078       value &= howto->dst_mask;
6079       break;
6080
6081     case R_MIPS_PCHI16:
6082       value = mips_elf_high (symbol + addend - p);
6083       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6084         overflowed_p = mips_elf_overflow_p (value, 16);
6085       value &= howto->dst_mask;
6086       break;
6087
6088     case R_MIPS_PCLO16:
6089       if (howto->partial_inplace)
6090         addend = _bfd_mips_elf_sign_extend (addend, 16);
6091       value = symbol + addend - p;
6092       value &= howto->dst_mask;
6093       break;
6094
6095     case R_MICROMIPS_PC7_S1:
6096       if (howto->partial_inplace)
6097         addend = _bfd_mips_elf_sign_extend (addend, 8);
6098       value = symbol + addend - p;
6099       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6100         overflowed_p = mips_elf_overflow_p (value, 8);
6101       value >>= howto->rightshift;
6102       value &= howto->dst_mask;
6103       break;
6104
6105     case R_MICROMIPS_PC10_S1:
6106       if (howto->partial_inplace)
6107         addend = _bfd_mips_elf_sign_extend (addend, 11);
6108       value = symbol + addend - p;
6109       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6110         overflowed_p = mips_elf_overflow_p (value, 11);
6111       value >>= howto->rightshift;
6112       value &= howto->dst_mask;
6113       break;
6114
6115     case R_MICROMIPS_PC16_S1:
6116       if (howto->partial_inplace)
6117         addend = _bfd_mips_elf_sign_extend (addend, 17);
6118       value = symbol + addend - p;
6119       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6120         overflowed_p = mips_elf_overflow_p (value, 17);
6121       value >>= howto->rightshift;
6122       value &= howto->dst_mask;
6123       break;
6124
6125     case R_MICROMIPS_PC23_S2:
6126       if (howto->partial_inplace)
6127         addend = _bfd_mips_elf_sign_extend (addend, 25);
6128       value = symbol + addend - ((p | 3) ^ 3);
6129       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6130         overflowed_p = mips_elf_overflow_p (value, 25);
6131       value >>= howto->rightshift;
6132       value &= howto->dst_mask;
6133       break;
6134
6135     case R_MIPS_GOT_HI16:
6136     case R_MIPS_CALL_HI16:
6137     case R_MICROMIPS_GOT_HI16:
6138     case R_MICROMIPS_CALL_HI16:
6139       /* We're allowed to handle these two relocations identically.
6140          The dynamic linker is allowed to handle the CALL relocations
6141          differently by creating a lazy evaluation stub.  */
6142       value = g;
6143       value = mips_elf_high (value);
6144       value &= howto->dst_mask;
6145       break;
6146
6147     case R_MIPS_GOT_LO16:
6148     case R_MIPS_CALL_LO16:
6149     case R_MICROMIPS_GOT_LO16:
6150     case R_MICROMIPS_CALL_LO16:
6151       value = g & howto->dst_mask;
6152       break;
6153
6154     case R_MIPS_GOT_PAGE:
6155     case R_MICROMIPS_GOT_PAGE:
6156       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6157       if (value == MINUS_ONE)
6158         return bfd_reloc_outofrange;
6159       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6160       overflowed_p = mips_elf_overflow_p (value, 16);
6161       break;
6162
6163     case R_MIPS_GOT_OFST:
6164     case R_MICROMIPS_GOT_OFST:
6165       if (local_p)
6166         mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6167       else
6168         value = addend;
6169       overflowed_p = mips_elf_overflow_p (value, 16);
6170       break;
6171
6172     case R_MIPS_SUB:
6173     case R_MICROMIPS_SUB:
6174       value = symbol - addend;
6175       value &= howto->dst_mask;
6176       break;
6177
6178     case R_MIPS_HIGHER:
6179     case R_MICROMIPS_HIGHER:
6180       value = mips_elf_higher (addend + symbol);
6181       value &= howto->dst_mask;
6182       break;
6183
6184     case R_MIPS_HIGHEST:
6185     case R_MICROMIPS_HIGHEST:
6186       value = mips_elf_highest (addend + symbol);
6187       value &= howto->dst_mask;
6188       break;
6189
6190     case R_MIPS_SCN_DISP:
6191     case R_MICROMIPS_SCN_DISP:
6192       value = symbol + addend - sec->output_offset;
6193       value &= howto->dst_mask;
6194       break;
6195
6196     case R_MIPS_JALR:
6197     case R_MICROMIPS_JALR:
6198       /* This relocation is only a hint.  In some cases, we optimize
6199          it into a bal instruction.  But we don't try to optimize
6200          when the symbol does not resolve locally.  */
6201       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6202         return bfd_reloc_continue;
6203       value = symbol + addend;
6204       break;
6205
6206     case R_MIPS_PJUMP:
6207     case R_MIPS_GNU_VTINHERIT:
6208     case R_MIPS_GNU_VTENTRY:
6209       /* We don't do anything with these at present.  */
6210       return bfd_reloc_continue;
6211
6212     default:
6213       /* An unrecognized relocation type.  */
6214       return bfd_reloc_notsupported;
6215     }
6216
6217   /* Store the VALUE for our caller.  */
6218   *valuep = value;
6219   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6220 }
6221
6222 /* Obtain the field relocated by RELOCATION.  */
6223
6224 static bfd_vma
6225 mips_elf_obtain_contents (reloc_howto_type *howto,
6226                           const Elf_Internal_Rela *relocation,
6227                           bfd *input_bfd, bfd_byte *contents)
6228 {
6229   bfd_vma x = 0;
6230   bfd_byte *location = contents + relocation->r_offset;
6231   unsigned int size = bfd_get_reloc_size (howto);
6232
6233   /* Obtain the bytes.  */
6234   if (size != 0)
6235     x = bfd_get (8 * size, input_bfd, location);
6236
6237   return x;
6238 }
6239
6240 /* It has been determined that the result of the RELOCATION is the
6241    VALUE.  Use HOWTO to place VALUE into the output file at the
6242    appropriate position.  The SECTION is the section to which the
6243    relocation applies.
6244    CROSS_MODE_JUMP_P is true if the relocation field
6245    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6246
6247    Returns FALSE if anything goes wrong.  */
6248
6249 static bfd_boolean
6250 mips_elf_perform_relocation (struct bfd_link_info *info,
6251                              reloc_howto_type *howto,
6252                              const Elf_Internal_Rela *relocation,
6253                              bfd_vma value, bfd *input_bfd,
6254                              asection *input_section, bfd_byte *contents,
6255                              bfd_boolean cross_mode_jump_p)
6256 {
6257   bfd_vma x;
6258   bfd_byte *location;
6259   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6260   unsigned int size;
6261
6262   /* Figure out where the relocation is occurring.  */
6263   location = contents + relocation->r_offset;
6264
6265   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6266
6267   /* Obtain the current value.  */
6268   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6269
6270   /* Clear the field we are setting.  */
6271   x &= ~howto->dst_mask;
6272
6273   /* Set the field.  */
6274   x |= (value & howto->dst_mask);
6275
6276   /* If required, turn JAL into JALX.  */
6277   if (cross_mode_jump_p && jal_reloc_p (r_type))
6278     {
6279       bfd_boolean ok;
6280       bfd_vma opcode = x >> 26;
6281       bfd_vma jalx_opcode;
6282
6283       /* Check to see if the opcode is already JAL or JALX.  */
6284       if (r_type == R_MIPS16_26)
6285         {
6286           ok = ((opcode == 0x6) || (opcode == 0x7));
6287           jalx_opcode = 0x7;
6288         }
6289       else if (r_type == R_MICROMIPS_26_S1)
6290         {
6291           ok = ((opcode == 0x3d) || (opcode == 0x3c));
6292           jalx_opcode = 0x3c;
6293         }
6294       else
6295         {
6296           ok = ((opcode == 0x3) || (opcode == 0x1d));
6297           jalx_opcode = 0x1d;
6298         }
6299
6300       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6301          convert J or JALS to JALX.  */
6302       if (!ok)
6303         {
6304           info->callbacks->einfo
6305             (_("%X%H: Unsupported jump between ISA modes; "
6306                "consider recompiling with interlinking enabled\n"),
6307              input_bfd, input_section, relocation->r_offset);
6308           return TRUE;
6309         }
6310
6311       /* Make this the JALX opcode.  */
6312       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6313     }
6314
6315   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6316      range.  */
6317   if (!bfd_link_relocatable (info)
6318       && !cross_mode_jump_p
6319       && ((JAL_TO_BAL_P (input_bfd)
6320            && r_type == R_MIPS_26
6321            && (x >> 26) == 0x3)         /* jal addr */
6322           || (JALR_TO_BAL_P (input_bfd)
6323               && r_type == R_MIPS_JALR
6324               && x == 0x0320f809)       /* jalr t9 */
6325           || (JR_TO_B_P (input_bfd)
6326               && r_type == R_MIPS_JALR
6327               && x == 0x03200008)))     /* jr t9 */
6328     {
6329       bfd_vma addr;
6330       bfd_vma dest;
6331       bfd_signed_vma off;
6332
6333       addr = (input_section->output_section->vma
6334               + input_section->output_offset
6335               + relocation->r_offset
6336               + 4);
6337       if (r_type == R_MIPS_26)
6338         dest = (value << 2) | ((addr >> 28) << 28);
6339       else
6340         dest = value;
6341       off = dest - addr;
6342       if (off <= 0x1ffff && off >= -0x20000)
6343         {
6344           if (x == 0x03200008)  /* jr t9 */
6345             x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6346           else
6347             x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6348         }
6349     }
6350
6351   /* Put the value into the output.  */
6352   size = bfd_get_reloc_size (howto);
6353   if (size != 0)
6354     bfd_put (8 * size, input_bfd, x, location);
6355
6356   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6357                                location);
6358
6359   return TRUE;
6360 }
6361 \f
6362 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6363    is the original relocation, which is now being transformed into a
6364    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6365    caller should store the result in place of the original addend.  */
6366
6367 static bfd_boolean
6368 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6369                                     struct bfd_link_info *info,
6370                                     const Elf_Internal_Rela *rel,
6371                                     struct mips_elf_link_hash_entry *h,
6372                                     asection *sec, bfd_vma symbol,
6373                                     bfd_vma *addendp, asection *input_section)
6374 {
6375   Elf_Internal_Rela outrel[3];
6376   asection *sreloc;
6377   bfd *dynobj;
6378   int r_type;
6379   long indx;
6380   bfd_boolean defined_p;
6381   struct mips_elf_link_hash_table *htab;
6382
6383   htab = mips_elf_hash_table (info);
6384   BFD_ASSERT (htab != NULL);
6385
6386   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6387   dynobj = elf_hash_table (info)->dynobj;
6388   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6389   BFD_ASSERT (sreloc != NULL);
6390   BFD_ASSERT (sreloc->contents != NULL);
6391   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6392               < sreloc->size);
6393
6394   outrel[0].r_offset =
6395     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6396   if (ABI_64_P (output_bfd))
6397     {
6398       outrel[1].r_offset =
6399         _bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6400       outrel[2].r_offset =
6401         _bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6402     }
6403
6404   if (outrel[0].r_offset == MINUS_ONE)
6405     /* The relocation field has been deleted.  */
6406     return TRUE;
6407
6408   if (outrel[0].r_offset == MINUS_TWO)
6409     {
6410       /* The relocation field has been converted into a relative value of
6411          some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6412          the field to be fully relocated, so add in the symbol's value.  */
6413       *addendp += symbol;
6414       return TRUE;
6415     }
6416
6417   /* We must now calculate the dynamic symbol table index to use
6418      in the relocation.  */
6419   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6420     {
6421       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6422       indx = h->root.dynindx;
6423       if (SGI_COMPAT (output_bfd))
6424         defined_p = h->root.def_regular;
6425       else
6426         /* ??? glibc's ld.so just adds the final GOT entry to the
6427            relocation field.  It therefore treats relocs against
6428            defined symbols in the same way as relocs against
6429            undefined symbols.  */
6430         defined_p = FALSE;
6431     }
6432   else
6433     {
6434       if (sec != NULL && bfd_is_abs_section (sec))
6435         indx = 0;
6436       else if (sec == NULL || sec->owner == NULL)
6437         {
6438           bfd_set_error (bfd_error_bad_value);
6439           return FALSE;
6440         }
6441       else
6442         {
6443           indx = elf_section_data (sec->output_section)->dynindx;
6444           if (indx == 0)
6445             {
6446               asection *osec = htab->root.text_index_section;
6447               indx = elf_section_data (osec)->dynindx;
6448             }
6449           if (indx == 0)
6450             abort ();
6451         }
6452
6453       /* Instead of generating a relocation using the section
6454          symbol, we may as well make it a fully relative
6455          relocation.  We want to avoid generating relocations to
6456          local symbols because we used to generate them
6457          incorrectly, without adding the original symbol value,
6458          which is mandated by the ABI for section symbols.  In
6459          order to give dynamic loaders and applications time to
6460          phase out the incorrect use, we refrain from emitting
6461          section-relative relocations.  It's not like they're
6462          useful, after all.  This should be a bit more efficient
6463          as well.  */
6464       /* ??? Although this behavior is compatible with glibc's ld.so,
6465          the ABI says that relocations against STN_UNDEF should have
6466          a symbol value of 0.  Irix rld honors this, so relocations
6467          against STN_UNDEF have no effect.  */
6468       if (!SGI_COMPAT (output_bfd))
6469         indx = 0;
6470       defined_p = TRUE;
6471     }
6472
6473   /* If the relocation was previously an absolute relocation and
6474      this symbol will not be referred to by the relocation, we must
6475      adjust it by the value we give it in the dynamic symbol table.
6476      Otherwise leave the job up to the dynamic linker.  */
6477   if (defined_p && r_type != R_MIPS_REL32)
6478     *addendp += symbol;
6479
6480   if (htab->is_vxworks)
6481     /* VxWorks uses non-relative relocations for this.  */
6482     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6483   else
6484     /* The relocation is always an REL32 relocation because we don't
6485        know where the shared library will wind up at load-time.  */
6486     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6487                                    R_MIPS_REL32);
6488
6489   /* For strict adherence to the ABI specification, we should
6490      generate a R_MIPS_64 relocation record by itself before the
6491      _REL32/_64 record as well, such that the addend is read in as
6492      a 64-bit value (REL32 is a 32-bit relocation, after all).
6493      However, since none of the existing ELF64 MIPS dynamic
6494      loaders seems to care, we don't waste space with these
6495      artificial relocations.  If this turns out to not be true,
6496      mips_elf_allocate_dynamic_relocation() should be tweaked so
6497      as to make room for a pair of dynamic relocations per
6498      invocation if ABI_64_P, and here we should generate an
6499      additional relocation record with R_MIPS_64 by itself for a
6500      NULL symbol before this relocation record.  */
6501   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6502                                  ABI_64_P (output_bfd)
6503                                  ? R_MIPS_64
6504                                  : R_MIPS_NONE);
6505   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6506
6507   /* Adjust the output offset of the relocation to reference the
6508      correct location in the output file.  */
6509   outrel[0].r_offset += (input_section->output_section->vma
6510                          + input_section->output_offset);
6511   outrel[1].r_offset += (input_section->output_section->vma
6512                          + input_section->output_offset);
6513   outrel[2].r_offset += (input_section->output_section->vma
6514                          + input_section->output_offset);
6515
6516   /* Put the relocation back out.  We have to use the special
6517      relocation outputter in the 64-bit case since the 64-bit
6518      relocation format is non-standard.  */
6519   if (ABI_64_P (output_bfd))
6520     {
6521       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6522         (output_bfd, &outrel[0],
6523          (sreloc->contents
6524           + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6525     }
6526   else if (htab->is_vxworks)
6527     {
6528       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6529       outrel[0].r_addend = *addendp;
6530       bfd_elf32_swap_reloca_out
6531         (output_bfd, &outrel[0],
6532          (sreloc->contents
6533           + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6534     }
6535   else
6536     bfd_elf32_swap_reloc_out
6537       (output_bfd, &outrel[0],
6538        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6539
6540   /* We've now added another relocation.  */
6541   ++sreloc->reloc_count;
6542
6543   /* Make sure the output section is writable.  The dynamic linker
6544      will be writing to it.  */
6545   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6546     |= SHF_WRITE;
6547
6548   /* On IRIX5, make an entry of compact relocation info.  */
6549   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6550     {
6551       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6552       bfd_byte *cr;
6553
6554       if (scpt)
6555         {
6556           Elf32_crinfo cptrel;
6557
6558           mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6559           cptrel.vaddr = (rel->r_offset
6560                           + input_section->output_section->vma
6561                           + input_section->output_offset);
6562           if (r_type == R_MIPS_REL32)
6563             mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6564           else
6565             mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6566           mips_elf_set_cr_dist2to (cptrel, 0);
6567           cptrel.konst = *addendp;
6568
6569           cr = (scpt->contents
6570                 + sizeof (Elf32_External_compact_rel));
6571           mips_elf_set_cr_relvaddr (cptrel, 0);
6572           bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6573                                      ((Elf32_External_crinfo *) cr
6574                                       + scpt->reloc_count));
6575           ++scpt->reloc_count;
6576         }
6577     }
6578
6579   /* If we've written this relocation for a readonly section,
6580      we need to set DF_TEXTREL again, so that we do not delete the
6581      DT_TEXTREL tag.  */
6582   if (MIPS_ELF_READONLY_SECTION (input_section))
6583     info->flags |= DF_TEXTREL;
6584
6585   return TRUE;
6586 }
6587 \f
6588 /* Return the MACH for a MIPS e_flags value.  */
6589
6590 unsigned long
6591 _bfd_elf_mips_mach (flagword flags)
6592 {
6593   switch (flags & EF_MIPS_MACH)
6594     {
6595     case E_MIPS_MACH_3900:
6596       return bfd_mach_mips3900;
6597
6598     case E_MIPS_MACH_4010:
6599       return bfd_mach_mips4010;
6600
6601     case E_MIPS_MACH_4100:
6602       return bfd_mach_mips4100;
6603
6604     case E_MIPS_MACH_4111:
6605       return bfd_mach_mips4111;
6606
6607     case E_MIPS_MACH_4120:
6608       return bfd_mach_mips4120;
6609
6610     case E_MIPS_MACH_4650:
6611       return bfd_mach_mips4650;
6612
6613     case E_MIPS_MACH_5400:
6614       return bfd_mach_mips5400;
6615
6616     case E_MIPS_MACH_5500:
6617       return bfd_mach_mips5500;
6618
6619     case E_MIPS_MACH_5900:
6620       return bfd_mach_mips5900;
6621
6622     case E_MIPS_MACH_9000:
6623       return bfd_mach_mips9000;
6624
6625     case E_MIPS_MACH_SB1:
6626       return bfd_mach_mips_sb1;
6627
6628     case E_MIPS_MACH_LS2E:
6629       return bfd_mach_mips_loongson_2e;
6630
6631     case E_MIPS_MACH_LS2F:
6632       return bfd_mach_mips_loongson_2f;
6633
6634     case E_MIPS_MACH_LS3A:
6635       return bfd_mach_mips_loongson_3a;
6636
6637     case E_MIPS_MACH_OCTEON3:
6638       return bfd_mach_mips_octeon3;
6639
6640     case E_MIPS_MACH_OCTEON2:
6641       return bfd_mach_mips_octeon2;
6642
6643     case E_MIPS_MACH_OCTEON:
6644       return bfd_mach_mips_octeon;
6645
6646     case E_MIPS_MACH_XLR:
6647       return bfd_mach_mips_xlr;
6648
6649     default:
6650       switch (flags & EF_MIPS_ARCH)
6651         {
6652         default:
6653         case E_MIPS_ARCH_1:
6654           return bfd_mach_mips3000;
6655
6656         case E_MIPS_ARCH_2:
6657           return bfd_mach_mips6000;
6658
6659         case E_MIPS_ARCH_3:
6660           return bfd_mach_mips4000;
6661
6662         case E_MIPS_ARCH_4:
6663           return bfd_mach_mips8000;
6664
6665         case E_MIPS_ARCH_5:
6666           return bfd_mach_mips5;
6667
6668         case E_MIPS_ARCH_32:
6669           return bfd_mach_mipsisa32;
6670
6671         case E_MIPS_ARCH_64:
6672           return bfd_mach_mipsisa64;
6673
6674         case E_MIPS_ARCH_32R2:
6675           return bfd_mach_mipsisa32r2;
6676
6677         case E_MIPS_ARCH_64R2:
6678           return bfd_mach_mipsisa64r2;
6679
6680         case E_MIPS_ARCH_32R6:
6681           return bfd_mach_mipsisa32r6;
6682
6683         case E_MIPS_ARCH_64R6:
6684           return bfd_mach_mipsisa64r6;
6685         }
6686     }
6687
6688   return 0;
6689 }
6690
6691 /* Return printable name for ABI.  */
6692
6693 static INLINE char *
6694 elf_mips_abi_name (bfd *abfd)
6695 {
6696   flagword flags;
6697
6698   flags = elf_elfheader (abfd)->e_flags;
6699   switch (flags & EF_MIPS_ABI)
6700     {
6701     case 0:
6702       if (ABI_N32_P (abfd))
6703         return "N32";
6704       else if (ABI_64_P (abfd))
6705         return "64";
6706       else
6707         return "none";
6708     case E_MIPS_ABI_O32:
6709       return "O32";
6710     case E_MIPS_ABI_O64:
6711       return "O64";
6712     case E_MIPS_ABI_EABI32:
6713       return "EABI32";
6714     case E_MIPS_ABI_EABI64:
6715       return "EABI64";
6716     default:
6717       return "unknown abi";
6718     }
6719 }
6720 \f
6721 /* MIPS ELF uses two common sections.  One is the usual one, and the
6722    other is for small objects.  All the small objects are kept
6723    together, and then referenced via the gp pointer, which yields
6724    faster assembler code.  This is what we use for the small common
6725    section.  This approach is copied from ecoff.c.  */
6726 static asection mips_elf_scom_section;
6727 static asymbol mips_elf_scom_symbol;
6728 static asymbol *mips_elf_scom_symbol_ptr;
6729
6730 /* MIPS ELF also uses an acommon section, which represents an
6731    allocated common symbol which may be overridden by a
6732    definition in a shared library.  */
6733 static asection mips_elf_acom_section;
6734 static asymbol mips_elf_acom_symbol;
6735 static asymbol *mips_elf_acom_symbol_ptr;
6736
6737 /* This is used for both the 32-bit and the 64-bit ABI.  */
6738
6739 void
6740 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6741 {
6742   elf_symbol_type *elfsym;
6743
6744   /* Handle the special MIPS section numbers that a symbol may use.  */
6745   elfsym = (elf_symbol_type *) asym;
6746   switch (elfsym->internal_elf_sym.st_shndx)
6747     {
6748     case SHN_MIPS_ACOMMON:
6749       /* This section is used in a dynamically linked executable file.
6750          It is an allocated common section.  The dynamic linker can
6751          either resolve these symbols to something in a shared
6752          library, or it can just leave them here.  For our purposes,
6753          we can consider these symbols to be in a new section.  */
6754       if (mips_elf_acom_section.name == NULL)
6755         {
6756           /* Initialize the acommon section.  */
6757           mips_elf_acom_section.name = ".acommon";
6758           mips_elf_acom_section.flags = SEC_ALLOC;
6759           mips_elf_acom_section.output_section = &mips_elf_acom_section;
6760           mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6761           mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6762           mips_elf_acom_symbol.name = ".acommon";
6763           mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6764           mips_elf_acom_symbol.section = &mips_elf_acom_section;
6765           mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6766         }
6767       asym->section = &mips_elf_acom_section;
6768       break;
6769
6770     case SHN_COMMON:
6771       /* Common symbols less than the GP size are automatically
6772          treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6773       if (asym->value > elf_gp_size (abfd)
6774           || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6775           || IRIX_COMPAT (abfd) == ict_irix6)
6776         break;
6777       /* Fall through.  */
6778     case SHN_MIPS_SCOMMON:
6779       if (mips_elf_scom_section.name == NULL)
6780         {
6781           /* Initialize the small common section.  */
6782           mips_elf_scom_section.name = ".scommon";
6783           mips_elf_scom_section.flags = SEC_IS_COMMON;
6784           mips_elf_scom_section.output_section = &mips_elf_scom_section;
6785           mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6786           mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6787           mips_elf_scom_symbol.name = ".scommon";
6788           mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6789           mips_elf_scom_symbol.section = &mips_elf_scom_section;
6790           mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6791         }
6792       asym->section = &mips_elf_scom_section;
6793       asym->value = elfsym->internal_elf_sym.st_size;
6794       break;
6795
6796     case SHN_MIPS_SUNDEFINED:
6797       asym->section = bfd_und_section_ptr;
6798       break;
6799
6800     case SHN_MIPS_TEXT:
6801       {
6802         asection *section = bfd_get_section_by_name (abfd, ".text");
6803
6804         if (section != NULL)
6805           {
6806             asym->section = section;
6807             /* MIPS_TEXT is a bit special, the address is not an offset
6808                to the base of the .text section.  So substract the section
6809                base address to make it an offset.  */
6810             asym->value -= section->vma;
6811           }
6812       }
6813       break;
6814
6815     case SHN_MIPS_DATA:
6816       {
6817         asection *section = bfd_get_section_by_name (abfd, ".data");
6818
6819         if (section != NULL)
6820           {
6821             asym->section = section;
6822             /* MIPS_DATA is a bit special, the address is not an offset
6823                to the base of the .data section.  So substract the section
6824                base address to make it an offset.  */
6825             asym->value -= section->vma;
6826           }
6827       }
6828       break;
6829     }
6830
6831   /* If this is an odd-valued function symbol, assume it's a MIPS16
6832      or microMIPS one.  */
6833   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6834       && (asym->value & 1) != 0)
6835     {
6836       asym->value--;
6837       if (MICROMIPS_P (abfd))
6838         elfsym->internal_elf_sym.st_other
6839           = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6840       else
6841         elfsym->internal_elf_sym.st_other
6842           = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6843     }
6844 }
6845 \f
6846 /* Implement elf_backend_eh_frame_address_size.  This differs from
6847    the default in the way it handles EABI64.
6848
6849    EABI64 was originally specified as an LP64 ABI, and that is what
6850    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6851    historically accepted the combination of -mabi=eabi and -mlong32,
6852    and this ILP32 variation has become semi-official over time.
6853    Both forms use elf32 and have pointer-sized FDE addresses.
6854
6855    If an EABI object was generated by GCC 4.0 or above, it will have
6856    an empty .gcc_compiled_longXX section, where XX is the size of longs
6857    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6858    have no special marking to distinguish them from LP64 objects.
6859
6860    We don't want users of the official LP64 ABI to be punished for the
6861    existence of the ILP32 variant, but at the same time, we don't want
6862    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6863    We therefore take the following approach:
6864
6865       - If ABFD contains a .gcc_compiled_longXX section, use it to
6866         determine the pointer size.
6867
6868       - Otherwise check the type of the first relocation.  Assume that
6869         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6870
6871       - Otherwise punt.
6872
6873    The second check is enough to detect LP64 objects generated by pre-4.0
6874    compilers because, in the kind of output generated by those compilers,
6875    the first relocation will be associated with either a CIE personality
6876    routine or an FDE start address.  Furthermore, the compilers never
6877    used a special (non-pointer) encoding for this ABI.
6878
6879    Checking the relocation type should also be safe because there is no
6880    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6881    did so.  */
6882
6883 unsigned int
6884 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6885 {
6886   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6887     return 8;
6888   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6889     {
6890       bfd_boolean long32_p, long64_p;
6891
6892       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6893       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6894       if (long32_p && long64_p)
6895         return 0;
6896       if (long32_p)
6897         return 4;
6898       if (long64_p)
6899         return 8;
6900
6901       if (sec->reloc_count > 0
6902           && elf_section_data (sec)->relocs != NULL
6903           && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6904               == R_MIPS_64))
6905         return 8;
6906
6907       return 0;
6908     }
6909   return 4;
6910 }
6911 \f
6912 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6913    relocations against two unnamed section symbols to resolve to the
6914    same address.  For example, if we have code like:
6915
6916         lw      $4,%got_disp(.data)($gp)
6917         lw      $25,%got_disp(.text)($gp)
6918         jalr    $25
6919
6920    then the linker will resolve both relocations to .data and the program
6921    will jump there rather than to .text.
6922
6923    We can work around this problem by giving names to local section symbols.
6924    This is also what the MIPSpro tools do.  */
6925
6926 bfd_boolean
6927 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6928 {
6929   return SGI_COMPAT (abfd);
6930 }
6931 \f
6932 /* Work over a section just before writing it out.  This routine is
6933    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6934    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6935    a better way.  */
6936
6937 bfd_boolean
6938 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6939 {
6940   if (hdr->sh_type == SHT_MIPS_REGINFO
6941       && hdr->sh_size > 0)
6942     {
6943       bfd_byte buf[4];
6944
6945       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6946       BFD_ASSERT (hdr->contents == NULL);
6947
6948       if (bfd_seek (abfd,
6949                     hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6950                     SEEK_SET) != 0)
6951         return FALSE;
6952       H_PUT_32 (abfd, elf_gp (abfd), buf);
6953       if (bfd_bwrite (buf, 4, abfd) != 4)
6954         return FALSE;
6955     }
6956
6957   if (hdr->sh_type == SHT_MIPS_OPTIONS
6958       && hdr->bfd_section != NULL
6959       && mips_elf_section_data (hdr->bfd_section) != NULL
6960       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6961     {
6962       bfd_byte *contents, *l, *lend;
6963
6964       /* We stored the section contents in the tdata field in the
6965          set_section_contents routine.  We save the section contents
6966          so that we don't have to read them again.
6967          At this point we know that elf_gp is set, so we can look
6968          through the section contents to see if there is an
6969          ODK_REGINFO structure.  */
6970
6971       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6972       l = contents;
6973       lend = contents + hdr->sh_size;
6974       while (l + sizeof (Elf_External_Options) <= lend)
6975         {
6976           Elf_Internal_Options intopt;
6977
6978           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6979                                         &intopt);
6980           if (intopt.size < sizeof (Elf_External_Options))
6981             {
6982               (*_bfd_error_handler)
6983                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
6984                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6985               break;
6986             }
6987           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6988             {
6989               bfd_byte buf[8];
6990
6991               if (bfd_seek (abfd,
6992                             (hdr->sh_offset
6993                              + (l - contents)
6994                              + sizeof (Elf_External_Options)
6995                              + (sizeof (Elf64_External_RegInfo) - 8)),
6996                              SEEK_SET) != 0)
6997                 return FALSE;
6998               H_PUT_64 (abfd, elf_gp (abfd), buf);
6999               if (bfd_bwrite (buf, 8, abfd) != 8)
7000                 return FALSE;
7001             }
7002           else if (intopt.kind == ODK_REGINFO)
7003             {
7004               bfd_byte buf[4];
7005
7006               if (bfd_seek (abfd,
7007                             (hdr->sh_offset
7008                              + (l - contents)
7009                              + sizeof (Elf_External_Options)
7010                              + (sizeof (Elf32_External_RegInfo) - 4)),
7011                             SEEK_SET) != 0)
7012                 return FALSE;
7013               H_PUT_32 (abfd, elf_gp (abfd), buf);
7014               if (bfd_bwrite (buf, 4, abfd) != 4)
7015                 return FALSE;
7016             }
7017           l += intopt.size;
7018         }
7019     }
7020
7021   if (hdr->bfd_section != NULL)
7022     {
7023       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
7024
7025       /* .sbss is not handled specially here because the GNU/Linux
7026          prelinker can convert .sbss from NOBITS to PROGBITS and
7027          changing it back to NOBITS breaks the binary.  The entry in
7028          _bfd_mips_elf_special_sections will ensure the correct flags
7029          are set on .sbss if BFD creates it without reading it from an
7030          input file, and without special handling here the flags set
7031          on it in an input file will be followed.  */
7032       if (strcmp (name, ".sdata") == 0
7033           || strcmp (name, ".lit8") == 0
7034           || strcmp (name, ".lit4") == 0)
7035         hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7036       else if (strcmp (name, ".srdata") == 0)
7037         hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7038       else if (strcmp (name, ".compact_rel") == 0)
7039         hdr->sh_flags = 0;
7040       else if (strcmp (name, ".rtproc") == 0)
7041         {
7042           if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7043             {
7044               unsigned int adjust;
7045
7046               adjust = hdr->sh_size % hdr->sh_addralign;
7047               if (adjust != 0)
7048                 hdr->sh_size += hdr->sh_addralign - adjust;
7049             }
7050         }
7051     }
7052
7053   return TRUE;
7054 }
7055
7056 /* Handle a MIPS specific section when reading an object file.  This
7057    is called when elfcode.h finds a section with an unknown type.
7058    This routine supports both the 32-bit and 64-bit ELF ABI.
7059
7060    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7061    how to.  */
7062
7063 bfd_boolean
7064 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7065                                  Elf_Internal_Shdr *hdr,
7066                                  const char *name,
7067                                  int shindex)
7068 {
7069   flagword flags = 0;
7070
7071   /* There ought to be a place to keep ELF backend specific flags, but
7072      at the moment there isn't one.  We just keep track of the
7073      sections by their name, instead.  Fortunately, the ABI gives
7074      suggested names for all the MIPS specific sections, so we will
7075      probably get away with this.  */
7076   switch (hdr->sh_type)
7077     {
7078     case SHT_MIPS_LIBLIST:
7079       if (strcmp (name, ".liblist") != 0)
7080         return FALSE;
7081       break;
7082     case SHT_MIPS_MSYM:
7083       if (strcmp (name, ".msym") != 0)
7084         return FALSE;
7085       break;
7086     case SHT_MIPS_CONFLICT:
7087       if (strcmp (name, ".conflict") != 0)
7088         return FALSE;
7089       break;
7090     case SHT_MIPS_GPTAB:
7091       if (! CONST_STRNEQ (name, ".gptab."))
7092         return FALSE;
7093       break;
7094     case SHT_MIPS_UCODE:
7095       if (strcmp (name, ".ucode") != 0)
7096         return FALSE;
7097       break;
7098     case SHT_MIPS_DEBUG:
7099       if (strcmp (name, ".mdebug") != 0)
7100         return FALSE;
7101       flags = SEC_DEBUGGING;
7102       break;
7103     case SHT_MIPS_REGINFO:
7104       if (strcmp (name, ".reginfo") != 0
7105           || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7106         return FALSE;
7107       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7108       break;
7109     case SHT_MIPS_IFACE:
7110       if (strcmp (name, ".MIPS.interfaces") != 0)
7111         return FALSE;
7112       break;
7113     case SHT_MIPS_CONTENT:
7114       if (! CONST_STRNEQ (name, ".MIPS.content"))
7115         return FALSE;
7116       break;
7117     case SHT_MIPS_OPTIONS:
7118       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7119         return FALSE;
7120       break;
7121     case SHT_MIPS_ABIFLAGS:
7122       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7123         return FALSE;
7124       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7125       break;
7126     case SHT_MIPS_DWARF:
7127       if (! CONST_STRNEQ (name, ".debug_")
7128           && ! CONST_STRNEQ (name, ".zdebug_"))
7129         return FALSE;
7130       break;
7131     case SHT_MIPS_SYMBOL_LIB:
7132       if (strcmp (name, ".MIPS.symlib") != 0)
7133         return FALSE;
7134       break;
7135     case SHT_MIPS_EVENTS:
7136       if (! CONST_STRNEQ (name, ".MIPS.events")
7137           && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7138         return FALSE;
7139       break;
7140     default:
7141       break;
7142     }
7143
7144   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7145     return FALSE;
7146
7147   if (flags)
7148     {
7149       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7150                                    (bfd_get_section_flags (abfd,
7151                                                            hdr->bfd_section)
7152                                     | flags)))
7153         return FALSE;
7154     }
7155
7156   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7157     {
7158       Elf_External_ABIFlags_v0 ext;
7159
7160       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7161                                       &ext, 0, sizeof ext))
7162         return FALSE;
7163       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7164                                         &mips_elf_tdata (abfd)->abiflags);
7165       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7166         return FALSE;
7167       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7168     }
7169
7170   /* FIXME: We should record sh_info for a .gptab section.  */
7171
7172   /* For a .reginfo section, set the gp value in the tdata information
7173      from the contents of this section.  We need the gp value while
7174      processing relocs, so we just get it now.  The .reginfo section
7175      is not used in the 64-bit MIPS ELF ABI.  */
7176   if (hdr->sh_type == SHT_MIPS_REGINFO)
7177     {
7178       Elf32_External_RegInfo ext;
7179       Elf32_RegInfo s;
7180
7181       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7182                                       &ext, 0, sizeof ext))
7183         return FALSE;
7184       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7185       elf_gp (abfd) = s.ri_gp_value;
7186     }
7187
7188   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7189      set the gp value based on what we find.  We may see both
7190      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7191      they should agree.  */
7192   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7193     {
7194       bfd_byte *contents, *l, *lend;
7195
7196       contents = bfd_malloc (hdr->sh_size);
7197       if (contents == NULL)
7198         return FALSE;
7199       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7200                                       0, hdr->sh_size))
7201         {
7202           free (contents);
7203           return FALSE;
7204         }
7205       l = contents;
7206       lend = contents + hdr->sh_size;
7207       while (l + sizeof (Elf_External_Options) <= lend)
7208         {
7209           Elf_Internal_Options intopt;
7210
7211           bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7212                                         &intopt);
7213           if (intopt.size < sizeof (Elf_External_Options))
7214             {
7215               (*_bfd_error_handler)
7216                 (_("%B: Warning: bad `%s' option size %u smaller than its header"),
7217                 abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7218               break;
7219             }
7220           if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7221             {
7222               Elf64_Internal_RegInfo intreg;
7223
7224               bfd_mips_elf64_swap_reginfo_in
7225                 (abfd,
7226                  ((Elf64_External_RegInfo *)
7227                   (l + sizeof (Elf_External_Options))),
7228                  &intreg);
7229               elf_gp (abfd) = intreg.ri_gp_value;
7230             }
7231           else if (intopt.kind == ODK_REGINFO)
7232             {
7233               Elf32_RegInfo intreg;
7234
7235               bfd_mips_elf32_swap_reginfo_in
7236                 (abfd,
7237                  ((Elf32_External_RegInfo *)
7238                   (l + sizeof (Elf_External_Options))),
7239                  &intreg);
7240               elf_gp (abfd) = intreg.ri_gp_value;
7241             }
7242           l += intopt.size;
7243         }
7244       free (contents);
7245     }
7246
7247   return TRUE;
7248 }
7249
7250 /* Set the correct type for a MIPS ELF section.  We do this by the
7251    section name, which is a hack, but ought to work.  This routine is
7252    used by both the 32-bit and the 64-bit ABI.  */
7253
7254 bfd_boolean
7255 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7256 {
7257   const char *name = bfd_get_section_name (abfd, sec);
7258
7259   if (strcmp (name, ".liblist") == 0)
7260     {
7261       hdr->sh_type = SHT_MIPS_LIBLIST;
7262       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7263       /* The sh_link field is set in final_write_processing.  */
7264     }
7265   else if (strcmp (name, ".conflict") == 0)
7266     hdr->sh_type = SHT_MIPS_CONFLICT;
7267   else if (CONST_STRNEQ (name, ".gptab."))
7268     {
7269       hdr->sh_type = SHT_MIPS_GPTAB;
7270       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7271       /* The sh_info field is set in final_write_processing.  */
7272     }
7273   else if (strcmp (name, ".ucode") == 0)
7274     hdr->sh_type = SHT_MIPS_UCODE;
7275   else if (strcmp (name, ".mdebug") == 0)
7276     {
7277       hdr->sh_type = SHT_MIPS_DEBUG;
7278       /* In a shared object on IRIX 5.3, the .mdebug section has an
7279          entsize of 0.  FIXME: Does this matter?  */
7280       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7281         hdr->sh_entsize = 0;
7282       else
7283         hdr->sh_entsize = 1;
7284     }
7285   else if (strcmp (name, ".reginfo") == 0)
7286     {
7287       hdr->sh_type = SHT_MIPS_REGINFO;
7288       /* In a shared object on IRIX 5.3, the .reginfo section has an
7289          entsize of 0x18.  FIXME: Does this matter?  */
7290       if (SGI_COMPAT (abfd))
7291         {
7292           if ((abfd->flags & DYNAMIC) != 0)
7293             hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7294           else
7295             hdr->sh_entsize = 1;
7296         }
7297       else
7298         hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7299     }
7300   else if (SGI_COMPAT (abfd)
7301            && (strcmp (name, ".hash") == 0
7302                || strcmp (name, ".dynamic") == 0
7303                || strcmp (name, ".dynstr") == 0))
7304     {
7305       if (SGI_COMPAT (abfd))
7306         hdr->sh_entsize = 0;
7307 #if 0
7308       /* This isn't how the IRIX6 linker behaves.  */
7309       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7310 #endif
7311     }
7312   else if (strcmp (name, ".got") == 0
7313            || strcmp (name, ".srdata") == 0
7314            || strcmp (name, ".sdata") == 0
7315            || strcmp (name, ".sbss") == 0
7316            || strcmp (name, ".lit4") == 0
7317            || strcmp (name, ".lit8") == 0)
7318     hdr->sh_flags |= SHF_MIPS_GPREL;
7319   else if (strcmp (name, ".MIPS.interfaces") == 0)
7320     {
7321       hdr->sh_type = SHT_MIPS_IFACE;
7322       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7323     }
7324   else if (CONST_STRNEQ (name, ".MIPS.content"))
7325     {
7326       hdr->sh_type = SHT_MIPS_CONTENT;
7327       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7328       /* The sh_info field is set in final_write_processing.  */
7329     }
7330   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7331     {
7332       hdr->sh_type = SHT_MIPS_OPTIONS;
7333       hdr->sh_entsize = 1;
7334       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7335     }
7336   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7337     {
7338       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7339       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7340     }
7341   else if (CONST_STRNEQ (name, ".debug_")
7342            || CONST_STRNEQ (name, ".zdebug_"))
7343     {
7344       hdr->sh_type = SHT_MIPS_DWARF;
7345
7346       /* Irix facilities such as libexc expect a single .debug_frame
7347          per executable, the system ones have NOSTRIP set and the linker
7348          doesn't merge sections with different flags so ...  */
7349       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7350         hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7351     }
7352   else if (strcmp (name, ".MIPS.symlib") == 0)
7353     {
7354       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7355       /* The sh_link and sh_info fields are set in
7356          final_write_processing.  */
7357     }
7358   else if (CONST_STRNEQ (name, ".MIPS.events")
7359            || CONST_STRNEQ (name, ".MIPS.post_rel"))
7360     {
7361       hdr->sh_type = SHT_MIPS_EVENTS;
7362       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7363       /* The sh_link field is set in final_write_processing.  */
7364     }
7365   else if (strcmp (name, ".msym") == 0)
7366     {
7367       hdr->sh_type = SHT_MIPS_MSYM;
7368       hdr->sh_flags |= SHF_ALLOC;
7369       hdr->sh_entsize = 8;
7370     }
7371
7372   /* The generic elf_fake_sections will set up REL_HDR using the default
7373    kind of relocations.  We used to set up a second header for the
7374    non-default kind of relocations here, but only NewABI would use
7375    these, and the IRIX ld doesn't like resulting empty RELA sections.
7376    Thus we create those header only on demand now.  */
7377
7378   return TRUE;
7379 }
7380
7381 /* Given a BFD section, try to locate the corresponding ELF section
7382    index.  This is used by both the 32-bit and the 64-bit ABI.
7383    Actually, it's not clear to me that the 64-bit ABI supports these,
7384    but for non-PIC objects we will certainly want support for at least
7385    the .scommon section.  */
7386
7387 bfd_boolean
7388 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7389                                         asection *sec, int *retval)
7390 {
7391   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7392     {
7393       *retval = SHN_MIPS_SCOMMON;
7394       return TRUE;
7395     }
7396   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7397     {
7398       *retval = SHN_MIPS_ACOMMON;
7399       return TRUE;
7400     }
7401   return FALSE;
7402 }
7403 \f
7404 /* Hook called by the linker routine which adds symbols from an object
7405    file.  We must handle the special MIPS section numbers here.  */
7406
7407 bfd_boolean
7408 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7409                                Elf_Internal_Sym *sym, const char **namep,
7410                                flagword *flagsp ATTRIBUTE_UNUSED,
7411                                asection **secp, bfd_vma *valp)
7412 {
7413   if (SGI_COMPAT (abfd)
7414       && (abfd->flags & DYNAMIC) != 0
7415       && strcmp (*namep, "_rld_new_interface") == 0)
7416     {
7417       /* Skip IRIX5 rld entry name.  */
7418       *namep = NULL;
7419       return TRUE;
7420     }
7421
7422   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7423      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7424      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7425      a magic symbol resolved by the linker, we ignore this bogus definition
7426      of _gp_disp.  New ABI objects do not suffer from this problem so this
7427      is not done for them. */
7428   if (!NEWABI_P(abfd)
7429       && (sym->st_shndx == SHN_ABS)
7430       && (strcmp (*namep, "_gp_disp") == 0))
7431     {
7432       *namep = NULL;
7433       return TRUE;
7434     }
7435
7436   switch (sym->st_shndx)
7437     {
7438     case SHN_COMMON:
7439       /* Common symbols less than the GP size are automatically
7440          treated as SHN_MIPS_SCOMMON symbols.  */
7441       if (sym->st_size > elf_gp_size (abfd)
7442           || ELF_ST_TYPE (sym->st_info) == STT_TLS
7443           || IRIX_COMPAT (abfd) == ict_irix6)
7444         break;
7445       /* Fall through.  */
7446     case SHN_MIPS_SCOMMON:
7447       *secp = bfd_make_section_old_way (abfd, ".scommon");
7448       (*secp)->flags |= SEC_IS_COMMON;
7449       *valp = sym->st_size;
7450       break;
7451
7452     case SHN_MIPS_TEXT:
7453       /* This section is used in a shared object.  */
7454       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7455         {
7456           asymbol *elf_text_symbol;
7457           asection *elf_text_section;
7458           bfd_size_type amt = sizeof (asection);
7459
7460           elf_text_section = bfd_zalloc (abfd, amt);
7461           if (elf_text_section == NULL)
7462             return FALSE;
7463
7464           amt = sizeof (asymbol);
7465           elf_text_symbol = bfd_zalloc (abfd, amt);
7466           if (elf_text_symbol == NULL)
7467             return FALSE;
7468
7469           /* Initialize the section.  */
7470
7471           mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7472           mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7473
7474           elf_text_section->symbol = elf_text_symbol;
7475           elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7476
7477           elf_text_section->name = ".text";
7478           elf_text_section->flags = SEC_NO_FLAGS;
7479           elf_text_section->output_section = NULL;
7480           elf_text_section->owner = abfd;
7481           elf_text_symbol->name = ".text";
7482           elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7483           elf_text_symbol->section = elf_text_section;
7484         }
7485       /* This code used to do *secp = bfd_und_section_ptr if
7486          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7487          so I took it out.  */
7488       *secp = mips_elf_tdata (abfd)->elf_text_section;
7489       break;
7490
7491     case SHN_MIPS_ACOMMON:
7492       /* Fall through. XXX Can we treat this as allocated data?  */
7493     case SHN_MIPS_DATA:
7494       /* This section is used in a shared object.  */
7495       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7496         {
7497           asymbol *elf_data_symbol;
7498           asection *elf_data_section;
7499           bfd_size_type amt = sizeof (asection);
7500
7501           elf_data_section = bfd_zalloc (abfd, amt);
7502           if (elf_data_section == NULL)
7503             return FALSE;
7504
7505           amt = sizeof (asymbol);
7506           elf_data_symbol = bfd_zalloc (abfd, amt);
7507           if (elf_data_symbol == NULL)
7508             return FALSE;
7509
7510           /* Initialize the section.  */
7511
7512           mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7513           mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7514
7515           elf_data_section->symbol = elf_data_symbol;
7516           elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7517
7518           elf_data_section->name = ".data";
7519           elf_data_section->flags = SEC_NO_FLAGS;
7520           elf_data_section->output_section = NULL;
7521           elf_data_section->owner = abfd;
7522           elf_data_symbol->name = ".data";
7523           elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7524           elf_data_symbol->section = elf_data_section;
7525         }
7526       /* This code used to do *secp = bfd_und_section_ptr if
7527          bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7528          so I took it out.  */
7529       *secp = mips_elf_tdata (abfd)->elf_data_section;
7530       break;
7531
7532     case SHN_MIPS_SUNDEFINED:
7533       *secp = bfd_und_section_ptr;
7534       break;
7535     }
7536
7537   if (SGI_COMPAT (abfd)
7538       && ! bfd_link_pic (info)
7539       && info->output_bfd->xvec == abfd->xvec
7540       && strcmp (*namep, "__rld_obj_head") == 0)
7541     {
7542       struct elf_link_hash_entry *h;
7543       struct bfd_link_hash_entry *bh;
7544
7545       /* Mark __rld_obj_head as dynamic.  */
7546       bh = NULL;
7547       if (! (_bfd_generic_link_add_one_symbol
7548              (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7549               get_elf_backend_data (abfd)->collect, &bh)))
7550         return FALSE;
7551
7552       h = (struct elf_link_hash_entry *) bh;
7553       h->non_elf = 0;
7554       h->def_regular = 1;
7555       h->type = STT_OBJECT;
7556
7557       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7558         return FALSE;
7559
7560       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7561       mips_elf_hash_table (info)->rld_symbol = h;
7562     }
7563
7564   /* If this is a mips16 text symbol, add 1 to the value to make it
7565      odd.  This will cause something like .word SYM to come up with
7566      the right value when it is loaded into the PC.  */
7567   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7568     ++*valp;
7569
7570   return TRUE;
7571 }
7572
7573 /* This hook function is called before the linker writes out a global
7574    symbol.  We mark symbols as small common if appropriate.  This is
7575    also where we undo the increment of the value for a mips16 symbol.  */
7576
7577 int
7578 _bfd_mips_elf_link_output_symbol_hook
7579   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7580    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7581    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7582 {
7583   /* If we see a common symbol, which implies a relocatable link, then
7584      if a symbol was small common in an input file, mark it as small
7585      common in the output file.  */
7586   if (sym->st_shndx == SHN_COMMON
7587       && strcmp (input_sec->name, ".scommon") == 0)
7588     sym->st_shndx = SHN_MIPS_SCOMMON;
7589
7590   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7591     sym->st_value &= ~1;
7592
7593   return 1;
7594 }
7595 \f
7596 /* Functions for the dynamic linker.  */
7597
7598 /* Create dynamic sections when linking against a dynamic object.  */
7599
7600 bfd_boolean
7601 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7602 {
7603   struct elf_link_hash_entry *h;
7604   struct bfd_link_hash_entry *bh;
7605   flagword flags;
7606   register asection *s;
7607   const char * const *namep;
7608   struct mips_elf_link_hash_table *htab;
7609
7610   htab = mips_elf_hash_table (info);
7611   BFD_ASSERT (htab != NULL);
7612
7613   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7614            | SEC_LINKER_CREATED | SEC_READONLY);
7615
7616   /* The psABI requires a read-only .dynamic section, but the VxWorks
7617      EABI doesn't.  */
7618   if (!htab->is_vxworks)
7619     {
7620       s = bfd_get_linker_section (abfd, ".dynamic");
7621       if (s != NULL)
7622         {
7623           if (! bfd_set_section_flags (abfd, s, flags))
7624             return FALSE;
7625         }
7626     }
7627
7628   /* We need to create .got section.  */
7629   if (!mips_elf_create_got_section (abfd, info))
7630     return FALSE;
7631
7632   if (! mips_elf_rel_dyn_section (info, TRUE))
7633     return FALSE;
7634
7635   /* Create .stub section.  */
7636   s = bfd_make_section_anyway_with_flags (abfd,
7637                                           MIPS_ELF_STUB_SECTION_NAME (abfd),
7638                                           flags | SEC_CODE);
7639   if (s == NULL
7640       || ! bfd_set_section_alignment (abfd, s,
7641                                       MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7642     return FALSE;
7643   htab->sstubs = s;
7644
7645   if (!mips_elf_hash_table (info)->use_rld_obj_head
7646       && bfd_link_executable (info)
7647       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7648     {
7649       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7650                                               flags &~ (flagword) SEC_READONLY);
7651       if (s == NULL
7652           || ! bfd_set_section_alignment (abfd, s,
7653                                           MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7654         return FALSE;
7655     }
7656
7657   /* On IRIX5, we adjust add some additional symbols and change the
7658      alignments of several sections.  There is no ABI documentation
7659      indicating that this is necessary on IRIX6, nor any evidence that
7660      the linker takes such action.  */
7661   if (IRIX_COMPAT (abfd) == ict_irix5)
7662     {
7663       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7664         {
7665           bh = NULL;
7666           if (! (_bfd_generic_link_add_one_symbol
7667                  (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7668                   NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7669             return FALSE;
7670
7671           h = (struct elf_link_hash_entry *) bh;
7672           h->non_elf = 0;
7673           h->def_regular = 1;
7674           h->type = STT_SECTION;
7675
7676           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7677             return FALSE;
7678         }
7679
7680       /* We need to create a .compact_rel section.  */
7681       if (SGI_COMPAT (abfd))
7682         {
7683           if (!mips_elf_create_compact_rel_section (abfd, info))
7684             return FALSE;
7685         }
7686
7687       /* Change alignments of some sections.  */
7688       s = bfd_get_linker_section (abfd, ".hash");
7689       if (s != NULL)
7690         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7691
7692       s = bfd_get_linker_section (abfd, ".dynsym");
7693       if (s != NULL)
7694         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7695
7696       s = bfd_get_linker_section (abfd, ".dynstr");
7697       if (s != NULL)
7698         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7699
7700       /* ??? */
7701       s = bfd_get_section_by_name (abfd, ".reginfo");
7702       if (s != NULL)
7703         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7704
7705       s = bfd_get_linker_section (abfd, ".dynamic");
7706       if (s != NULL)
7707         (void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7708     }
7709
7710   if (bfd_link_executable (info))
7711     {
7712       const char *name;
7713
7714       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7715       bh = NULL;
7716       if (!(_bfd_generic_link_add_one_symbol
7717             (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7718              NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7719         return FALSE;
7720
7721       h = (struct elf_link_hash_entry *) bh;
7722       h->non_elf = 0;
7723       h->def_regular = 1;
7724       h->type = STT_SECTION;
7725
7726       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7727         return FALSE;
7728
7729       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7730         {
7731           /* __rld_map is a four byte word located in the .data section
7732              and is filled in by the rtld to contain a pointer to
7733              the _r_debug structure. Its symbol value will be set in
7734              _bfd_mips_elf_finish_dynamic_symbol.  */
7735           s = bfd_get_linker_section (abfd, ".rld_map");
7736           BFD_ASSERT (s != NULL);
7737
7738           name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7739           bh = NULL;
7740           if (!(_bfd_generic_link_add_one_symbol
7741                 (info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7742                  get_elf_backend_data (abfd)->collect, &bh)))
7743             return FALSE;
7744
7745           h = (struct elf_link_hash_entry *) bh;
7746           h->non_elf = 0;
7747           h->def_regular = 1;
7748           h->type = STT_OBJECT;
7749
7750           if (! bfd_elf_link_record_dynamic_symbol (info, h))
7751             return FALSE;
7752           mips_elf_hash_table (info)->rld_symbol = h;
7753         }
7754     }
7755
7756   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7757      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7758   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7759     return FALSE;
7760
7761   /* Cache the sections created above.  */
7762   htab->splt = bfd_get_linker_section (abfd, ".plt");
7763   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7764   if (htab->is_vxworks)
7765     {
7766       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7767       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7768     }
7769   else
7770     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7771   if (!htab->sdynbss
7772       || (htab->is_vxworks && !htab->srelbss && !bfd_link_pic (info))
7773       || !htab->srelplt
7774       || !htab->splt)
7775     abort ();
7776
7777   /* Do the usual VxWorks handling.  */
7778   if (htab->is_vxworks
7779       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7780     return FALSE;
7781
7782   return TRUE;
7783 }
7784 \f
7785 /* Return true if relocation REL against section SEC is a REL rather than
7786    RELA relocation.  RELOCS is the first relocation in the section and
7787    ABFD is the bfd that contains SEC.  */
7788
7789 static bfd_boolean
7790 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7791                            const Elf_Internal_Rela *relocs,
7792                            const Elf_Internal_Rela *rel)
7793 {
7794   Elf_Internal_Shdr *rel_hdr;
7795   const struct elf_backend_data *bed;
7796
7797   /* To determine which flavor of relocation this is, we depend on the
7798      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7799   rel_hdr = elf_section_data (sec)->rel.hdr;
7800   if (rel_hdr == NULL)
7801     return FALSE;
7802   bed = get_elf_backend_data (abfd);
7803   return ((size_t) (rel - relocs)
7804           < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7805 }
7806
7807 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7808    HOWTO is the relocation's howto and CONTENTS points to the contents
7809    of the section that REL is against.  */
7810
7811 static bfd_vma
7812 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7813                           reloc_howto_type *howto, bfd_byte *contents)
7814 {
7815   bfd_byte *location;
7816   unsigned int r_type;
7817   bfd_vma addend;
7818   bfd_vma bytes;
7819
7820   r_type = ELF_R_TYPE (abfd, rel->r_info);
7821   location = contents + rel->r_offset;
7822
7823   /* Get the addend, which is stored in the input file.  */
7824   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7825   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
7826   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7827
7828   addend = bytes & howto->src_mask;
7829
7830   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
7831      accordingly.  */
7832   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
7833     addend <<= 1;
7834
7835   return addend;
7836 }
7837
7838 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7839    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7840    and update *ADDEND with the final addend.  Return true on success
7841    or false if the LO16 could not be found.  RELEND is the exclusive
7842    upper bound on the relocations for REL's section.  */
7843
7844 static bfd_boolean
7845 mips_elf_add_lo16_rel_addend (bfd *abfd,
7846                               const Elf_Internal_Rela *rel,
7847                               const Elf_Internal_Rela *relend,
7848                               bfd_byte *contents, bfd_vma *addend)
7849 {
7850   unsigned int r_type, lo16_type;
7851   const Elf_Internal_Rela *lo16_relocation;
7852   reloc_howto_type *lo16_howto;
7853   bfd_vma l;
7854
7855   r_type = ELF_R_TYPE (abfd, rel->r_info);
7856   if (mips16_reloc_p (r_type))
7857     lo16_type = R_MIPS16_LO16;
7858   else if (micromips_reloc_p (r_type))
7859     lo16_type = R_MICROMIPS_LO16;
7860   else if (r_type == R_MIPS_PCHI16)
7861     lo16_type = R_MIPS_PCLO16;
7862   else
7863     lo16_type = R_MIPS_LO16;
7864
7865   /* The combined value is the sum of the HI16 addend, left-shifted by
7866      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7867      code does a `lui' of the HI16 value, and then an `addiu' of the
7868      LO16 value.)
7869
7870      Scan ahead to find a matching LO16 relocation.
7871
7872      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7873      be immediately following.  However, for the IRIX6 ABI, the next
7874      relocation may be a composed relocation consisting of several
7875      relocations for the same address.  In that case, the R_MIPS_LO16
7876      relocation may occur as one of these.  We permit a similar
7877      extension in general, as that is useful for GCC.
7878
7879      In some cases GCC dead code elimination removes the LO16 but keeps
7880      the corresponding HI16.  This is strictly speaking a violation of
7881      the ABI but not immediately harmful.  */
7882   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7883   if (lo16_relocation == NULL)
7884     return FALSE;
7885
7886   /* Obtain the addend kept there.  */
7887   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7888   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7889
7890   l <<= lo16_howto->rightshift;
7891   l = _bfd_mips_elf_sign_extend (l, 16);
7892
7893   *addend <<= 16;
7894   *addend += l;
7895   return TRUE;
7896 }
7897
7898 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7899    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7900    already holds the contents if it is nonull on entry.  */
7901
7902 static bfd_boolean
7903 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7904 {
7905   if (*contents)
7906     return TRUE;
7907
7908   /* Get cached copy if it exists.  */
7909   if (elf_section_data (sec)->this_hdr.contents != NULL)
7910     {
7911       *contents = elf_section_data (sec)->this_hdr.contents;
7912       return TRUE;
7913     }
7914
7915   return bfd_malloc_and_get_section (abfd, sec, contents);
7916 }
7917
7918 /* Make a new PLT record to keep internal data.  */
7919
7920 static struct plt_entry *
7921 mips_elf_make_plt_record (bfd *abfd)
7922 {
7923   struct plt_entry *entry;
7924
7925   entry = bfd_zalloc (abfd, sizeof (*entry));
7926   if (entry == NULL)
7927     return NULL;
7928
7929   entry->stub_offset = MINUS_ONE;
7930   entry->mips_offset = MINUS_ONE;
7931   entry->comp_offset = MINUS_ONE;
7932   entry->gotplt_index = MINUS_ONE;
7933   return entry;
7934 }
7935
7936 /* Look through the relocs for a section during the first phase, and
7937    allocate space in the global offset table and record the need for
7938    standard MIPS and compressed procedure linkage table entries.  */
7939
7940 bfd_boolean
7941 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7942                             asection *sec, const Elf_Internal_Rela *relocs)
7943 {
7944   const char *name;
7945   bfd *dynobj;
7946   Elf_Internal_Shdr *symtab_hdr;
7947   struct elf_link_hash_entry **sym_hashes;
7948   size_t extsymoff;
7949   const Elf_Internal_Rela *rel;
7950   const Elf_Internal_Rela *rel_end;
7951   asection *sreloc;
7952   const struct elf_backend_data *bed;
7953   struct mips_elf_link_hash_table *htab;
7954   bfd_byte *contents;
7955   bfd_vma addend;
7956   reloc_howto_type *howto;
7957
7958   if (bfd_link_relocatable (info))
7959     return TRUE;
7960
7961   htab = mips_elf_hash_table (info);
7962   BFD_ASSERT (htab != NULL);
7963
7964   dynobj = elf_hash_table (info)->dynobj;
7965   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7966   sym_hashes = elf_sym_hashes (abfd);
7967   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7968
7969   bed = get_elf_backend_data (abfd);
7970   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7971
7972   /* Check for the mips16 stub sections.  */
7973
7974   name = bfd_get_section_name (abfd, sec);
7975   if (FN_STUB_P (name))
7976     {
7977       unsigned long r_symndx;
7978
7979       /* Look at the relocation information to figure out which symbol
7980          this is for.  */
7981
7982       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7983       if (r_symndx == 0)
7984         {
7985           (*_bfd_error_handler)
7986             (_("%B: Warning: cannot determine the target function for"
7987                " stub section `%s'"),
7988              abfd, name);
7989           bfd_set_error (bfd_error_bad_value);
7990           return FALSE;
7991         }
7992
7993       if (r_symndx < extsymoff
7994           || sym_hashes[r_symndx - extsymoff] == NULL)
7995         {
7996           asection *o;
7997
7998           /* This stub is for a local symbol.  This stub will only be
7999              needed if there is some relocation in this BFD, other
8000              than a 16 bit function call, which refers to this symbol.  */
8001           for (o = abfd->sections; o != NULL; o = o->next)
8002             {
8003               Elf_Internal_Rela *sec_relocs;
8004               const Elf_Internal_Rela *r, *rend;
8005
8006               /* We can ignore stub sections when looking for relocs.  */
8007               if ((o->flags & SEC_RELOC) == 0
8008                   || o->reloc_count == 0
8009                   || section_allows_mips16_refs_p (o))
8010                 continue;
8011
8012               sec_relocs
8013                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8014                                              info->keep_memory);
8015               if (sec_relocs == NULL)
8016                 return FALSE;
8017
8018               rend = sec_relocs + o->reloc_count;
8019               for (r = sec_relocs; r < rend; r++)
8020                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8021                     && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8022                   break;
8023
8024               if (elf_section_data (o)->relocs != sec_relocs)
8025                 free (sec_relocs);
8026
8027               if (r < rend)
8028                 break;
8029             }
8030
8031           if (o == NULL)
8032             {
8033               /* There is no non-call reloc for this stub, so we do
8034                  not need it.  Since this function is called before
8035                  the linker maps input sections to output sections, we
8036                  can easily discard it by setting the SEC_EXCLUDE
8037                  flag.  */
8038               sec->flags |= SEC_EXCLUDE;
8039               return TRUE;
8040             }
8041
8042           /* Record this stub in an array of local symbol stubs for
8043              this BFD.  */
8044           if (mips_elf_tdata (abfd)->local_stubs == NULL)
8045             {
8046               unsigned long symcount;
8047               asection **n;
8048               bfd_size_type amt;
8049
8050               if (elf_bad_symtab (abfd))
8051                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8052               else
8053                 symcount = symtab_hdr->sh_info;
8054               amt = symcount * sizeof (asection *);
8055               n = bfd_zalloc (abfd, amt);
8056               if (n == NULL)
8057                 return FALSE;
8058               mips_elf_tdata (abfd)->local_stubs = n;
8059             }
8060
8061           sec->flags |= SEC_KEEP;
8062           mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8063
8064           /* We don't need to set mips16_stubs_seen in this case.
8065              That flag is used to see whether we need to look through
8066              the global symbol table for stubs.  We don't need to set
8067              it here, because we just have a local stub.  */
8068         }
8069       else
8070         {
8071           struct mips_elf_link_hash_entry *h;
8072
8073           h = ((struct mips_elf_link_hash_entry *)
8074                sym_hashes[r_symndx - extsymoff]);
8075
8076           while (h->root.root.type == bfd_link_hash_indirect
8077                  || h->root.root.type == bfd_link_hash_warning)
8078             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8079
8080           /* H is the symbol this stub is for.  */
8081
8082           /* If we already have an appropriate stub for this function, we
8083              don't need another one, so we can discard this one.  Since
8084              this function is called before the linker maps input sections
8085              to output sections, we can easily discard it by setting the
8086              SEC_EXCLUDE flag.  */
8087           if (h->fn_stub != NULL)
8088             {
8089               sec->flags |= SEC_EXCLUDE;
8090               return TRUE;
8091             }
8092
8093           sec->flags |= SEC_KEEP;
8094           h->fn_stub = sec;
8095           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8096         }
8097     }
8098   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8099     {
8100       unsigned long r_symndx;
8101       struct mips_elf_link_hash_entry *h;
8102       asection **loc;
8103
8104       /* Look at the relocation information to figure out which symbol
8105          this is for.  */
8106
8107       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8108       if (r_symndx == 0)
8109         {
8110           (*_bfd_error_handler)
8111             (_("%B: Warning: cannot determine the target function for"
8112                " stub section `%s'"),
8113              abfd, name);
8114           bfd_set_error (bfd_error_bad_value);
8115           return FALSE;
8116         }
8117
8118       if (r_symndx < extsymoff
8119           || sym_hashes[r_symndx - extsymoff] == NULL)
8120         {
8121           asection *o;
8122
8123           /* This stub is for a local symbol.  This stub will only be
8124              needed if there is some relocation (R_MIPS16_26) in this BFD
8125              that refers to this symbol.  */
8126           for (o = abfd->sections; o != NULL; o = o->next)
8127             {
8128               Elf_Internal_Rela *sec_relocs;
8129               const Elf_Internal_Rela *r, *rend;
8130
8131               /* We can ignore stub sections when looking for relocs.  */
8132               if ((o->flags & SEC_RELOC) == 0
8133                   || o->reloc_count == 0
8134                   || section_allows_mips16_refs_p (o))
8135                 continue;
8136
8137               sec_relocs
8138                 = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8139                                              info->keep_memory);
8140               if (sec_relocs == NULL)
8141                 return FALSE;
8142
8143               rend = sec_relocs + o->reloc_count;
8144               for (r = sec_relocs; r < rend; r++)
8145                 if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8146                     && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8147                     break;
8148
8149               if (elf_section_data (o)->relocs != sec_relocs)
8150                 free (sec_relocs);
8151
8152               if (r < rend)
8153                 break;
8154             }
8155
8156           if (o == NULL)
8157             {
8158               /* There is no non-call reloc for this stub, so we do
8159                  not need it.  Since this function is called before
8160                  the linker maps input sections to output sections, we
8161                  can easily discard it by setting the SEC_EXCLUDE
8162                  flag.  */
8163               sec->flags |= SEC_EXCLUDE;
8164               return TRUE;
8165             }
8166
8167           /* Record this stub in an array of local symbol call_stubs for
8168              this BFD.  */
8169           if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8170             {
8171               unsigned long symcount;
8172               asection **n;
8173               bfd_size_type amt;
8174
8175               if (elf_bad_symtab (abfd))
8176                 symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8177               else
8178                 symcount = symtab_hdr->sh_info;
8179               amt = symcount * sizeof (asection *);
8180               n = bfd_zalloc (abfd, amt);
8181               if (n == NULL)
8182                 return FALSE;
8183               mips_elf_tdata (abfd)->local_call_stubs = n;
8184             }
8185
8186           sec->flags |= SEC_KEEP;
8187           mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8188
8189           /* We don't need to set mips16_stubs_seen in this case.
8190              That flag is used to see whether we need to look through
8191              the global symbol table for stubs.  We don't need to set
8192              it here, because we just have a local stub.  */
8193         }
8194       else
8195         {
8196           h = ((struct mips_elf_link_hash_entry *)
8197                sym_hashes[r_symndx - extsymoff]);
8198
8199           /* H is the symbol this stub is for.  */
8200
8201           if (CALL_FP_STUB_P (name))
8202             loc = &h->call_fp_stub;
8203           else
8204             loc = &h->call_stub;
8205
8206           /* If we already have an appropriate stub for this function, we
8207              don't need another one, so we can discard this one.  Since
8208              this function is called before the linker maps input sections
8209              to output sections, we can easily discard it by setting the
8210              SEC_EXCLUDE flag.  */
8211           if (*loc != NULL)
8212             {
8213               sec->flags |= SEC_EXCLUDE;
8214               return TRUE;
8215             }
8216
8217           sec->flags |= SEC_KEEP;
8218           *loc = sec;
8219           mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8220         }
8221     }
8222
8223   sreloc = NULL;
8224   contents = NULL;
8225   for (rel = relocs; rel < rel_end; ++rel)
8226     {
8227       unsigned long r_symndx;
8228       unsigned int r_type;
8229       struct elf_link_hash_entry *h;
8230       bfd_boolean can_make_dynamic_p;
8231       bfd_boolean call_reloc_p;
8232       bfd_boolean constrain_symbol_p;
8233
8234       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8235       r_type = ELF_R_TYPE (abfd, rel->r_info);
8236
8237       if (r_symndx < extsymoff)
8238         h = NULL;
8239       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8240         {
8241           (*_bfd_error_handler)
8242             (_("%B: Malformed reloc detected for section %s"),
8243              abfd, name);
8244           bfd_set_error (bfd_error_bad_value);
8245           return FALSE;
8246         }
8247       else
8248         {
8249           h = sym_hashes[r_symndx - extsymoff];
8250           if (h != NULL)
8251             {
8252               while (h->root.type == bfd_link_hash_indirect
8253                      || h->root.type == bfd_link_hash_warning)
8254                 h = (struct elf_link_hash_entry *) h->root.u.i.link;
8255
8256               /* PR15323, ref flags aren't set for references in the
8257                  same object.  */
8258               h->root.non_ir_ref = 1;
8259             }
8260         }
8261
8262       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8263          relocation into a dynamic one.  */
8264       can_make_dynamic_p = FALSE;
8265
8266       /* Set CALL_RELOC_P to true if the relocation is for a call,
8267          and if pointer equality therefore doesn't matter.  */
8268       call_reloc_p = FALSE;
8269
8270       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8271          into account when deciding how to define the symbol.
8272          Relocations in nonallocatable sections such as .pdr and
8273          .debug* should have no effect.  */
8274       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8275
8276       switch (r_type)
8277         {
8278         case R_MIPS_CALL16:
8279         case R_MIPS_CALL_HI16:
8280         case R_MIPS_CALL_LO16:
8281         case R_MIPS16_CALL16:
8282         case R_MICROMIPS_CALL16:
8283         case R_MICROMIPS_CALL_HI16:
8284         case R_MICROMIPS_CALL_LO16:
8285           call_reloc_p = TRUE;
8286           /* Fall through.  */
8287
8288         case R_MIPS_GOT16:
8289         case R_MIPS_GOT_HI16:
8290         case R_MIPS_GOT_LO16:
8291         case R_MIPS_GOT_PAGE:
8292         case R_MIPS_GOT_OFST:
8293         case R_MIPS_GOT_DISP:
8294         case R_MIPS_TLS_GOTTPREL:
8295         case R_MIPS_TLS_GD:
8296         case R_MIPS_TLS_LDM:
8297         case R_MIPS16_GOT16:
8298         case R_MIPS16_TLS_GOTTPREL:
8299         case R_MIPS16_TLS_GD:
8300         case R_MIPS16_TLS_LDM:
8301         case R_MICROMIPS_GOT16:
8302         case R_MICROMIPS_GOT_HI16:
8303         case R_MICROMIPS_GOT_LO16:
8304         case R_MICROMIPS_GOT_PAGE:
8305         case R_MICROMIPS_GOT_OFST:
8306         case R_MICROMIPS_GOT_DISP:
8307         case R_MICROMIPS_TLS_GOTTPREL:
8308         case R_MICROMIPS_TLS_GD:
8309         case R_MICROMIPS_TLS_LDM:
8310           if (dynobj == NULL)
8311             elf_hash_table (info)->dynobj = dynobj = abfd;
8312           if (!mips_elf_create_got_section (dynobj, info))
8313             return FALSE;
8314           if (htab->is_vxworks && !bfd_link_pic (info))
8315             {
8316               (*_bfd_error_handler)
8317                 (_("%B: GOT reloc at 0x%lx not expected in executables"),
8318                  abfd, (unsigned long) rel->r_offset);
8319               bfd_set_error (bfd_error_bad_value);
8320               return FALSE;
8321             }
8322           can_make_dynamic_p = TRUE;
8323           break;
8324
8325         case R_MIPS_NONE:
8326         case R_MIPS_JALR:
8327         case R_MICROMIPS_JALR:
8328           /* These relocations have empty fields and are purely there to
8329              provide link information.  The symbol value doesn't matter.  */
8330           constrain_symbol_p = FALSE;
8331           break;
8332
8333         case R_MIPS_GPREL16:
8334         case R_MIPS_GPREL32:
8335         case R_MIPS16_GPREL:
8336         case R_MICROMIPS_GPREL16:
8337           /* GP-relative relocations always resolve to a definition in a
8338              regular input file, ignoring the one-definition rule.  This is
8339              important for the GP setup sequence in NewABI code, which
8340              always resolves to a local function even if other relocations
8341              against the symbol wouldn't.  */
8342           constrain_symbol_p = FALSE;
8343           break;
8344
8345         case R_MIPS_32:
8346         case R_MIPS_REL32:
8347         case R_MIPS_64:
8348           /* In VxWorks executables, references to external symbols
8349              must be handled using copy relocs or PLT entries; it is not
8350              possible to convert this relocation into a dynamic one.
8351
8352              For executables that use PLTs and copy-relocs, we have a
8353              choice between converting the relocation into a dynamic
8354              one or using copy relocations or PLT entries.  It is
8355              usually better to do the former, unless the relocation is
8356              against a read-only section.  */
8357           if ((bfd_link_pic (info)
8358                || (h != NULL
8359                    && !htab->is_vxworks
8360                    && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8361                    && !(!info->nocopyreloc
8362                         && !PIC_OBJECT_P (abfd)
8363                         && MIPS_ELF_READONLY_SECTION (sec))))
8364               && (sec->flags & SEC_ALLOC) != 0)
8365             {
8366               can_make_dynamic_p = TRUE;
8367               if (dynobj == NULL)
8368                 elf_hash_table (info)->dynobj = dynobj = abfd;
8369             }
8370           break;
8371
8372         case R_MIPS_26:
8373         case R_MIPS_PC16:
8374         case R_MIPS_PC21_S2:
8375         case R_MIPS_PC26_S2:
8376         case R_MIPS16_26:
8377         case R_MIPS16_PC16_S1:
8378         case R_MICROMIPS_26_S1:
8379         case R_MICROMIPS_PC7_S1:
8380         case R_MICROMIPS_PC10_S1:
8381         case R_MICROMIPS_PC16_S1:
8382         case R_MICROMIPS_PC23_S2:
8383           call_reloc_p = TRUE;
8384           break;
8385         }
8386
8387       if (h)
8388         {
8389           if (constrain_symbol_p)
8390             {
8391               if (!can_make_dynamic_p)
8392                 ((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8393
8394               if (!call_reloc_p)
8395                 h->pointer_equality_needed = 1;
8396
8397               /* We must not create a stub for a symbol that has
8398                  relocations related to taking the function's address.
8399                  This doesn't apply to VxWorks, where CALL relocs refer
8400                  to a .got.plt entry instead of a normal .got entry.  */
8401               if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8402                 ((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8403             }
8404
8405           /* Relocations against the special VxWorks __GOTT_BASE__ and
8406              __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8407              room for them in .rela.dyn.  */
8408           if (is_gott_symbol (info, h))
8409             {
8410               if (sreloc == NULL)
8411                 {
8412                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8413                   if (sreloc == NULL)
8414                     return FALSE;
8415                 }
8416               mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8417               if (MIPS_ELF_READONLY_SECTION (sec))
8418                 /* We tell the dynamic linker that there are
8419                    relocations against the text segment.  */
8420                 info->flags |= DF_TEXTREL;
8421             }
8422         }
8423       else if (call_lo16_reloc_p (r_type)
8424                || got_lo16_reloc_p (r_type)
8425                || got_disp_reloc_p (r_type)
8426                || (got16_reloc_p (r_type) && htab->is_vxworks))
8427         {
8428           /* We may need a local GOT entry for this relocation.  We
8429              don't count R_MIPS_GOT_PAGE because we can estimate the
8430              maximum number of pages needed by looking at the size of
8431              the segment.  Similar comments apply to R_MIPS*_GOT16 and
8432              R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8433              always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8434              R_MIPS_CALL_HI16 because these are always followed by an
8435              R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8436           if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8437                                                  rel->r_addend, info, r_type))
8438             return FALSE;
8439         }
8440
8441       if (h != NULL
8442           && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8443                                                   ELF_ST_IS_MIPS16 (h->other)))
8444         ((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8445
8446       switch (r_type)
8447         {
8448         case R_MIPS_CALL16:
8449         case R_MIPS16_CALL16:
8450         case R_MICROMIPS_CALL16:
8451           if (h == NULL)
8452             {
8453               (*_bfd_error_handler)
8454                 (_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8455                  abfd, (unsigned long) rel->r_offset);
8456               bfd_set_error (bfd_error_bad_value);
8457               return FALSE;
8458             }
8459           /* Fall through.  */
8460
8461         case R_MIPS_CALL_HI16:
8462         case R_MIPS_CALL_LO16:
8463         case R_MICROMIPS_CALL_HI16:
8464         case R_MICROMIPS_CALL_LO16:
8465           if (h != NULL)
8466             {
8467               /* Make sure there is room in the regular GOT to hold the
8468                  function's address.  We may eliminate it in favour of
8469                  a .got.plt entry later; see mips_elf_count_got_symbols.  */
8470               if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8471                                                       r_type))
8472                 return FALSE;
8473
8474               /* We need a stub, not a plt entry for the undefined
8475                  function.  But we record it as if it needs plt.  See
8476                  _bfd_elf_adjust_dynamic_symbol.  */
8477               h->needs_plt = 1;
8478               h->type = STT_FUNC;
8479             }
8480           break;
8481
8482         case R_MIPS_GOT_PAGE:
8483         case R_MICROMIPS_GOT_PAGE:
8484         case R_MIPS16_GOT16:
8485         case R_MIPS_GOT16:
8486         case R_MIPS_GOT_HI16:
8487         case R_MIPS_GOT_LO16:
8488         case R_MICROMIPS_GOT16:
8489         case R_MICROMIPS_GOT_HI16:
8490         case R_MICROMIPS_GOT_LO16:
8491           if (!h || got_page_reloc_p (r_type))
8492             {
8493               /* This relocation needs (or may need, if h != NULL) a
8494                  page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8495                  know for sure until we know whether the symbol is
8496                  preemptible.  */
8497               if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8498                 {
8499                   if (!mips_elf_get_section_contents (abfd, sec, &contents))
8500                     return FALSE;
8501                   howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8502                   addend = mips_elf_read_rel_addend (abfd, rel,
8503                                                      howto, contents);
8504                   if (got16_reloc_p (r_type))
8505                     mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8506                                                   contents, &addend);
8507                   else
8508                     addend <<= howto->rightshift;
8509                 }
8510               else
8511                 addend = rel->r_addend;
8512               if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8513                                                  h, addend))
8514                 return FALSE;
8515
8516               if (h)
8517                 {
8518                   struct mips_elf_link_hash_entry *hmips =
8519                     (struct mips_elf_link_hash_entry *) h;
8520
8521                   /* This symbol is definitely not overridable.  */
8522                   if (hmips->root.def_regular
8523                       && ! (bfd_link_pic (info) && ! info->symbolic
8524                             && ! hmips->root.forced_local))
8525                     h = NULL;
8526                 }
8527             }
8528           /* If this is a global, overridable symbol, GOT_PAGE will
8529              decay to GOT_DISP, so we'll need a GOT entry for it.  */
8530           /* Fall through.  */
8531
8532         case R_MIPS_GOT_DISP:
8533         case R_MICROMIPS_GOT_DISP:
8534           if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8535                                                        FALSE, r_type))
8536             return FALSE;
8537           break;
8538
8539         case R_MIPS_TLS_GOTTPREL:
8540         case R_MIPS16_TLS_GOTTPREL:
8541         case R_MICROMIPS_TLS_GOTTPREL:
8542           if (bfd_link_pic (info))
8543             info->flags |= DF_STATIC_TLS;
8544           /* Fall through */
8545
8546         case R_MIPS_TLS_LDM:
8547         case R_MIPS16_TLS_LDM:
8548         case R_MICROMIPS_TLS_LDM:
8549           if (tls_ldm_reloc_p (r_type))
8550             {
8551               r_symndx = STN_UNDEF;
8552               h = NULL;
8553             }
8554           /* Fall through */
8555
8556         case R_MIPS_TLS_GD:
8557         case R_MIPS16_TLS_GD:
8558         case R_MICROMIPS_TLS_GD:
8559           /* This symbol requires a global offset table entry, or two
8560              for TLS GD relocations.  */
8561           if (h != NULL)
8562             {
8563               if (!mips_elf_record_global_got_symbol (h, abfd, info,
8564                                                       FALSE, r_type))
8565                 return FALSE;
8566             }
8567           else
8568             {
8569               if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8570                                                      rel->r_addend,
8571                                                      info, r_type))
8572                 return FALSE;
8573             }
8574           break;
8575
8576         case R_MIPS_32:
8577         case R_MIPS_REL32:
8578         case R_MIPS_64:
8579           /* In VxWorks executables, references to external symbols
8580              are handled using copy relocs or PLT stubs, so there's
8581              no need to add a .rela.dyn entry for this relocation.  */
8582           if (can_make_dynamic_p)
8583             {
8584               if (sreloc == NULL)
8585                 {
8586                   sreloc = mips_elf_rel_dyn_section (info, TRUE);
8587                   if (sreloc == NULL)
8588                     return FALSE;
8589                 }
8590               if (bfd_link_pic (info) && h == NULL)
8591                 {
8592                   /* When creating a shared object, we must copy these
8593                      reloc types into the output file as R_MIPS_REL32
8594                      relocs.  Make room for this reloc in .rel(a).dyn.  */
8595                   mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8596                   if (MIPS_ELF_READONLY_SECTION (sec))
8597                     /* We tell the dynamic linker that there are
8598                        relocations against the text segment.  */
8599                     info->flags |= DF_TEXTREL;
8600                 }
8601               else
8602                 {
8603                   struct mips_elf_link_hash_entry *hmips;
8604
8605                   /* For a shared object, we must copy this relocation
8606                      unless the symbol turns out to be undefined and
8607                      weak with non-default visibility, in which case
8608                      it will be left as zero.
8609
8610                      We could elide R_MIPS_REL32 for locally binding symbols
8611                      in shared libraries, but do not yet do so.
8612
8613                      For an executable, we only need to copy this
8614                      reloc if the symbol is defined in a dynamic
8615                      object.  */
8616                   hmips = (struct mips_elf_link_hash_entry *) h;
8617                   ++hmips->possibly_dynamic_relocs;
8618                   if (MIPS_ELF_READONLY_SECTION (sec))
8619                     /* We need it to tell the dynamic linker if there
8620                        are relocations against the text segment.  */
8621                     hmips->readonly_reloc = TRUE;
8622                 }
8623             }
8624
8625           if (SGI_COMPAT (abfd))
8626             mips_elf_hash_table (info)->compact_rel_size +=
8627               sizeof (Elf32_External_crinfo);
8628           break;
8629
8630         case R_MIPS_26:
8631         case R_MIPS_GPREL16:
8632         case R_MIPS_LITERAL:
8633         case R_MIPS_GPREL32:
8634         case R_MICROMIPS_26_S1:
8635         case R_MICROMIPS_GPREL16:
8636         case R_MICROMIPS_LITERAL:
8637         case R_MICROMIPS_GPREL7_S2:
8638           if (SGI_COMPAT (abfd))
8639             mips_elf_hash_table (info)->compact_rel_size +=
8640               sizeof (Elf32_External_crinfo);
8641           break;
8642
8643           /* This relocation describes the C++ object vtable hierarchy.
8644              Reconstruct it for later use during GC.  */
8645         case R_MIPS_GNU_VTINHERIT:
8646           if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8647             return FALSE;
8648           break;
8649
8650           /* This relocation describes which C++ vtable entries are actually
8651              used.  Record for later use during GC.  */
8652         case R_MIPS_GNU_VTENTRY:
8653           BFD_ASSERT (h != NULL);
8654           if (h != NULL
8655               && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8656             return FALSE;
8657           break;
8658
8659         default:
8660           break;
8661         }
8662
8663       /* Record the need for a PLT entry.  At this point we don't know
8664          yet if we are going to create a PLT in the first place, but
8665          we only record whether the relocation requires a standard MIPS
8666          or a compressed code entry anyway.  If we don't make a PLT after
8667          all, then we'll just ignore these arrangements.  Likewise if
8668          a PLT entry is not created because the symbol is satisfied
8669          locally.  */
8670       if (h != NULL
8671           && jal_reloc_p (r_type)
8672           && !SYMBOL_CALLS_LOCAL (info, h))
8673         {
8674           if (h->plt.plist == NULL)
8675             h->plt.plist = mips_elf_make_plt_record (abfd);
8676           if (h->plt.plist == NULL)
8677             return FALSE;
8678
8679           if (r_type == R_MIPS_26)
8680             h->plt.plist->need_mips = TRUE;
8681           else
8682             h->plt.plist->need_comp = TRUE;
8683         }
8684
8685       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8686          if there is one.  We only need to handle global symbols here;
8687          we decide whether to keep or delete stubs for local symbols
8688          when processing the stub's relocations.  */
8689       if (h != NULL
8690           && !mips16_call_reloc_p (r_type)
8691           && !section_allows_mips16_refs_p (sec))
8692         {
8693           struct mips_elf_link_hash_entry *mh;
8694
8695           mh = (struct mips_elf_link_hash_entry *) h;
8696           mh->need_fn_stub = TRUE;
8697         }
8698
8699       /* Refuse some position-dependent relocations when creating a
8700          shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8701          not PIC, but we can create dynamic relocations and the result
8702          will be fine.  Also do not refuse R_MIPS_LO16, which can be
8703          combined with R_MIPS_GOT16.  */
8704       if (bfd_link_pic (info))
8705         {
8706           switch (r_type)
8707             {
8708             case R_MIPS16_HI16:
8709             case R_MIPS_HI16:
8710             case R_MIPS_HIGHER:
8711             case R_MIPS_HIGHEST:
8712             case R_MICROMIPS_HI16:
8713             case R_MICROMIPS_HIGHER:
8714             case R_MICROMIPS_HIGHEST:
8715               /* Don't refuse a high part relocation if it's against
8716                  no symbol (e.g. part of a compound relocation).  */
8717               if (r_symndx == STN_UNDEF)
8718                 break;
8719
8720               /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8721                  and has a special meaning.  */
8722               if (!NEWABI_P (abfd) && h != NULL
8723                   && strcmp (h->root.root.string, "_gp_disp") == 0)
8724                 break;
8725
8726               /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8727               if (is_gott_symbol (info, h))
8728                 break;
8729
8730               /* FALLTHROUGH */
8731
8732             case R_MIPS16_26:
8733             case R_MIPS_26:
8734             case R_MICROMIPS_26_S1:
8735               howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8736               (*_bfd_error_handler)
8737                 (_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8738                  abfd, howto->name,
8739                  (h) ? h->root.root.string : "a local symbol");
8740               bfd_set_error (bfd_error_bad_value);
8741               return FALSE;
8742             default:
8743               break;
8744             }
8745         }
8746     }
8747
8748   return TRUE;
8749 }
8750 \f
8751 bfd_boolean
8752 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8753                          struct bfd_link_info *link_info,
8754                          bfd_boolean *again)
8755 {
8756   Elf_Internal_Rela *internal_relocs;
8757   Elf_Internal_Rela *irel, *irelend;
8758   Elf_Internal_Shdr *symtab_hdr;
8759   bfd_byte *contents = NULL;
8760   size_t extsymoff;
8761   bfd_boolean changed_contents = FALSE;
8762   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8763   Elf_Internal_Sym *isymbuf = NULL;
8764
8765   /* We are not currently changing any sizes, so only one pass.  */
8766   *again = FALSE;
8767
8768   if (bfd_link_relocatable (link_info))
8769     return TRUE;
8770
8771   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8772                                                link_info->keep_memory);
8773   if (internal_relocs == NULL)
8774     return TRUE;
8775
8776   irelend = internal_relocs + sec->reloc_count
8777     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8778   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8779   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8780
8781   for (irel = internal_relocs; irel < irelend; irel++)
8782     {
8783       bfd_vma symval;
8784       bfd_signed_vma sym_offset;
8785       unsigned int r_type;
8786       unsigned long r_symndx;
8787       asection *sym_sec;
8788       unsigned long instruction;
8789
8790       /* Turn jalr into bgezal, and jr into beq, if they're marked
8791          with a JALR relocation, that indicate where they jump to.
8792          This saves some pipeline bubbles.  */
8793       r_type = ELF_R_TYPE (abfd, irel->r_info);
8794       if (r_type != R_MIPS_JALR)
8795         continue;
8796
8797       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8798       /* Compute the address of the jump target.  */
8799       if (r_symndx >= extsymoff)
8800         {
8801           struct mips_elf_link_hash_entry *h
8802             = ((struct mips_elf_link_hash_entry *)
8803                elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8804
8805           while (h->root.root.type == bfd_link_hash_indirect
8806                  || h->root.root.type == bfd_link_hash_warning)
8807             h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8808
8809           /* If a symbol is undefined, or if it may be overridden,
8810              skip it.  */
8811           if (! ((h->root.root.type == bfd_link_hash_defined
8812                   || h->root.root.type == bfd_link_hash_defweak)
8813                  && h->root.root.u.def.section)
8814               || (bfd_link_pic (link_info) && ! link_info->symbolic
8815                   && !h->root.forced_local))
8816             continue;
8817
8818           sym_sec = h->root.root.u.def.section;
8819           if (sym_sec->output_section)
8820             symval = (h->root.root.u.def.value
8821                       + sym_sec->output_section->vma
8822                       + sym_sec->output_offset);
8823           else
8824             symval = h->root.root.u.def.value;
8825         }
8826       else
8827         {
8828           Elf_Internal_Sym *isym;
8829
8830           /* Read this BFD's symbols if we haven't done so already.  */
8831           if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8832             {
8833               isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8834               if (isymbuf == NULL)
8835                 isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8836                                                 symtab_hdr->sh_info, 0,
8837                                                 NULL, NULL, NULL);
8838               if (isymbuf == NULL)
8839                 goto relax_return;
8840             }
8841
8842           isym = isymbuf + r_symndx;
8843           if (isym->st_shndx == SHN_UNDEF)
8844             continue;
8845           else if (isym->st_shndx == SHN_ABS)
8846             sym_sec = bfd_abs_section_ptr;
8847           else if (isym->st_shndx == SHN_COMMON)
8848             sym_sec = bfd_com_section_ptr;
8849           else
8850             sym_sec
8851               = bfd_section_from_elf_index (abfd, isym->st_shndx);
8852           symval = isym->st_value
8853             + sym_sec->output_section->vma
8854             + sym_sec->output_offset;
8855         }
8856
8857       /* Compute branch offset, from delay slot of the jump to the
8858          branch target.  */
8859       sym_offset = (symval + irel->r_addend)
8860         - (sec_start + irel->r_offset + 4);
8861
8862       /* Branch offset must be properly aligned.  */
8863       if ((sym_offset & 3) != 0)
8864         continue;
8865
8866       sym_offset >>= 2;
8867
8868       /* Check that it's in range.  */
8869       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8870         continue;
8871
8872       /* Get the section contents if we haven't done so already.  */
8873       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8874         goto relax_return;
8875
8876       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8877
8878       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8879       if ((instruction & 0xfc1fffff) == 0x0000f809)
8880         instruction = 0x04110000;
8881       /* If it was jr <reg>, turn it into b <target>.  */
8882       else if ((instruction & 0xfc1fffff) == 0x00000008)
8883         instruction = 0x10000000;
8884       else
8885         continue;
8886
8887       instruction |= (sym_offset & 0xffff);
8888       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8889       changed_contents = TRUE;
8890     }
8891
8892   if (contents != NULL
8893       && elf_section_data (sec)->this_hdr.contents != contents)
8894     {
8895       if (!changed_contents && !link_info->keep_memory)
8896         free (contents);
8897       else
8898         {
8899           /* Cache the section contents for elf_link_input_bfd.  */
8900           elf_section_data (sec)->this_hdr.contents = contents;
8901         }
8902     }
8903   return TRUE;
8904
8905  relax_return:
8906   if (contents != NULL
8907       && elf_section_data (sec)->this_hdr.contents != contents)
8908     free (contents);
8909   return FALSE;
8910 }
8911 \f
8912 /* Allocate space for global sym dynamic relocs.  */
8913
8914 static bfd_boolean
8915 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8916 {
8917   struct bfd_link_info *info = inf;
8918   bfd *dynobj;
8919   struct mips_elf_link_hash_entry *hmips;
8920   struct mips_elf_link_hash_table *htab;
8921
8922   htab = mips_elf_hash_table (info);
8923   BFD_ASSERT (htab != NULL);
8924
8925   dynobj = elf_hash_table (info)->dynobj;
8926   hmips = (struct mips_elf_link_hash_entry *) h;
8927
8928   /* VxWorks executables are handled elsewhere; we only need to
8929      allocate relocations in shared objects.  */
8930   if (htab->is_vxworks && !bfd_link_pic (info))
8931     return TRUE;
8932
8933   /* Ignore indirect symbols.  All relocations against such symbols
8934      will be redirected to the target symbol.  */
8935   if (h->root.type == bfd_link_hash_indirect)
8936     return TRUE;
8937
8938   /* If this symbol is defined in a dynamic object, or we are creating
8939      a shared library, we will need to copy any R_MIPS_32 or
8940      R_MIPS_REL32 relocs against it into the output file.  */
8941   if (! bfd_link_relocatable (info)
8942       && hmips->possibly_dynamic_relocs != 0
8943       && (h->root.type == bfd_link_hash_defweak
8944           || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8945           || bfd_link_pic (info)))
8946     {
8947       bfd_boolean do_copy = TRUE;
8948
8949       if (h->root.type == bfd_link_hash_undefweak)
8950         {
8951           /* Do not copy relocations for undefined weak symbols with
8952              non-default visibility.  */
8953           if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8954             do_copy = FALSE;
8955
8956           /* Make sure undefined weak symbols are output as a dynamic
8957              symbol in PIEs.  */
8958           else if (h->dynindx == -1 && !h->forced_local)
8959             {
8960               if (! bfd_elf_link_record_dynamic_symbol (info, h))
8961                 return FALSE;
8962             }
8963         }
8964
8965       if (do_copy)
8966         {
8967           /* Even though we don't directly need a GOT entry for this symbol,
8968              the SVR4 psABI requires it to have a dynamic symbol table
8969              index greater that DT_MIPS_GOTSYM if there are dynamic
8970              relocations against it.
8971
8972              VxWorks does not enforce the same mapping between the GOT
8973              and the symbol table, so the same requirement does not
8974              apply there.  */
8975           if (!htab->is_vxworks)
8976             {
8977               if (hmips->global_got_area > GGA_RELOC_ONLY)
8978                 hmips->global_got_area = GGA_RELOC_ONLY;
8979               hmips->got_only_for_calls = FALSE;
8980             }
8981
8982           mips_elf_allocate_dynamic_relocations
8983             (dynobj, info, hmips->possibly_dynamic_relocs);
8984           if (hmips->readonly_reloc)
8985             /* We tell the dynamic linker that there are relocations
8986                against the text segment.  */
8987             info->flags |= DF_TEXTREL;
8988         }
8989     }
8990
8991   return TRUE;
8992 }
8993
8994 /* Adjust a symbol defined by a dynamic object and referenced by a
8995    regular object.  The current definition is in some section of the
8996    dynamic object, but we're not including those sections.  We have to
8997    change the definition to something the rest of the link can
8998    understand.  */
8999
9000 bfd_boolean
9001 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9002                                      struct elf_link_hash_entry *h)
9003 {
9004   bfd *dynobj;
9005   struct mips_elf_link_hash_entry *hmips;
9006   struct mips_elf_link_hash_table *htab;
9007
9008   htab = mips_elf_hash_table (info);
9009   BFD_ASSERT (htab != NULL);
9010
9011   dynobj = elf_hash_table (info)->dynobj;
9012   hmips = (struct mips_elf_link_hash_entry *) h;
9013
9014   /* Make sure we know what is going on here.  */
9015   BFD_ASSERT (dynobj != NULL
9016               && (h->needs_plt
9017                   || h->u.weakdef != NULL
9018                   || (h->def_dynamic
9019                       && h->ref_regular
9020                       && !h->def_regular)));
9021
9022   hmips = (struct mips_elf_link_hash_entry *) h;
9023
9024   /* If there are call relocations against an externally-defined symbol,
9025      see whether we can create a MIPS lazy-binding stub for it.  We can
9026      only do this if all references to the function are through call
9027      relocations, and in that case, the traditional lazy-binding stubs
9028      are much more efficient than PLT entries.
9029
9030      Traditional stubs are only available on SVR4 psABI-based systems;
9031      VxWorks always uses PLTs instead.  */
9032   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9033     {
9034       if (! elf_hash_table (info)->dynamic_sections_created)
9035         return TRUE;
9036
9037       /* If this symbol is not defined in a regular file, then set
9038          the symbol to the stub location.  This is required to make
9039          function pointers compare as equal between the normal
9040          executable and the shared library.  */
9041       if (!h->def_regular)
9042         {
9043           hmips->needs_lazy_stub = TRUE;
9044           htab->lazy_stub_count++;
9045           return TRUE;
9046         }
9047     }
9048   /* As above, VxWorks requires PLT entries for externally-defined
9049      functions that are only accessed through call relocations.
9050
9051      Both VxWorks and non-VxWorks targets also need PLT entries if there
9052      are static-only relocations against an externally-defined function.
9053      This can technically occur for shared libraries if there are
9054      branches to the symbol, although it is unlikely that this will be
9055      used in practice due to the short ranges involved.  It can occur
9056      for any relative or absolute relocation in executables; in that
9057      case, the PLT entry becomes the function's canonical address.  */
9058   else if (((h->needs_plt && !hmips->no_fn_stub)
9059             || (h->type == STT_FUNC && hmips->has_static_relocs))
9060            && htab->use_plts_and_copy_relocs
9061            && !SYMBOL_CALLS_LOCAL (info, h)
9062            && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9063                 && h->root.type == bfd_link_hash_undefweak))
9064     {
9065       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9066       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9067
9068       /* If this is the first symbol to need a PLT entry, then make some
9069          basic setup.  Also work out PLT entry sizes.  We'll need them
9070          for PLT offset calculations.  */
9071       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9072         {
9073           BFD_ASSERT (htab->sgotplt->size == 0);
9074           BFD_ASSERT (htab->plt_got_index == 0);
9075
9076           /* If we're using the PLT additions to the psABI, each PLT
9077              entry is 16 bytes and the PLT0 entry is 32 bytes.
9078              Encourage better cache usage by aligning.  We do this
9079              lazily to avoid pessimizing traditional objects.  */
9080           if (!htab->is_vxworks
9081               && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9082             return FALSE;
9083
9084           /* Make sure that .got.plt is word-aligned.  We do this lazily
9085              for the same reason as above.  */
9086           if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9087                                           MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9088             return FALSE;
9089
9090           /* On non-VxWorks targets, the first two entries in .got.plt
9091              are reserved.  */
9092           if (!htab->is_vxworks)
9093             htab->plt_got_index
9094               += (get_elf_backend_data (dynobj)->got_header_size
9095                   / MIPS_ELF_GOT_SIZE (dynobj));
9096
9097           /* On VxWorks, also allocate room for the header's
9098              .rela.plt.unloaded entries.  */
9099           if (htab->is_vxworks && !bfd_link_pic (info))
9100             htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9101
9102           /* Now work out the sizes of individual PLT entries.  */
9103           if (htab->is_vxworks && bfd_link_pic (info))
9104             htab->plt_mips_entry_size
9105               = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9106           else if (htab->is_vxworks)
9107             htab->plt_mips_entry_size
9108               = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9109           else if (newabi_p)
9110             htab->plt_mips_entry_size
9111               = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9112           else if (!micromips_p)
9113             {
9114               htab->plt_mips_entry_size
9115                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9116               htab->plt_comp_entry_size
9117                 = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9118             }
9119           else if (htab->insn32)
9120             {
9121               htab->plt_mips_entry_size
9122                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9123               htab->plt_comp_entry_size
9124                 = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9125             }
9126           else
9127             {
9128               htab->plt_mips_entry_size
9129                 = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9130               htab->plt_comp_entry_size
9131                 = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9132             }
9133         }
9134
9135       if (h->plt.plist == NULL)
9136         h->plt.plist = mips_elf_make_plt_record (dynobj);
9137       if (h->plt.plist == NULL)
9138         return FALSE;
9139
9140       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9141          n32 or n64, so always use a standard entry there.
9142
9143          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9144          all MIPS16 calls will go via that stub, and there is no benefit
9145          to having a MIPS16 entry.  And in the case of call_stub a
9146          standard entry actually has to be used as the stub ends with a J
9147          instruction.  */
9148       if (newabi_p
9149           || htab->is_vxworks
9150           || hmips->call_stub
9151           || hmips->call_fp_stub)
9152         {
9153           h->plt.plist->need_mips = TRUE;
9154           h->plt.plist->need_comp = FALSE;
9155         }
9156
9157       /* Otherwise, if there are no direct calls to the function, we
9158          have a free choice of whether to use standard or compressed
9159          entries.  Prefer microMIPS entries if the object is known to
9160          contain microMIPS code, so that it becomes possible to create
9161          pure microMIPS binaries.  Prefer standard entries otherwise,
9162          because MIPS16 ones are no smaller and are usually slower.  */
9163       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9164         {
9165           if (micromips_p)
9166             h->plt.plist->need_comp = TRUE;
9167           else
9168             h->plt.plist->need_mips = TRUE;
9169         }
9170
9171       if (h->plt.plist->need_mips)
9172         {
9173           h->plt.plist->mips_offset = htab->plt_mips_offset;
9174           htab->plt_mips_offset += htab->plt_mips_entry_size;
9175         }
9176       if (h->plt.plist->need_comp)
9177         {
9178           h->plt.plist->comp_offset = htab->plt_comp_offset;
9179           htab->plt_comp_offset += htab->plt_comp_entry_size;
9180         }
9181
9182       /* Reserve the corresponding .got.plt entry now too.  */
9183       h->plt.plist->gotplt_index = htab->plt_got_index++;
9184
9185       /* If the output file has no definition of the symbol, set the
9186          symbol's value to the address of the stub.  */
9187       if (!bfd_link_pic (info) && !h->def_regular)
9188         hmips->use_plt_entry = TRUE;
9189
9190       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9191       htab->srelplt->size += (htab->is_vxworks
9192                               ? MIPS_ELF_RELA_SIZE (dynobj)
9193                               : MIPS_ELF_REL_SIZE (dynobj));
9194
9195       /* Make room for the .rela.plt.unloaded relocations.  */
9196       if (htab->is_vxworks && !bfd_link_pic (info))
9197         htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9198
9199       /* All relocations against this symbol that could have been made
9200          dynamic will now refer to the PLT entry instead.  */
9201       hmips->possibly_dynamic_relocs = 0;
9202
9203       return TRUE;
9204     }
9205
9206   /* If this is a weak symbol, and there is a real definition, the
9207      processor independent code will have arranged for us to see the
9208      real definition first, and we can just use the same value.  */
9209   if (h->u.weakdef != NULL)
9210     {
9211       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9212                   || h->u.weakdef->root.type == bfd_link_hash_defweak);
9213       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9214       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9215       return TRUE;
9216     }
9217
9218   /* Otherwise, there is nothing further to do for symbols defined
9219      in regular objects.  */
9220   if (h->def_regular)
9221     return TRUE;
9222
9223   /* There's also nothing more to do if we'll convert all relocations
9224      against this symbol into dynamic relocations.  */
9225   if (!hmips->has_static_relocs)
9226     return TRUE;
9227
9228   /* We're now relying on copy relocations.  Complain if we have
9229      some that we can't convert.  */
9230   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9231     {
9232       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9233                                "dynamic symbol %s"),
9234                              h->root.root.string);
9235       bfd_set_error (bfd_error_bad_value);
9236       return FALSE;
9237     }
9238
9239   /* We must allocate the symbol in our .dynbss section, which will
9240      become part of the .bss section of the executable.  There will be
9241      an entry for this symbol in the .dynsym section.  The dynamic
9242      object will contain position independent code, so all references
9243      from the dynamic object to this symbol will go through the global
9244      offset table.  The dynamic linker will use the .dynsym entry to
9245      determine the address it must put in the global offset table, so
9246      both the dynamic object and the regular object will refer to the
9247      same memory location for the variable.  */
9248
9249   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9250     {
9251       if (htab->is_vxworks)
9252         htab->srelbss->size += sizeof (Elf32_External_Rela);
9253       else
9254         mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9255       h->needs_copy = 1;
9256     }
9257
9258   /* All relocations against this symbol that could have been made
9259      dynamic will now refer to the local copy instead.  */
9260   hmips->possibly_dynamic_relocs = 0;
9261
9262   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9263 }
9264 \f
9265 /* This function is called after all the input files have been read,
9266    and the input sections have been assigned to output sections.  We
9267    check for any mips16 stub sections that we can discard.  */
9268
9269 bfd_boolean
9270 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9271                                     struct bfd_link_info *info)
9272 {
9273   asection *sect;
9274   struct mips_elf_link_hash_table *htab;
9275   struct mips_htab_traverse_info hti;
9276
9277   htab = mips_elf_hash_table (info);
9278   BFD_ASSERT (htab != NULL);
9279
9280   /* The .reginfo section has a fixed size.  */
9281   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9282   if (sect != NULL)
9283     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9284
9285   /* The .MIPS.abiflags section has a fixed size.  */
9286   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9287   if (sect != NULL)
9288     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9289
9290   hti.info = info;
9291   hti.output_bfd = output_bfd;
9292   hti.error = FALSE;
9293   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9294                                mips_elf_check_symbols, &hti);
9295   if (hti.error)
9296     return FALSE;
9297
9298   return TRUE;
9299 }
9300
9301 /* If the link uses a GOT, lay it out and work out its size.  */
9302
9303 static bfd_boolean
9304 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9305 {
9306   bfd *dynobj;
9307   asection *s;
9308   struct mips_got_info *g;
9309   bfd_size_type loadable_size = 0;
9310   bfd_size_type page_gotno;
9311   bfd *ibfd;
9312   struct mips_elf_traverse_got_arg tga;
9313   struct mips_elf_link_hash_table *htab;
9314
9315   htab = mips_elf_hash_table (info);
9316   BFD_ASSERT (htab != NULL);
9317
9318   s = htab->sgot;
9319   if (s == NULL)
9320     return TRUE;
9321
9322   dynobj = elf_hash_table (info)->dynobj;
9323   g = htab->got_info;
9324
9325   /* Allocate room for the reserved entries.  VxWorks always reserves
9326      3 entries; other objects only reserve 2 entries.  */
9327   BFD_ASSERT (g->assigned_low_gotno == 0);
9328   if (htab->is_vxworks)
9329     htab->reserved_gotno = 3;
9330   else
9331     htab->reserved_gotno = 2;
9332   g->local_gotno += htab->reserved_gotno;
9333   g->assigned_low_gotno = htab->reserved_gotno;
9334
9335   /* Decide which symbols need to go in the global part of the GOT and
9336      count the number of reloc-only GOT symbols.  */
9337   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9338
9339   if (!mips_elf_resolve_final_got_entries (info, g))
9340     return FALSE;
9341
9342   /* Calculate the total loadable size of the output.  That
9343      will give us the maximum number of GOT_PAGE entries
9344      required.  */
9345   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9346     {
9347       asection *subsection;
9348
9349       for (subsection = ibfd->sections;
9350            subsection;
9351            subsection = subsection->next)
9352         {
9353           if ((subsection->flags & SEC_ALLOC) == 0)
9354             continue;
9355           loadable_size += ((subsection->size + 0xf)
9356                             &~ (bfd_size_type) 0xf);
9357         }
9358     }
9359
9360   if (htab->is_vxworks)
9361     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9362        relocations against local symbols evaluate to "G", and the EABI does
9363        not include R_MIPS_GOT_PAGE.  */
9364     page_gotno = 0;
9365   else
9366     /* Assume there are two loadable segments consisting of contiguous
9367        sections.  Is 5 enough?  */
9368     page_gotno = (loadable_size >> 16) + 5;
9369
9370   /* Choose the smaller of the two page estimates; both are intended to be
9371      conservative.  */
9372   if (page_gotno > g->page_gotno)
9373     page_gotno = g->page_gotno;
9374
9375   g->local_gotno += page_gotno;
9376   g->assigned_high_gotno = g->local_gotno - 1;
9377
9378   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9379   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9380   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9381
9382   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9383      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9384      dynamic loader.  */
9385   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9386     {
9387       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9388         return FALSE;
9389     }
9390   else
9391     {
9392       /* Record that all bfds use G.  This also has the effect of freeing
9393          the per-bfd GOTs, which we no longer need.  */
9394       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9395         if (mips_elf_bfd_got (ibfd, FALSE))
9396           mips_elf_replace_bfd_got (ibfd, g);
9397       mips_elf_replace_bfd_got (output_bfd, g);
9398
9399       /* Set up TLS entries.  */
9400       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9401       tga.info = info;
9402       tga.g = g;
9403       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9404       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9405       if (!tga.g)
9406         return FALSE;
9407       BFD_ASSERT (g->tls_assigned_gotno
9408                   == g->global_gotno + g->local_gotno + g->tls_gotno);
9409
9410       /* Each VxWorks GOT entry needs an explicit relocation.  */
9411       if (htab->is_vxworks && bfd_link_pic (info))
9412         g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9413
9414       /* Allocate room for the TLS relocations.  */
9415       if (g->relocs)
9416         mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9417     }
9418
9419   return TRUE;
9420 }
9421
9422 /* Estimate the size of the .MIPS.stubs section.  */
9423
9424 static void
9425 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9426 {
9427   struct mips_elf_link_hash_table *htab;
9428   bfd_size_type dynsymcount;
9429
9430   htab = mips_elf_hash_table (info);
9431   BFD_ASSERT (htab != NULL);
9432
9433   if (htab->lazy_stub_count == 0)
9434     return;
9435
9436   /* IRIX rld assumes that a function stub isn't at the end of the .text
9437      section, so add a dummy entry to the end.  */
9438   htab->lazy_stub_count++;
9439
9440   /* Get a worst-case estimate of the number of dynamic symbols needed.
9441      At this point, dynsymcount does not account for section symbols
9442      and count_section_dynsyms may overestimate the number that will
9443      be needed.  */
9444   dynsymcount = (elf_hash_table (info)->dynsymcount
9445                  + count_section_dynsyms (output_bfd, info));
9446
9447   /* Determine the size of one stub entry.  There's no disadvantage
9448      from using microMIPS code here, so for the sake of pure-microMIPS
9449      binaries we prefer it whenever there's any microMIPS code in
9450      output produced at all.  This has a benefit of stubs being
9451      shorter by 4 bytes each too, unless in the insn32 mode.  */
9452   if (!MICROMIPS_P (output_bfd))
9453     htab->function_stub_size = (dynsymcount > 0x10000
9454                                 ? MIPS_FUNCTION_STUB_BIG_SIZE
9455                                 : MIPS_FUNCTION_STUB_NORMAL_SIZE);
9456   else if (htab->insn32)
9457     htab->function_stub_size = (dynsymcount > 0x10000
9458                                 ? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9459                                 : MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9460   else
9461     htab->function_stub_size = (dynsymcount > 0x10000
9462                                 ? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9463                                 : MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9464
9465   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9466 }
9467
9468 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9469    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9470    stub, allocate an entry in the stubs section.  */
9471
9472 static bfd_boolean
9473 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9474 {
9475   struct mips_htab_traverse_info *hti = data;
9476   struct mips_elf_link_hash_table *htab;
9477   struct bfd_link_info *info;
9478   bfd *output_bfd;
9479
9480   info = hti->info;
9481   output_bfd = hti->output_bfd;
9482   htab = mips_elf_hash_table (info);
9483   BFD_ASSERT (htab != NULL);
9484
9485   if (h->needs_lazy_stub)
9486     {
9487       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9488       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9489       bfd_vma isa_bit = micromips_p;
9490
9491       BFD_ASSERT (htab->root.dynobj != NULL);
9492       if (h->root.plt.plist == NULL)
9493         h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9494       if (h->root.plt.plist == NULL)
9495         {
9496           hti->error = TRUE;
9497           return FALSE;
9498         }
9499       h->root.root.u.def.section = htab->sstubs;
9500       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9501       h->root.plt.plist->stub_offset = htab->sstubs->size;
9502       h->root.other = other;
9503       htab->sstubs->size += htab->function_stub_size;
9504     }
9505   return TRUE;
9506 }
9507
9508 /* Allocate offsets in the stubs section to each symbol that needs one.
9509    Set the final size of the .MIPS.stub section.  */
9510
9511 static bfd_boolean
9512 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9513 {
9514   bfd *output_bfd = info->output_bfd;
9515   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9516   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9517   bfd_vma isa_bit = micromips_p;
9518   struct mips_elf_link_hash_table *htab;
9519   struct mips_htab_traverse_info hti;
9520   struct elf_link_hash_entry *h;
9521   bfd *dynobj;
9522
9523   htab = mips_elf_hash_table (info);
9524   BFD_ASSERT (htab != NULL);
9525
9526   if (htab->lazy_stub_count == 0)
9527     return TRUE;
9528
9529   htab->sstubs->size = 0;
9530   hti.info = info;
9531   hti.output_bfd = output_bfd;
9532   hti.error = FALSE;
9533   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9534   if (hti.error)
9535     return FALSE;
9536   htab->sstubs->size += htab->function_stub_size;
9537   BFD_ASSERT (htab->sstubs->size
9538               == htab->lazy_stub_count * htab->function_stub_size);
9539
9540   dynobj = elf_hash_table (info)->dynobj;
9541   BFD_ASSERT (dynobj != NULL);
9542   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9543   if (h == NULL)
9544     return FALSE;
9545   h->root.u.def.value = isa_bit;
9546   h->other = other;
9547   h->type = STT_FUNC;
9548
9549   return TRUE;
9550 }
9551
9552 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9553    bfd_link_info.  If H uses the address of a PLT entry as the value
9554    of the symbol, then set the entry in the symbol table now.  Prefer
9555    a standard MIPS PLT entry.  */
9556
9557 static bfd_boolean
9558 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9559 {
9560   struct bfd_link_info *info = data;
9561   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9562   struct mips_elf_link_hash_table *htab;
9563   unsigned int other;
9564   bfd_vma isa_bit;
9565   bfd_vma val;
9566
9567   htab = mips_elf_hash_table (info);
9568   BFD_ASSERT (htab != NULL);
9569
9570   if (h->use_plt_entry)
9571     {
9572       BFD_ASSERT (h->root.plt.plist != NULL);
9573       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9574                   || h->root.plt.plist->comp_offset != MINUS_ONE);
9575
9576       val = htab->plt_header_size;
9577       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9578         {
9579           isa_bit = 0;
9580           val += h->root.plt.plist->mips_offset;
9581           other = 0;
9582         }
9583       else
9584         {
9585           isa_bit = 1;
9586           val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9587           other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9588         }
9589       val += isa_bit;
9590       /* For VxWorks, point at the PLT load stub rather than the lazy
9591          resolution stub; this stub will become the canonical function
9592          address.  */
9593       if (htab->is_vxworks)
9594         val += 8;
9595
9596       h->root.root.u.def.section = htab->splt;
9597       h->root.root.u.def.value = val;
9598       h->root.other = other;
9599     }
9600
9601   return TRUE;
9602 }
9603
9604 /* Set the sizes of the dynamic sections.  */
9605
9606 bfd_boolean
9607 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9608                                      struct bfd_link_info *info)
9609 {
9610   bfd *dynobj;
9611   asection *s, *sreldyn;
9612   bfd_boolean reltext;
9613   struct mips_elf_link_hash_table *htab;
9614
9615   htab = mips_elf_hash_table (info);
9616   BFD_ASSERT (htab != NULL);
9617   dynobj = elf_hash_table (info)->dynobj;
9618   BFD_ASSERT (dynobj != NULL);
9619
9620   if (elf_hash_table (info)->dynamic_sections_created)
9621     {
9622       /* Set the contents of the .interp section to the interpreter.  */
9623       if (bfd_link_executable (info) && !info->nointerp)
9624         {
9625           s = bfd_get_linker_section (dynobj, ".interp");
9626           BFD_ASSERT (s != NULL);
9627           s->size
9628             = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9629           s->contents
9630             = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9631         }
9632
9633       /* Figure out the size of the PLT header if we know that we
9634          are using it.  For the sake of cache alignment always use
9635          a standard header whenever any standard entries are present
9636          even if microMIPS entries are present as well.  This also
9637          lets the microMIPS header rely on the value of $v0 only set
9638          by microMIPS entries, for a small size reduction.
9639
9640          Set symbol table entry values for symbols that use the
9641          address of their PLT entry now that we can calculate it.
9642
9643          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9644          haven't already in _bfd_elf_create_dynamic_sections.  */
9645       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9646         {
9647           bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9648                                      && !htab->plt_mips_offset);
9649           unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9650           bfd_vma isa_bit = micromips_p;
9651           struct elf_link_hash_entry *h;
9652           bfd_vma size;
9653
9654           BFD_ASSERT (htab->use_plts_and_copy_relocs);
9655           BFD_ASSERT (htab->sgotplt->size == 0);
9656           BFD_ASSERT (htab->splt->size == 0);
9657
9658           if (htab->is_vxworks && bfd_link_pic (info))
9659             size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9660           else if (htab->is_vxworks)
9661             size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9662           else if (ABI_64_P (output_bfd))
9663             size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9664           else if (ABI_N32_P (output_bfd))
9665             size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9666           else if (!micromips_p)
9667             size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9668           else if (htab->insn32)
9669             size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9670           else
9671             size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9672
9673           htab->plt_header_is_comp = micromips_p;
9674           htab->plt_header_size = size;
9675           htab->splt->size = (size
9676                               + htab->plt_mips_offset
9677                               + htab->plt_comp_offset);
9678           htab->sgotplt->size = (htab->plt_got_index
9679                                  * MIPS_ELF_GOT_SIZE (dynobj));
9680
9681           mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9682
9683           if (htab->root.hplt == NULL)
9684             {
9685               h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9686                                                "_PROCEDURE_LINKAGE_TABLE_");
9687               htab->root.hplt = h;
9688               if (h == NULL)
9689                 return FALSE;
9690             }
9691
9692           h = htab->root.hplt;
9693           h->root.u.def.value = isa_bit;
9694           h->other = other;
9695           h->type = STT_FUNC;
9696         }
9697     }
9698
9699   /* Allocate space for global sym dynamic relocs.  */
9700   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9701
9702   mips_elf_estimate_stub_size (output_bfd, info);
9703
9704   if (!mips_elf_lay_out_got (output_bfd, info))
9705     return FALSE;
9706
9707   mips_elf_lay_out_lazy_stubs (info);
9708
9709   /* The check_relocs and adjust_dynamic_symbol entry points have
9710      determined the sizes of the various dynamic sections.  Allocate
9711      memory for them.  */
9712   reltext = FALSE;
9713   for (s = dynobj->sections; s != NULL; s = s->next)
9714     {
9715       const char *name;
9716
9717       /* It's OK to base decisions on the section name, because none
9718          of the dynobj section names depend upon the input files.  */
9719       name = bfd_get_section_name (dynobj, s);
9720
9721       if ((s->flags & SEC_LINKER_CREATED) == 0)
9722         continue;
9723
9724       if (CONST_STRNEQ (name, ".rel"))
9725         {
9726           if (s->size != 0)
9727             {
9728               const char *outname;
9729               asection *target;
9730
9731               /* If this relocation section applies to a read only
9732                  section, then we probably need a DT_TEXTREL entry.
9733                  If the relocation section is .rel(a).dyn, we always
9734                  assert a DT_TEXTREL entry rather than testing whether
9735                  there exists a relocation to a read only section or
9736                  not.  */
9737               outname = bfd_get_section_name (output_bfd,
9738                                               s->output_section);
9739               target = bfd_get_section_by_name (output_bfd, outname + 4);
9740               if ((target != NULL
9741                    && (target->flags & SEC_READONLY) != 0
9742                    && (target->flags & SEC_ALLOC) != 0)
9743                   || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9744                 reltext = TRUE;
9745
9746               /* We use the reloc_count field as a counter if we need
9747                  to copy relocs into the output file.  */
9748               if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9749                 s->reloc_count = 0;
9750
9751               /* If combreloc is enabled, elf_link_sort_relocs() will
9752                  sort relocations, but in a different way than we do,
9753                  and before we're done creating relocations.  Also, it
9754                  will move them around between input sections'
9755                  relocation's contents, so our sorting would be
9756                  broken, so don't let it run.  */
9757               info->combreloc = 0;
9758             }
9759         }
9760       else if (bfd_link_executable (info)
9761                && ! mips_elf_hash_table (info)->use_rld_obj_head
9762                && CONST_STRNEQ (name, ".rld_map"))
9763         {
9764           /* We add a room for __rld_map.  It will be filled in by the
9765              rtld to contain a pointer to the _r_debug structure.  */
9766           s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9767         }
9768       else if (SGI_COMPAT (output_bfd)
9769                && CONST_STRNEQ (name, ".compact_rel"))
9770         s->size += mips_elf_hash_table (info)->compact_rel_size;
9771       else if (s == htab->splt)
9772         {
9773           /* If the last PLT entry has a branch delay slot, allocate
9774              room for an extra nop to fill the delay slot.  This is
9775              for CPUs without load interlocking.  */
9776           if (! LOAD_INTERLOCKS_P (output_bfd)
9777               && ! htab->is_vxworks && s->size > 0)
9778             s->size += 4;
9779         }
9780       else if (! CONST_STRNEQ (name, ".init")
9781                && s != htab->sgot
9782                && s != htab->sgotplt
9783                && s != htab->sstubs
9784                && s != htab->sdynbss)
9785         {
9786           /* It's not one of our sections, so don't allocate space.  */
9787           continue;
9788         }
9789
9790       if (s->size == 0)
9791         {
9792           s->flags |= SEC_EXCLUDE;
9793           continue;
9794         }
9795
9796       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9797         continue;
9798
9799       /* Allocate memory for the section contents.  */
9800       s->contents = bfd_zalloc (dynobj, s->size);
9801       if (s->contents == NULL)
9802         {
9803           bfd_set_error (bfd_error_no_memory);
9804           return FALSE;
9805         }
9806     }
9807
9808   if (elf_hash_table (info)->dynamic_sections_created)
9809     {
9810       /* Add some entries to the .dynamic section.  We fill in the
9811          values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9812          must add the entries now so that we get the correct size for
9813          the .dynamic section.  */
9814
9815       /* SGI object has the equivalence of DT_DEBUG in the
9816          DT_MIPS_RLD_MAP entry.  This must come first because glibc
9817          only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9818          may only look at the first one they see.  */
9819       if (!bfd_link_pic (info)
9820           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9821         return FALSE;
9822
9823       if (bfd_link_executable (info)
9824           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9825         return FALSE;
9826
9827       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9828          used by the debugger.  */
9829       if (bfd_link_executable (info)
9830           && !SGI_COMPAT (output_bfd)
9831           && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9832         return FALSE;
9833
9834       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9835         info->flags |= DF_TEXTREL;
9836
9837       if ((info->flags & DF_TEXTREL) != 0)
9838         {
9839           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9840             return FALSE;
9841
9842           /* Clear the DF_TEXTREL flag.  It will be set again if we
9843              write out an actual text relocation; we may not, because
9844              at this point we do not know whether e.g. any .eh_frame
9845              absolute relocations have been converted to PC-relative.  */
9846           info->flags &= ~DF_TEXTREL;
9847         }
9848
9849       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9850         return FALSE;
9851
9852       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9853       if (htab->is_vxworks)
9854         {
9855           /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9856              use any of the DT_MIPS_* tags.  */
9857           if (sreldyn && sreldyn->size > 0)
9858             {
9859               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9860                 return FALSE;
9861
9862               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9863                 return FALSE;
9864
9865               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9866                 return FALSE;
9867             }
9868         }
9869       else
9870         {
9871           if (sreldyn && sreldyn->size > 0)
9872             {
9873               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9874                 return FALSE;
9875
9876               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9877                 return FALSE;
9878
9879               if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9880                 return FALSE;
9881             }
9882
9883           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9884             return FALSE;
9885
9886           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9887             return FALSE;
9888
9889           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9890             return FALSE;
9891
9892           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9893             return FALSE;
9894
9895           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9896             return FALSE;
9897
9898           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9899             return FALSE;
9900
9901           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9902             return FALSE;
9903
9904           if (IRIX_COMPAT (dynobj) == ict_irix5
9905               && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9906             return FALSE;
9907
9908           if (IRIX_COMPAT (dynobj) == ict_irix6
9909               && (bfd_get_section_by_name
9910                   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9911               && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9912             return FALSE;
9913         }
9914       if (htab->splt->size > 0)
9915         {
9916           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9917             return FALSE;
9918
9919           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9920             return FALSE;
9921
9922           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9923             return FALSE;
9924
9925           if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9926             return FALSE;
9927         }
9928       if (htab->is_vxworks
9929           && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9930         return FALSE;
9931     }
9932
9933   return TRUE;
9934 }
9935 \f
9936 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9937    Adjust its R_ADDEND field so that it is correct for the output file.
9938    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9939    and sections respectively; both use symbol indexes.  */
9940
9941 static void
9942 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9943                         bfd *input_bfd, Elf_Internal_Sym *local_syms,
9944                         asection **local_sections, Elf_Internal_Rela *rel)
9945 {
9946   unsigned int r_type, r_symndx;
9947   Elf_Internal_Sym *sym;
9948   asection *sec;
9949
9950   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9951     {
9952       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9953       if (gprel16_reloc_p (r_type)
9954           || r_type == R_MIPS_GPREL32
9955           || literal_reloc_p (r_type))
9956         {
9957           rel->r_addend += _bfd_get_gp_value (input_bfd);
9958           rel->r_addend -= _bfd_get_gp_value (output_bfd);
9959         }
9960
9961       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9962       sym = local_syms + r_symndx;
9963
9964       /* Adjust REL's addend to account for section merging.  */
9965       if (!bfd_link_relocatable (info))
9966         {
9967           sec = local_sections[r_symndx];
9968           _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9969         }
9970
9971       /* This would normally be done by the rela_normal code in elflink.c.  */
9972       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9973         rel->r_addend += local_sections[r_symndx]->output_offset;
9974     }
9975 }
9976
9977 /* Handle relocations against symbols from removed linkonce sections,
9978    or sections discarded by a linker script.  We use this wrapper around
9979    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9980    on 64-bit ELF targets.  In this case for any relocation handled, which
9981    always be the first in a triplet, the remaining two have to be processed
9982    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9983    index referred by the first reloc that applies to all the three and the
9984    remaining two never refer to an object symbol.  And it is the final
9985    relocation (the last non-null one) that determines the output field of
9986    the whole relocation so retrieve the corresponding howto structure for
9987    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9988
9989    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9990    and therefore requires to be pasted in a loop.  It also defines a block
9991    and does not protect any of its arguments, hence the extra brackets.  */
9992
9993 static void
9994 mips_reloc_against_discarded_section (bfd *output_bfd,
9995                                       struct bfd_link_info *info,
9996                                       bfd *input_bfd, asection *input_section,
9997                                       Elf_Internal_Rela **rel,
9998                                       const Elf_Internal_Rela **relend,
9999                                       bfd_boolean rel_reloc,
10000                                       reloc_howto_type *howto,
10001                                       bfd_byte *contents)
10002 {
10003   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10004   int count = bed->s->int_rels_per_ext_rel;
10005   unsigned int r_type;
10006   int i;
10007
10008   for (i = count - 1; i > 0; i--)
10009     {
10010       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10011       if (r_type != R_MIPS_NONE)
10012         {
10013           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10014           break;
10015         }
10016     }
10017   do
10018     {
10019        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10020                                         (*rel), count, (*relend),
10021                                         howto, i, contents);
10022     }
10023   while (0);
10024 }
10025
10026 /* Relocate a MIPS ELF section.  */
10027
10028 bfd_boolean
10029 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10030                                 bfd *input_bfd, asection *input_section,
10031                                 bfd_byte *contents, Elf_Internal_Rela *relocs,
10032                                 Elf_Internal_Sym *local_syms,
10033                                 asection **local_sections)
10034 {
10035   Elf_Internal_Rela *rel;
10036   const Elf_Internal_Rela *relend;
10037   bfd_vma addend = 0;
10038   bfd_boolean use_saved_addend_p = FALSE;
10039   const struct elf_backend_data *bed;
10040
10041   bed = get_elf_backend_data (output_bfd);
10042   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10043   for (rel = relocs; rel < relend; ++rel)
10044     {
10045       const char *name;
10046       bfd_vma value = 0;
10047       reloc_howto_type *howto;
10048       bfd_boolean cross_mode_jump_p = FALSE;
10049       /* TRUE if the relocation is a RELA relocation, rather than a
10050          REL relocation.  */
10051       bfd_boolean rela_relocation_p = TRUE;
10052       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10053       const char *msg;
10054       unsigned long r_symndx;
10055       asection *sec;
10056       Elf_Internal_Shdr *symtab_hdr;
10057       struct elf_link_hash_entry *h;
10058       bfd_boolean rel_reloc;
10059
10060       rel_reloc = (NEWABI_P (input_bfd)
10061                    && mips_elf_rel_relocation_p (input_bfd, input_section,
10062                                                  relocs, rel));
10063       /* Find the relocation howto for this relocation.  */
10064       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10065
10066       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10067       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10068       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10069         {
10070           sec = local_sections[r_symndx];
10071           h = NULL;
10072         }
10073       else
10074         {
10075           unsigned long extsymoff;
10076
10077           extsymoff = 0;
10078           if (!elf_bad_symtab (input_bfd))
10079             extsymoff = symtab_hdr->sh_info;
10080           h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10081           while (h->root.type == bfd_link_hash_indirect
10082                  || h->root.type == bfd_link_hash_warning)
10083             h = (struct elf_link_hash_entry *) h->root.u.i.link;
10084
10085           sec = NULL;
10086           if (h->root.type == bfd_link_hash_defined
10087               || h->root.type == bfd_link_hash_defweak)
10088             sec = h->root.u.def.section;
10089         }
10090
10091       if (sec != NULL && discarded_section (sec))
10092         {
10093           mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10094                                                 input_section, &rel, &relend,
10095                                                 rel_reloc, howto, contents);
10096           continue;
10097         }
10098
10099       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10100         {
10101           /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10102              64-bit code, but make sure all their addresses are in the
10103              lowermost or uppermost 32-bit section of the 64-bit address
10104              space.  Thus, when they use an R_MIPS_64 they mean what is
10105              usually meant by R_MIPS_32, with the exception that the
10106              stored value is sign-extended to 64 bits.  */
10107           howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10108
10109           /* On big-endian systems, we need to lie about the position
10110              of the reloc.  */
10111           if (bfd_big_endian (input_bfd))
10112             rel->r_offset += 4;
10113         }
10114
10115       if (!use_saved_addend_p)
10116         {
10117           /* If these relocations were originally of the REL variety,
10118              we must pull the addend out of the field that will be
10119              relocated.  Otherwise, we simply use the contents of the
10120              RELA relocation.  */
10121           if (mips_elf_rel_relocation_p (input_bfd, input_section,
10122                                          relocs, rel))
10123             {
10124               rela_relocation_p = FALSE;
10125               addend = mips_elf_read_rel_addend (input_bfd, rel,
10126                                                  howto, contents);
10127               if (hi16_reloc_p (r_type)
10128                   || (got16_reloc_p (r_type)
10129                       && mips_elf_local_relocation_p (input_bfd, rel,
10130                                                       local_sections)))
10131                 {
10132                   if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10133                                                      contents, &addend))
10134                     {
10135                       if (h)
10136                         name = h->root.root.string;
10137                       else
10138                         name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10139                                                  local_syms + r_symndx,
10140                                                  sec);
10141                       (*_bfd_error_handler)
10142                         (_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10143                          input_bfd, input_section, name, howto->name,
10144                          rel->r_offset);
10145                     }
10146                 }
10147               else
10148                 addend <<= howto->rightshift;
10149             }
10150           else
10151             addend = rel->r_addend;
10152           mips_elf_adjust_addend (output_bfd, info, input_bfd,
10153                                   local_syms, local_sections, rel);
10154         }
10155
10156       if (bfd_link_relocatable (info))
10157         {
10158           if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10159               && bfd_big_endian (input_bfd))
10160             rel->r_offset -= 4;
10161
10162           if (!rela_relocation_p && rel->r_addend)
10163             {
10164               addend += rel->r_addend;
10165               if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10166                 addend = mips_elf_high (addend);
10167               else if (r_type == R_MIPS_HIGHER)
10168                 addend = mips_elf_higher (addend);
10169               else if (r_type == R_MIPS_HIGHEST)
10170                 addend = mips_elf_highest (addend);
10171               else
10172                 addend >>= howto->rightshift;
10173
10174               /* We use the source mask, rather than the destination
10175                  mask because the place to which we are writing will be
10176                  source of the addend in the final link.  */
10177               addend &= howto->src_mask;
10178
10179               if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10180                 /* See the comment above about using R_MIPS_64 in the 32-bit
10181                    ABI.  Here, we need to update the addend.  It would be
10182                    possible to get away with just using the R_MIPS_32 reloc
10183                    but for endianness.  */
10184                 {
10185                   bfd_vma sign_bits;
10186                   bfd_vma low_bits;
10187                   bfd_vma high_bits;
10188
10189                   if (addend & ((bfd_vma) 1 << 31))
10190 #ifdef BFD64
10191                     sign_bits = ((bfd_vma) 1 << 32) - 1;
10192 #else
10193                     sign_bits = -1;
10194 #endif
10195                   else
10196                     sign_bits = 0;
10197
10198                   /* If we don't know that we have a 64-bit type,
10199                      do two separate stores.  */
10200                   if (bfd_big_endian (input_bfd))
10201                     {
10202                       /* Store the sign-bits (which are most significant)
10203                          first.  */
10204                       low_bits = sign_bits;
10205                       high_bits = addend;
10206                     }
10207                   else
10208                     {
10209                       low_bits = addend;
10210                       high_bits = sign_bits;
10211                     }
10212                   bfd_put_32 (input_bfd, low_bits,
10213                               contents + rel->r_offset);
10214                   bfd_put_32 (input_bfd, high_bits,
10215                               contents + rel->r_offset + 4);
10216                   continue;
10217                 }
10218
10219               if (! mips_elf_perform_relocation (info, howto, rel, addend,
10220                                                  input_bfd, input_section,
10221                                                  contents, FALSE))
10222                 return FALSE;
10223             }
10224
10225           /* Go on to the next relocation.  */
10226           continue;
10227         }
10228
10229       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10230          relocations for the same offset.  In that case we are
10231          supposed to treat the output of each relocation as the addend
10232          for the next.  */
10233       if (rel + 1 < relend
10234           && rel->r_offset == rel[1].r_offset
10235           && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10236         use_saved_addend_p = TRUE;
10237       else
10238         use_saved_addend_p = FALSE;
10239
10240       /* Figure out what value we are supposed to relocate.  */
10241       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10242                                              input_section, info, rel,
10243                                              addend, howto, local_syms,
10244                                              local_sections, &value,
10245                                              &name, &cross_mode_jump_p,
10246                                              use_saved_addend_p))
10247         {
10248         case bfd_reloc_continue:
10249           /* There's nothing to do.  */
10250           continue;
10251
10252         case bfd_reloc_undefined:
10253           /* mips_elf_calculate_relocation already called the
10254              undefined_symbol callback.  There's no real point in
10255              trying to perform the relocation at this point, so we
10256              just skip ahead to the next relocation.  */
10257           continue;
10258
10259         case bfd_reloc_notsupported:
10260           msg = _("internal error: unsupported relocation error");
10261           info->callbacks->warning
10262             (info, msg, name, input_bfd, input_section, rel->r_offset);
10263           return FALSE;
10264
10265         case bfd_reloc_overflow:
10266           if (use_saved_addend_p)
10267             /* Ignore overflow until we reach the last relocation for
10268                a given location.  */
10269             ;
10270           else
10271             {
10272               struct mips_elf_link_hash_table *htab;
10273
10274               htab = mips_elf_hash_table (info);
10275               BFD_ASSERT (htab != NULL);
10276               BFD_ASSERT (name != NULL);
10277               if (!htab->small_data_overflow_reported
10278                   && (gprel16_reloc_p (howto->type)
10279                       || literal_reloc_p (howto->type)))
10280                 {
10281                   msg = _("small-data section exceeds 64KB;"
10282                           " lower small-data size limit (see option -G)");
10283
10284                   htab->small_data_overflow_reported = TRUE;
10285                   (*info->callbacks->einfo) ("%P: %s\n", msg);
10286                 }
10287               (*info->callbacks->reloc_overflow)
10288                 (info, NULL, name, howto->name, (bfd_vma) 0,
10289                  input_bfd, input_section, rel->r_offset);
10290             }
10291           break;
10292
10293         case bfd_reloc_ok:
10294           break;
10295
10296         case bfd_reloc_outofrange:
10297           msg = NULL;
10298           if (jal_reloc_p (howto->type))
10299             msg = _("JALX to a non-word-aligned address");
10300           else if (b_reloc_p (howto->type))
10301             msg = _("Branch to a non-instruction-aligned address");
10302           else if (aligned_pcrel_reloc_p (howto->type))
10303             msg = _("PC-relative load from unaligned address");
10304           if (msg)
10305             {
10306               info->callbacks->einfo
10307                 ("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10308               break;
10309             }
10310           /* Fall through.  */
10311
10312         default:
10313           abort ();
10314           break;
10315         }
10316
10317       /* If we've got another relocation for the address, keep going
10318          until we reach the last one.  */
10319       if (use_saved_addend_p)
10320         {
10321           addend = value;
10322           continue;
10323         }
10324
10325       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10326         /* See the comment above about using R_MIPS_64 in the 32-bit
10327            ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10328            that calculated the right value.  Now, however, we
10329            sign-extend the 32-bit result to 64-bits, and store it as a
10330            64-bit value.  We are especially generous here in that we
10331            go to extreme lengths to support this usage on systems with
10332            only a 32-bit VMA.  */
10333         {
10334           bfd_vma sign_bits;
10335           bfd_vma low_bits;
10336           bfd_vma high_bits;
10337
10338           if (value & ((bfd_vma) 1 << 31))
10339 #ifdef BFD64
10340             sign_bits = ((bfd_vma) 1 << 32) - 1;
10341 #else
10342             sign_bits = -1;
10343 #endif
10344           else
10345             sign_bits = 0;
10346
10347           /* If we don't know that we have a 64-bit type,
10348              do two separate stores.  */
10349           if (bfd_big_endian (input_bfd))
10350             {
10351               /* Undo what we did above.  */
10352               rel->r_offset -= 4;
10353               /* Store the sign-bits (which are most significant)
10354                  first.  */
10355               low_bits = sign_bits;
10356               high_bits = value;
10357             }
10358           else
10359             {
10360               low_bits = value;
10361               high_bits = sign_bits;
10362             }
10363           bfd_put_32 (input_bfd, low_bits,
10364                       contents + rel->r_offset);
10365           bfd_put_32 (input_bfd, high_bits,
10366                       contents + rel->r_offset + 4);
10367           continue;
10368         }
10369
10370       /* Actually perform the relocation.  */
10371       if (! mips_elf_perform_relocation (info, howto, rel, value,
10372                                          input_bfd, input_section,
10373                                          contents, cross_mode_jump_p))
10374         return FALSE;
10375     }
10376
10377   return TRUE;
10378 }
10379 \f
10380 /* A function that iterates over each entry in la25_stubs and fills
10381    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10382
10383 static int
10384 mips_elf_create_la25_stub (void **slot, void *data)
10385 {
10386   struct mips_htab_traverse_info *hti;
10387   struct mips_elf_link_hash_table *htab;
10388   struct mips_elf_la25_stub *stub;
10389   asection *s;
10390   bfd_byte *loc;
10391   bfd_vma offset, target, target_high, target_low;
10392
10393   stub = (struct mips_elf_la25_stub *) *slot;
10394   hti = (struct mips_htab_traverse_info *) data;
10395   htab = mips_elf_hash_table (hti->info);
10396   BFD_ASSERT (htab != NULL);
10397
10398   /* Create the section contents, if we haven't already.  */
10399   s = stub->stub_section;
10400   loc = s->contents;
10401   if (loc == NULL)
10402     {
10403       loc = bfd_malloc (s->size);
10404       if (loc == NULL)
10405         {
10406           hti->error = TRUE;
10407           return FALSE;
10408         }
10409       s->contents = loc;
10410     }
10411
10412   /* Work out where in the section this stub should go.  */
10413   offset = stub->offset;
10414
10415   /* Work out the target address.  */
10416   target = mips_elf_get_la25_target (stub, &s);
10417   target += s->output_section->vma + s->output_offset;
10418
10419   target_high = ((target + 0x8000) >> 16) & 0xffff;
10420   target_low = (target & 0xffff);
10421
10422   if (stub->stub_section != htab->strampoline)
10423     {
10424       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10425          of the section and write the two instructions at the end.  */
10426       memset (loc, 0, offset);
10427       loc += offset;
10428       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10429         {
10430           bfd_put_micromips_32 (hti->output_bfd,
10431                                 LA25_LUI_MICROMIPS (target_high),
10432                                 loc);
10433           bfd_put_micromips_32 (hti->output_bfd,
10434                                 LA25_ADDIU_MICROMIPS (target_low),
10435                                 loc + 4);
10436         }
10437       else
10438         {
10439           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10440           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10441         }
10442     }
10443   else
10444     {
10445       /* This is trampoline.  */
10446       loc += offset;
10447       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10448         {
10449           bfd_put_micromips_32 (hti->output_bfd,
10450                                 LA25_LUI_MICROMIPS (target_high), loc);
10451           bfd_put_micromips_32 (hti->output_bfd,
10452                                 LA25_J_MICROMIPS (target), loc + 4);
10453           bfd_put_micromips_32 (hti->output_bfd,
10454                                 LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10455           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10456         }
10457       else
10458         {
10459           bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10460           bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10461           bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10462           bfd_put_32 (hti->output_bfd, 0, loc + 12);
10463         }
10464     }
10465   return TRUE;
10466 }
10467
10468 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10469    adjust it appropriately now.  */
10470
10471 static void
10472 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10473                                       const char *name, Elf_Internal_Sym *sym)
10474 {
10475   /* The linker script takes care of providing names and values for
10476      these, but we must place them into the right sections.  */
10477   static const char* const text_section_symbols[] = {
10478     "_ftext",
10479     "_etext",
10480     "__dso_displacement",
10481     "__elf_header",
10482     "__program_header_table",
10483     NULL
10484   };
10485
10486   static const char* const data_section_symbols[] = {
10487     "_fdata",
10488     "_edata",
10489     "_end",
10490     "_fbss",
10491     NULL
10492   };
10493
10494   const char* const *p;
10495   int i;
10496
10497   for (i = 0; i < 2; ++i)
10498     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10499          *p;
10500          ++p)
10501       if (strcmp (*p, name) == 0)
10502         {
10503           /* All of these symbols are given type STT_SECTION by the
10504              IRIX6 linker.  */
10505           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10506           sym->st_other = STO_PROTECTED;
10507
10508           /* The IRIX linker puts these symbols in special sections.  */
10509           if (i == 0)
10510             sym->st_shndx = SHN_MIPS_TEXT;
10511           else
10512             sym->st_shndx = SHN_MIPS_DATA;
10513
10514           break;
10515         }
10516 }
10517
10518 /* Finish up dynamic symbol handling.  We set the contents of various
10519    dynamic sections here.  */
10520
10521 bfd_boolean
10522 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10523                                      struct bfd_link_info *info,
10524                                      struct elf_link_hash_entry *h,
10525                                      Elf_Internal_Sym *sym)
10526 {
10527   bfd *dynobj;
10528   asection *sgot;
10529   struct mips_got_info *g, *gg;
10530   const char *name;
10531   int idx;
10532   struct mips_elf_link_hash_table *htab;
10533   struct mips_elf_link_hash_entry *hmips;
10534
10535   htab = mips_elf_hash_table (info);
10536   BFD_ASSERT (htab != NULL);
10537   dynobj = elf_hash_table (info)->dynobj;
10538   hmips = (struct mips_elf_link_hash_entry *) h;
10539
10540   BFD_ASSERT (!htab->is_vxworks);
10541
10542   if (h->plt.plist != NULL
10543       && (h->plt.plist->mips_offset != MINUS_ONE
10544           || h->plt.plist->comp_offset != MINUS_ONE))
10545     {
10546       /* We've decided to create a PLT entry for this symbol.  */
10547       bfd_byte *loc;
10548       bfd_vma header_address, got_address;
10549       bfd_vma got_address_high, got_address_low, load;
10550       bfd_vma got_index;
10551       bfd_vma isa_bit;
10552
10553       got_index = h->plt.plist->gotplt_index;
10554
10555       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10556       BFD_ASSERT (h->dynindx != -1);
10557       BFD_ASSERT (htab->splt != NULL);
10558       BFD_ASSERT (got_index != MINUS_ONE);
10559       BFD_ASSERT (!h->def_regular);
10560
10561       /* Calculate the address of the PLT header.  */
10562       isa_bit = htab->plt_header_is_comp;
10563       header_address = (htab->splt->output_section->vma
10564                         + htab->splt->output_offset + isa_bit);
10565
10566       /* Calculate the address of the .got.plt entry.  */
10567       got_address = (htab->sgotplt->output_section->vma
10568                      + htab->sgotplt->output_offset
10569                      + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10570
10571       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10572       got_address_low = got_address & 0xffff;
10573
10574       /* Initially point the .got.plt entry at the PLT header.  */
10575       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10576       if (ABI_64_P (output_bfd))
10577         bfd_put_64 (output_bfd, header_address, loc);
10578       else
10579         bfd_put_32 (output_bfd, header_address, loc);
10580
10581       /* Now handle the PLT itself.  First the standard entry (the order
10582          does not matter, we just have to pick one).  */
10583       if (h->plt.plist->mips_offset != MINUS_ONE)
10584         {
10585           const bfd_vma *plt_entry;
10586           bfd_vma plt_offset;
10587
10588           plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10589
10590           BFD_ASSERT (plt_offset <= htab->splt->size);
10591
10592           /* Find out where the .plt entry should go.  */
10593           loc = htab->splt->contents + plt_offset;
10594
10595           /* Pick the load opcode.  */
10596           load = MIPS_ELF_LOAD_WORD (output_bfd);
10597
10598           /* Fill in the PLT entry itself.  */
10599
10600           if (MIPSR6_P (output_bfd))
10601             plt_entry = mipsr6_exec_plt_entry;
10602           else
10603             plt_entry = mips_exec_plt_entry;
10604           bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10605           bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10606                       loc + 4);
10607
10608           if (! LOAD_INTERLOCKS_P (output_bfd))
10609             {
10610               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10611               bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10612             }
10613           else
10614             {
10615               bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10616               bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10617                           loc + 12);
10618             }
10619         }
10620
10621       /* Now the compressed entry.  They come after any standard ones.  */
10622       if (h->plt.plist->comp_offset != MINUS_ONE)
10623         {
10624           bfd_vma plt_offset;
10625
10626           plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10627                         + h->plt.plist->comp_offset);
10628
10629           BFD_ASSERT (plt_offset <= htab->splt->size);
10630
10631           /* Find out where the .plt entry should go.  */
10632           loc = htab->splt->contents + plt_offset;
10633
10634           /* Fill in the PLT entry itself.  */
10635           if (!MICROMIPS_P (output_bfd))
10636             {
10637               const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10638
10639               bfd_put_16 (output_bfd, plt_entry[0], loc);
10640               bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10641               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10642               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10643               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10644               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10645               bfd_put_32 (output_bfd, got_address, loc + 12);
10646             }
10647           else if (htab->insn32)
10648             {
10649               const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10650
10651               bfd_put_16 (output_bfd, plt_entry[0], loc);
10652               bfd_put_16 (output_bfd, got_address_high, loc + 2);
10653               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10654               bfd_put_16 (output_bfd, got_address_low, 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               bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10658               bfd_put_16 (output_bfd, got_address_low, loc + 14);
10659             }
10660           else
10661             {
10662               const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10663               bfd_signed_vma gotpc_offset;
10664               bfd_vma loc_address;
10665
10666               BFD_ASSERT (got_address % 4 == 0);
10667
10668               loc_address = (htab->splt->output_section->vma
10669                              + htab->splt->output_offset + plt_offset);
10670               gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10671
10672               /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10673               if (gotpc_offset + 0x1000000 >= 0x2000000)
10674                 {
10675                   (*_bfd_error_handler)
10676                     (_("%B: `%A' offset of %ld from `%A' "
10677                        "beyond the range of ADDIUPC"),
10678                      output_bfd,
10679                      htab->sgotplt->output_section,
10680                      htab->splt->output_section,
10681                      (long) gotpc_offset);
10682                   bfd_set_error (bfd_error_no_error);
10683                   return FALSE;
10684                 }
10685               bfd_put_16 (output_bfd,
10686                           plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10687               bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10688               bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10689               bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10690               bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10691               bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10692             }
10693         }
10694
10695       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10696       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10697                                           got_index - 2, h->dynindx,
10698                                           R_MIPS_JUMP_SLOT, got_address);
10699
10700       /* We distinguish between PLT entries and lazy-binding stubs by
10701          giving the former an st_other value of STO_MIPS_PLT.  Set the
10702          flag and leave the value if there are any relocations in the
10703          binary where pointer equality matters.  */
10704       sym->st_shndx = SHN_UNDEF;
10705       if (h->pointer_equality_needed)
10706         sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10707       else
10708         {
10709           sym->st_value = 0;
10710           sym->st_other = 0;
10711         }
10712     }
10713
10714   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10715     {
10716       /* We've decided to create a lazy-binding stub.  */
10717       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10718       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10719       bfd_vma stub_size = htab->function_stub_size;
10720       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10721       bfd_vma isa_bit = micromips_p;
10722       bfd_vma stub_big_size;
10723
10724       if (!micromips_p)
10725         stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10726       else if (htab->insn32)
10727         stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10728       else
10729         stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10730
10731       /* This symbol has a stub.  Set it up.  */
10732
10733       BFD_ASSERT (h->dynindx != -1);
10734
10735       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10736
10737       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10738          sign extension at runtime in the stub, resulting in a negative
10739          index value.  */
10740       if (h->dynindx & ~0x7fffffff)
10741         return FALSE;
10742
10743       /* Fill the stub.  */
10744       if (micromips_p)
10745         {
10746           idx = 0;
10747           bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10748                                 stub + idx);
10749           idx += 4;
10750           if (htab->insn32)
10751             {
10752               bfd_put_micromips_32 (output_bfd,
10753                                     STUB_MOVE32_MICROMIPS, stub + idx);
10754               idx += 4;
10755             }
10756           else
10757             {
10758               bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10759               idx += 2;
10760             }
10761           if (stub_size == stub_big_size)
10762             {
10763               long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10764
10765               bfd_put_micromips_32 (output_bfd,
10766                                     STUB_LUI_MICROMIPS (dynindx_hi),
10767                                     stub + idx);
10768               idx += 4;
10769             }
10770           if (htab->insn32)
10771             {
10772               bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10773                                     stub + idx);
10774               idx += 4;
10775             }
10776           else
10777             {
10778               bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10779               idx += 2;
10780             }
10781
10782           /* If a large stub is not required and sign extension is not a
10783              problem, then use legacy code in the stub.  */
10784           if (stub_size == stub_big_size)
10785             bfd_put_micromips_32 (output_bfd,
10786                                   STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10787                                   stub + idx);
10788           else if (h->dynindx & ~0x7fff)
10789             bfd_put_micromips_32 (output_bfd,
10790                                   STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10791                                   stub + idx);
10792           else
10793             bfd_put_micromips_32 (output_bfd,
10794                                   STUB_LI16S_MICROMIPS (output_bfd,
10795                                                         h->dynindx),
10796                                   stub + idx);
10797         }
10798       else
10799         {
10800           idx = 0;
10801           bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10802           idx += 4;
10803           bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10804           idx += 4;
10805           if (stub_size == stub_big_size)
10806             {
10807               bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10808                           stub + idx);
10809               idx += 4;
10810             }
10811           bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10812           idx += 4;
10813
10814           /* If a large stub is not required and sign extension is not a
10815              problem, then use legacy code in the stub.  */
10816           if (stub_size == stub_big_size)
10817             bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10818                         stub + idx);
10819           else if (h->dynindx & ~0x7fff)
10820             bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10821                         stub + idx);
10822           else
10823             bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10824                         stub + idx);
10825         }
10826
10827       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10828       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10829               stub, stub_size);
10830
10831       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10832          only for the referenced symbol.  */
10833       sym->st_shndx = SHN_UNDEF;
10834
10835       /* The run-time linker uses the st_value field of the symbol
10836          to reset the global offset table entry for this external
10837          to its stub address when unlinking a shared object.  */
10838       sym->st_value = (htab->sstubs->output_section->vma
10839                        + htab->sstubs->output_offset
10840                        + h->plt.plist->stub_offset
10841                        + isa_bit);
10842       sym->st_other = other;
10843     }
10844
10845   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10846      refer to the stub, since only the stub uses the standard calling
10847      conventions.  */
10848   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10849     {
10850       BFD_ASSERT (hmips->need_fn_stub);
10851       sym->st_value = (hmips->fn_stub->output_section->vma
10852                        + hmips->fn_stub->output_offset);
10853       sym->st_size = hmips->fn_stub->size;
10854       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10855     }
10856
10857   BFD_ASSERT (h->dynindx != -1
10858               || h->forced_local);
10859
10860   sgot = htab->sgot;
10861   g = htab->got_info;
10862   BFD_ASSERT (g != NULL);
10863
10864   /* Run through the global symbol table, creating GOT entries for all
10865      the symbols that need them.  */
10866   if (hmips->global_got_area != GGA_NONE)
10867     {
10868       bfd_vma offset;
10869       bfd_vma value;
10870
10871       value = sym->st_value;
10872       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10873       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10874     }
10875
10876   if (hmips->global_got_area != GGA_NONE && g->next)
10877     {
10878       struct mips_got_entry e, *p;
10879       bfd_vma entry;
10880       bfd_vma offset;
10881
10882       gg = g;
10883
10884       e.abfd = output_bfd;
10885       e.symndx = -1;
10886       e.d.h = hmips;
10887       e.tls_type = GOT_TLS_NONE;
10888
10889       for (g = g->next; g->next != gg; g = g->next)
10890         {
10891           if (g->got_entries
10892               && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10893                                                            &e)))
10894             {
10895               offset = p->gotidx;
10896               BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10897               if (bfd_link_pic (info)
10898                   || (elf_hash_table (info)->dynamic_sections_created
10899                       && p->d.h != NULL
10900                       && p->d.h->root.def_dynamic
10901                       && !p->d.h->root.def_regular))
10902                 {
10903                   /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10904                      the various compatibility problems, it's easier to mock
10905                      up an R_MIPS_32 or R_MIPS_64 relocation and leave
10906                      mips_elf_create_dynamic_relocation to calculate the
10907                      appropriate addend.  */
10908                   Elf_Internal_Rela rel[3];
10909
10910                   memset (rel, 0, sizeof (rel));
10911                   if (ABI_64_P (output_bfd))
10912                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10913                   else
10914                     rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10915                   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10916
10917                   entry = 0;
10918                   if (! (mips_elf_create_dynamic_relocation
10919                          (output_bfd, info, rel,
10920                           e.d.h, NULL, sym->st_value, &entry, sgot)))
10921                     return FALSE;
10922                 }
10923               else
10924                 entry = sym->st_value;
10925               MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10926             }
10927         }
10928     }
10929
10930   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10931   name = h->root.root.string;
10932   if (h == elf_hash_table (info)->hdynamic
10933       || h == elf_hash_table (info)->hgot)
10934     sym->st_shndx = SHN_ABS;
10935   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10936            || strcmp (name, "_DYNAMIC_LINKING") == 0)
10937     {
10938       sym->st_shndx = SHN_ABS;
10939       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10940       sym->st_value = 1;
10941     }
10942   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10943     {
10944       sym->st_shndx = SHN_ABS;
10945       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10946       sym->st_value = elf_gp (output_bfd);
10947     }
10948   else if (SGI_COMPAT (output_bfd))
10949     {
10950       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10951           || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10952         {
10953           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10954           sym->st_other = STO_PROTECTED;
10955           sym->st_value = 0;
10956           sym->st_shndx = SHN_MIPS_DATA;
10957         }
10958       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10959         {
10960           sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10961           sym->st_other = STO_PROTECTED;
10962           sym->st_value = mips_elf_hash_table (info)->procedure_count;
10963           sym->st_shndx = SHN_ABS;
10964         }
10965       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10966         {
10967           if (h->type == STT_FUNC)
10968             sym->st_shndx = SHN_MIPS_TEXT;
10969           else if (h->type == STT_OBJECT)
10970             sym->st_shndx = SHN_MIPS_DATA;
10971         }
10972     }
10973
10974   /* Emit a copy reloc, if needed.  */
10975   if (h->needs_copy)
10976     {
10977       asection *s;
10978       bfd_vma symval;
10979
10980       BFD_ASSERT (h->dynindx != -1);
10981       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10982
10983       s = mips_elf_rel_dyn_section (info, FALSE);
10984       symval = (h->root.u.def.section->output_section->vma
10985                 + h->root.u.def.section->output_offset
10986                 + h->root.u.def.value);
10987       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10988                                           h->dynindx, R_MIPS_COPY, symval);
10989     }
10990
10991   /* Handle the IRIX6-specific symbols.  */
10992   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10993     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10994
10995   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10996      to treat compressed symbols like any other.  */
10997   if (ELF_ST_IS_MIPS16 (sym->st_other))
10998     {
10999       BFD_ASSERT (sym->st_value & 1);
11000       sym->st_other -= STO_MIPS16;
11001     }
11002   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11003     {
11004       BFD_ASSERT (sym->st_value & 1);
11005       sym->st_other -= STO_MICROMIPS;
11006     }
11007
11008   return TRUE;
11009 }
11010
11011 /* Likewise, for VxWorks.  */
11012
11013 bfd_boolean
11014 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11015                                          struct bfd_link_info *info,
11016                                          struct elf_link_hash_entry *h,
11017                                          Elf_Internal_Sym *sym)
11018 {
11019   bfd *dynobj;
11020   asection *sgot;
11021   struct mips_got_info *g;
11022   struct mips_elf_link_hash_table *htab;
11023   struct mips_elf_link_hash_entry *hmips;
11024
11025   htab = mips_elf_hash_table (info);
11026   BFD_ASSERT (htab != NULL);
11027   dynobj = elf_hash_table (info)->dynobj;
11028   hmips = (struct mips_elf_link_hash_entry *) h;
11029
11030   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11031     {
11032       bfd_byte *loc;
11033       bfd_vma plt_address, got_address, got_offset, branch_offset;
11034       Elf_Internal_Rela rel;
11035       static const bfd_vma *plt_entry;
11036       bfd_vma gotplt_index;
11037       bfd_vma plt_offset;
11038
11039       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11040       gotplt_index = h->plt.plist->gotplt_index;
11041
11042       BFD_ASSERT (h->dynindx != -1);
11043       BFD_ASSERT (htab->splt != NULL);
11044       BFD_ASSERT (gotplt_index != MINUS_ONE);
11045       BFD_ASSERT (plt_offset <= htab->splt->size);
11046
11047       /* Calculate the address of the .plt entry.  */
11048       plt_address = (htab->splt->output_section->vma
11049                      + htab->splt->output_offset
11050                      + plt_offset);
11051
11052       /* Calculate the address of the .got.plt entry.  */
11053       got_address = (htab->sgotplt->output_section->vma
11054                      + htab->sgotplt->output_offset
11055                      + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11056
11057       /* Calculate the offset of the .got.plt entry from
11058          _GLOBAL_OFFSET_TABLE_.  */
11059       got_offset = mips_elf_gotplt_index (info, h);
11060
11061       /* Calculate the offset for the branch at the start of the PLT
11062          entry.  The branch jumps to the beginning of .plt.  */
11063       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11064
11065       /* Fill in the initial value of the .got.plt entry.  */
11066       bfd_put_32 (output_bfd, plt_address,
11067                   (htab->sgotplt->contents
11068                    + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11069
11070       /* Find out where the .plt entry should go.  */
11071       loc = htab->splt->contents + plt_offset;
11072
11073       if (bfd_link_pic (info))
11074         {
11075           plt_entry = mips_vxworks_shared_plt_entry;
11076           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11077           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11078         }
11079       else
11080         {
11081           bfd_vma got_address_high, got_address_low;
11082
11083           plt_entry = mips_vxworks_exec_plt_entry;
11084           got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11085           got_address_low = got_address & 0xffff;
11086
11087           bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11088           bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11089           bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11090           bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11091           bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11092           bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11093           bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11094           bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11095
11096           loc = (htab->srelplt2->contents
11097                  + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11098
11099           /* Emit a relocation for the .got.plt entry.  */
11100           rel.r_offset = got_address;
11101           rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11102           rel.r_addend = plt_offset;
11103           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11104
11105           /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11106           loc += sizeof (Elf32_External_Rela);
11107           rel.r_offset = plt_address + 8;
11108           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11109           rel.r_addend = got_offset;
11110           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11111
11112           /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11113           loc += sizeof (Elf32_External_Rela);
11114           rel.r_offset += 4;
11115           rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11116           bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11117         }
11118
11119       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11120       loc = (htab->srelplt->contents
11121              + gotplt_index * sizeof (Elf32_External_Rela));
11122       rel.r_offset = got_address;
11123       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11124       rel.r_addend = 0;
11125       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11126
11127       if (!h->def_regular)
11128         sym->st_shndx = SHN_UNDEF;
11129     }
11130
11131   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11132
11133   sgot = htab->sgot;
11134   g = htab->got_info;
11135   BFD_ASSERT (g != NULL);
11136
11137   /* See if this symbol has an entry in the GOT.  */
11138   if (hmips->global_got_area != GGA_NONE)
11139     {
11140       bfd_vma offset;
11141       Elf_Internal_Rela outrel;
11142       bfd_byte *loc;
11143       asection *s;
11144
11145       /* Install the symbol value in the GOT.   */
11146       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11147       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11148
11149       /* Add a dynamic relocation for it.  */
11150       s = mips_elf_rel_dyn_section (info, FALSE);
11151       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11152       outrel.r_offset = (sgot->output_section->vma
11153                          + sgot->output_offset
11154                          + offset);
11155       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11156       outrel.r_addend = 0;
11157       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11158     }
11159
11160   /* Emit a copy reloc, if needed.  */
11161   if (h->needs_copy)
11162     {
11163       Elf_Internal_Rela rel;
11164
11165       BFD_ASSERT (h->dynindx != -1);
11166
11167       rel.r_offset = (h->root.u.def.section->output_section->vma
11168                       + h->root.u.def.section->output_offset
11169                       + h->root.u.def.value);
11170       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11171       rel.r_addend = 0;
11172       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11173                                  htab->srelbss->contents
11174                                  + (htab->srelbss->reloc_count
11175                                     * sizeof (Elf32_External_Rela)));
11176       ++htab->srelbss->reloc_count;
11177     }
11178
11179   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11180   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11181     sym->st_value &= ~1;
11182
11183   return TRUE;
11184 }
11185
11186 /* Write out a plt0 entry to the beginning of .plt.  */
11187
11188 static bfd_boolean
11189 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11190 {
11191   bfd_byte *loc;
11192   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11193   static const bfd_vma *plt_entry;
11194   struct mips_elf_link_hash_table *htab;
11195
11196   htab = mips_elf_hash_table (info);
11197   BFD_ASSERT (htab != NULL);
11198
11199   if (ABI_64_P (output_bfd))
11200     plt_entry = mips_n64_exec_plt0_entry;
11201   else if (ABI_N32_P (output_bfd))
11202     plt_entry = mips_n32_exec_plt0_entry;
11203   else if (!htab->plt_header_is_comp)
11204     plt_entry = mips_o32_exec_plt0_entry;
11205   else if (htab->insn32)
11206     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11207   else
11208     plt_entry = micromips_o32_exec_plt0_entry;
11209
11210   /* Calculate the value of .got.plt.  */
11211   gotplt_value = (htab->sgotplt->output_section->vma
11212                   + htab->sgotplt->output_offset);
11213   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11214   gotplt_value_low = gotplt_value & 0xffff;
11215
11216   /* The PLT sequence is not safe for N64 if .got.plt's address can
11217      not be loaded in two instructions.  */
11218   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11219               || ~(gotplt_value | 0x7fffffff) == 0);
11220
11221   /* Install the PLT header.  */
11222   loc = htab->splt->contents;
11223   if (plt_entry == micromips_o32_exec_plt0_entry)
11224     {
11225       bfd_vma gotpc_offset;
11226       bfd_vma loc_address;
11227       size_t i;
11228
11229       BFD_ASSERT (gotplt_value % 4 == 0);
11230
11231       loc_address = (htab->splt->output_section->vma
11232                      + htab->splt->output_offset);
11233       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11234
11235       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11236       if (gotpc_offset + 0x1000000 >= 0x2000000)
11237         {
11238           (*_bfd_error_handler)
11239             (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11240              output_bfd,
11241              htab->sgotplt->output_section,
11242              htab->splt->output_section,
11243              (long) gotpc_offset);
11244           bfd_set_error (bfd_error_no_error);
11245           return FALSE;
11246         }
11247       bfd_put_16 (output_bfd,
11248                   plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11249       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11250       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11251         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11252     }
11253   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11254     {
11255       size_t i;
11256
11257       bfd_put_16 (output_bfd, plt_entry[0], loc);
11258       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11259       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11260       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11261       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11262       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11263       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11264         bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11265     }
11266   else
11267     {
11268       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11269       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11270       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11271       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11272       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11273       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11274       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11275       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11276     }
11277
11278   return TRUE;
11279 }
11280
11281 /* Install the PLT header for a VxWorks executable and finalize the
11282    contents of .rela.plt.unloaded.  */
11283
11284 static void
11285 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11286 {
11287   Elf_Internal_Rela rela;
11288   bfd_byte *loc;
11289   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11290   static const bfd_vma *plt_entry;
11291   struct mips_elf_link_hash_table *htab;
11292
11293   htab = mips_elf_hash_table (info);
11294   BFD_ASSERT (htab != NULL);
11295
11296   plt_entry = mips_vxworks_exec_plt0_entry;
11297
11298   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11299   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11300                + htab->root.hgot->root.u.def.section->output_offset
11301                + htab->root.hgot->root.u.def.value);
11302
11303   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11304   got_value_low = got_value & 0xffff;
11305
11306   /* Calculate the address of the PLT header.  */
11307   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11308
11309   /* Install the PLT header.  */
11310   loc = htab->splt->contents;
11311   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11312   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11313   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11314   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11315   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11316   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11317
11318   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11319   loc = htab->srelplt2->contents;
11320   rela.r_offset = plt_address;
11321   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11322   rela.r_addend = 0;
11323   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11324   loc += sizeof (Elf32_External_Rela);
11325
11326   /* Output the relocation for the following addiu of
11327      %lo(_GLOBAL_OFFSET_TABLE_).  */
11328   rela.r_offset += 4;
11329   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11330   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11331   loc += sizeof (Elf32_External_Rela);
11332
11333   /* Fix up the remaining relocations.  They may have the wrong
11334      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11335      in which symbols were output.  */
11336   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11337     {
11338       Elf_Internal_Rela rel;
11339
11340       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11341       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11342       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11343       loc += sizeof (Elf32_External_Rela);
11344
11345       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11346       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11347       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11348       loc += sizeof (Elf32_External_Rela);
11349
11350       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11351       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11352       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11353       loc += sizeof (Elf32_External_Rela);
11354     }
11355 }
11356
11357 /* Install the PLT header for a VxWorks shared library.  */
11358
11359 static void
11360 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11361 {
11362   unsigned int i;
11363   struct mips_elf_link_hash_table *htab;
11364
11365   htab = mips_elf_hash_table (info);
11366   BFD_ASSERT (htab != NULL);
11367
11368   /* We just need to copy the entry byte-by-byte.  */
11369   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11370     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11371                 htab->splt->contents + i * 4);
11372 }
11373
11374 /* Finish up the dynamic sections.  */
11375
11376 bfd_boolean
11377 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11378                                        struct bfd_link_info *info)
11379 {
11380   bfd *dynobj;
11381   asection *sdyn;
11382   asection *sgot;
11383   struct mips_got_info *gg, *g;
11384   struct mips_elf_link_hash_table *htab;
11385
11386   htab = mips_elf_hash_table (info);
11387   BFD_ASSERT (htab != NULL);
11388
11389   dynobj = elf_hash_table (info)->dynobj;
11390
11391   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11392
11393   sgot = htab->sgot;
11394   gg = htab->got_info;
11395
11396   if (elf_hash_table (info)->dynamic_sections_created)
11397     {
11398       bfd_byte *b;
11399       int dyn_to_skip = 0, dyn_skipped = 0;
11400
11401       BFD_ASSERT (sdyn != NULL);
11402       BFD_ASSERT (gg != NULL);
11403
11404       g = mips_elf_bfd_got (output_bfd, FALSE);
11405       BFD_ASSERT (g != NULL);
11406
11407       for (b = sdyn->contents;
11408            b < sdyn->contents + sdyn->size;
11409            b += MIPS_ELF_DYN_SIZE (dynobj))
11410         {
11411           Elf_Internal_Dyn dyn;
11412           const char *name;
11413           size_t elemsize;
11414           asection *s;
11415           bfd_boolean swap_out_p;
11416
11417           /* Read in the current dynamic entry.  */
11418           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11419
11420           /* Assume that we're going to modify it and write it out.  */
11421           swap_out_p = TRUE;
11422
11423           switch (dyn.d_tag)
11424             {
11425             case DT_RELENT:
11426               dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11427               break;
11428
11429             case DT_RELAENT:
11430               BFD_ASSERT (htab->is_vxworks);
11431               dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11432               break;
11433
11434             case DT_STRSZ:
11435               /* Rewrite DT_STRSZ.  */
11436               dyn.d_un.d_val =
11437                 _bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11438               break;
11439
11440             case DT_PLTGOT:
11441               s = htab->sgot;
11442               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11443               break;
11444
11445             case DT_MIPS_PLTGOT:
11446               s = htab->sgotplt;
11447               dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11448               break;
11449
11450             case DT_MIPS_RLD_VERSION:
11451               dyn.d_un.d_val = 1; /* XXX */
11452               break;
11453
11454             case DT_MIPS_FLAGS:
11455               dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11456               break;
11457
11458             case DT_MIPS_TIME_STAMP:
11459               {
11460                 time_t t;
11461                 time (&t);
11462                 dyn.d_un.d_val = t;
11463               }
11464               break;
11465
11466             case DT_MIPS_ICHECKSUM:
11467               /* XXX FIXME: */
11468               swap_out_p = FALSE;
11469               break;
11470
11471             case DT_MIPS_IVERSION:
11472               /* XXX FIXME: */
11473               swap_out_p = FALSE;
11474               break;
11475
11476             case DT_MIPS_BASE_ADDRESS:
11477               s = output_bfd->sections;
11478               BFD_ASSERT (s != NULL);
11479               dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11480               break;
11481
11482             case DT_MIPS_LOCAL_GOTNO:
11483               dyn.d_un.d_val = g->local_gotno;
11484               break;
11485
11486             case DT_MIPS_UNREFEXTNO:
11487               /* The index into the dynamic symbol table which is the
11488                  entry of the first external symbol that is not
11489                  referenced within the same object.  */
11490               dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11491               break;
11492
11493             case DT_MIPS_GOTSYM:
11494               if (htab->global_gotsym)
11495                 {
11496                   dyn.d_un.d_val = htab->global_gotsym->dynindx;
11497                   break;
11498                 }
11499               /* In case if we don't have global got symbols we default
11500                  to setting DT_MIPS_GOTSYM to the same value as
11501                  DT_MIPS_SYMTABNO, so we just fall through.  */
11502
11503             case DT_MIPS_SYMTABNO:
11504               name = ".dynsym";
11505               elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11506               s = bfd_get_linker_section (dynobj, name);
11507
11508               if (s != NULL)
11509                 dyn.d_un.d_val = s->size / elemsize;
11510               else
11511                 dyn.d_un.d_val = 0;
11512               break;
11513
11514             case DT_MIPS_HIPAGENO:
11515               dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11516               break;
11517
11518             case DT_MIPS_RLD_MAP:
11519               {
11520                 struct elf_link_hash_entry *h;
11521                 h = mips_elf_hash_table (info)->rld_symbol;
11522                 if (!h)
11523                   {
11524                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11525                     swap_out_p = FALSE;
11526                     break;
11527                   }
11528                 s = h->root.u.def.section;
11529
11530                 /* The MIPS_RLD_MAP tag stores the absolute address of the
11531                    debug pointer.  */
11532                 dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11533                                   + h->root.u.def.value);
11534               }
11535               break;
11536
11537             case DT_MIPS_RLD_MAP_REL:
11538               {
11539                 struct elf_link_hash_entry *h;
11540                 bfd_vma dt_addr, rld_addr;
11541                 h = mips_elf_hash_table (info)->rld_symbol;
11542                 if (!h)
11543                   {
11544                     dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11545                     swap_out_p = FALSE;
11546                     break;
11547                   }
11548                 s = h->root.u.def.section;
11549
11550                 /* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11551                    pointer, relative to the address of the tag.  */
11552                 dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11553                            + (b - sdyn->contents));
11554                 rld_addr = (s->output_section->vma + s->output_offset
11555                             + h->root.u.def.value);
11556                 dyn.d_un.d_ptr = rld_addr - dt_addr;
11557               }
11558               break;
11559
11560             case DT_MIPS_OPTIONS:
11561               s = (bfd_get_section_by_name
11562                    (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11563               dyn.d_un.d_ptr = s->vma;
11564               break;
11565
11566             case DT_RELASZ:
11567               BFD_ASSERT (htab->is_vxworks);
11568               /* The count does not include the JUMP_SLOT relocations.  */
11569               if (htab->srelplt)
11570                 dyn.d_un.d_val -= htab->srelplt->size;
11571               break;
11572
11573             case DT_PLTREL:
11574               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11575               if (htab->is_vxworks)
11576                 dyn.d_un.d_val = DT_RELA;
11577               else
11578                 dyn.d_un.d_val = DT_REL;
11579               break;
11580
11581             case DT_PLTRELSZ:
11582               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11583               dyn.d_un.d_val = htab->srelplt->size;
11584               break;
11585
11586             case DT_JMPREL:
11587               BFD_ASSERT (htab->use_plts_and_copy_relocs);
11588               dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11589                                 + htab->srelplt->output_offset);
11590               break;
11591
11592             case DT_TEXTREL:
11593               /* If we didn't need any text relocations after all, delete
11594                  the dynamic tag.  */
11595               if (!(info->flags & DF_TEXTREL))
11596                 {
11597                   dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11598                   swap_out_p = FALSE;
11599                 }
11600               break;
11601
11602             case DT_FLAGS:
11603               /* If we didn't need any text relocations after all, clear
11604                  DF_TEXTREL from DT_FLAGS.  */
11605               if (!(info->flags & DF_TEXTREL))
11606                 dyn.d_un.d_val &= ~DF_TEXTREL;
11607               else
11608                 swap_out_p = FALSE;
11609               break;
11610
11611             default:
11612               swap_out_p = FALSE;
11613               if (htab->is_vxworks
11614                   && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11615                 swap_out_p = TRUE;
11616               break;
11617             }
11618
11619           if (swap_out_p || dyn_skipped)
11620             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11621               (dynobj, &dyn, b - dyn_skipped);
11622
11623           if (dyn_to_skip)
11624             {
11625               dyn_skipped += dyn_to_skip;
11626               dyn_to_skip = 0;
11627             }
11628         }
11629
11630       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11631       if (dyn_skipped > 0)
11632         memset (b - dyn_skipped, 0, dyn_skipped);
11633     }
11634
11635   if (sgot != NULL && sgot->size > 0
11636       && !bfd_is_abs_section (sgot->output_section))
11637     {
11638       if (htab->is_vxworks)
11639         {
11640           /* The first entry of the global offset table points to the
11641              ".dynamic" section.  The second is initialized by the
11642              loader and contains the shared library identifier.
11643              The third is also initialized by the loader and points
11644              to the lazy resolution stub.  */
11645           MIPS_ELF_PUT_WORD (output_bfd,
11646                              sdyn->output_offset + sdyn->output_section->vma,
11647                              sgot->contents);
11648           MIPS_ELF_PUT_WORD (output_bfd, 0,
11649                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11650           MIPS_ELF_PUT_WORD (output_bfd, 0,
11651                              sgot->contents
11652                              + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11653         }
11654       else
11655         {
11656           /* The first entry of the global offset table will be filled at
11657              runtime. The second entry will be used by some runtime loaders.
11658              This isn't the case of IRIX rld.  */
11659           MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11660           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11661                              sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11662         }
11663
11664       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11665          = MIPS_ELF_GOT_SIZE (output_bfd);
11666     }
11667
11668   /* Generate dynamic relocations for the non-primary gots.  */
11669   if (gg != NULL && gg->next)
11670     {
11671       Elf_Internal_Rela rel[3];
11672       bfd_vma addend = 0;
11673
11674       memset (rel, 0, sizeof (rel));
11675       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11676
11677       for (g = gg->next; g->next != gg; g = g->next)
11678         {
11679           bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11680             + g->next->tls_gotno;
11681
11682           MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11683                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11684           MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11685                              sgot->contents
11686                              + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11687
11688           if (! bfd_link_pic (info))
11689             continue;
11690
11691           for (; got_index < g->local_gotno; got_index++)
11692             {
11693               if (got_index >= g->assigned_low_gotno
11694                   && got_index <= g->assigned_high_gotno)
11695                 continue;
11696
11697               rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11698                 = got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11699               if (!(mips_elf_create_dynamic_relocation
11700                     (output_bfd, info, rel, NULL,
11701                      bfd_abs_section_ptr,
11702                      0, &addend, sgot)))
11703                 return FALSE;
11704               BFD_ASSERT (addend == 0);
11705             }
11706         }
11707     }
11708
11709   /* The generation of dynamic relocations for the non-primary gots
11710      adds more dynamic relocations.  We cannot count them until
11711      here.  */
11712
11713   if (elf_hash_table (info)->dynamic_sections_created)
11714     {
11715       bfd_byte *b;
11716       bfd_boolean swap_out_p;
11717
11718       BFD_ASSERT (sdyn != NULL);
11719
11720       for (b = sdyn->contents;
11721            b < sdyn->contents + sdyn->size;
11722            b += MIPS_ELF_DYN_SIZE (dynobj))
11723         {
11724           Elf_Internal_Dyn dyn;
11725           asection *s;
11726
11727           /* Read in the current dynamic entry.  */
11728           (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11729
11730           /* Assume that we're going to modify it and write it out.  */
11731           swap_out_p = TRUE;
11732
11733           switch (dyn.d_tag)
11734             {
11735             case DT_RELSZ:
11736               /* Reduce DT_RELSZ to account for any relocations we
11737                  decided not to make.  This is for the n64 irix rld,
11738                  which doesn't seem to apply any relocations if there
11739                  are trailing null entries.  */
11740               s = mips_elf_rel_dyn_section (info, FALSE);
11741               dyn.d_un.d_val = (s->reloc_count
11742                                 * (ABI_64_P (output_bfd)
11743                                    ? sizeof (Elf64_Mips_External_Rel)
11744                                    : sizeof (Elf32_External_Rel)));
11745               /* Adjust the section size too.  Tools like the prelinker
11746                  can reasonably expect the values to the same.  */
11747               elf_section_data (s->output_section)->this_hdr.sh_size
11748                 = dyn.d_un.d_val;
11749               break;
11750
11751             default:
11752               swap_out_p = FALSE;
11753               break;
11754             }
11755
11756           if (swap_out_p)
11757             (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11758               (dynobj, &dyn, b);
11759         }
11760     }
11761
11762   {
11763     asection *s;
11764     Elf32_compact_rel cpt;
11765
11766     if (SGI_COMPAT (output_bfd))
11767       {
11768         /* Write .compact_rel section out.  */
11769         s = bfd_get_linker_section (dynobj, ".compact_rel");
11770         if (s != NULL)
11771           {
11772             cpt.id1 = 1;
11773             cpt.num = s->reloc_count;
11774             cpt.id2 = 2;
11775             cpt.offset = (s->output_section->filepos
11776                           + sizeof (Elf32_External_compact_rel));
11777             cpt.reserved0 = 0;
11778             cpt.reserved1 = 0;
11779             bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11780                                             ((Elf32_External_compact_rel *)
11781                                              s->contents));
11782
11783             /* Clean up a dummy stub function entry in .text.  */
11784             if (htab->sstubs != NULL)
11785               {
11786                 file_ptr dummy_offset;
11787
11788                 BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11789                 dummy_offset = htab->sstubs->size - htab->function_stub_size;
11790                 memset (htab->sstubs->contents + dummy_offset, 0,
11791                         htab->function_stub_size);
11792               }
11793           }
11794       }
11795
11796     /* The psABI says that the dynamic relocations must be sorted in
11797        increasing order of r_symndx.  The VxWorks EABI doesn't require
11798        this, and because the code below handles REL rather than RELA
11799        relocations, using it for VxWorks would be outright harmful.  */
11800     if (!htab->is_vxworks)
11801       {
11802         s = mips_elf_rel_dyn_section (info, FALSE);
11803         if (s != NULL
11804             && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11805           {
11806             reldyn_sorting_bfd = output_bfd;
11807
11808             if (ABI_64_P (output_bfd))
11809               qsort ((Elf64_External_Rel *) s->contents + 1,
11810                      s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11811                      sort_dynamic_relocs_64);
11812             else
11813               qsort ((Elf32_External_Rel *) s->contents + 1,
11814                      s->reloc_count - 1, sizeof (Elf32_External_Rel),
11815                      sort_dynamic_relocs);
11816           }
11817       }
11818   }
11819
11820   if (htab->splt && htab->splt->size > 0)
11821     {
11822       if (htab->is_vxworks)
11823         {
11824           if (bfd_link_pic (info))
11825             mips_vxworks_finish_shared_plt (output_bfd, info);
11826           else
11827             mips_vxworks_finish_exec_plt (output_bfd, info);
11828         }
11829       else
11830         {
11831           BFD_ASSERT (!bfd_link_pic (info));
11832           if (!mips_finish_exec_plt (output_bfd, info))
11833             return FALSE;
11834         }
11835     }
11836   return TRUE;
11837 }
11838
11839
11840 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11841
11842 static void
11843 mips_set_isa_flags (bfd *abfd)
11844 {
11845   flagword val;
11846
11847   switch (bfd_get_mach (abfd))
11848     {
11849     default:
11850     case bfd_mach_mips3000:
11851       val = E_MIPS_ARCH_1;
11852       break;
11853
11854     case bfd_mach_mips3900:
11855       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11856       break;
11857
11858     case bfd_mach_mips6000:
11859       val = E_MIPS_ARCH_2;
11860       break;
11861
11862     case bfd_mach_mips4000:
11863     case bfd_mach_mips4300:
11864     case bfd_mach_mips4400:
11865     case bfd_mach_mips4600:
11866       val = E_MIPS_ARCH_3;
11867       break;
11868
11869     case bfd_mach_mips4010:
11870       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11871       break;
11872
11873     case bfd_mach_mips4100:
11874       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11875       break;
11876
11877     case bfd_mach_mips4111:
11878       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11879       break;
11880
11881     case bfd_mach_mips4120:
11882       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11883       break;
11884
11885     case bfd_mach_mips4650:
11886       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11887       break;
11888
11889     case bfd_mach_mips5400:
11890       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11891       break;
11892
11893     case bfd_mach_mips5500:
11894       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11895       break;
11896
11897     case bfd_mach_mips5900:
11898       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11899       break;
11900
11901     case bfd_mach_mips9000:
11902       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11903       break;
11904
11905     case bfd_mach_mips5000:
11906     case bfd_mach_mips7000:
11907     case bfd_mach_mips8000:
11908     case bfd_mach_mips10000:
11909     case bfd_mach_mips12000:
11910     case bfd_mach_mips14000:
11911     case bfd_mach_mips16000:
11912       val = E_MIPS_ARCH_4;
11913       break;
11914
11915     case bfd_mach_mips5:
11916       val = E_MIPS_ARCH_5;
11917       break;
11918
11919     case bfd_mach_mips_loongson_2e:
11920       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11921       break;
11922
11923     case bfd_mach_mips_loongson_2f:
11924       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11925       break;
11926
11927     case bfd_mach_mips_sb1:
11928       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11929       break;
11930
11931     case bfd_mach_mips_loongson_3a:
11932       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11933       break;
11934
11935     case bfd_mach_mips_octeon:
11936     case bfd_mach_mips_octeonp:
11937       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11938       break;
11939
11940     case bfd_mach_mips_octeon3:
11941       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11942       break;
11943
11944     case bfd_mach_mips_xlr:
11945       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11946       break;
11947
11948     case bfd_mach_mips_octeon2:
11949       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11950       break;
11951
11952     case bfd_mach_mipsisa32:
11953       val = E_MIPS_ARCH_32;
11954       break;
11955
11956     case bfd_mach_mipsisa64:
11957       val = E_MIPS_ARCH_64;
11958       break;
11959
11960     case bfd_mach_mipsisa32r2:
11961     case bfd_mach_mipsisa32r3:
11962     case bfd_mach_mipsisa32r5:
11963       val = E_MIPS_ARCH_32R2;
11964       break;
11965
11966     case bfd_mach_mipsisa64r2:
11967     case bfd_mach_mipsisa64r3:
11968     case bfd_mach_mipsisa64r5:
11969       val = E_MIPS_ARCH_64R2;
11970       break;
11971
11972     case bfd_mach_mipsisa32r6:
11973       val = E_MIPS_ARCH_32R6;
11974       break;
11975
11976     case bfd_mach_mipsisa64r6:
11977       val = E_MIPS_ARCH_64R6;
11978       break;
11979     }
11980   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11981   elf_elfheader (abfd)->e_flags |= val;
11982
11983 }
11984
11985
11986 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11987    Don't do so for code sections.  We want to keep ordering of HI16/LO16
11988    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
11989    relocs to be sorted.  */
11990
11991 bfd_boolean
11992 _bfd_mips_elf_sort_relocs_p (asection *sec)
11993 {
11994   return (sec->flags & SEC_CODE) == 0;
11995 }
11996
11997
11998 /* The final processing done just before writing out a MIPS ELF object
11999    file.  This gets the MIPS architecture right based on the machine
12000    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12001
12002 void
12003 _bfd_mips_elf_final_write_processing (bfd *abfd,
12004                                       bfd_boolean linker ATTRIBUTE_UNUSED)
12005 {
12006   unsigned int i;
12007   Elf_Internal_Shdr **hdrpp;
12008   const char *name;
12009   asection *sec;
12010
12011   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12012      is nonzero.  This is for compatibility with old objects, which used
12013      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12014   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12015     mips_set_isa_flags (abfd);
12016
12017   /* Set the sh_info field for .gptab sections and other appropriate
12018      info for each special section.  */
12019   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12020        i < elf_numsections (abfd);
12021        i++, hdrpp++)
12022     {
12023       switch ((*hdrpp)->sh_type)
12024         {
12025         case SHT_MIPS_MSYM:
12026         case SHT_MIPS_LIBLIST:
12027           sec = bfd_get_section_by_name (abfd, ".dynstr");
12028           if (sec != NULL)
12029             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12030           break;
12031
12032         case SHT_MIPS_GPTAB:
12033           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12034           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12035           BFD_ASSERT (name != NULL
12036                       && CONST_STRNEQ (name, ".gptab."));
12037           sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12038           BFD_ASSERT (sec != NULL);
12039           (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12040           break;
12041
12042         case SHT_MIPS_CONTENT:
12043           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12044           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12045           BFD_ASSERT (name != NULL
12046                       && CONST_STRNEQ (name, ".MIPS.content"));
12047           sec = bfd_get_section_by_name (abfd,
12048                                          name + sizeof ".MIPS.content" - 1);
12049           BFD_ASSERT (sec != NULL);
12050           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12051           break;
12052
12053         case SHT_MIPS_SYMBOL_LIB:
12054           sec = bfd_get_section_by_name (abfd, ".dynsym");
12055           if (sec != NULL)
12056             (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12057           sec = bfd_get_section_by_name (abfd, ".liblist");
12058           if (sec != NULL)
12059             (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12060           break;
12061
12062         case SHT_MIPS_EVENTS:
12063           BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12064           name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12065           BFD_ASSERT (name != NULL);
12066           if (CONST_STRNEQ (name, ".MIPS.events"))
12067             sec = bfd_get_section_by_name (abfd,
12068                                            name + sizeof ".MIPS.events" - 1);
12069           else
12070             {
12071               BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12072               sec = bfd_get_section_by_name (abfd,
12073                                              (name
12074                                               + sizeof ".MIPS.post_rel" - 1));
12075             }
12076           BFD_ASSERT (sec != NULL);
12077           (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12078           break;
12079
12080         }
12081     }
12082 }
12083 \f
12084 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12085    segments.  */
12086
12087 int
12088 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12089                                           struct bfd_link_info *info ATTRIBUTE_UNUSED)
12090 {
12091   asection *s;
12092   int ret = 0;
12093
12094   /* See if we need a PT_MIPS_REGINFO segment.  */
12095   s = bfd_get_section_by_name (abfd, ".reginfo");
12096   if (s && (s->flags & SEC_LOAD))
12097     ++ret;
12098
12099   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12100   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12101     ++ret;
12102
12103   /* See if we need a PT_MIPS_OPTIONS segment.  */
12104   if (IRIX_COMPAT (abfd) == ict_irix6
12105       && bfd_get_section_by_name (abfd,
12106                                   MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12107     ++ret;
12108
12109   /* See if we need a PT_MIPS_RTPROC segment.  */
12110   if (IRIX_COMPAT (abfd) == ict_irix5
12111       && bfd_get_section_by_name (abfd, ".dynamic")
12112       && bfd_get_section_by_name (abfd, ".mdebug"))
12113     ++ret;
12114
12115   /* Allocate a PT_NULL header in dynamic objects.  See
12116      _bfd_mips_elf_modify_segment_map for details.  */
12117   if (!SGI_COMPAT (abfd)
12118       && bfd_get_section_by_name (abfd, ".dynamic"))
12119     ++ret;
12120
12121   return ret;
12122 }
12123
12124 /* Modify the segment map for an IRIX5 executable.  */
12125
12126 bfd_boolean
12127 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12128                                   struct bfd_link_info *info)
12129 {
12130   asection *s;
12131   struct elf_segment_map *m, **pm;
12132   bfd_size_type amt;
12133
12134   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12135      segment.  */
12136   s = bfd_get_section_by_name (abfd, ".reginfo");
12137   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12138     {
12139       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12140         if (m->p_type == PT_MIPS_REGINFO)
12141           break;
12142       if (m == NULL)
12143         {
12144           amt = sizeof *m;
12145           m = bfd_zalloc (abfd, amt);
12146           if (m == NULL)
12147             return FALSE;
12148
12149           m->p_type = PT_MIPS_REGINFO;
12150           m->count = 1;
12151           m->sections[0] = s;
12152
12153           /* We want to put it after the PHDR and INTERP segments.  */
12154           pm = &elf_seg_map (abfd);
12155           while (*pm != NULL
12156                  && ((*pm)->p_type == PT_PHDR
12157                      || (*pm)->p_type == PT_INTERP))
12158             pm = &(*pm)->next;
12159
12160           m->next = *pm;
12161           *pm = m;
12162         }
12163     }
12164
12165   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12166      segment.  */
12167   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12168   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12169     {
12170       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12171         if (m->p_type == PT_MIPS_ABIFLAGS)
12172           break;
12173       if (m == NULL)
12174         {
12175           amt = sizeof *m;
12176           m = bfd_zalloc (abfd, amt);
12177           if (m == NULL)
12178             return FALSE;
12179
12180           m->p_type = PT_MIPS_ABIFLAGS;
12181           m->count = 1;
12182           m->sections[0] = s;
12183
12184           /* We want to put it after the PHDR and INTERP segments.  */
12185           pm = &elf_seg_map (abfd);
12186           while (*pm != NULL
12187                  && ((*pm)->p_type == PT_PHDR
12188                      || (*pm)->p_type == PT_INTERP))
12189             pm = &(*pm)->next;
12190
12191           m->next = *pm;
12192           *pm = m;
12193         }
12194     }
12195
12196   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12197      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12198      PT_MIPS_OPTIONS segment immediately following the program header
12199      table.  */
12200   if (NEWABI_P (abfd)
12201       /* On non-IRIX6 new abi, we'll have already created a segment
12202          for this section, so don't create another.  I'm not sure this
12203          is not also the case for IRIX 6, but I can't test it right
12204          now.  */
12205       && IRIX_COMPAT (abfd) == ict_irix6)
12206     {
12207       for (s = abfd->sections; s; s = s->next)
12208         if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12209           break;
12210
12211       if (s)
12212         {
12213           struct elf_segment_map *options_segment;
12214
12215           pm = &elf_seg_map (abfd);
12216           while (*pm != NULL
12217                  && ((*pm)->p_type == PT_PHDR
12218                      || (*pm)->p_type == PT_INTERP))
12219             pm = &(*pm)->next;
12220
12221           if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12222             {
12223               amt = sizeof (struct elf_segment_map);
12224               options_segment = bfd_zalloc (abfd, amt);
12225               options_segment->next = *pm;
12226               options_segment->p_type = PT_MIPS_OPTIONS;
12227               options_segment->p_flags = PF_R;
12228               options_segment->p_flags_valid = TRUE;
12229               options_segment->count = 1;
12230               options_segment->sections[0] = s;
12231               *pm = options_segment;
12232             }
12233         }
12234     }
12235   else
12236     {
12237       if (IRIX_COMPAT (abfd) == ict_irix5)
12238         {
12239           /* If there are .dynamic and .mdebug sections, we make a room
12240              for the RTPROC header.  FIXME: Rewrite without section names.  */
12241           if (bfd_get_section_by_name (abfd, ".interp") == NULL
12242               && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12243               && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12244             {
12245               for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12246                 if (m->p_type == PT_MIPS_RTPROC)
12247                   break;
12248               if (m == NULL)
12249                 {
12250                   amt = sizeof *m;
12251                   m = bfd_zalloc (abfd, amt);
12252                   if (m == NULL)
12253                     return FALSE;
12254
12255                   m->p_type = PT_MIPS_RTPROC;
12256
12257                   s = bfd_get_section_by_name (abfd, ".rtproc");
12258                   if (s == NULL)
12259                     {
12260                       m->count = 0;
12261                       m->p_flags = 0;
12262                       m->p_flags_valid = 1;
12263                     }
12264                   else
12265                     {
12266                       m->count = 1;
12267                       m->sections[0] = s;
12268                     }
12269
12270                   /* We want to put it after the DYNAMIC segment.  */
12271                   pm = &elf_seg_map (abfd);
12272                   while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12273                     pm = &(*pm)->next;
12274                   if (*pm != NULL)
12275                     pm = &(*pm)->next;
12276
12277                   m->next = *pm;
12278                   *pm = m;
12279                 }
12280             }
12281         }
12282       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12283          .dynstr, .dynsym, and .hash sections, and everything in
12284          between.  */
12285       for (pm = &elf_seg_map (abfd); *pm != NULL;
12286            pm = &(*pm)->next)
12287         if ((*pm)->p_type == PT_DYNAMIC)
12288           break;
12289       m = *pm;
12290       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12291          glibc's dynamic linker has traditionally derived the number of
12292          tags from the p_filesz field, and sometimes allocates stack
12293          arrays of that size.  An overly-big PT_DYNAMIC segment can
12294          be actively harmful in such cases.  Making PT_DYNAMIC contain
12295          other sections can also make life hard for the prelinker,
12296          which might move one of the other sections to a different
12297          PT_LOAD segment.  */
12298       if (SGI_COMPAT (abfd)
12299           && m != NULL
12300           && m->count == 1
12301           && strcmp (m->sections[0]->name, ".dynamic") == 0)
12302         {
12303           static const char *sec_names[] =
12304           {
12305             ".dynamic", ".dynstr", ".dynsym", ".hash"
12306           };
12307           bfd_vma low, high;
12308           unsigned int i, c;
12309           struct elf_segment_map *n;
12310
12311           low = ~(bfd_vma) 0;
12312           high = 0;
12313           for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12314             {
12315               s = bfd_get_section_by_name (abfd, sec_names[i]);
12316               if (s != NULL && (s->flags & SEC_LOAD) != 0)
12317                 {
12318                   bfd_size_type sz;
12319
12320                   if (low > s->vma)
12321                     low = s->vma;
12322                   sz = s->size;
12323                   if (high < s->vma + sz)
12324                     high = s->vma + sz;
12325                 }
12326             }
12327
12328           c = 0;
12329           for (s = abfd->sections; s != NULL; s = s->next)
12330             if ((s->flags & SEC_LOAD) != 0
12331                 && s->vma >= low
12332                 && s->vma + s->size <= high)
12333               ++c;
12334
12335           amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12336           n = bfd_zalloc (abfd, amt);
12337           if (n == NULL)
12338             return FALSE;
12339           *n = *m;
12340           n->count = c;
12341
12342           i = 0;
12343           for (s = abfd->sections; s != NULL; s = s->next)
12344             {
12345               if ((s->flags & SEC_LOAD) != 0
12346                   && s->vma >= low
12347                   && s->vma + s->size <= high)
12348                 {
12349                   n->sections[i] = s;
12350                   ++i;
12351                 }
12352             }
12353
12354           *pm = n;
12355         }
12356     }
12357
12358   /* Allocate a spare program header in dynamic objects so that tools
12359      like the prelinker can add an extra PT_LOAD entry.
12360
12361      If the prelinker needs to make room for a new PT_LOAD entry, its
12362      standard procedure is to move the first (read-only) sections into
12363      the new (writable) segment.  However, the MIPS ABI requires
12364      .dynamic to be in a read-only segment, and the section will often
12365      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12366
12367      Although the prelinker could in principle move .dynamic to a
12368      writable segment, it seems better to allocate a spare program
12369      header instead, and avoid the need to move any sections.
12370      There is a long tradition of allocating spare dynamic tags,
12371      so allocating a spare program header seems like a natural
12372      extension.
12373
12374      If INFO is NULL, we may be copying an already prelinked binary
12375      with objcopy or strip, so do not add this header.  */
12376   if (info != NULL
12377       && !SGI_COMPAT (abfd)
12378       && bfd_get_section_by_name (abfd, ".dynamic"))
12379     {
12380       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12381         if ((*pm)->p_type == PT_NULL)
12382           break;
12383       if (*pm == NULL)
12384         {
12385           m = bfd_zalloc (abfd, sizeof (*m));
12386           if (m == NULL)
12387             return FALSE;
12388
12389           m->p_type = PT_NULL;
12390           *pm = m;
12391         }
12392     }
12393
12394   return TRUE;
12395 }
12396 \f
12397 /* Return the section that should be marked against GC for a given
12398    relocation.  */
12399
12400 asection *
12401 _bfd_mips_elf_gc_mark_hook (asection *sec,
12402                             struct bfd_link_info *info,
12403                             Elf_Internal_Rela *rel,
12404                             struct elf_link_hash_entry *h,
12405                             Elf_Internal_Sym *sym)
12406 {
12407   /* ??? Do mips16 stub sections need to be handled special?  */
12408
12409   if (h != NULL)
12410     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12411       {
12412       case R_MIPS_GNU_VTINHERIT:
12413       case R_MIPS_GNU_VTENTRY:
12414         return NULL;
12415       }
12416
12417   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12418 }
12419
12420 /* Update the got entry reference counts for the section being removed.  */
12421
12422 bfd_boolean
12423 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12424                              struct bfd_link_info *info ATTRIBUTE_UNUSED,
12425                              asection *sec ATTRIBUTE_UNUSED,
12426                              const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12427 {
12428 #if 0
12429   Elf_Internal_Shdr *symtab_hdr;
12430   struct elf_link_hash_entry **sym_hashes;
12431   bfd_signed_vma *local_got_refcounts;
12432   const Elf_Internal_Rela *rel, *relend;
12433   unsigned long r_symndx;
12434   struct elf_link_hash_entry *h;
12435
12436   if (bfd_link_relocatable (info))
12437     return TRUE;
12438
12439   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12440   sym_hashes = elf_sym_hashes (abfd);
12441   local_got_refcounts = elf_local_got_refcounts (abfd);
12442
12443   relend = relocs + sec->reloc_count;
12444   for (rel = relocs; rel < relend; rel++)
12445     switch (ELF_R_TYPE (abfd, rel->r_info))
12446       {
12447       case R_MIPS16_GOT16:
12448       case R_MIPS16_CALL16:
12449       case R_MIPS_GOT16:
12450       case R_MIPS_CALL16:
12451       case R_MIPS_CALL_HI16:
12452       case R_MIPS_CALL_LO16:
12453       case R_MIPS_GOT_HI16:
12454       case R_MIPS_GOT_LO16:
12455       case R_MIPS_GOT_DISP:
12456       case R_MIPS_GOT_PAGE:
12457       case R_MIPS_GOT_OFST:
12458       case R_MICROMIPS_GOT16:
12459       case R_MICROMIPS_CALL16:
12460       case R_MICROMIPS_CALL_HI16:
12461       case R_MICROMIPS_CALL_LO16:
12462       case R_MICROMIPS_GOT_HI16:
12463       case R_MICROMIPS_GOT_LO16:
12464       case R_MICROMIPS_GOT_DISP:
12465       case R_MICROMIPS_GOT_PAGE:
12466       case R_MICROMIPS_GOT_OFST:
12467         /* ??? It would seem that the existing MIPS code does no sort
12468            of reference counting or whatnot on its GOT and PLT entries,
12469            so it is not possible to garbage collect them at this time.  */
12470         break;
12471
12472       default:
12473         break;
12474       }
12475 #endif
12476
12477   return TRUE;
12478 }
12479
12480 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12481
12482 bfd_boolean
12483 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12484                                       elf_gc_mark_hook_fn gc_mark_hook)
12485 {
12486   bfd *sub;
12487
12488   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12489
12490   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12491     {
12492       asection *o;
12493
12494       if (! is_mips_elf (sub))
12495         continue;
12496
12497       for (o = sub->sections; o != NULL; o = o->next)
12498         if (!o->gc_mark
12499             && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12500                  (bfd_get_section_name (sub, o)))
12501           {
12502             if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12503               return FALSE;
12504           }
12505     }
12506
12507   return TRUE;
12508 }
12509 \f
12510 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12511    hiding the old indirect symbol.  Process additional relocation
12512    information.  Also called for weakdefs, in which case we just let
12513    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12514
12515 void
12516 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12517                                     struct elf_link_hash_entry *dir,
12518                                     struct elf_link_hash_entry *ind)
12519 {
12520   struct mips_elf_link_hash_entry *dirmips, *indmips;
12521
12522   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12523
12524   dirmips = (struct mips_elf_link_hash_entry *) dir;
12525   indmips = (struct mips_elf_link_hash_entry *) ind;
12526   /* Any absolute non-dynamic relocations against an indirect or weak
12527      definition will be against the target symbol.  */
12528   if (indmips->has_static_relocs)
12529     dirmips->has_static_relocs = TRUE;
12530
12531   if (ind->root.type != bfd_link_hash_indirect)
12532     return;
12533
12534   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12535   if (indmips->readonly_reloc)
12536     dirmips->readonly_reloc = TRUE;
12537   if (indmips->no_fn_stub)
12538     dirmips->no_fn_stub = TRUE;
12539   if (indmips->fn_stub)
12540     {
12541       dirmips->fn_stub = indmips->fn_stub;
12542       indmips->fn_stub = NULL;
12543     }
12544   if (indmips->need_fn_stub)
12545     {
12546       dirmips->need_fn_stub = TRUE;
12547       indmips->need_fn_stub = FALSE;
12548     }
12549   if (indmips->call_stub)
12550     {
12551       dirmips->call_stub = indmips->call_stub;
12552       indmips->call_stub = NULL;
12553     }
12554   if (indmips->call_fp_stub)
12555     {
12556       dirmips->call_fp_stub = indmips->call_fp_stub;
12557       indmips->call_fp_stub = NULL;
12558     }
12559   if (indmips->global_got_area < dirmips->global_got_area)
12560     dirmips->global_got_area = indmips->global_got_area;
12561   if (indmips->global_got_area < GGA_NONE)
12562     indmips->global_got_area = GGA_NONE;
12563   if (indmips->has_nonpic_branches)
12564     dirmips->has_nonpic_branches = TRUE;
12565 }
12566 \f
12567 #define PDR_SIZE 32
12568
12569 bfd_boolean
12570 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12571                             struct bfd_link_info *info)
12572 {
12573   asection *o;
12574   bfd_boolean ret = FALSE;
12575   unsigned char *tdata;
12576   size_t i, skip;
12577
12578   o = bfd_get_section_by_name (abfd, ".pdr");
12579   if (! o)
12580     return FALSE;
12581   if (o->size == 0)
12582     return FALSE;
12583   if (o->size % PDR_SIZE != 0)
12584     return FALSE;
12585   if (o->output_section != NULL
12586       && bfd_is_abs_section (o->output_section))
12587     return FALSE;
12588
12589   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12590   if (! tdata)
12591     return FALSE;
12592
12593   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12594                                             info->keep_memory);
12595   if (!cookie->rels)
12596     {
12597       free (tdata);
12598       return FALSE;
12599     }
12600
12601   cookie->rel = cookie->rels;
12602   cookie->relend = cookie->rels + o->reloc_count;
12603
12604   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12605     {
12606       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12607         {
12608           tdata[i] = 1;
12609           skip ++;
12610         }
12611     }
12612
12613   if (skip != 0)
12614     {
12615       mips_elf_section_data (o)->u.tdata = tdata;
12616       if (o->rawsize == 0)
12617         o->rawsize = o->size;
12618       o->size -= skip * PDR_SIZE;
12619       ret = TRUE;
12620     }
12621   else
12622     free (tdata);
12623
12624   if (! info->keep_memory)
12625     free (cookie->rels);
12626
12627   return ret;
12628 }
12629
12630 bfd_boolean
12631 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12632 {
12633   if (strcmp (sec->name, ".pdr") == 0)
12634     return TRUE;
12635   return FALSE;
12636 }
12637
12638 bfd_boolean
12639 _bfd_mips_elf_write_section (bfd *output_bfd,
12640                              struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12641                              asection *sec, bfd_byte *contents)
12642 {
12643   bfd_byte *to, *from, *end;
12644   int i;
12645
12646   if (strcmp (sec->name, ".pdr") != 0)
12647     return FALSE;
12648
12649   if (mips_elf_section_data (sec)->u.tdata == NULL)
12650     return FALSE;
12651
12652   to = contents;
12653   end = contents + sec->size;
12654   for (from = contents, i = 0;
12655        from < end;
12656        from += PDR_SIZE, i++)
12657     {
12658       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12659         continue;
12660       if (to != from)
12661         memcpy (to, from, PDR_SIZE);
12662       to += PDR_SIZE;
12663     }
12664   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12665                             sec->output_offset, sec->size);
12666   return TRUE;
12667 }
12668 \f
12669 /* microMIPS code retains local labels for linker relaxation.  Omit them
12670    from output by default for clarity.  */
12671
12672 bfd_boolean
12673 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12674 {
12675   return _bfd_elf_is_local_label_name (abfd, sym->name);
12676 }
12677
12678 /* MIPS ELF uses a special find_nearest_line routine in order the
12679    handle the ECOFF debugging information.  */
12680
12681 struct mips_elf_find_line
12682 {
12683   struct ecoff_debug_info d;
12684   struct ecoff_find_line i;
12685 };
12686
12687 bfd_boolean
12688 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12689                                  asection *section, bfd_vma offset,
12690                                  const char **filename_ptr,
12691                                  const char **functionname_ptr,
12692                                  unsigned int *line_ptr,
12693                                  unsigned int *discriminator_ptr)
12694 {
12695   asection *msec;
12696
12697   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12698                                      filename_ptr, functionname_ptr,
12699                                      line_ptr, discriminator_ptr,
12700                                      dwarf_debug_sections,
12701                                      ABI_64_P (abfd) ? 8 : 0,
12702                                      &elf_tdata (abfd)->dwarf2_find_line_info))
12703     return TRUE;
12704
12705   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12706                                      filename_ptr, functionname_ptr,
12707                                      line_ptr))
12708     return TRUE;
12709
12710   msec = bfd_get_section_by_name (abfd, ".mdebug");
12711   if (msec != NULL)
12712     {
12713       flagword origflags;
12714       struct mips_elf_find_line *fi;
12715       const struct ecoff_debug_swap * const swap =
12716         get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12717
12718       /* If we are called during a link, mips_elf_final_link may have
12719          cleared the SEC_HAS_CONTENTS field.  We force it back on here
12720          if appropriate (which it normally will be).  */
12721       origflags = msec->flags;
12722       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12723         msec->flags |= SEC_HAS_CONTENTS;
12724
12725       fi = mips_elf_tdata (abfd)->find_line_info;
12726       if (fi == NULL)
12727         {
12728           bfd_size_type external_fdr_size;
12729           char *fraw_src;
12730           char *fraw_end;
12731           struct fdr *fdr_ptr;
12732           bfd_size_type amt = sizeof (struct mips_elf_find_line);
12733
12734           fi = bfd_zalloc (abfd, amt);
12735           if (fi == NULL)
12736             {
12737               msec->flags = origflags;
12738               return FALSE;
12739             }
12740
12741           if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12742             {
12743               msec->flags = origflags;
12744               return FALSE;
12745             }
12746
12747           /* Swap in the FDR information.  */
12748           amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12749           fi->d.fdr = bfd_alloc (abfd, amt);
12750           if (fi->d.fdr == NULL)
12751             {
12752               msec->flags = origflags;
12753               return FALSE;
12754             }
12755           external_fdr_size = swap->external_fdr_size;
12756           fdr_ptr = fi->d.fdr;
12757           fraw_src = (char *) fi->d.external_fdr;
12758           fraw_end = (fraw_src
12759                       + fi->d.symbolic_header.ifdMax * external_fdr_size);
12760           for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12761             (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12762
12763           mips_elf_tdata (abfd)->find_line_info = fi;
12764
12765           /* Note that we don't bother to ever free this information.
12766              find_nearest_line is either called all the time, as in
12767              objdump -l, so the information should be saved, or it is
12768              rarely called, as in ld error messages, so the memory
12769              wasted is unimportant.  Still, it would probably be a
12770              good idea for free_cached_info to throw it away.  */
12771         }
12772
12773       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12774                                   &fi->i, filename_ptr, functionname_ptr,
12775                                   line_ptr))
12776         {
12777           msec->flags = origflags;
12778           return TRUE;
12779         }
12780
12781       msec->flags = origflags;
12782     }
12783
12784   /* Fall back on the generic ELF find_nearest_line routine.  */
12785
12786   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12787                                      filename_ptr, functionname_ptr,
12788                                      line_ptr, discriminator_ptr);
12789 }
12790
12791 bfd_boolean
12792 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12793                                  const char **filename_ptr,
12794                                  const char **functionname_ptr,
12795                                  unsigned int *line_ptr)
12796 {
12797   bfd_boolean found;
12798   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12799                                          functionname_ptr, line_ptr,
12800                                          & elf_tdata (abfd)->dwarf2_find_line_info);
12801   return found;
12802 }
12803
12804 \f
12805 /* When are writing out the .options or .MIPS.options section,
12806    remember the bytes we are writing out, so that we can install the
12807    GP value in the section_processing routine.  */
12808
12809 bfd_boolean
12810 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12811                                     const void *location,
12812                                     file_ptr offset, bfd_size_type count)
12813 {
12814   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12815     {
12816       bfd_byte *c;
12817
12818       if (elf_section_data (section) == NULL)
12819         {
12820           bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12821           section->used_by_bfd = bfd_zalloc (abfd, amt);
12822           if (elf_section_data (section) == NULL)
12823             return FALSE;
12824         }
12825       c = mips_elf_section_data (section)->u.tdata;
12826       if (c == NULL)
12827         {
12828           c = bfd_zalloc (abfd, section->size);
12829           if (c == NULL)
12830             return FALSE;
12831           mips_elf_section_data (section)->u.tdata = c;
12832         }
12833
12834       memcpy (c + offset, location, count);
12835     }
12836
12837   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12838                                         count);
12839 }
12840
12841 /* This is almost identical to bfd_generic_get_... except that some
12842    MIPS relocations need to be handled specially.  Sigh.  */
12843
12844 bfd_byte *
12845 _bfd_elf_mips_get_relocated_section_contents
12846   (bfd *abfd,
12847    struct bfd_link_info *link_info,
12848    struct bfd_link_order *link_order,
12849    bfd_byte *data,
12850    bfd_boolean relocatable,
12851    asymbol **symbols)
12852 {
12853   /* Get enough memory to hold the stuff */
12854   bfd *input_bfd = link_order->u.indirect.section->owner;
12855   asection *input_section = link_order->u.indirect.section;
12856   bfd_size_type sz;
12857
12858   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12859   arelent **reloc_vector = NULL;
12860   long reloc_count;
12861
12862   if (reloc_size < 0)
12863     goto error_return;
12864
12865   reloc_vector = bfd_malloc (reloc_size);
12866   if (reloc_vector == NULL && reloc_size != 0)
12867     goto error_return;
12868
12869   /* read in the section */
12870   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12871   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12872     goto error_return;
12873
12874   reloc_count = bfd_canonicalize_reloc (input_bfd,
12875                                         input_section,
12876                                         reloc_vector,
12877                                         symbols);
12878   if (reloc_count < 0)
12879     goto error_return;
12880
12881   if (reloc_count > 0)
12882     {
12883       arelent **parent;
12884       /* for mips */
12885       int gp_found;
12886       bfd_vma gp = 0x12345678;  /* initialize just to shut gcc up */
12887
12888       {
12889         struct bfd_hash_entry *h;
12890         struct bfd_link_hash_entry *lh;
12891         /* Skip all this stuff if we aren't mixing formats.  */
12892         if (abfd && input_bfd
12893             && abfd->xvec == input_bfd->xvec)
12894           lh = 0;
12895         else
12896           {
12897             h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12898             lh = (struct bfd_link_hash_entry *) h;
12899           }
12900       lookup:
12901         if (lh)
12902           {
12903             switch (lh->type)
12904               {
12905               case bfd_link_hash_undefined:
12906               case bfd_link_hash_undefweak:
12907               case bfd_link_hash_common:
12908                 gp_found = 0;
12909                 break;
12910               case bfd_link_hash_defined:
12911               case bfd_link_hash_defweak:
12912                 gp_found = 1;
12913                 gp = lh->u.def.value;
12914                 break;
12915               case bfd_link_hash_indirect:
12916               case bfd_link_hash_warning:
12917                 lh = lh->u.i.link;
12918                 /* @@FIXME  ignoring warning for now */
12919                 goto lookup;
12920               case bfd_link_hash_new:
12921               default:
12922                 abort ();
12923               }
12924           }
12925         else
12926           gp_found = 0;
12927       }
12928       /* end mips */
12929       for (parent = reloc_vector; *parent != NULL; parent++)
12930         {
12931           char *error_message = NULL;
12932           bfd_reloc_status_type r;
12933
12934           /* Specific to MIPS: Deal with relocation types that require
12935              knowing the gp of the output bfd.  */
12936           asymbol *sym = *(*parent)->sym_ptr_ptr;
12937
12938           /* If we've managed to find the gp and have a special
12939              function for the relocation then go ahead, else default
12940              to the generic handling.  */
12941           if (gp_found
12942               && (*parent)->howto->special_function
12943               == _bfd_mips_elf32_gprel16_reloc)
12944             r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12945                                                input_section, relocatable,
12946                                                data, gp);
12947           else
12948             r = bfd_perform_relocation (input_bfd, *parent, data,
12949                                         input_section,
12950                                         relocatable ? abfd : NULL,
12951                                         &error_message);
12952
12953           if (relocatable)
12954             {
12955               asection *os = input_section->output_section;
12956
12957               /* A partial link, so keep the relocs */
12958               os->orelocation[os->reloc_count] = *parent;
12959               os->reloc_count++;
12960             }
12961
12962           if (r != bfd_reloc_ok)
12963             {
12964               switch (r)
12965                 {
12966                 case bfd_reloc_undefined:
12967                   (*link_info->callbacks->undefined_symbol)
12968                     (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12969                      input_bfd, input_section, (*parent)->address, TRUE);
12970                   break;
12971                 case bfd_reloc_dangerous:
12972                   BFD_ASSERT (error_message != NULL);
12973                   (*link_info->callbacks->reloc_dangerous)
12974                     (link_info, error_message,
12975                      input_bfd, input_section, (*parent)->address);
12976                   break;
12977                 case bfd_reloc_overflow:
12978                   (*link_info->callbacks->reloc_overflow)
12979                     (link_info, NULL,
12980                      bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12981                      (*parent)->howto->name, (*parent)->addend,
12982                      input_bfd, input_section, (*parent)->address);
12983                   break;
12984                 case bfd_reloc_outofrange:
12985                 default:
12986                   abort ();
12987                   break;
12988                 }
12989
12990             }
12991         }
12992     }
12993   if (reloc_vector != NULL)
12994     free (reloc_vector);
12995   return data;
12996
12997 error_return:
12998   if (reloc_vector != NULL)
12999     free (reloc_vector);
13000   return NULL;
13001 }
13002 \f
13003 static bfd_boolean
13004 mips_elf_relax_delete_bytes (bfd *abfd,
13005                              asection *sec, bfd_vma addr, int count)
13006 {
13007   Elf_Internal_Shdr *symtab_hdr;
13008   unsigned int sec_shndx;
13009   bfd_byte *contents;
13010   Elf_Internal_Rela *irel, *irelend;
13011   Elf_Internal_Sym *isym;
13012   Elf_Internal_Sym *isymend;
13013   struct elf_link_hash_entry **sym_hashes;
13014   struct elf_link_hash_entry **end_hashes;
13015   struct elf_link_hash_entry **start_hashes;
13016   unsigned int symcount;
13017
13018   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13019   contents = elf_section_data (sec)->this_hdr.contents;
13020
13021   irel = elf_section_data (sec)->relocs;
13022   irelend = irel + sec->reloc_count;
13023
13024   /* Actually delete the bytes.  */
13025   memmove (contents + addr, contents + addr + count,
13026            (size_t) (sec->size - addr - count));
13027   sec->size -= count;
13028
13029   /* Adjust all the relocs.  */
13030   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13031     {
13032       /* Get the new reloc address.  */
13033       if (irel->r_offset > addr)
13034         irel->r_offset -= count;
13035     }
13036
13037   BFD_ASSERT (addr % 2 == 0);
13038   BFD_ASSERT (count % 2 == 0);
13039
13040   /* Adjust the local symbols defined in this section.  */
13041   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13042   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13043   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13044     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13045       isym->st_value -= count;
13046
13047   /* Now adjust the global symbols defined in this section.  */
13048   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13049               - symtab_hdr->sh_info);
13050   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13051   end_hashes = sym_hashes + symcount;
13052
13053   for (; sym_hashes < end_hashes; sym_hashes++)
13054     {
13055       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13056
13057       if ((sym_hash->root.type == bfd_link_hash_defined
13058            || sym_hash->root.type == bfd_link_hash_defweak)
13059           && sym_hash->root.u.def.section == sec)
13060         {
13061           bfd_vma value = sym_hash->root.u.def.value;
13062
13063           if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13064             value &= MINUS_TWO;
13065           if (value > addr)
13066             sym_hash->root.u.def.value -= count;
13067         }
13068     }
13069
13070   return TRUE;
13071 }
13072
13073
13074 /* Opcodes needed for microMIPS relaxation as found in
13075    opcodes/micromips-opc.c.  */
13076
13077 struct opcode_descriptor {
13078   unsigned long match;
13079   unsigned long mask;
13080 };
13081
13082 /* The $ra register aka $31.  */
13083
13084 #define RA 31
13085
13086 /* 32-bit instruction format register fields.  */
13087
13088 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13089 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13090
13091 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13092
13093 #define OP16_VALID_REG(r) \
13094   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13095
13096
13097 /* 32-bit and 16-bit branches.  */
13098
13099 static const struct opcode_descriptor b_insns_32[] = {
13100   { /* "b",     "p",            */ 0x40400000, 0xffff0000 }, /* bgez 0 */
13101   { /* "b",     "p",            */ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13102   { 0, 0 }  /* End marker for find_match().  */
13103 };
13104
13105 static const struct opcode_descriptor bc_insn_32 =
13106   { /* "bc(1|2)(ft)", "N,p",    */ 0x42800000, 0xfec30000 };
13107
13108 static const struct opcode_descriptor bz_insn_32 =
13109   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 };
13110
13111 static const struct opcode_descriptor bzal_insn_32 =
13112   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 };
13113
13114 static const struct opcode_descriptor beq_insn_32 =
13115   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 };
13116
13117 static const struct opcode_descriptor b_insn_16 =
13118   { /* "b",     "mD",           */ 0xcc00,     0xfc00 };
13119
13120 static const struct opcode_descriptor bz_insn_16 =
13121   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 };
13122
13123
13124 /* 32-bit and 16-bit branch EQ and NE zero.  */
13125
13126 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13127    eq and second the ne.  This convention is used when replacing a
13128    32-bit BEQ/BNE with the 16-bit version.  */
13129
13130 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13131
13132 static const struct opcode_descriptor bz_rs_insns_32[] = {
13133   { /* "beqz",  "s,p",          */ 0x94000000, 0xffe00000 },
13134   { /* "bnez",  "s,p",          */ 0xb4000000, 0xffe00000 },
13135   { 0, 0 }  /* End marker for find_match().  */
13136 };
13137
13138 static const struct opcode_descriptor bz_rt_insns_32[] = {
13139   { /* "beqz",  "t,p",          */ 0x94000000, 0xfc01f000 },
13140   { /* "bnez",  "t,p",          */ 0xb4000000, 0xfc01f000 },
13141   { 0, 0 }  /* End marker for find_match().  */
13142 };
13143
13144 static const struct opcode_descriptor bzc_insns_32[] = {
13145   { /* "beqzc", "s,p",          */ 0x40e00000, 0xffe00000 },
13146   { /* "bnezc", "s,p",          */ 0x40a00000, 0xffe00000 },
13147   { 0, 0 }  /* End marker for find_match().  */
13148 };
13149
13150 static const struct opcode_descriptor bz_insns_16[] = {
13151   { /* "beqz",  "md,mE",        */ 0x8c00,     0xfc00 },
13152   { /* "bnez",  "md,mE",        */ 0xac00,     0xfc00 },
13153   { 0, 0 }  /* End marker for find_match().  */
13154 };
13155
13156 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13157
13158 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13159 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13160
13161
13162 /* 32-bit instructions with a delay slot.  */
13163
13164 static const struct opcode_descriptor jal_insn_32_bd16 =
13165   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 };
13166
13167 static const struct opcode_descriptor jal_insn_32_bd32 =
13168   { /* "jal",   "a",            */ 0xf4000000, 0xfc000000 };
13169
13170 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13171   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 };
13172
13173 static const struct opcode_descriptor j_insn_32 =
13174   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 };
13175
13176 static const struct opcode_descriptor jalr_insn_32 =
13177   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff };
13178
13179 /* This table can be compacted, because no opcode replacement is made.  */
13180
13181 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13182   { /* "jals",  "a",            */ 0x74000000, 0xfc000000 },
13183
13184   { /* "jalrs[.hb]", "t,s",     */ 0x00004f3c, 0xfc00efff },
13185   { /* "b(ge|lt)zals", "s,p",   */ 0x42200000, 0xffa00000 },
13186
13187   { /* "b(g|l)(e|t)z", "s,p",   */ 0x40000000, 0xff200000 },
13188   { /* "b(eq|ne)", "s,t,p",     */ 0x94000000, 0xdc000000 },
13189   { /* "j",     "a",            */ 0xd4000000, 0xfc000000 },
13190   { 0, 0 }  /* End marker for find_match().  */
13191 };
13192
13193 /* This table can be compacted, because no opcode replacement is made.  */
13194
13195 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13196   { /* "jal[x]", "a",           */ 0xf0000000, 0xf8000000 },
13197
13198   { /* "jalr[.hb]", "t,s",      */ 0x00000f3c, 0xfc00efff },
13199   { /* "b(ge|lt)zal", "s,p",    */ 0x40200000, 0xffa00000 },
13200   { 0, 0 }  /* End marker for find_match().  */
13201 };
13202
13203
13204 /* 16-bit instructions with a delay slot.  */
13205
13206 static const struct opcode_descriptor jalr_insn_16_bd16 =
13207   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 };
13208
13209 static const struct opcode_descriptor jalr_insn_16_bd32 =
13210   { /* "jalr",  "my,mj",        */ 0x45c0,     0xffe0 };
13211
13212 static const struct opcode_descriptor jr_insn_16 =
13213   { /* "jr",    "mj",           */ 0x4580,     0xffe0 };
13214
13215 #define JR16_REG(opcode) ((opcode) & 0x1f)
13216
13217 /* This table can be compacted, because no opcode replacement is made.  */
13218
13219 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13220   { /* "jalrs", "my,mj",        */ 0x45e0,     0xffe0 },
13221
13222   { /* "b",     "mD",           */ 0xcc00,     0xfc00 },
13223   { /* "b(eq|ne)z", "md,mE",    */ 0x8c00,     0xdc00 },
13224   { /* "jr",    "mj",           */ 0x4580,     0xffe0 },
13225   { 0, 0 }  /* End marker for find_match().  */
13226 };
13227
13228
13229 /* LUI instruction.  */
13230
13231 static const struct opcode_descriptor lui_insn =
13232  { /* "lui",    "s,u",          */ 0x41a00000, 0xffe00000 };
13233
13234
13235 /* ADDIU instruction.  */
13236
13237 static const struct opcode_descriptor addiu_insn =
13238   { /* "addiu", "t,r,j",        */ 0x30000000, 0xfc000000 };
13239
13240 static const struct opcode_descriptor addiupc_insn =
13241   { /* "addiu", "mb,$pc,mQ",    */ 0x78000000, 0xfc000000 };
13242
13243 #define ADDIUPC_REG_FIELD(r) \
13244   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13245
13246
13247 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13248
13249 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13250    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13251 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13252 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13253
13254 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13255 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13256
13257 static const struct opcode_descriptor move_insns_32[] = {
13258   { /* "move",  "d,s",          */ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13259   { /* "move",  "d,s",          */ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13260   { 0, 0 }  /* End marker for find_match().  */
13261 };
13262
13263 static const struct opcode_descriptor move_insn_16 =
13264   { /* "move",  "mp,mj",        */ 0x0c00,     0xfc00 };
13265
13266
13267 /* NOP instructions.  */
13268
13269 static const struct opcode_descriptor nop_insn_32 =
13270   { /* "nop",   "",             */ 0x00000000, 0xffffffff };
13271
13272 static const struct opcode_descriptor nop_insn_16 =
13273   { /* "nop",   "",             */ 0x0c00,     0xffff };
13274
13275
13276 /* Instruction match support.  */
13277
13278 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13279
13280 static int
13281 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13282 {
13283   unsigned long indx;
13284
13285   for (indx = 0; insn[indx].mask != 0; indx++)
13286     if (MATCH (opcode, insn[indx]))
13287       return indx;
13288
13289   return -1;
13290 }
13291
13292
13293 /* Branch and delay slot decoding support.  */
13294
13295 /* If PTR points to what *might* be a 16-bit branch or jump, then
13296    return the minimum length of its delay slot, otherwise return 0.
13297    Non-zero results are not definitive as we might be checking against
13298    the second half of another instruction.  */
13299
13300 static int
13301 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13302 {
13303   unsigned long opcode;
13304   int bdsize;
13305
13306   opcode = bfd_get_16 (abfd, ptr);
13307   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13308     /* 16-bit branch/jump with a 32-bit delay slot.  */
13309     bdsize = 4;
13310   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13311            || find_match (opcode, ds_insns_16_bd16) >= 0)
13312     /* 16-bit branch/jump with a 16-bit delay slot.  */
13313     bdsize = 2;
13314   else
13315     /* No delay slot.  */
13316     bdsize = 0;
13317
13318   return bdsize;
13319 }
13320
13321 /* If PTR points to what *might* be a 32-bit branch or jump, then
13322    return the minimum length of its delay slot, otherwise return 0.
13323    Non-zero results are not definitive as we might be checking against
13324    the second half of another instruction.  */
13325
13326 static int
13327 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13328 {
13329   unsigned long opcode;
13330   int bdsize;
13331
13332   opcode = bfd_get_micromips_32 (abfd, ptr);
13333   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13334     /* 32-bit branch/jump with a 32-bit delay slot.  */
13335     bdsize = 4;
13336   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13337     /* 32-bit branch/jump with a 16-bit delay slot.  */
13338     bdsize = 2;
13339   else
13340     /* No delay slot.  */
13341     bdsize = 0;
13342
13343   return bdsize;
13344 }
13345
13346 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13347    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13348
13349 static bfd_boolean
13350 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13351 {
13352   unsigned long opcode;
13353
13354   opcode = bfd_get_16 (abfd, ptr);
13355   if (MATCH (opcode, b_insn_16)
13356                                                 /* B16  */
13357       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13358                                                 /* JR16  */
13359       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13360                                                 /* BEQZ16, BNEZ16  */
13361       || (MATCH (opcode, jalr_insn_16_bd32)
13362                                                 /* JALR16  */
13363           && reg != JR16_REG (opcode) && reg != RA))
13364     return TRUE;
13365
13366   return FALSE;
13367 }
13368
13369 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13370    then return TRUE, otherwise FALSE.  */
13371
13372 static bfd_boolean
13373 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13374 {
13375   unsigned long opcode;
13376
13377   opcode = bfd_get_micromips_32 (abfd, ptr);
13378   if (MATCH (opcode, j_insn_32)
13379                                                 /* J  */
13380       || MATCH (opcode, bc_insn_32)
13381                                                 /* BC1F, BC1T, BC2F, BC2T  */
13382       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13383                                                 /* JAL, JALX  */
13384       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13385                                                 /* BGEZ, BGTZ, BLEZ, BLTZ  */
13386       || (MATCH (opcode, bzal_insn_32)
13387                                                 /* BGEZAL, BLTZAL  */
13388           && reg != OP32_SREG (opcode) && reg != RA)
13389       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13390                                                 /* JALR, JALR.HB, BEQ, BNE  */
13391           && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13392     return TRUE;
13393
13394   return FALSE;
13395 }
13396
13397 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13398    IRELEND) at OFFSET indicate that there must be a compact branch there,
13399    then return TRUE, otherwise FALSE.  */
13400
13401 static bfd_boolean
13402 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13403                      const Elf_Internal_Rela *internal_relocs,
13404                      const Elf_Internal_Rela *irelend)
13405 {
13406   const Elf_Internal_Rela *irel;
13407   unsigned long opcode;
13408
13409   opcode = bfd_get_micromips_32 (abfd, ptr);
13410   if (find_match (opcode, bzc_insns_32) < 0)
13411     return FALSE;
13412
13413   for (irel = internal_relocs; irel < irelend; irel++)
13414     if (irel->r_offset == offset
13415         && ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13416       return TRUE;
13417
13418   return FALSE;
13419 }
13420
13421 /* Bitsize checking.  */
13422 #define IS_BITSIZE(val, N)                                              \
13423   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))               \
13424     - (1ULL << ((N) - 1))) == (val))
13425
13426 \f
13427 bfd_boolean
13428 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13429                              struct bfd_link_info *link_info,
13430                              bfd_boolean *again)
13431 {
13432   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13433   Elf_Internal_Shdr *symtab_hdr;
13434   Elf_Internal_Rela *internal_relocs;
13435   Elf_Internal_Rela *irel, *irelend;
13436   bfd_byte *contents = NULL;
13437   Elf_Internal_Sym *isymbuf = NULL;
13438
13439   /* Assume nothing changes.  */
13440   *again = FALSE;
13441
13442   /* We don't have to do anything for a relocatable link, if
13443      this section does not have relocs, or if this is not a
13444      code section.  */
13445
13446   if (bfd_link_relocatable (link_info)
13447       || (sec->flags & SEC_RELOC) == 0
13448       || sec->reloc_count == 0
13449       || (sec->flags & SEC_CODE) == 0)
13450     return TRUE;
13451
13452   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13453
13454   /* Get a copy of the native relocations.  */
13455   internal_relocs = (_bfd_elf_link_read_relocs
13456                      (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13457                       link_info->keep_memory));
13458   if (internal_relocs == NULL)
13459     goto error_return;
13460
13461   /* Walk through them looking for relaxing opportunities.  */
13462   irelend = internal_relocs + sec->reloc_count;
13463   for (irel = internal_relocs; irel < irelend; irel++)
13464     {
13465       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13466       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13467       bfd_boolean target_is_micromips_code_p;
13468       unsigned long opcode;
13469       bfd_vma symval;
13470       bfd_vma pcrval;
13471       bfd_byte *ptr;
13472       int fndopc;
13473
13474       /* The number of bytes to delete for relaxation and from where
13475          to delete these bytes starting at irel->r_offset.  */
13476       int delcnt = 0;
13477       int deloff = 0;
13478
13479       /* If this isn't something that can be relaxed, then ignore
13480          this reloc.  */
13481       if (r_type != R_MICROMIPS_HI16
13482           && r_type != R_MICROMIPS_PC16_S1
13483           && r_type != R_MICROMIPS_26_S1)
13484         continue;
13485
13486       /* Get the section contents if we haven't done so already.  */
13487       if (contents == NULL)
13488         {
13489           /* Get cached copy if it exists.  */
13490           if (elf_section_data (sec)->this_hdr.contents != NULL)
13491             contents = elf_section_data (sec)->this_hdr.contents;
13492           /* Go get them off disk.  */
13493           else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13494             goto error_return;
13495         }
13496       ptr = contents + irel->r_offset;
13497
13498       /* Read this BFD's local symbols if we haven't done so already.  */
13499       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13500         {
13501           isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13502           if (isymbuf == NULL)
13503             isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13504                                             symtab_hdr->sh_info, 0,
13505                                             NULL, NULL, NULL);
13506           if (isymbuf == NULL)
13507             goto error_return;
13508         }
13509
13510       /* Get the value of the symbol referred to by the reloc.  */
13511       if (r_symndx < symtab_hdr->sh_info)
13512         {
13513           /* A local symbol.  */
13514           Elf_Internal_Sym *isym;
13515           asection *sym_sec;
13516
13517           isym = isymbuf + r_symndx;
13518           if (isym->st_shndx == SHN_UNDEF)
13519             sym_sec = bfd_und_section_ptr;
13520           else if (isym->st_shndx == SHN_ABS)
13521             sym_sec = bfd_abs_section_ptr;
13522           else if (isym->st_shndx == SHN_COMMON)
13523             sym_sec = bfd_com_section_ptr;
13524           else
13525             sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13526           symval = (isym->st_value
13527                     + sym_sec->output_section->vma
13528                     + sym_sec->output_offset);
13529           target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13530         }
13531       else
13532         {
13533           unsigned long indx;
13534           struct elf_link_hash_entry *h;
13535
13536           /* An external symbol.  */
13537           indx = r_symndx - symtab_hdr->sh_info;
13538           h = elf_sym_hashes (abfd)[indx];
13539           BFD_ASSERT (h != NULL);
13540
13541           if (h->root.type != bfd_link_hash_defined
13542               && h->root.type != bfd_link_hash_defweak)
13543             /* This appears to be a reference to an undefined
13544                symbol.  Just ignore it -- it will be caught by the
13545                regular reloc processing.  */
13546             continue;
13547
13548           symval = (h->root.u.def.value
13549                     + h->root.u.def.section->output_section->vma
13550                     + h->root.u.def.section->output_offset);
13551           target_is_micromips_code_p = (!h->needs_plt
13552                                         && ELF_ST_IS_MICROMIPS (h->other));
13553         }
13554
13555
13556       /* For simplicity of coding, we are going to modify the
13557          section contents, the section relocs, and the BFD symbol
13558          table.  We must tell the rest of the code not to free up this
13559          information.  It would be possible to instead create a table
13560          of changes which have to be made, as is done in coff-mips.c;
13561          that would be more work, but would require less memory when
13562          the linker is run.  */
13563
13564       /* Only 32-bit instructions relaxed.  */
13565       if (irel->r_offset + 4 > sec->size)
13566         continue;
13567
13568       opcode = bfd_get_micromips_32 (abfd, ptr);
13569
13570       /* This is the pc-relative distance from the instruction the
13571          relocation is applied to, to the symbol referred.  */
13572       pcrval = (symval
13573                 - (sec->output_section->vma + sec->output_offset)
13574                 - irel->r_offset);
13575
13576       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13577          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13578          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13579
13580            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13581
13582          where pcrval has first to be adjusted to apply against the LO16
13583          location (we make the adjustment later on, when we have figured
13584          out the offset).  */
13585       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13586         {
13587           bfd_boolean bzc = FALSE;
13588           unsigned long nextopc;
13589           unsigned long reg;
13590           bfd_vma offset;
13591
13592           /* Give up if the previous reloc was a HI16 against this symbol
13593              too.  */
13594           if (irel > internal_relocs
13595               && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13596               && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13597             continue;
13598
13599           /* Or if the next reloc is not a LO16 against this symbol.  */
13600           if (irel + 1 >= irelend
13601               || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13602               || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13603             continue;
13604
13605           /* Or if the second next reloc is a LO16 against this symbol too.  */
13606           if (irel + 2 >= irelend
13607               && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13608               && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13609             continue;
13610
13611           /* See if the LUI instruction *might* be in a branch delay slot.
13612              We check whether what looks like a 16-bit branch or jump is
13613              actually an immediate argument to a compact branch, and let
13614              it through if so.  */
13615           if (irel->r_offset >= 2
13616               && check_br16_dslot (abfd, ptr - 2)
13617               && !(irel->r_offset >= 4
13618                    && (bzc = check_relocated_bzc (abfd,
13619                                                   ptr - 4, irel->r_offset - 4,
13620                                                   internal_relocs, irelend))))
13621             continue;
13622           if (irel->r_offset >= 4
13623               && !bzc
13624               && check_br32_dslot (abfd, ptr - 4))
13625             continue;
13626
13627           reg = OP32_SREG (opcode);
13628
13629           /* We only relax adjacent instructions or ones separated with
13630              a branch or jump that has a delay slot.  The branch or jump
13631              must not fiddle with the register used to hold the address.
13632              Subtract 4 for the LUI itself.  */
13633           offset = irel[1].r_offset - irel[0].r_offset;
13634           switch (offset - 4)
13635             {
13636             case 0:
13637               break;
13638             case 2:
13639               if (check_br16 (abfd, ptr + 4, reg))
13640                 break;
13641               continue;
13642             case 4:
13643               if (check_br32 (abfd, ptr + 4, reg))
13644                 break;
13645               continue;
13646             default:
13647               continue;
13648             }
13649
13650           nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13651
13652           /* Give up unless the same register is used with both
13653              relocations.  */
13654           if (OP32_SREG (nextopc) != reg)
13655             continue;
13656
13657           /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13658              and rounding up to take masking of the two LSBs into account.  */
13659           pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13660
13661           /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13662           if (IS_BITSIZE (symval, 16))
13663             {
13664               /* Fix the relocation's type.  */
13665               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13666
13667               /* Instructions using R_MICROMIPS_LO16 have the base or
13668                  source register in bits 20:16.  This register becomes $0
13669                  (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13670               nextopc &= ~0x001f0000;
13671               bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13672                           contents + irel[1].r_offset);
13673             }
13674
13675           /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13676              We add 4 to take LUI deletion into account while checking
13677              the PC-relative distance.  */
13678           else if (symval % 4 == 0
13679                    && IS_BITSIZE (pcrval + 4, 25)
13680                    && MATCH (nextopc, addiu_insn)
13681                    && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13682                    && OP16_VALID_REG (OP32_TREG (nextopc)))
13683             {
13684               /* Fix the relocation's type.  */
13685               irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13686
13687               /* Replace ADDIU with the ADDIUPC version.  */
13688               nextopc = (addiupc_insn.match
13689                          | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13690
13691               bfd_put_micromips_32 (abfd, nextopc,
13692                                     contents + irel[1].r_offset);
13693             }
13694
13695           /* Can't do anything, give up, sigh...  */
13696           else
13697             continue;
13698
13699           /* Fix the relocation's type.  */
13700           irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13701
13702           /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13703           delcnt = 4;
13704           deloff = 0;
13705         }
13706
13707       /* Compact branch relaxation -- due to the multitude of macros
13708          employed by the compiler/assembler, compact branches are not
13709          always generated.  Obviously, this can/will be fixed elsewhere,
13710          but there is no drawback in double checking it here.  */
13711       else if (r_type == R_MICROMIPS_PC16_S1
13712                && irel->r_offset + 5 < sec->size
13713                && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13714                    || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13715                && ((!insn32
13716                     && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13717                                         nop_insn_16) ? 2 : 0))
13718                    || (irel->r_offset + 7 < sec->size
13719                        && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13720                                                                  ptr + 4),
13721                                            nop_insn_32) ? 4 : 0))))
13722         {
13723           unsigned long reg;
13724
13725           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13726
13727           /* Replace BEQZ/BNEZ with the compact version.  */
13728           opcode = (bzc_insns_32[fndopc].match
13729                     | BZC32_REG_FIELD (reg)
13730                     | (opcode & 0xffff));               /* Addend value.  */
13731
13732           bfd_put_micromips_32 (abfd, opcode, ptr);
13733
13734           /* Delete the delay slot NOP: two or four bytes from
13735              irel->offset + 4; delcnt has already been set above.  */
13736           deloff = 4;
13737         }
13738
13739       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13740          to check the distance from the next instruction, so subtract 2.  */
13741       else if (!insn32
13742                && r_type == R_MICROMIPS_PC16_S1
13743                && IS_BITSIZE (pcrval - 2, 11)
13744                && find_match (opcode, b_insns_32) >= 0)
13745         {
13746           /* Fix the relocation's type.  */
13747           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13748
13749           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13750           bfd_put_16 (abfd,
13751                       (b_insn_16.match
13752                        | (opcode & 0x3ff)),             /* Addend value.  */
13753                       ptr);
13754
13755           /* Delete 2 bytes from irel->r_offset + 2.  */
13756           delcnt = 2;
13757           deloff = 2;
13758         }
13759
13760       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13761          to check the distance from the next instruction, so subtract 2.  */
13762       else if (!insn32
13763                && r_type == R_MICROMIPS_PC16_S1
13764                && IS_BITSIZE (pcrval - 2, 8)
13765                && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13766                     && OP16_VALID_REG (OP32_SREG (opcode)))
13767                    || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13768                        && OP16_VALID_REG (OP32_TREG (opcode)))))
13769         {
13770           unsigned long reg;
13771
13772           reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13773
13774           /* Fix the relocation's type.  */
13775           irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13776
13777           /* Replace the 32-bit opcode with a 16-bit opcode.  */
13778           bfd_put_16 (abfd,
13779                       (bz_insns_16[fndopc].match
13780                        | BZ16_REG_FIELD (reg)
13781                        | (opcode & 0x7f)),              /* Addend value.  */
13782                       ptr);
13783
13784           /* Delete 2 bytes from irel->r_offset + 2.  */
13785           delcnt = 2;
13786           deloff = 2;
13787         }
13788
13789       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13790       else if (!insn32
13791                && r_type == R_MICROMIPS_26_S1
13792                && target_is_micromips_code_p
13793                && irel->r_offset + 7 < sec->size
13794                && MATCH (opcode, jal_insn_32_bd32))
13795         {
13796           unsigned long n32opc;
13797           bfd_boolean relaxed = FALSE;
13798
13799           n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13800
13801           if (MATCH (n32opc, nop_insn_32))
13802             {
13803               /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13804               bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13805
13806               relaxed = TRUE;
13807             }
13808           else if (find_match (n32opc, move_insns_32) >= 0)
13809             {
13810               /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13811               bfd_put_16 (abfd,
13812                           (move_insn_16.match
13813                            | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13814                            | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13815                           ptr + 4);
13816
13817               relaxed = TRUE;
13818             }
13819           /* Other 32-bit instructions relaxable to 16-bit
13820              instructions will be handled here later.  */
13821
13822           if (relaxed)
13823             {
13824               /* JAL with 32-bit delay slot that is changed to a JALS
13825                  with 16-bit delay slot.  */
13826               bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13827
13828               /* Delete 2 bytes from irel->r_offset + 6.  */
13829               delcnt = 2;
13830               deloff = 6;
13831             }
13832         }
13833
13834       if (delcnt != 0)
13835         {
13836           /* Note that we've changed the relocs, section contents, etc.  */
13837           elf_section_data (sec)->relocs = internal_relocs;
13838           elf_section_data (sec)->this_hdr.contents = contents;
13839           symtab_hdr->contents = (unsigned char *) isymbuf;
13840
13841           /* Delete bytes depending on the delcnt and deloff.  */
13842           if (!mips_elf_relax_delete_bytes (abfd, sec,
13843                                             irel->r_offset + deloff, delcnt))
13844             goto error_return;
13845
13846           /* That will change things, so we should relax again.
13847              Note that this is not required, and it may be slow.  */
13848           *again = TRUE;
13849         }
13850     }
13851
13852   if (isymbuf != NULL
13853       && symtab_hdr->contents != (unsigned char *) isymbuf)
13854     {
13855       if (! link_info->keep_memory)
13856         free (isymbuf);
13857       else
13858         {
13859           /* Cache the symbols for elf_link_input_bfd.  */
13860           symtab_hdr->contents = (unsigned char *) isymbuf;
13861         }
13862     }
13863
13864   if (contents != NULL
13865       && elf_section_data (sec)->this_hdr.contents != contents)
13866     {
13867       if (! link_info->keep_memory)
13868         free (contents);
13869       else
13870         {
13871           /* Cache the section contents for elf_link_input_bfd.  */
13872           elf_section_data (sec)->this_hdr.contents = contents;
13873         }
13874     }
13875
13876   if (internal_relocs != NULL
13877       && elf_section_data (sec)->relocs != internal_relocs)
13878     free (internal_relocs);
13879
13880   return TRUE;
13881
13882  error_return:
13883   if (isymbuf != NULL
13884       && symtab_hdr->contents != (unsigned char *) isymbuf)
13885     free (isymbuf);
13886   if (contents != NULL
13887       && elf_section_data (sec)->this_hdr.contents != contents)
13888     free (contents);
13889   if (internal_relocs != NULL
13890       && elf_section_data (sec)->relocs != internal_relocs)
13891     free (internal_relocs);
13892
13893   return FALSE;
13894 }
13895 \f
13896 /* Create a MIPS ELF linker hash table.  */
13897
13898 struct bfd_link_hash_table *
13899 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13900 {
13901   struct mips_elf_link_hash_table *ret;
13902   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13903
13904   ret = bfd_zmalloc (amt);
13905   if (ret == NULL)
13906     return NULL;
13907
13908   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13909                                       mips_elf_link_hash_newfunc,
13910                                       sizeof (struct mips_elf_link_hash_entry),
13911                                       MIPS_ELF_DATA))
13912     {
13913       free (ret);
13914       return NULL;
13915     }
13916   ret->root.init_plt_refcount.plist = NULL;
13917   ret->root.init_plt_offset.plist = NULL;
13918
13919   return &ret->root.root;
13920 }
13921
13922 /* Likewise, but indicate that the target is VxWorks.  */
13923
13924 struct bfd_link_hash_table *
13925 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13926 {
13927   struct bfd_link_hash_table *ret;
13928
13929   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13930   if (ret)
13931     {
13932       struct mips_elf_link_hash_table *htab;
13933
13934       htab = (struct mips_elf_link_hash_table *) ret;
13935       htab->use_plts_and_copy_relocs = TRUE;
13936       htab->is_vxworks = TRUE;
13937     }
13938   return ret;
13939 }
13940
13941 /* A function that the linker calls if we are allowed to use PLTs
13942    and copy relocs.  */
13943
13944 void
13945 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13946 {
13947   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13948 }
13949
13950 /* A function that the linker calls to select between all or only
13951    32-bit microMIPS instructions.  */
13952
13953 void
13954 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13955 {
13956   mips_elf_hash_table (info)->insn32 = on;
13957 }
13958 \f
13959 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13960
13961 struct mips_mach_extension
13962 {
13963   unsigned long extension, base;
13964 };
13965
13966
13967 /* An array describing how BFD machines relate to one another.  The entries
13968    are ordered topologically with MIPS I extensions listed last.  */
13969
13970 static const struct mips_mach_extension mips_mach_extensions[] =
13971 {
13972   /* MIPS64r2 extensions.  */
13973   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
13974   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13975   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13976   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13977   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
13978
13979   /* MIPS64 extensions.  */
13980   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
13981   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
13982   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
13983
13984   /* MIPS V extensions.  */
13985   { bfd_mach_mipsisa64, bfd_mach_mips5 },
13986
13987   /* R10000 extensions.  */
13988   { bfd_mach_mips12000, bfd_mach_mips10000 },
13989   { bfd_mach_mips14000, bfd_mach_mips10000 },
13990   { bfd_mach_mips16000, bfd_mach_mips10000 },
13991
13992   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
13993      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
13994      better to allow vr5400 and vr5500 code to be merged anyway, since
13995      many libraries will just use the core ISA.  Perhaps we could add
13996      some sort of ASE flag if this ever proves a problem.  */
13997   { bfd_mach_mips5500, bfd_mach_mips5400 },
13998   { bfd_mach_mips5400, bfd_mach_mips5000 },
13999
14000   /* MIPS IV extensions.  */
14001   { bfd_mach_mips5, bfd_mach_mips8000 },
14002   { bfd_mach_mips10000, bfd_mach_mips8000 },
14003   { bfd_mach_mips5000, bfd_mach_mips8000 },
14004   { bfd_mach_mips7000, bfd_mach_mips8000 },
14005   { bfd_mach_mips9000, bfd_mach_mips8000 },
14006
14007   /* VR4100 extensions.  */
14008   { bfd_mach_mips4120, bfd_mach_mips4100 },
14009   { bfd_mach_mips4111, bfd_mach_mips4100 },
14010
14011   /* MIPS III extensions.  */
14012   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14013   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14014   { bfd_mach_mips8000, bfd_mach_mips4000 },
14015   { bfd_mach_mips4650, bfd_mach_mips4000 },
14016   { bfd_mach_mips4600, bfd_mach_mips4000 },
14017   { bfd_mach_mips4400, bfd_mach_mips4000 },
14018   { bfd_mach_mips4300, bfd_mach_mips4000 },
14019   { bfd_mach_mips4100, bfd_mach_mips4000 },
14020   { bfd_mach_mips4010, bfd_mach_mips4000 },
14021   { bfd_mach_mips5900, bfd_mach_mips4000 },
14022
14023   /* MIPS32 extensions.  */
14024   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14025
14026   /* MIPS II extensions.  */
14027   { bfd_mach_mips4000, bfd_mach_mips6000 },
14028   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14029
14030   /* MIPS I extensions.  */
14031   { bfd_mach_mips6000, bfd_mach_mips3000 },
14032   { bfd_mach_mips3900, bfd_mach_mips3000 }
14033 };
14034
14035 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14036
14037 static bfd_boolean
14038 mips_mach_extends_p (unsigned long base, unsigned long extension)
14039 {
14040   size_t i;
14041
14042   if (extension == base)
14043     return TRUE;
14044
14045   if (base == bfd_mach_mipsisa32
14046       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14047     return TRUE;
14048
14049   if (base == bfd_mach_mipsisa32r2
14050       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14051     return TRUE;
14052
14053   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14054     if (extension == mips_mach_extensions[i].extension)
14055       {
14056         extension = mips_mach_extensions[i].base;
14057         if (extension == base)
14058           return TRUE;
14059       }
14060
14061   return FALSE;
14062 }
14063
14064 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14065
14066 static unsigned long
14067 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14068 {
14069   switch (isa_ext)
14070     {
14071     case AFL_EXT_3900:        return bfd_mach_mips3900;
14072     case AFL_EXT_4010:        return bfd_mach_mips4010;
14073     case AFL_EXT_4100:        return bfd_mach_mips4100;
14074     case AFL_EXT_4111:        return bfd_mach_mips4111;
14075     case AFL_EXT_4120:        return bfd_mach_mips4120;
14076     case AFL_EXT_4650:        return bfd_mach_mips4650;
14077     case AFL_EXT_5400:        return bfd_mach_mips5400;
14078     case AFL_EXT_5500:        return bfd_mach_mips5500;
14079     case AFL_EXT_5900:        return bfd_mach_mips5900;
14080     case AFL_EXT_10000:       return bfd_mach_mips10000;
14081     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14082     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14083     case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14084     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14085     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14086     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14087     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14088     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14089     default:                  return bfd_mach_mips3000;
14090     }
14091 }
14092
14093 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14094
14095 unsigned int
14096 bfd_mips_isa_ext (bfd *abfd)
14097 {
14098   switch (bfd_get_mach (abfd))
14099     {
14100     case bfd_mach_mips3900:         return AFL_EXT_3900;
14101     case bfd_mach_mips4010:         return AFL_EXT_4010;
14102     case bfd_mach_mips4100:         return AFL_EXT_4100;
14103     case bfd_mach_mips4111:         return AFL_EXT_4111;
14104     case bfd_mach_mips4120:         return AFL_EXT_4120;
14105     case bfd_mach_mips4650:         return AFL_EXT_4650;
14106     case bfd_mach_mips5400:         return AFL_EXT_5400;
14107     case bfd_mach_mips5500:         return AFL_EXT_5500;
14108     case bfd_mach_mips5900:         return AFL_EXT_5900;
14109     case bfd_mach_mips10000:        return AFL_EXT_10000;
14110     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14111     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14112     case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14113     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14114     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14115     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14116     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14117     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14118     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14119     default:                        return 0;
14120     }
14121 }
14122
14123 /* Encode ISA level and revision as a single value.  */
14124 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14125
14126 /* Decode a single value into level and revision.  */
14127 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14128 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14129
14130 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14131
14132 static void
14133 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14134 {
14135   int new_isa = 0;
14136   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14137     {
14138     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14139     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14140     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14141     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14142     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14143     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14144     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14145     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14146     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14147     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14148     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14149     default:
14150       (*_bfd_error_handler)
14151         (_("%B: Unknown architecture %s"),
14152          abfd, bfd_printable_name (abfd));
14153     }
14154
14155   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14156     {
14157       abiflags->isa_level = ISA_LEVEL (new_isa);
14158       abiflags->isa_rev = ISA_REV (new_isa);
14159     }
14160
14161   /* Update the isa_ext if ABFD describes a further extension.  */
14162   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14163                            bfd_get_mach (abfd)))
14164     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14165 }
14166
14167 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14168
14169 static bfd_boolean
14170 mips_32bit_flags_p (flagword flags)
14171 {
14172   return ((flags & EF_MIPS_32BITMODE) != 0
14173           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14174           || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14175           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14176           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14177           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14178           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14179           || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14180 }
14181
14182 /* Infer the content of the ABI flags based on the elf header.  */
14183
14184 static void
14185 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14186 {
14187   obj_attribute *in_attr;
14188
14189   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14190   update_mips_abiflags_isa (abfd, abiflags);
14191
14192   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14193     abiflags->gpr_size = AFL_REG_32;
14194   else
14195     abiflags->gpr_size = AFL_REG_64;
14196
14197   abiflags->cpr1_size = AFL_REG_NONE;
14198
14199   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14200   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14201
14202   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14203       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14204       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14205           && abiflags->gpr_size == AFL_REG_32))
14206     abiflags->cpr1_size = AFL_REG_32;
14207   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14208            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14209            || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14210     abiflags->cpr1_size = AFL_REG_64;
14211
14212   abiflags->cpr2_size = AFL_REG_NONE;
14213
14214   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14215     abiflags->ases |= AFL_ASE_MDMX;
14216   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14217     abiflags->ases |= AFL_ASE_MIPS16;
14218   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14219     abiflags->ases |= AFL_ASE_MICROMIPS;
14220
14221   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14222       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14223       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14224       && abiflags->isa_level >= 32
14225       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14226     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14227 }
14228
14229 /* We need to use a special link routine to handle the .reginfo and
14230    the .mdebug sections.  We need to merge all instances of these
14231    sections together, not write them all out sequentially.  */
14232
14233 bfd_boolean
14234 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14235 {
14236   asection *o;
14237   struct bfd_link_order *p;
14238   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14239   asection *rtproc_sec, *abiflags_sec;
14240   Elf32_RegInfo reginfo;
14241   struct ecoff_debug_info debug;
14242   struct mips_htab_traverse_info hti;
14243   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14244   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14245   HDRR *symhdr = &debug.symbolic_header;
14246   void *mdebug_handle = NULL;
14247   asection *s;
14248   EXTR esym;
14249   unsigned int i;
14250   bfd_size_type amt;
14251   struct mips_elf_link_hash_table *htab;
14252
14253   static const char * const secname[] =
14254   {
14255     ".text", ".init", ".fini", ".data",
14256     ".rodata", ".sdata", ".sbss", ".bss"
14257   };
14258   static const int sc[] =
14259   {
14260     scText, scInit, scFini, scData,
14261     scRData, scSData, scSBss, scBss
14262   };
14263
14264   /* Sort the dynamic symbols so that those with GOT entries come after
14265      those without.  */
14266   htab = mips_elf_hash_table (info);
14267   BFD_ASSERT (htab != NULL);
14268
14269   if (!mips_elf_sort_hash_table (abfd, info))
14270     return FALSE;
14271
14272   /* Create any scheduled LA25 stubs.  */
14273   hti.info = info;
14274   hti.output_bfd = abfd;
14275   hti.error = FALSE;
14276   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14277   if (hti.error)
14278     return FALSE;
14279
14280   /* Get a value for the GP register.  */
14281   if (elf_gp (abfd) == 0)
14282     {
14283       struct bfd_link_hash_entry *h;
14284
14285       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14286       if (h != NULL && h->type == bfd_link_hash_defined)
14287         elf_gp (abfd) = (h->u.def.value
14288                          + h->u.def.section->output_section->vma
14289                          + h->u.def.section->output_offset);
14290       else if (htab->is_vxworks
14291                && (h = bfd_link_hash_lookup (info->hash,
14292                                              "_GLOBAL_OFFSET_TABLE_",
14293                                              FALSE, FALSE, TRUE))
14294                && h->type == bfd_link_hash_defined)
14295         elf_gp (abfd) = (h->u.def.section->output_section->vma
14296                          + h->u.def.section->output_offset
14297                          + h->u.def.value);
14298       else if (bfd_link_relocatable (info))
14299         {
14300           bfd_vma lo = MINUS_ONE;
14301
14302           /* Find the GP-relative section with the lowest offset.  */
14303           for (o = abfd->sections; o != NULL; o = o->next)
14304             if (o->vma < lo
14305                 && (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14306               lo = o->vma;
14307
14308           /* And calculate GP relative to that.  */
14309           elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14310         }
14311       else
14312         {
14313           /* If the relocate_section function needs to do a reloc
14314              involving the GP value, it should make a reloc_dangerous
14315              callback to warn that GP is not defined.  */
14316         }
14317     }
14318
14319   /* Go through the sections and collect the .reginfo and .mdebug
14320      information.  */
14321   abiflags_sec = NULL;
14322   reginfo_sec = NULL;
14323   mdebug_sec = NULL;
14324   gptab_data_sec = NULL;
14325   gptab_bss_sec = NULL;
14326   for (o = abfd->sections; o != NULL; o = o->next)
14327     {
14328       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14329         {
14330           /* We have found the .MIPS.abiflags section in the output file.
14331              Look through all the link_orders comprising it and remove them.
14332              The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14333           for (p = o->map_head.link_order; p != NULL; p = p->next)
14334             {
14335               asection *input_section;
14336
14337               if (p->type != bfd_indirect_link_order)
14338                 {
14339                   if (p->type == bfd_data_link_order)
14340                     continue;
14341                   abort ();
14342                 }
14343
14344               input_section = p->u.indirect.section;
14345
14346               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14347                  elf_link_input_bfd ignores this section.  */
14348               input_section->flags &= ~SEC_HAS_CONTENTS;
14349             }
14350
14351           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14352           BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14353
14354           /* Skip this section later on (I don't think this currently
14355              matters, but someday it might).  */
14356           o->map_head.link_order = NULL;
14357
14358           abiflags_sec = o;
14359         }
14360
14361       if (strcmp (o->name, ".reginfo") == 0)
14362         {
14363           memset (&reginfo, 0, sizeof reginfo);
14364
14365           /* We have found the .reginfo section in the output file.
14366              Look through all the link_orders comprising it and merge
14367              the information together.  */
14368           for (p = o->map_head.link_order; p != NULL; p = p->next)
14369             {
14370               asection *input_section;
14371               bfd *input_bfd;
14372               Elf32_External_RegInfo ext;
14373               Elf32_RegInfo sub;
14374
14375               if (p->type != bfd_indirect_link_order)
14376                 {
14377                   if (p->type == bfd_data_link_order)
14378                     continue;
14379                   abort ();
14380                 }
14381
14382               input_section = p->u.indirect.section;
14383               input_bfd = input_section->owner;
14384
14385               if (! bfd_get_section_contents (input_bfd, input_section,
14386                                               &ext, 0, sizeof ext))
14387                 return FALSE;
14388
14389               bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14390
14391               reginfo.ri_gprmask |= sub.ri_gprmask;
14392               reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14393               reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14394               reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14395               reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14396
14397               /* ri_gp_value is set by the function
14398                  mips_elf32_section_processing when the section is
14399                  finally written out.  */
14400
14401               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14402                  elf_link_input_bfd ignores this section.  */
14403               input_section->flags &= ~SEC_HAS_CONTENTS;
14404             }
14405
14406           /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14407           BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14408
14409           /* Skip this section later on (I don't think this currently
14410              matters, but someday it might).  */
14411           o->map_head.link_order = NULL;
14412
14413           reginfo_sec = o;
14414         }
14415
14416       if (strcmp (o->name, ".mdebug") == 0)
14417         {
14418           struct extsym_info einfo;
14419           bfd_vma last;
14420
14421           /* We have found the .mdebug section in the output file.
14422              Look through all the link_orders comprising it and merge
14423              the information together.  */
14424           symhdr->magic = swap->sym_magic;
14425           /* FIXME: What should the version stamp be?  */
14426           symhdr->vstamp = 0;
14427           symhdr->ilineMax = 0;
14428           symhdr->cbLine = 0;
14429           symhdr->idnMax = 0;
14430           symhdr->ipdMax = 0;
14431           symhdr->isymMax = 0;
14432           symhdr->ioptMax = 0;
14433           symhdr->iauxMax = 0;
14434           symhdr->issMax = 0;
14435           symhdr->issExtMax = 0;
14436           symhdr->ifdMax = 0;
14437           symhdr->crfd = 0;
14438           symhdr->iextMax = 0;
14439
14440           /* We accumulate the debugging information itself in the
14441              debug_info structure.  */
14442           debug.line = NULL;
14443           debug.external_dnr = NULL;
14444           debug.external_pdr = NULL;
14445           debug.external_sym = NULL;
14446           debug.external_opt = NULL;
14447           debug.external_aux = NULL;
14448           debug.ss = NULL;
14449           debug.ssext = debug.ssext_end = NULL;
14450           debug.external_fdr = NULL;
14451           debug.external_rfd = NULL;
14452           debug.external_ext = debug.external_ext_end = NULL;
14453
14454           mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14455           if (mdebug_handle == NULL)
14456             return FALSE;
14457
14458           esym.jmptbl = 0;
14459           esym.cobol_main = 0;
14460           esym.weakext = 0;
14461           esym.reserved = 0;
14462           esym.ifd = ifdNil;
14463           esym.asym.iss = issNil;
14464           esym.asym.st = stLocal;
14465           esym.asym.reserved = 0;
14466           esym.asym.index = indexNil;
14467           last = 0;
14468           for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14469             {
14470               esym.asym.sc = sc[i];
14471               s = bfd_get_section_by_name (abfd, secname[i]);
14472               if (s != NULL)
14473                 {
14474                   esym.asym.value = s->vma;
14475                   last = s->vma + s->size;
14476                 }
14477               else
14478                 esym.asym.value = last;
14479               if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14480                                                  secname[i], &esym))
14481                 return FALSE;
14482             }
14483
14484           for (p = o->map_head.link_order; p != NULL; p = p->next)
14485             {
14486               asection *input_section;
14487               bfd *input_bfd;
14488               const struct ecoff_debug_swap *input_swap;
14489               struct ecoff_debug_info input_debug;
14490               char *eraw_src;
14491               char *eraw_end;
14492
14493               if (p->type != bfd_indirect_link_order)
14494                 {
14495                   if (p->type == bfd_data_link_order)
14496                     continue;
14497                   abort ();
14498                 }
14499
14500               input_section = p->u.indirect.section;
14501               input_bfd = input_section->owner;
14502
14503               if (!is_mips_elf (input_bfd))
14504                 {
14505                   /* I don't know what a non MIPS ELF bfd would be
14506                      doing with a .mdebug section, but I don't really
14507                      want to deal with it.  */
14508                   continue;
14509                 }
14510
14511               input_swap = (get_elf_backend_data (input_bfd)
14512                             ->elf_backend_ecoff_debug_swap);
14513
14514               BFD_ASSERT (p->size == input_section->size);
14515
14516               /* The ECOFF linking code expects that we have already
14517                  read in the debugging information and set up an
14518                  ecoff_debug_info structure, so we do that now.  */
14519               if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14520                                                    &input_debug))
14521                 return FALSE;
14522
14523               if (! (bfd_ecoff_debug_accumulate
14524                      (mdebug_handle, abfd, &debug, swap, input_bfd,
14525                       &input_debug, input_swap, info)))
14526                 return FALSE;
14527
14528               /* Loop through the external symbols.  For each one with
14529                  interesting information, try to find the symbol in
14530                  the linker global hash table and save the information
14531                  for the output external symbols.  */
14532               eraw_src = input_debug.external_ext;
14533               eraw_end = (eraw_src
14534                           + (input_debug.symbolic_header.iextMax
14535                              * input_swap->external_ext_size));
14536               for (;
14537                    eraw_src < eraw_end;
14538                    eraw_src += input_swap->external_ext_size)
14539                 {
14540                   EXTR ext;
14541                   const char *name;
14542                   struct mips_elf_link_hash_entry *h;
14543
14544                   (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14545                   if (ext.asym.sc == scNil
14546                       || ext.asym.sc == scUndefined
14547                       || ext.asym.sc == scSUndefined)
14548                     continue;
14549
14550                   name = input_debug.ssext + ext.asym.iss;
14551                   h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14552                                                  name, FALSE, FALSE, TRUE);
14553                   if (h == NULL || h->esym.ifd != -2)
14554                     continue;
14555
14556                   if (ext.ifd != -1)
14557                     {
14558                       BFD_ASSERT (ext.ifd
14559                                   < input_debug.symbolic_header.ifdMax);
14560                       ext.ifd = input_debug.ifdmap[ext.ifd];
14561                     }
14562
14563                   h->esym = ext;
14564                 }
14565
14566               /* Free up the information we just read.  */
14567               free (input_debug.line);
14568               free (input_debug.external_dnr);
14569               free (input_debug.external_pdr);
14570               free (input_debug.external_sym);
14571               free (input_debug.external_opt);
14572               free (input_debug.external_aux);
14573               free (input_debug.ss);
14574               free (input_debug.ssext);
14575               free (input_debug.external_fdr);
14576               free (input_debug.external_rfd);
14577               free (input_debug.external_ext);
14578
14579               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14580                  elf_link_input_bfd ignores this section.  */
14581               input_section->flags &= ~SEC_HAS_CONTENTS;
14582             }
14583
14584           if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14585             {
14586               /* Create .rtproc section.  */
14587               rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14588               if (rtproc_sec == NULL)
14589                 {
14590                   flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14591                                     | SEC_LINKER_CREATED | SEC_READONLY);
14592
14593                   rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14594                                                                    ".rtproc",
14595                                                                    flags);
14596                   if (rtproc_sec == NULL
14597                       || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14598                     return FALSE;
14599                 }
14600
14601               if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14602                                                      info, rtproc_sec,
14603                                                      &debug))
14604                 return FALSE;
14605             }
14606
14607           /* Build the external symbol information.  */
14608           einfo.abfd = abfd;
14609           einfo.info = info;
14610           einfo.debug = &debug;
14611           einfo.swap = swap;
14612           einfo.failed = FALSE;
14613           mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14614                                        mips_elf_output_extsym, &einfo);
14615           if (einfo.failed)
14616             return FALSE;
14617
14618           /* Set the size of the .mdebug section.  */
14619           o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14620
14621           /* Skip this section later on (I don't think this currently
14622              matters, but someday it might).  */
14623           o->map_head.link_order = NULL;
14624
14625           mdebug_sec = o;
14626         }
14627
14628       if (CONST_STRNEQ (o->name, ".gptab."))
14629         {
14630           const char *subname;
14631           unsigned int c;
14632           Elf32_gptab *tab;
14633           Elf32_External_gptab *ext_tab;
14634           unsigned int j;
14635
14636           /* The .gptab.sdata and .gptab.sbss sections hold
14637              information describing how the small data area would
14638              change depending upon the -G switch.  These sections
14639              not used in executables files.  */
14640           if (! bfd_link_relocatable (info))
14641             {
14642               for (p = o->map_head.link_order; p != NULL; p = p->next)
14643                 {
14644                   asection *input_section;
14645
14646                   if (p->type != bfd_indirect_link_order)
14647                     {
14648                       if (p->type == bfd_data_link_order)
14649                         continue;
14650                       abort ();
14651                     }
14652
14653                   input_section = p->u.indirect.section;
14654
14655                   /* Hack: reset the SEC_HAS_CONTENTS flag so that
14656                      elf_link_input_bfd ignores this section.  */
14657                   input_section->flags &= ~SEC_HAS_CONTENTS;
14658                 }
14659
14660               /* Skip this section later on (I don't think this
14661                  currently matters, but someday it might).  */
14662               o->map_head.link_order = NULL;
14663
14664               /* Really remove the section.  */
14665               bfd_section_list_remove (abfd, o);
14666               --abfd->section_count;
14667
14668               continue;
14669             }
14670
14671           /* There is one gptab for initialized data, and one for
14672              uninitialized data.  */
14673           if (strcmp (o->name, ".gptab.sdata") == 0)
14674             gptab_data_sec = o;
14675           else if (strcmp (o->name, ".gptab.sbss") == 0)
14676             gptab_bss_sec = o;
14677           else
14678             {
14679               (*_bfd_error_handler)
14680                 (_("%s: illegal section name `%s'"),
14681                  bfd_get_filename (abfd), o->name);
14682               bfd_set_error (bfd_error_nonrepresentable_section);
14683               return FALSE;
14684             }
14685
14686           /* The linker script always combines .gptab.data and
14687              .gptab.sdata into .gptab.sdata, and likewise for
14688              .gptab.bss and .gptab.sbss.  It is possible that there is
14689              no .sdata or .sbss section in the output file, in which
14690              case we must change the name of the output section.  */
14691           subname = o->name + sizeof ".gptab" - 1;
14692           if (bfd_get_section_by_name (abfd, subname) == NULL)
14693             {
14694               if (o == gptab_data_sec)
14695                 o->name = ".gptab.data";
14696               else
14697                 o->name = ".gptab.bss";
14698               subname = o->name + sizeof ".gptab" - 1;
14699               BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14700             }
14701
14702           /* Set up the first entry.  */
14703           c = 1;
14704           amt = c * sizeof (Elf32_gptab);
14705           tab = bfd_malloc (amt);
14706           if (tab == NULL)
14707             return FALSE;
14708           tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14709           tab[0].gt_header.gt_unused = 0;
14710
14711           /* Combine the input sections.  */
14712           for (p = o->map_head.link_order; p != NULL; p = p->next)
14713             {
14714               asection *input_section;
14715               bfd *input_bfd;
14716               bfd_size_type size;
14717               unsigned long last;
14718               bfd_size_type gpentry;
14719
14720               if (p->type != bfd_indirect_link_order)
14721                 {
14722                   if (p->type == bfd_data_link_order)
14723                     continue;
14724                   abort ();
14725                 }
14726
14727               input_section = p->u.indirect.section;
14728               input_bfd = input_section->owner;
14729
14730               /* Combine the gptab entries for this input section one
14731                  by one.  We know that the input gptab entries are
14732                  sorted by ascending -G value.  */
14733               size = input_section->size;
14734               last = 0;
14735               for (gpentry = sizeof (Elf32_External_gptab);
14736                    gpentry < size;
14737                    gpentry += sizeof (Elf32_External_gptab))
14738                 {
14739                   Elf32_External_gptab ext_gptab;
14740                   Elf32_gptab int_gptab;
14741                   unsigned long val;
14742                   unsigned long add;
14743                   bfd_boolean exact;
14744                   unsigned int look;
14745
14746                   if (! (bfd_get_section_contents
14747                          (input_bfd, input_section, &ext_gptab, gpentry,
14748                           sizeof (Elf32_External_gptab))))
14749                     {
14750                       free (tab);
14751                       return FALSE;
14752                     }
14753
14754                   bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14755                                                 &int_gptab);
14756                   val = int_gptab.gt_entry.gt_g_value;
14757                   add = int_gptab.gt_entry.gt_bytes - last;
14758
14759                   exact = FALSE;
14760                   for (look = 1; look < c; look++)
14761                     {
14762                       if (tab[look].gt_entry.gt_g_value >= val)
14763                         tab[look].gt_entry.gt_bytes += add;
14764
14765                       if (tab[look].gt_entry.gt_g_value == val)
14766                         exact = TRUE;
14767                     }
14768
14769                   if (! exact)
14770                     {
14771                       Elf32_gptab *new_tab;
14772                       unsigned int max;
14773
14774                       /* We need a new table entry.  */
14775                       amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14776                       new_tab = bfd_realloc (tab, amt);
14777                       if (new_tab == NULL)
14778                         {
14779                           free (tab);
14780                           return FALSE;
14781                         }
14782                       tab = new_tab;
14783                       tab[c].gt_entry.gt_g_value = val;
14784                       tab[c].gt_entry.gt_bytes = add;
14785
14786                       /* Merge in the size for the next smallest -G
14787                          value, since that will be implied by this new
14788                          value.  */
14789                       max = 0;
14790                       for (look = 1; look < c; look++)
14791                         {
14792                           if (tab[look].gt_entry.gt_g_value < val
14793                               && (max == 0
14794                                   || (tab[look].gt_entry.gt_g_value
14795                                       > tab[max].gt_entry.gt_g_value)))
14796                             max = look;
14797                         }
14798                       if (max != 0)
14799                         tab[c].gt_entry.gt_bytes +=
14800                           tab[max].gt_entry.gt_bytes;
14801
14802                       ++c;
14803                     }
14804
14805                   last = int_gptab.gt_entry.gt_bytes;
14806                 }
14807
14808               /* Hack: reset the SEC_HAS_CONTENTS flag so that
14809                  elf_link_input_bfd ignores this section.  */
14810               input_section->flags &= ~SEC_HAS_CONTENTS;
14811             }
14812
14813           /* The table must be sorted by -G value.  */
14814           if (c > 2)
14815             qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14816
14817           /* Swap out the table.  */
14818           amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14819           ext_tab = bfd_alloc (abfd, amt);
14820           if (ext_tab == NULL)
14821             {
14822               free (tab);
14823               return FALSE;
14824             }
14825
14826           for (j = 0; j < c; j++)
14827             bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14828           free (tab);
14829
14830           o->size = c * sizeof (Elf32_External_gptab);
14831           o->contents = (bfd_byte *) ext_tab;
14832
14833           /* Skip this section later on (I don't think this currently
14834              matters, but someday it might).  */
14835           o->map_head.link_order = NULL;
14836         }
14837     }
14838
14839   /* Invoke the regular ELF backend linker to do all the work.  */
14840   if (!bfd_elf_final_link (abfd, info))
14841     return FALSE;
14842
14843   /* Now write out the computed sections.  */
14844
14845   if (abiflags_sec != NULL)
14846     {
14847       Elf_External_ABIFlags_v0 ext;
14848       Elf_Internal_ABIFlags_v0 *abiflags;
14849
14850       abiflags = &mips_elf_tdata (abfd)->abiflags;
14851
14852       /* Set up the abiflags if no valid input sections were found.  */
14853       if (!mips_elf_tdata (abfd)->abiflags_valid)
14854         {
14855           infer_mips_abiflags (abfd, abiflags);
14856           mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14857         }
14858       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14859       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14860         return FALSE;
14861     }
14862
14863   if (reginfo_sec != NULL)
14864     {
14865       Elf32_External_RegInfo ext;
14866
14867       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14868       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14869         return FALSE;
14870     }
14871
14872   if (mdebug_sec != NULL)
14873     {
14874       BFD_ASSERT (abfd->output_has_begun);
14875       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14876                                                swap, info,
14877                                                mdebug_sec->filepos))
14878         return FALSE;
14879
14880       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14881     }
14882
14883   if (gptab_data_sec != NULL)
14884     {
14885       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14886                                       gptab_data_sec->contents,
14887                                       0, gptab_data_sec->size))
14888         return FALSE;
14889     }
14890
14891   if (gptab_bss_sec != NULL)
14892     {
14893       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14894                                       gptab_bss_sec->contents,
14895                                       0, gptab_bss_sec->size))
14896         return FALSE;
14897     }
14898
14899   if (SGI_COMPAT (abfd))
14900     {
14901       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14902       if (rtproc_sec != NULL)
14903         {
14904           if (! bfd_set_section_contents (abfd, rtproc_sec,
14905                                           rtproc_sec->contents,
14906                                           0, rtproc_sec->size))
14907             return FALSE;
14908         }
14909     }
14910
14911   return TRUE;
14912 }
14913 \f
14914 /* Merge object file header flags from IBFD into OBFD.  Raise an error
14915    if there are conflicting settings.  */
14916
14917 static bfd_boolean
14918 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
14919 {
14920   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
14921   flagword old_flags;
14922   flagword new_flags;
14923   bfd_boolean ok;
14924
14925   new_flags = elf_elfheader (ibfd)->e_flags;
14926   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14927   old_flags = elf_elfheader (obfd)->e_flags;
14928
14929   /* Check flag compatibility.  */
14930
14931   new_flags &= ~EF_MIPS_NOREORDER;
14932   old_flags &= ~EF_MIPS_NOREORDER;
14933
14934   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14935      doesn't seem to matter.  */
14936   new_flags &= ~EF_MIPS_XGOT;
14937   old_flags &= ~EF_MIPS_XGOT;
14938
14939   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14940      just be able to ignore this.  */
14941   new_flags &= ~EF_MIPS_UCODE;
14942   old_flags &= ~EF_MIPS_UCODE;
14943
14944   /* DSOs should only be linked with CPIC code.  */
14945   if ((ibfd->flags & DYNAMIC) != 0)
14946     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14947
14948   if (new_flags == old_flags)
14949     return TRUE;
14950
14951   ok = TRUE;
14952
14953   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14954       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14955     {
14956       (*_bfd_error_handler)
14957         (_("%B: warning: linking abicalls files with non-abicalls files"),
14958          ibfd);
14959       ok = TRUE;
14960     }
14961
14962   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14963     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14964   if (! (new_flags & EF_MIPS_PIC))
14965     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14966
14967   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14968   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14969
14970   /* Compare the ISAs.  */
14971   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14972     {
14973       (*_bfd_error_handler)
14974         (_("%B: linking 32-bit code with 64-bit code"),
14975          ibfd);
14976       ok = FALSE;
14977     }
14978   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
14979     {
14980       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
14981       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
14982         {
14983           /* Copy the architecture info from IBFD to OBFD.  Also copy
14984              the 32-bit flag (if set) so that we continue to recognise
14985              OBFD as a 32-bit binary.  */
14986           bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
14987           elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
14988           elf_elfheader (obfd)->e_flags
14989             |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
14990
14991           /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
14992           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
14993
14994           /* Copy across the ABI flags if OBFD doesn't use them
14995              and if that was what caused us to treat IBFD as 32-bit.  */
14996           if ((old_flags & EF_MIPS_ABI) == 0
14997               && mips_32bit_flags_p (new_flags)
14998               && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
14999             elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15000         }
15001       else
15002         {
15003           /* The ISAs aren't compatible.  */
15004           (*_bfd_error_handler)
15005             (_("%B: linking %s module with previous %s modules"),
15006              ibfd,
15007              bfd_printable_name (ibfd),
15008              bfd_printable_name (obfd));
15009           ok = FALSE;
15010         }
15011     }
15012
15013   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15014   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15015
15016   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15017      does set EI_CLASS differently from any 32-bit ABI.  */
15018   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15019       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15020           != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15021     {
15022       /* Only error if both are set (to different values).  */
15023       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15024           || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15025               != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15026         {
15027           (*_bfd_error_handler)
15028             (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15029              ibfd,
15030              elf_mips_abi_name (ibfd),
15031              elf_mips_abi_name (obfd));
15032           ok = FALSE;
15033         }
15034       new_flags &= ~EF_MIPS_ABI;
15035       old_flags &= ~EF_MIPS_ABI;
15036     }
15037
15038   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15039      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15040   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15041     {
15042       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15043       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15044       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15045       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15046       int micro_mis = old_m16 && new_micro;
15047       int m16_mis = old_micro && new_m16;
15048
15049       if (m16_mis || micro_mis)
15050         {
15051           (*_bfd_error_handler)
15052             (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15053              ibfd,
15054              m16_mis ? "MIPS16" : "microMIPS",
15055              m16_mis ? "microMIPS" : "MIPS16");
15056           ok = FALSE;
15057         }
15058
15059       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15060
15061       new_flags &= ~ EF_MIPS_ARCH_ASE;
15062       old_flags &= ~ EF_MIPS_ARCH_ASE;
15063     }
15064
15065   /* Compare NaN encodings.  */
15066   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15067     {
15068       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15069                           ibfd,
15070                           (new_flags & EF_MIPS_NAN2008
15071                            ? "-mnan=2008" : "-mnan=legacy"),
15072                           (old_flags & EF_MIPS_NAN2008
15073                            ? "-mnan=2008" : "-mnan=legacy"));
15074       ok = FALSE;
15075       new_flags &= ~EF_MIPS_NAN2008;
15076       old_flags &= ~EF_MIPS_NAN2008;
15077     }
15078
15079   /* Compare FP64 state.  */
15080   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15081     {
15082       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15083                           ibfd,
15084                           (new_flags & EF_MIPS_FP64
15085                            ? "-mfp64" : "-mfp32"),
15086                           (old_flags & EF_MIPS_FP64
15087                            ? "-mfp64" : "-mfp32"));
15088       ok = FALSE;
15089       new_flags &= ~EF_MIPS_FP64;
15090       old_flags &= ~EF_MIPS_FP64;
15091     }
15092
15093   /* Warn about any other mismatches */
15094   if (new_flags != old_flags)
15095     {
15096       (*_bfd_error_handler)
15097         (_("%B: uses different e_flags (0x%lx) fields than previous modules "
15098            "(0x%lx)"),
15099          ibfd, (unsigned long) new_flags,
15100          (unsigned long) old_flags);
15101       ok = FALSE;
15102     }
15103
15104   return ok;
15105 }
15106
15107 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15108    there are conflicting attributes.  */
15109 static bfd_boolean
15110 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15111 {
15112   obj_attribute *in_attr;
15113   obj_attribute *out_attr;
15114   bfd *abi_fp_bfd;
15115   bfd *abi_msa_bfd;
15116
15117   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15118   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15119   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15120     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15121
15122   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15123   if (!abi_msa_bfd
15124       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15125     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15126
15127   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15128     {
15129       /* This is the first object.  Copy the attributes.  */
15130       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15131
15132       /* Use the Tag_null value to indicate the attributes have been
15133          initialized.  */
15134       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15135
15136       return TRUE;
15137     }
15138
15139   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15140      non-conflicting ones.  */
15141   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15142   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15143     {
15144       int out_fp, in_fp;
15145
15146       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15147       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15148       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15149       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15150         out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15151       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15152                && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15153                    || in_fp == Val_GNU_MIPS_ABI_FP_64
15154                    || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15155         {
15156           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15157           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15158         }
15159       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15160                && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15161                    || out_fp == Val_GNU_MIPS_ABI_FP_64
15162                    || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15163         /* Keep the current setting.  */;
15164       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15165                && in_fp == Val_GNU_MIPS_ABI_FP_64)
15166         {
15167           mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15168           out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15169         }
15170       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15171                && out_fp == Val_GNU_MIPS_ABI_FP_64)
15172         /* Keep the current setting.  */;
15173       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15174         {
15175           const char *out_string, *in_string;
15176
15177           out_string = _bfd_mips_fp_abi_string (out_fp);
15178           in_string = _bfd_mips_fp_abi_string (in_fp);
15179           /* First warn about cases involving unrecognised ABIs.  */
15180           if (!out_string && !in_string)
15181             _bfd_error_handler
15182               (_("Warning: %B uses unknown floating point ABI %d "
15183                  "(set by %B), %B uses unknown floating point ABI %d"),
15184                obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15185           else if (!out_string)
15186             _bfd_error_handler
15187               (_("Warning: %B uses unknown floating point ABI %d "
15188                  "(set by %B), %B uses %s"),
15189                obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15190           else if (!in_string)
15191             _bfd_error_handler
15192               (_("Warning: %B uses %s (set by %B), "
15193                  "%B uses unknown floating point ABI %d"),
15194                obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15195           else
15196             {
15197               /* If one of the bfds is soft-float, the other must be
15198                  hard-float.  The exact choice of hard-float ABI isn't
15199                  really relevant to the error message.  */
15200               if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15201                 out_string = "-mhard-float";
15202               else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15203                 in_string = "-mhard-float";
15204               _bfd_error_handler
15205                 (_("Warning: %B uses %s (set by %B), %B uses %s"),
15206                  obfd, abi_fp_bfd, ibfd, out_string, in_string);
15207             }
15208         }
15209     }
15210
15211   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15212      non-conflicting ones.  */
15213   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15214     {
15215       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15216       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15217         out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15218       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15219         switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15220           {
15221           case Val_GNU_MIPS_ABI_MSA_128:
15222             _bfd_error_handler
15223               (_("Warning: %B uses %s (set by %B), "
15224                  "%B uses unknown MSA ABI %d"),
15225                obfd, abi_msa_bfd, ibfd,
15226                "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15227             break;
15228
15229           default:
15230             switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15231               {
15232               case Val_GNU_MIPS_ABI_MSA_128:
15233                 _bfd_error_handler
15234                   (_("Warning: %B uses unknown MSA ABI %d "
15235                      "(set by %B), %B uses %s"),
15236                      obfd, abi_msa_bfd, ibfd,
15237                      out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15238                   break;
15239
15240               default:
15241                 _bfd_error_handler
15242                   (_("Warning: %B uses unknown MSA ABI %d "
15243                      "(set by %B), %B uses unknown MSA ABI %d"),
15244                    obfd, abi_msa_bfd, ibfd,
15245                    out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15246                    in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15247                 break;
15248               }
15249           }
15250     }
15251
15252   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15253   return _bfd_elf_merge_object_attributes (ibfd, obfd);
15254 }
15255
15256 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15257    there are conflicting settings.  */
15258
15259 static bfd_boolean
15260 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15261 {
15262   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15263   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15264   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15265
15266   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15267   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15268
15269 #define max(a, b) ((a) > (b) ? (a) : (b))
15270   /* Merge abiflags.  */
15271   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15272                                        in_tdata->abiflags.isa_level);
15273   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15274                                      in_tdata->abiflags.isa_rev);
15275   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15276                                       in_tdata->abiflags.gpr_size);
15277   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15278                                        in_tdata->abiflags.cpr1_size);
15279   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15280                                        in_tdata->abiflags.cpr2_size);
15281 #undef max
15282   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15283   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15284
15285   return TRUE;
15286 }
15287
15288 /* Merge backend specific data from an object file to the output
15289    object file when linking.  */
15290
15291 bfd_boolean
15292 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15293 {
15294   struct mips_elf_obj_tdata *out_tdata;
15295   struct mips_elf_obj_tdata *in_tdata;
15296   bfd_boolean null_input_bfd = TRUE;
15297   asection *sec;
15298   bfd_boolean ok;
15299
15300   /* Check if we have the same endianness.  */
15301   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15302     {
15303       (*_bfd_error_handler)
15304         (_("%B: endianness incompatible with that of the selected emulation"),
15305          ibfd);
15306       return FALSE;
15307     }
15308
15309   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15310     return TRUE;
15311
15312   in_tdata = mips_elf_tdata (ibfd);
15313   out_tdata = mips_elf_tdata (obfd);
15314
15315   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15316     {
15317       (*_bfd_error_handler)
15318         (_("%B: ABI is incompatible with that of the selected emulation"),
15319          ibfd);
15320       return FALSE;
15321     }
15322
15323   /* Check to see if the input BFD actually contains any sections.  If not,
15324      then it has no attributes, and its flags may not have been initialized
15325      either, but it cannot actually cause any incompatibility.  */
15326   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15327     {
15328       /* Ignore synthetic sections and empty .text, .data and .bss sections
15329          which are automatically generated by gas.  Also ignore fake
15330          (s)common sections, since merely defining a common symbol does
15331          not affect compatibility.  */
15332       if ((sec->flags & SEC_IS_COMMON) == 0
15333           && strcmp (sec->name, ".reginfo")
15334           && strcmp (sec->name, ".mdebug")
15335           && (sec->size != 0
15336               || (strcmp (sec->name, ".text")
15337                   && strcmp (sec->name, ".data")
15338                   && strcmp (sec->name, ".bss"))))
15339         {
15340           null_input_bfd = FALSE;
15341           break;
15342         }
15343     }
15344   if (null_input_bfd)
15345     return TRUE;
15346
15347   /* Populate abiflags using existing information.  */
15348   if (in_tdata->abiflags_valid)
15349     {
15350       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15351       Elf_Internal_ABIFlags_v0 in_abiflags;
15352       Elf_Internal_ABIFlags_v0 abiflags;
15353
15354       /* Set up the FP ABI attribute from the abiflags if it is not already
15355          set.  */
15356       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15357         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15358
15359       infer_mips_abiflags (ibfd, &abiflags);
15360       in_abiflags = in_tdata->abiflags;
15361
15362       /* It is not possible to infer the correct ISA revision
15363          for R3 or R5 so drop down to R2 for the checks.  */
15364       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15365         in_abiflags.isa_rev = 2;
15366
15367       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15368           < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15369         (*_bfd_error_handler)
15370           (_("%B: warning: Inconsistent ISA between e_flags and "
15371              ".MIPS.abiflags"), ibfd);
15372       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15373           && in_abiflags.fp_abi != abiflags.fp_abi)
15374         (*_bfd_error_handler)
15375           (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15376              ".MIPS.abiflags"), ibfd);
15377       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15378         (*_bfd_error_handler)
15379           (_("%B: warning: Inconsistent ASEs between e_flags and "
15380              ".MIPS.abiflags"), ibfd);
15381       /* The isa_ext is allowed to be an extension of what can be inferred
15382          from e_flags.  */
15383       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15384                                 bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15385         (*_bfd_error_handler)
15386           (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15387              ".MIPS.abiflags"), ibfd);
15388       if (in_abiflags.flags2 != 0)
15389         (*_bfd_error_handler)
15390           (_("%B: warning: Unexpected flag in the flags2 field of "
15391              ".MIPS.abiflags (0x%lx)"), ibfd,
15392            (unsigned long) in_abiflags.flags2);
15393     }
15394   else
15395     {
15396       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15397       in_tdata->abiflags_valid = TRUE;
15398     }
15399
15400   if (!out_tdata->abiflags_valid)
15401     {
15402       /* Copy input abiflags if output abiflags are not already valid.  */
15403       out_tdata->abiflags = in_tdata->abiflags;
15404       out_tdata->abiflags_valid = TRUE;
15405     }
15406
15407   if (! elf_flags_init (obfd))
15408     {
15409       elf_flags_init (obfd) = TRUE;
15410       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15411       elf_elfheader (obfd)->e_ident[EI_CLASS]
15412         = elf_elfheader (ibfd)->e_ident[EI_CLASS];
15413
15414       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15415           && (bfd_get_arch_info (obfd)->the_default
15416               || mips_mach_extends_p (bfd_get_mach (obfd),
15417                                       bfd_get_mach (ibfd))))
15418         {
15419           if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15420                                    bfd_get_mach (ibfd)))
15421             return FALSE;
15422
15423           /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15424           update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15425         }
15426
15427       ok = TRUE;
15428     }
15429   else
15430     ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15431
15432   ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15433
15434   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15435
15436   if (!ok)
15437     {
15438       bfd_set_error (bfd_error_bad_value);
15439       return FALSE;
15440     }
15441
15442   return TRUE;
15443 }
15444
15445 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15446
15447 bfd_boolean
15448 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15449 {
15450   BFD_ASSERT (!elf_flags_init (abfd)
15451               || elf_elfheader (abfd)->e_flags == flags);
15452
15453   elf_elfheader (abfd)->e_flags = flags;
15454   elf_flags_init (abfd) = TRUE;
15455   return TRUE;
15456 }
15457
15458 char *
15459 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15460 {
15461   switch (dtag)
15462     {
15463     default: return "";
15464     case DT_MIPS_RLD_VERSION:
15465       return "MIPS_RLD_VERSION";
15466     case DT_MIPS_TIME_STAMP:
15467       return "MIPS_TIME_STAMP";
15468     case DT_MIPS_ICHECKSUM:
15469       return "MIPS_ICHECKSUM";
15470     case DT_MIPS_IVERSION:
15471       return "MIPS_IVERSION";
15472     case DT_MIPS_FLAGS:
15473       return "MIPS_FLAGS";
15474     case DT_MIPS_BASE_ADDRESS:
15475       return "MIPS_BASE_ADDRESS";
15476     case DT_MIPS_MSYM:
15477       return "MIPS_MSYM";
15478     case DT_MIPS_CONFLICT:
15479       return "MIPS_CONFLICT";
15480     case DT_MIPS_LIBLIST:
15481       return "MIPS_LIBLIST";
15482     case DT_MIPS_LOCAL_GOTNO:
15483       return "MIPS_LOCAL_GOTNO";
15484     case DT_MIPS_CONFLICTNO:
15485       return "MIPS_CONFLICTNO";
15486     case DT_MIPS_LIBLISTNO:
15487       return "MIPS_LIBLISTNO";
15488     case DT_MIPS_SYMTABNO:
15489       return "MIPS_SYMTABNO";
15490     case DT_MIPS_UNREFEXTNO:
15491       return "MIPS_UNREFEXTNO";
15492     case DT_MIPS_GOTSYM:
15493       return "MIPS_GOTSYM";
15494     case DT_MIPS_HIPAGENO:
15495       return "MIPS_HIPAGENO";
15496     case DT_MIPS_RLD_MAP:
15497       return "MIPS_RLD_MAP";
15498     case DT_MIPS_RLD_MAP_REL:
15499       return "MIPS_RLD_MAP_REL";
15500     case DT_MIPS_DELTA_CLASS:
15501       return "MIPS_DELTA_CLASS";
15502     case DT_MIPS_DELTA_CLASS_NO:
15503       return "MIPS_DELTA_CLASS_NO";
15504     case DT_MIPS_DELTA_INSTANCE:
15505       return "MIPS_DELTA_INSTANCE";
15506     case DT_MIPS_DELTA_INSTANCE_NO:
15507       return "MIPS_DELTA_INSTANCE_NO";
15508     case DT_MIPS_DELTA_RELOC:
15509       return "MIPS_DELTA_RELOC";
15510     case DT_MIPS_DELTA_RELOC_NO:
15511       return "MIPS_DELTA_RELOC_NO";
15512     case DT_MIPS_DELTA_SYM:
15513       return "MIPS_DELTA_SYM";
15514     case DT_MIPS_DELTA_SYM_NO:
15515       return "MIPS_DELTA_SYM_NO";
15516     case DT_MIPS_DELTA_CLASSSYM:
15517       return "MIPS_DELTA_CLASSSYM";
15518     case DT_MIPS_DELTA_CLASSSYM_NO:
15519       return "MIPS_DELTA_CLASSSYM_NO";
15520     case DT_MIPS_CXX_FLAGS:
15521       return "MIPS_CXX_FLAGS";
15522     case DT_MIPS_PIXIE_INIT:
15523       return "MIPS_PIXIE_INIT";
15524     case DT_MIPS_SYMBOL_LIB:
15525       return "MIPS_SYMBOL_LIB";
15526     case DT_MIPS_LOCALPAGE_GOTIDX:
15527       return "MIPS_LOCALPAGE_GOTIDX";
15528     case DT_MIPS_LOCAL_GOTIDX:
15529       return "MIPS_LOCAL_GOTIDX";
15530     case DT_MIPS_HIDDEN_GOTIDX:
15531       return "MIPS_HIDDEN_GOTIDX";
15532     case DT_MIPS_PROTECTED_GOTIDX:
15533       return "MIPS_PROTECTED_GOT_IDX";
15534     case DT_MIPS_OPTIONS:
15535       return "MIPS_OPTIONS";
15536     case DT_MIPS_INTERFACE:
15537       return "MIPS_INTERFACE";
15538     case DT_MIPS_DYNSTR_ALIGN:
15539       return "DT_MIPS_DYNSTR_ALIGN";
15540     case DT_MIPS_INTERFACE_SIZE:
15541       return "DT_MIPS_INTERFACE_SIZE";
15542     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15543       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15544     case DT_MIPS_PERF_SUFFIX:
15545       return "DT_MIPS_PERF_SUFFIX";
15546     case DT_MIPS_COMPACT_SIZE:
15547       return "DT_MIPS_COMPACT_SIZE";
15548     case DT_MIPS_GP_VALUE:
15549       return "DT_MIPS_GP_VALUE";
15550     case DT_MIPS_AUX_DYNAMIC:
15551       return "DT_MIPS_AUX_DYNAMIC";
15552     case DT_MIPS_PLTGOT:
15553       return "DT_MIPS_PLTGOT";
15554     case DT_MIPS_RWPLT:
15555       return "DT_MIPS_RWPLT";
15556     }
15557 }
15558
15559 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15560    not known.  */
15561
15562 const char *
15563 _bfd_mips_fp_abi_string (int fp)
15564 {
15565   switch (fp)
15566     {
15567       /* These strings aren't translated because they're simply
15568          option lists.  */
15569     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15570       return "-mdouble-float";
15571
15572     case Val_GNU_MIPS_ABI_FP_SINGLE:
15573       return "-msingle-float";
15574
15575     case Val_GNU_MIPS_ABI_FP_SOFT:
15576       return "-msoft-float";
15577
15578     case Val_GNU_MIPS_ABI_FP_OLD_64:
15579       return _("-mips32r2 -mfp64 (12 callee-saved)");
15580
15581     case Val_GNU_MIPS_ABI_FP_XX:
15582       return "-mfpxx";
15583
15584     case Val_GNU_MIPS_ABI_FP_64:
15585       return "-mgp32 -mfp64";
15586
15587     case Val_GNU_MIPS_ABI_FP_64A:
15588       return "-mgp32 -mfp64 -mno-odd-spreg";
15589
15590     default:
15591       return 0;
15592     }
15593 }
15594
15595 static void
15596 print_mips_ases (FILE *file, unsigned int mask)
15597 {
15598   if (mask & AFL_ASE_DSP)
15599     fputs ("\n\tDSP ASE", file);
15600   if (mask & AFL_ASE_DSPR2)
15601     fputs ("\n\tDSP R2 ASE", file);
15602   if (mask & AFL_ASE_DSPR3)
15603     fputs ("\n\tDSP R3 ASE", file);
15604   if (mask & AFL_ASE_EVA)
15605     fputs ("\n\tEnhanced VA Scheme", file);
15606   if (mask & AFL_ASE_MCU)
15607     fputs ("\n\tMCU (MicroController) ASE", file);
15608   if (mask & AFL_ASE_MDMX)
15609     fputs ("\n\tMDMX ASE", file);
15610   if (mask & AFL_ASE_MIPS3D)
15611     fputs ("\n\tMIPS-3D ASE", file);
15612   if (mask & AFL_ASE_MT)
15613     fputs ("\n\tMT ASE", file);
15614   if (mask & AFL_ASE_SMARTMIPS)
15615     fputs ("\n\tSmartMIPS ASE", file);
15616   if (mask & AFL_ASE_VIRT)
15617     fputs ("\n\tVZ ASE", file);
15618   if (mask & AFL_ASE_MSA)
15619     fputs ("\n\tMSA ASE", file);
15620   if (mask & AFL_ASE_MIPS16)
15621     fputs ("\n\tMIPS16 ASE", file);
15622   if (mask & AFL_ASE_MICROMIPS)
15623     fputs ("\n\tMICROMIPS ASE", file);
15624   if (mask & AFL_ASE_XPA)
15625     fputs ("\n\tXPA ASE", file);
15626   if (mask == 0)
15627     fprintf (file, "\n\t%s", _("None"));
15628   else if ((mask & ~AFL_ASE_MASK) != 0)
15629     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15630 }
15631
15632 static void
15633 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15634 {
15635   switch (isa_ext)
15636     {
15637     case 0:
15638       fputs (_("None"), file);
15639       break;
15640     case AFL_EXT_XLR:
15641       fputs ("RMI XLR", file);
15642       break;
15643     case AFL_EXT_OCTEON3:
15644       fputs ("Cavium Networks Octeon3", file);
15645       break;
15646     case AFL_EXT_OCTEON2:
15647       fputs ("Cavium Networks Octeon2", file);
15648       break;
15649     case AFL_EXT_OCTEONP:
15650       fputs ("Cavium Networks OcteonP", file);
15651       break;
15652     case AFL_EXT_LOONGSON_3A:
15653       fputs ("Loongson 3A", file);
15654       break;
15655     case AFL_EXT_OCTEON:
15656       fputs ("Cavium Networks Octeon", file);
15657       break;
15658     case AFL_EXT_5900:
15659       fputs ("Toshiba R5900", file);
15660       break;
15661     case AFL_EXT_4650:
15662       fputs ("MIPS R4650", file);
15663       break;
15664     case AFL_EXT_4010:
15665       fputs ("LSI R4010", file);
15666       break;
15667     case AFL_EXT_4100:
15668       fputs ("NEC VR4100", file);
15669       break;
15670     case AFL_EXT_3900:
15671       fputs ("Toshiba R3900", file);
15672       break;
15673     case AFL_EXT_10000:
15674       fputs ("MIPS R10000", file);
15675       break;
15676     case AFL_EXT_SB1:
15677       fputs ("Broadcom SB-1", file);
15678       break;
15679     case AFL_EXT_4111:
15680       fputs ("NEC VR4111/VR4181", file);
15681       break;
15682     case AFL_EXT_4120:
15683       fputs ("NEC VR4120", file);
15684       break;
15685     case AFL_EXT_5400:
15686       fputs ("NEC VR5400", file);
15687       break;
15688     case AFL_EXT_5500:
15689       fputs ("NEC VR5500", file);
15690       break;
15691     case AFL_EXT_LOONGSON_2E:
15692       fputs ("ST Microelectronics Loongson 2E", file);
15693       break;
15694     case AFL_EXT_LOONGSON_2F:
15695       fputs ("ST Microelectronics Loongson 2F", file);
15696       break;
15697     default:
15698       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15699       break;
15700     }
15701 }
15702
15703 static void
15704 print_mips_fp_abi_value (FILE *file, int val)
15705 {
15706   switch (val)
15707     {
15708     case Val_GNU_MIPS_ABI_FP_ANY:
15709       fprintf (file, _("Hard or soft float\n"));
15710       break;
15711     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15712       fprintf (file, _("Hard float (double precision)\n"));
15713       break;
15714     case Val_GNU_MIPS_ABI_FP_SINGLE:
15715       fprintf (file, _("Hard float (single precision)\n"));
15716       break;
15717     case Val_GNU_MIPS_ABI_FP_SOFT:
15718       fprintf (file, _("Soft float\n"));
15719       break;
15720     case Val_GNU_MIPS_ABI_FP_OLD_64:
15721       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15722       break;
15723     case Val_GNU_MIPS_ABI_FP_XX:
15724       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15725       break;
15726     case Val_GNU_MIPS_ABI_FP_64:
15727       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15728       break;
15729     case Val_GNU_MIPS_ABI_FP_64A:
15730       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15731       break;
15732     default:
15733       fprintf (file, "??? (%d)\n", val);
15734       break;
15735     }
15736 }
15737
15738 static int
15739 get_mips_reg_size (int reg_size)
15740 {
15741   return (reg_size == AFL_REG_NONE) ? 0
15742          : (reg_size == AFL_REG_32) ? 32
15743          : (reg_size == AFL_REG_64) ? 64
15744          : (reg_size == AFL_REG_128) ? 128
15745          : -1;
15746 }
15747
15748 bfd_boolean
15749 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15750 {
15751   FILE *file = ptr;
15752
15753   BFD_ASSERT (abfd != NULL && ptr != NULL);
15754
15755   /* Print normal ELF private data.  */
15756   _bfd_elf_print_private_bfd_data (abfd, ptr);
15757
15758   /* xgettext:c-format */
15759   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15760
15761   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15762     fprintf (file, _(" [abi=O32]"));
15763   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15764     fprintf (file, _(" [abi=O64]"));
15765   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15766     fprintf (file, _(" [abi=EABI32]"));
15767   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15768     fprintf (file, _(" [abi=EABI64]"));
15769   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15770     fprintf (file, _(" [abi unknown]"));
15771   else if (ABI_N32_P (abfd))
15772     fprintf (file, _(" [abi=N32]"));
15773   else if (ABI_64_P (abfd))
15774     fprintf (file, _(" [abi=64]"));
15775   else
15776     fprintf (file, _(" [no abi set]"));
15777
15778   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15779     fprintf (file, " [mips1]");
15780   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15781     fprintf (file, " [mips2]");
15782   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15783     fprintf (file, " [mips3]");
15784   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15785     fprintf (file, " [mips4]");
15786   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15787     fprintf (file, " [mips5]");
15788   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15789     fprintf (file, " [mips32]");
15790   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15791     fprintf (file, " [mips64]");
15792   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15793     fprintf (file, " [mips32r2]");
15794   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15795     fprintf (file, " [mips64r2]");
15796   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15797     fprintf (file, " [mips32r6]");
15798   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15799     fprintf (file, " [mips64r6]");
15800   else
15801     fprintf (file, _(" [unknown ISA]"));
15802
15803   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15804     fprintf (file, " [mdmx]");
15805
15806   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15807     fprintf (file, " [mips16]");
15808
15809   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15810     fprintf (file, " [micromips]");
15811
15812   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15813     fprintf (file, " [nan2008]");
15814
15815   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15816     fprintf (file, " [old fp64]");
15817
15818   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15819     fprintf (file, " [32bitmode]");
15820   else
15821     fprintf (file, _(" [not 32bitmode]"));
15822
15823   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15824     fprintf (file, " [noreorder]");
15825
15826   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15827     fprintf (file, " [PIC]");
15828
15829   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15830     fprintf (file, " [CPIC]");
15831
15832   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15833     fprintf (file, " [XGOT]");
15834
15835   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15836     fprintf (file, " [UCODE]");
15837
15838   fputc ('\n', file);
15839
15840   if (mips_elf_tdata (abfd)->abiflags_valid)
15841     {
15842       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15843       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15844       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15845       if (abiflags->isa_rev > 1)
15846         fprintf (file, "r%d", abiflags->isa_rev);
15847       fprintf (file, "\nGPR size: %d",
15848                get_mips_reg_size (abiflags->gpr_size));
15849       fprintf (file, "\nCPR1 size: %d",
15850                get_mips_reg_size (abiflags->cpr1_size));
15851       fprintf (file, "\nCPR2 size: %d",
15852                get_mips_reg_size (abiflags->cpr2_size));
15853       fputs ("\nFP ABI: ", file);
15854       print_mips_fp_abi_value (file, abiflags->fp_abi);
15855       fputs ("ISA Extension: ", file);
15856       print_mips_isa_ext (file, abiflags->isa_ext);
15857       fputs ("\nASEs:", file);
15858       print_mips_ases (file, abiflags->ases);
15859       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15860       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15861       fputc ('\n', file);
15862     }
15863
15864   return TRUE;
15865 }
15866
15867 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15868 {
15869   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15870   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15871   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15872   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15873   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15874   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15875   { NULL,                     0,  0, 0,              0 }
15876 };
15877
15878 /* Merge non visibility st_other attributes.  Ensure that the
15879    STO_OPTIONAL flag is copied into h->other, even if this is not a
15880    definiton of the symbol.  */
15881 void
15882 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15883                                       const Elf_Internal_Sym *isym,
15884                                       bfd_boolean definition,
15885                                       bfd_boolean dynamic ATTRIBUTE_UNUSED)
15886 {
15887   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15888     {
15889       unsigned char other;
15890
15891       other = (definition ? isym->st_other : h->other);
15892       other &= ~ELF_ST_VISIBILITY (-1);
15893       h->other = other | ELF_ST_VISIBILITY (h->other);
15894     }
15895
15896   if (!definition
15897       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15898     h->other |= STO_OPTIONAL;
15899 }
15900
15901 /* Decide whether an undefined symbol is special and can be ignored.
15902    This is the case for OPTIONAL symbols on IRIX.  */
15903 bfd_boolean
15904 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15905 {
15906   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15907 }
15908
15909 bfd_boolean
15910 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15911 {
15912   return (sym->st_shndx == SHN_COMMON
15913           || sym->st_shndx == SHN_MIPS_ACOMMON
15914           || sym->st_shndx == SHN_MIPS_SCOMMON);
15915 }
15916
15917 /* Return address for Ith PLT stub in section PLT, for relocation REL
15918    or (bfd_vma) -1 if it should not be included.  */
15919
15920 bfd_vma
15921 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15922                            const arelent *rel ATTRIBUTE_UNUSED)
15923 {
15924   return (plt->vma
15925           + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15926           + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15927 }
15928
15929 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15930    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15931    and .got.plt and also the slots may be of a different size each we walk
15932    the PLT manually fetching instructions and matching them against known
15933    patterns.  To make things easier standard MIPS slots, if any, always come
15934    first.  As we don't create proper ELF symbols we use the UDATA.I member
15935    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15936    with the ST_OTHER member of the ELF symbol.  */
15937
15938 long
15939 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15940                                     long symcount ATTRIBUTE_UNUSED,
15941                                     asymbol **syms ATTRIBUTE_UNUSED,
15942                                     long dynsymcount, asymbol **dynsyms,
15943                                     asymbol **ret)
15944 {
15945   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15946   static const char microsuffix[] = "@micromipsplt";
15947   static const char m16suffix[] = "@mips16plt";
15948   static const char mipssuffix[] = "@plt";
15949
15950   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15951   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15952   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15953   Elf_Internal_Shdr *hdr;
15954   bfd_byte *plt_data;
15955   bfd_vma plt_offset;
15956   unsigned int other;
15957   bfd_vma entry_size;
15958   bfd_vma plt0_size;
15959   asection *relplt;
15960   bfd_vma opcode;
15961   asection *plt;
15962   asymbol *send;
15963   size_t size;
15964   char *names;
15965   long counti;
15966   arelent *p;
15967   asymbol *s;
15968   char *nend;
15969   long count;
15970   long pi;
15971   long i;
15972   long n;
15973
15974   *ret = NULL;
15975
15976   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15977     return 0;
15978
15979   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15980   if (relplt == NULL)
15981     return 0;
15982
15983   hdr = &elf_section_data (relplt)->this_hdr;
15984   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15985     return 0;
15986
15987   plt = bfd_get_section_by_name (abfd, ".plt");
15988   if (plt == NULL)
15989     return 0;
15990
15991   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15992   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15993     return -1;
15994   p = relplt->relocation;
15995
15996   /* Calculating the exact amount of space required for symbols would
15997      require two passes over the PLT, so just pessimise assuming two
15998      PLT slots per relocation.  */
15999   count = relplt->size / hdr->sh_entsize;
16000   counti = count * bed->s->int_rels_per_ext_rel;
16001   size = 2 * count * sizeof (asymbol);
16002   size += count * (sizeof (mipssuffix) +
16003                    (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16004   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16005     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16006
16007   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16008   size += sizeof (asymbol) + sizeof (pltname);
16009
16010   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16011     return -1;
16012
16013   if (plt->size < 16)
16014     return -1;
16015
16016   s = *ret = bfd_malloc (size);
16017   if (s == NULL)
16018     return -1;
16019   send = s + 2 * count + 1;
16020
16021   names = (char *) send;
16022   nend = (char *) s + size;
16023   n = 0;
16024
16025   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16026   if (opcode == 0x3302fffe)
16027     {
16028       if (!micromips_p)
16029         return -1;
16030       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16031       other = STO_MICROMIPS;
16032     }
16033   else if (opcode == 0x0398c1d0)
16034     {
16035       if (!micromips_p)
16036         return -1;
16037       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16038       other = STO_MICROMIPS;
16039     }
16040   else
16041     {
16042       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16043       other = 0;
16044     }
16045
16046   s->the_bfd = abfd;
16047   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16048   s->section = plt;
16049   s->value = 0;
16050   s->name = names;
16051   s->udata.i = other;
16052   memcpy (names, pltname, sizeof (pltname));
16053   names += sizeof (pltname);
16054   ++s, ++n;
16055
16056   pi = 0;
16057   for (plt_offset = plt0_size;
16058        plt_offset + 8 <= plt->size && s < send;
16059        plt_offset += entry_size)
16060     {
16061       bfd_vma gotplt_addr;
16062       const char *suffix;
16063       bfd_vma gotplt_hi;
16064       bfd_vma gotplt_lo;
16065       size_t suffixlen;
16066
16067       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16068
16069       /* Check if the second word matches the expected MIPS16 instruction.  */
16070       if (opcode == 0x651aeb00)
16071         {
16072           if (micromips_p)
16073             return -1;
16074           /* Truncated table???  */
16075           if (plt_offset + 16 > plt->size)
16076             break;
16077           gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16078           entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16079           suffixlen = sizeof (m16suffix);
16080           suffix = m16suffix;
16081           other = STO_MIPS16;
16082         }
16083       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16084       else if (opcode == 0xff220000)
16085         {
16086           if (!micromips_p)
16087             return -1;
16088           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16089           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16090           gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16091           gotplt_lo <<= 2;
16092           gotplt_addr = gotplt_hi + gotplt_lo;
16093           gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16094           entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16095           suffixlen = sizeof (microsuffix);
16096           suffix = microsuffix;
16097           other = STO_MICROMIPS;
16098         }
16099       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16100       else if ((opcode & 0xffff0000) == 0xff2f0000)
16101         {
16102           gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16103           gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16104           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16105           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16106           gotplt_addr = gotplt_hi + gotplt_lo;
16107           entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16108           suffixlen = sizeof (microsuffix);
16109           suffix = microsuffix;
16110           other = STO_MICROMIPS;
16111         }
16112       /* Otherwise assume standard MIPS code.  */
16113       else
16114         {
16115           gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16116           gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16117           gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16118           gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16119           gotplt_addr = gotplt_hi + gotplt_lo;
16120           entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16121           suffixlen = sizeof (mipssuffix);
16122           suffix = mipssuffix;
16123           other = 0;
16124         }
16125       /* Truncated table???  */
16126       if (plt_offset + entry_size > plt->size)
16127         break;
16128
16129       for (i = 0;
16130            i < count && p[pi].address != gotplt_addr;
16131            i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16132
16133       if (i < count)
16134         {
16135           size_t namelen;
16136           size_t len;
16137
16138           *s = **p[pi].sym_ptr_ptr;
16139           /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16140              we are defining a symbol, ensure one of them is set.  */
16141           if ((s->flags & BSF_LOCAL) == 0)
16142             s->flags |= BSF_GLOBAL;
16143           s->flags |= BSF_SYNTHETIC;
16144           s->section = plt;
16145           s->value = plt_offset;
16146           s->name = names;
16147           s->udata.i = other;
16148
16149           len = strlen ((*p[pi].sym_ptr_ptr)->name);
16150           namelen = len + suffixlen;
16151           if (names + namelen > nend)
16152             break;
16153
16154           memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16155           names += len;
16156           memcpy (names, suffix, suffixlen);
16157           names += suffixlen;
16158
16159           ++s, ++n;
16160           pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16161         }
16162     }
16163
16164   free (plt_data);
16165
16166   return n;
16167 }
16168
16169 void
16170 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16171 {
16172   struct mips_elf_link_hash_table *htab;
16173   Elf_Internal_Ehdr *i_ehdrp;
16174
16175   i_ehdrp = elf_elfheader (abfd);
16176   if (link_info)
16177     {
16178       htab = mips_elf_hash_table (link_info);
16179       BFD_ASSERT (htab != NULL);
16180
16181       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16182         i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16183     }
16184
16185   _bfd_elf_post_process_headers (abfd, link_info);
16186
16187   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16188       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16189     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16190
16191   if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16192     i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16193 }
16194
16195 int
16196 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16197 {
16198   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16199 }
16200
16201 /* Return the opcode for can't unwind.  */
16202
16203 int
16204 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16205 {
16206   return COMPACT_EH_CANT_UNWIND_OPCODE;
16207 }