xref: /netbsd-src/external/gpl3/binutils.old/dist/bfd/elfxx-mips.c (revision c38e7cc395b1472a774ff828e46123de44c628e9)
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 
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 		  /* In the N32 and 64-bit ABIs there may be multiple
8597 		     consecutive relocations for the same offset.  If we have
8598 		     a R_MIPS_GPREL32 followed by a R_MIPS_64 then that
8599 		     relocation is complete and needs no futher adjustment.
8600 
8601 		     Silently ignore absolute relocations in the .eh_frame
8602 		     section, they will be dropped latter.
8603 		   */
8604 		  if ((rel == relocs
8605 		      || rel[-1].r_offset != rel->r_offset
8606 		      || r_type != R_MIPS_64
8607 		      || ELF_R_TYPE(abfd, rel[-1].r_info) != R_MIPS_GPREL32)
8608 		      && MIPS_ELF_READONLY_SECTION (sec)
8609 		      && !((r_type == R_MIPS_32 || r_type == R_MIPS_64)
8610 		           && strcmp(sec->name, ".eh_frame") == 0))
8611 		    {
8612 		      /* We tell the dynamic linker that there are
8613 		         relocations against the text segment.  */
8614 		      info->flags |= DF_TEXTREL;
8615 		      info->callbacks->warning
8616 			(info,
8617 			 _("relocation emitted against readonly section"),
8618 			 NULL, abfd, sec, rel->r_offset);
8619 		    }
8620 		}
8621 	      else
8622 		{
8623 		  struct mips_elf_link_hash_entry *hmips;
8624 
8625 		  /* For a shared object, we must copy this relocation
8626 		     unless the symbol turns out to be undefined and
8627 		     weak with non-default visibility, in which case
8628 		     it will be left as zero.
8629 
8630 		     We could elide R_MIPS_REL32 for locally binding symbols
8631 		     in shared libraries, but do not yet do so.
8632 
8633 		     For an executable, we only need to copy this
8634 		     reloc if the symbol is defined in a dynamic
8635 		     object.  */
8636 		  hmips = (struct mips_elf_link_hash_entry *) h;
8637 		  ++hmips->possibly_dynamic_relocs;
8638 		  if (MIPS_ELF_READONLY_SECTION (sec))
8639 		    /* We need it to tell the dynamic linker if there
8640 		       are relocations against the text segment.  */
8641 		    hmips->readonly_reloc = TRUE;
8642 		}
8643 	    }
8644 
8645 	  if (SGI_COMPAT (abfd))
8646 	    mips_elf_hash_table (info)->compact_rel_size +=
8647 	      sizeof (Elf32_External_crinfo);
8648 	  break;
8649 
8650 	case R_MIPS_26:
8651 	case R_MIPS_GPREL16:
8652 	case R_MIPS_LITERAL:
8653 	case R_MIPS_GPREL32:
8654 	case R_MICROMIPS_26_S1:
8655 	case R_MICROMIPS_GPREL16:
8656 	case R_MICROMIPS_LITERAL:
8657 	case R_MICROMIPS_GPREL7_S2:
8658 	  if (SGI_COMPAT (abfd))
8659 	    mips_elf_hash_table (info)->compact_rel_size +=
8660 	      sizeof (Elf32_External_crinfo);
8661 	  break;
8662 
8663 	  /* This relocation describes the C++ object vtable hierarchy.
8664 	     Reconstruct it for later use during GC.  */
8665 	case R_MIPS_GNU_VTINHERIT:
8666 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8667 	    return FALSE;
8668 	  break;
8669 
8670 	  /* This relocation describes which C++ vtable entries are actually
8671 	     used.  Record for later use during GC.  */
8672 	case R_MIPS_GNU_VTENTRY:
8673 	  BFD_ASSERT (h != NULL);
8674 	  if (h != NULL
8675 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8676 	    return FALSE;
8677 	  break;
8678 
8679 	default:
8680 	  break;
8681 	}
8682 
8683       /* Record the need for a PLT entry.  At this point we don't know
8684          yet if we are going to create a PLT in the first place, but
8685          we only record whether the relocation requires a standard MIPS
8686          or a compressed code entry anyway.  If we don't make a PLT after
8687          all, then we'll just ignore these arrangements.  Likewise if
8688          a PLT entry is not created because the symbol is satisfied
8689          locally.  */
8690       if (h != NULL
8691 	  && jal_reloc_p (r_type)
8692 	  && !SYMBOL_CALLS_LOCAL (info, h))
8693 	{
8694 	  if (h->plt.plist == NULL)
8695 	    h->plt.plist = mips_elf_make_plt_record (abfd);
8696 	  if (h->plt.plist == NULL)
8697 	    return FALSE;
8698 
8699 	  if (r_type == R_MIPS_26)
8700 	    h->plt.plist->need_mips = TRUE;
8701 	  else
8702 	    h->plt.plist->need_comp = TRUE;
8703 	}
8704 
8705       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8706 	 if there is one.  We only need to handle global symbols here;
8707 	 we decide whether to keep or delete stubs for local symbols
8708 	 when processing the stub's relocations.  */
8709       if (h != NULL
8710 	  && !mips16_call_reloc_p (r_type)
8711 	  && !section_allows_mips16_refs_p (sec))
8712 	{
8713 	  struct mips_elf_link_hash_entry *mh;
8714 
8715 	  mh = (struct mips_elf_link_hash_entry *) h;
8716 	  mh->need_fn_stub = TRUE;
8717 	}
8718 
8719       /* Refuse some position-dependent relocations when creating a
8720 	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8721 	 not PIC, but we can create dynamic relocations and the result
8722 	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
8723 	 combined with R_MIPS_GOT16.  */
8724       if (bfd_link_pic (info))
8725 	{
8726 	  switch (r_type)
8727 	    {
8728 	    case R_MIPS16_HI16:
8729 	    case R_MIPS_HI16:
8730 	    case R_MIPS_HIGHER:
8731 	    case R_MIPS_HIGHEST:
8732 	    case R_MICROMIPS_HI16:
8733 	    case R_MICROMIPS_HIGHER:
8734 	    case R_MICROMIPS_HIGHEST:
8735 	      /* Don't refuse a high part relocation if it's against
8736 		 no symbol (e.g. part of a compound relocation).  */
8737 	      if (r_symndx == STN_UNDEF)
8738 		break;
8739 
8740 	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8741 		 and has a special meaning.  */
8742 	      if (!NEWABI_P (abfd) && h != NULL
8743 		  && strcmp (h->root.root.string, "_gp_disp") == 0)
8744 		break;
8745 
8746 	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8747 	      if (is_gott_symbol (info, h))
8748 		break;
8749 
8750 	      /* FALLTHROUGH */
8751 
8752 	    case R_MIPS16_26:
8753 	    case R_MIPS_26:
8754 	    case R_MICROMIPS_26_S1:
8755 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8756 	      (*_bfd_error_handler)
8757 		(_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8758 		 abfd, howto->name,
8759 		 (h) ? h->root.root.string : "a local symbol");
8760 	      bfd_set_error (bfd_error_bad_value);
8761 	      return FALSE;
8762 	    default:
8763 	      break;
8764 	    }
8765 	}
8766     }
8767 
8768   return TRUE;
8769 }
8770 
8771 bfd_boolean
8772 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8773 			 struct bfd_link_info *link_info,
8774 			 bfd_boolean *again)
8775 {
8776   Elf_Internal_Rela *internal_relocs;
8777   Elf_Internal_Rela *irel, *irelend;
8778   Elf_Internal_Shdr *symtab_hdr;
8779   bfd_byte *contents = NULL;
8780   size_t extsymoff;
8781   bfd_boolean changed_contents = FALSE;
8782   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8783   Elf_Internal_Sym *isymbuf = NULL;
8784 
8785   /* We are not currently changing any sizes, so only one pass.  */
8786   *again = FALSE;
8787 
8788   if (bfd_link_relocatable (link_info))
8789     return TRUE;
8790 
8791   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8792 					       link_info->keep_memory);
8793   if (internal_relocs == NULL)
8794     return TRUE;
8795 
8796   irelend = internal_relocs + sec->reloc_count
8797     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8798   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8799   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8800 
8801   for (irel = internal_relocs; irel < irelend; irel++)
8802     {
8803       bfd_vma symval;
8804       bfd_signed_vma sym_offset;
8805       unsigned int r_type;
8806       unsigned long r_symndx;
8807       asection *sym_sec;
8808       unsigned long instruction;
8809 
8810       /* Turn jalr into bgezal, and jr into beq, if they're marked
8811 	 with a JALR relocation, that indicate where they jump to.
8812 	 This saves some pipeline bubbles.  */
8813       r_type = ELF_R_TYPE (abfd, irel->r_info);
8814       if (r_type != R_MIPS_JALR)
8815 	continue;
8816 
8817       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8818       /* Compute the address of the jump target.  */
8819       if (r_symndx >= extsymoff)
8820 	{
8821 	  struct mips_elf_link_hash_entry *h
8822 	    = ((struct mips_elf_link_hash_entry *)
8823 	       elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8824 
8825 	  while (h->root.root.type == bfd_link_hash_indirect
8826 		 || h->root.root.type == bfd_link_hash_warning)
8827 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8828 
8829 	  /* If a symbol is undefined, or if it may be overridden,
8830 	     skip it.  */
8831 	  if (! ((h->root.root.type == bfd_link_hash_defined
8832 		  || h->root.root.type == bfd_link_hash_defweak)
8833 		 && h->root.root.u.def.section)
8834 	      || (bfd_link_pic (link_info) && ! link_info->symbolic
8835 		  && !h->root.forced_local))
8836 	    continue;
8837 
8838 	  sym_sec = h->root.root.u.def.section;
8839 	  if (sym_sec->output_section)
8840 	    symval = (h->root.root.u.def.value
8841 		      + sym_sec->output_section->vma
8842 		      + sym_sec->output_offset);
8843 	  else
8844 	    symval = h->root.root.u.def.value;
8845 	}
8846       else
8847 	{
8848 	  Elf_Internal_Sym *isym;
8849 
8850 	  /* Read this BFD's symbols if we haven't done so already.  */
8851 	  if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8852 	    {
8853 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8854 	      if (isymbuf == NULL)
8855 		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8856 						symtab_hdr->sh_info, 0,
8857 						NULL, NULL, NULL);
8858 	      if (isymbuf == NULL)
8859 		goto relax_return;
8860 	    }
8861 
8862 	  isym = isymbuf + r_symndx;
8863 	  if (isym->st_shndx == SHN_UNDEF)
8864 	    continue;
8865 	  else if (isym->st_shndx == SHN_ABS)
8866 	    sym_sec = bfd_abs_section_ptr;
8867 	  else if (isym->st_shndx == SHN_COMMON)
8868 	    sym_sec = bfd_com_section_ptr;
8869 	  else
8870 	    sym_sec
8871 	      = bfd_section_from_elf_index (abfd, isym->st_shndx);
8872 	  symval = isym->st_value
8873 	    + sym_sec->output_section->vma
8874 	    + sym_sec->output_offset;
8875 	}
8876 
8877       /* Compute branch offset, from delay slot of the jump to the
8878 	 branch target.  */
8879       sym_offset = (symval + irel->r_addend)
8880 	- (sec_start + irel->r_offset + 4);
8881 
8882       /* Branch offset must be properly aligned.  */
8883       if ((sym_offset & 3) != 0)
8884 	continue;
8885 
8886       sym_offset >>= 2;
8887 
8888       /* Check that it's in range.  */
8889       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8890 	continue;
8891 
8892       /* Get the section contents if we haven't done so already.  */
8893       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8894 	goto relax_return;
8895 
8896       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8897 
8898       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8899       if ((instruction & 0xfc1fffff) == 0x0000f809)
8900 	instruction = 0x04110000;
8901       /* If it was jr <reg>, turn it into b <target>.  */
8902       else if ((instruction & 0xfc1fffff) == 0x00000008)
8903 	instruction = 0x10000000;
8904       else
8905 	continue;
8906 
8907       instruction |= (sym_offset & 0xffff);
8908       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8909       changed_contents = TRUE;
8910     }
8911 
8912   if (contents != NULL
8913       && elf_section_data (sec)->this_hdr.contents != contents)
8914     {
8915       if (!changed_contents && !link_info->keep_memory)
8916         free (contents);
8917       else
8918         {
8919           /* Cache the section contents for elf_link_input_bfd.  */
8920           elf_section_data (sec)->this_hdr.contents = contents;
8921         }
8922     }
8923   return TRUE;
8924 
8925  relax_return:
8926   if (contents != NULL
8927       && elf_section_data (sec)->this_hdr.contents != contents)
8928     free (contents);
8929   return FALSE;
8930 }
8931 
8932 /* Allocate space for global sym dynamic relocs.  */
8933 
8934 static bfd_boolean
8935 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8936 {
8937   struct bfd_link_info *info = inf;
8938   bfd *dynobj;
8939   struct mips_elf_link_hash_entry *hmips;
8940   struct mips_elf_link_hash_table *htab;
8941 
8942   htab = mips_elf_hash_table (info);
8943   BFD_ASSERT (htab != NULL);
8944 
8945   dynobj = elf_hash_table (info)->dynobj;
8946   hmips = (struct mips_elf_link_hash_entry *) h;
8947 
8948   /* VxWorks executables are handled elsewhere; we only need to
8949      allocate relocations in shared objects.  */
8950   if (htab->is_vxworks && !bfd_link_pic (info))
8951     return TRUE;
8952 
8953   /* Ignore indirect symbols.  All relocations against such symbols
8954      will be redirected to the target symbol.  */
8955   if (h->root.type == bfd_link_hash_indirect)
8956     return TRUE;
8957 
8958   /* If this symbol is defined in a dynamic object, or we are creating
8959      a shared library, we will need to copy any R_MIPS_32 or
8960      R_MIPS_REL32 relocs against it into the output file.  */
8961   if (! bfd_link_relocatable (info)
8962       && hmips->possibly_dynamic_relocs != 0
8963       && (h->root.type == bfd_link_hash_defweak
8964 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8965 	  || bfd_link_pic (info)))
8966     {
8967       bfd_boolean do_copy = TRUE;
8968 
8969       if (h->root.type == bfd_link_hash_undefweak)
8970 	{
8971 	  /* Do not copy relocations for undefined weak symbols with
8972 	     non-default visibility.  */
8973 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8974 	    do_copy = FALSE;
8975 
8976 	  /* Make sure undefined weak symbols are output as a dynamic
8977 	     symbol in PIEs.  */
8978 	  else if (h->dynindx == -1 && !h->forced_local)
8979 	    {
8980 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
8981 		return FALSE;
8982 	    }
8983 	}
8984 
8985       if (do_copy)
8986 	{
8987 	  /* Even though we don't directly need a GOT entry for this symbol,
8988 	     the SVR4 psABI requires it to have a dynamic symbol table
8989 	     index greater that DT_MIPS_GOTSYM if there are dynamic
8990 	     relocations against it.
8991 
8992 	     VxWorks does not enforce the same mapping between the GOT
8993 	     and the symbol table, so the same requirement does not
8994 	     apply there.  */
8995 	  if (!htab->is_vxworks)
8996 	    {
8997 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
8998 		hmips->global_got_area = GGA_RELOC_ONLY;
8999 	      hmips->got_only_for_calls = FALSE;
9000 	    }
9001 
9002 	  mips_elf_allocate_dynamic_relocations
9003 	    (dynobj, info, hmips->possibly_dynamic_relocs);
9004 	  if (hmips->readonly_reloc)
9005 	    /* We tell the dynamic linker that there are relocations
9006 	       against the text segment.  */
9007 	    info->flags |= DF_TEXTREL;
9008 	}
9009     }
9010 
9011   return TRUE;
9012 }
9013 
9014 /* Adjust a symbol defined by a dynamic object and referenced by a
9015    regular object.  The current definition is in some section of the
9016    dynamic object, but we're not including those sections.  We have to
9017    change the definition to something the rest of the link can
9018    understand.  */
9019 
9020 bfd_boolean
9021 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9022 				     struct elf_link_hash_entry *h)
9023 {
9024   bfd *dynobj;
9025   struct mips_elf_link_hash_entry *hmips;
9026   struct mips_elf_link_hash_table *htab;
9027 
9028   htab = mips_elf_hash_table (info);
9029   BFD_ASSERT (htab != NULL);
9030 
9031   dynobj = elf_hash_table (info)->dynobj;
9032   hmips = (struct mips_elf_link_hash_entry *) h;
9033 
9034   /* Make sure we know what is going on here.  */
9035   BFD_ASSERT (dynobj != NULL
9036 	      && (h->needs_plt
9037 		  || h->type == STT_GNU_IFUNC
9038 		  || h->u.weakdef != NULL
9039 		  || (h->def_dynamic
9040 		      && h->ref_regular
9041 		      && !h->def_regular)));
9042 
9043   hmips = (struct mips_elf_link_hash_entry *) h;
9044 
9045   /* If there are call relocations against an externally-defined symbol,
9046      see whether we can create a MIPS lazy-binding stub for it.  We can
9047      only do this if all references to the function are through call
9048      relocations, and in that case, the traditional lazy-binding stubs
9049      are much more efficient than PLT entries.
9050 
9051      Traditional stubs are only available on SVR4 psABI-based systems;
9052      VxWorks always uses PLTs instead.  */
9053   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9054     {
9055       if (! elf_hash_table (info)->dynamic_sections_created)
9056 	return TRUE;
9057 
9058       /* If this symbol is not defined in a regular file, then set
9059 	 the symbol to the stub location.  This is required to make
9060 	 function pointers compare as equal between the normal
9061 	 executable and the shared library.  */
9062       if (!h->def_regular)
9063 	{
9064 	  hmips->needs_lazy_stub = TRUE;
9065 	  htab->lazy_stub_count++;
9066 	  return TRUE;
9067 	}
9068     }
9069   /* As above, VxWorks requires PLT entries for externally-defined
9070      functions that are only accessed through call relocations.
9071 
9072      Both VxWorks and non-VxWorks targets also need PLT entries if there
9073      are static-only relocations against an externally-defined function.
9074      This can technically occur for shared libraries if there are
9075      branches to the symbol, although it is unlikely that this will be
9076      used in practice due to the short ranges involved.  It can occur
9077      for any relative or absolute relocation in executables; in that
9078      case, the PLT entry becomes the function's canonical address.  */
9079   else if (((h->needs_plt && !hmips->no_fn_stub)
9080 	    || (h->type == STT_FUNC && hmips->has_static_relocs))
9081 	   && htab->use_plts_and_copy_relocs
9082 	   && !SYMBOL_CALLS_LOCAL (info, h)
9083 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9084 		&& h->root.type == bfd_link_hash_undefweak))
9085     {
9086       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9087       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9088 
9089       /* If this is the first symbol to need a PLT entry, then make some
9090          basic setup.  Also work out PLT entry sizes.  We'll need them
9091          for PLT offset calculations.  */
9092       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9093 	{
9094 	  BFD_ASSERT (htab->sgotplt->size == 0);
9095 	  BFD_ASSERT (htab->plt_got_index == 0);
9096 
9097 	  /* If we're using the PLT additions to the psABI, each PLT
9098 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
9099 	     Encourage better cache usage by aligning.  We do this
9100 	     lazily to avoid pessimizing traditional objects.  */
9101 	  if (!htab->is_vxworks
9102 	      && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9103 	    return FALSE;
9104 
9105 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
9106 	     for the same reason as above.  */
9107 	  if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9108 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9109 	    return FALSE;
9110 
9111 	  /* On non-VxWorks targets, the first two entries in .got.plt
9112 	     are reserved.  */
9113 	  if (!htab->is_vxworks)
9114 	    htab->plt_got_index
9115 	      += (get_elf_backend_data (dynobj)->got_header_size
9116 		  / MIPS_ELF_GOT_SIZE (dynobj));
9117 
9118 	  /* On VxWorks, also allocate room for the header's
9119 	     .rela.plt.unloaded entries.  */
9120 	  if (htab->is_vxworks && !bfd_link_pic (info))
9121 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9122 
9123 	  /* Now work out the sizes of individual PLT entries.  */
9124 	  if (htab->is_vxworks && bfd_link_pic (info))
9125 	    htab->plt_mips_entry_size
9126 	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9127 	  else if (htab->is_vxworks)
9128 	    htab->plt_mips_entry_size
9129 	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9130 	  else if (newabi_p)
9131 	    htab->plt_mips_entry_size
9132 	      = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9133 	  else if (!micromips_p)
9134 	    {
9135 	      htab->plt_mips_entry_size
9136 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9137 	      htab->plt_comp_entry_size
9138 		= 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9139 	    }
9140 	  else if (htab->insn32)
9141 	    {
9142 	      htab->plt_mips_entry_size
9143 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9144 	      htab->plt_comp_entry_size
9145 		= 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9146 	    }
9147 	  else
9148 	    {
9149 	      htab->plt_mips_entry_size
9150 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9151 	      htab->plt_comp_entry_size
9152 		= 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9153 	    }
9154 	}
9155 
9156       if (h->plt.plist == NULL)
9157 	h->plt.plist = mips_elf_make_plt_record (dynobj);
9158       if (h->plt.plist == NULL)
9159 	return FALSE;
9160 
9161       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9162          n32 or n64, so always use a standard entry there.
9163 
9164          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9165          all MIPS16 calls will go via that stub, and there is no benefit
9166          to having a MIPS16 entry.  And in the case of call_stub a
9167          standard entry actually has to be used as the stub ends with a J
9168          instruction.  */
9169       if (newabi_p
9170 	  || htab->is_vxworks
9171 	  || hmips->call_stub
9172 	  || hmips->call_fp_stub)
9173 	{
9174 	  h->plt.plist->need_mips = TRUE;
9175 	  h->plt.plist->need_comp = FALSE;
9176 	}
9177 
9178       /* Otherwise, if there are no direct calls to the function, we
9179          have a free choice of whether to use standard or compressed
9180          entries.  Prefer microMIPS entries if the object is known to
9181          contain microMIPS code, so that it becomes possible to create
9182          pure microMIPS binaries.  Prefer standard entries otherwise,
9183          because MIPS16 ones are no smaller and are usually slower.  */
9184       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9185 	{
9186 	  if (micromips_p)
9187 	    h->plt.plist->need_comp = TRUE;
9188 	  else
9189 	    h->plt.plist->need_mips = TRUE;
9190 	}
9191 
9192       if (h->plt.plist->need_mips)
9193 	{
9194 	  h->plt.plist->mips_offset = htab->plt_mips_offset;
9195 	  htab->plt_mips_offset += htab->plt_mips_entry_size;
9196 	}
9197       if (h->plt.plist->need_comp)
9198 	{
9199 	  h->plt.plist->comp_offset = htab->plt_comp_offset;
9200 	  htab->plt_comp_offset += htab->plt_comp_entry_size;
9201 	}
9202 
9203       /* Reserve the corresponding .got.plt entry now too.  */
9204       h->plt.plist->gotplt_index = htab->plt_got_index++;
9205 
9206       /* If the output file has no definition of the symbol, set the
9207 	 symbol's value to the address of the stub.  */
9208       if (!bfd_link_pic (info) && !h->def_regular)
9209 	hmips->use_plt_entry = TRUE;
9210 
9211       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9212       htab->srelplt->size += (htab->is_vxworks
9213 			      ? MIPS_ELF_RELA_SIZE (dynobj)
9214 			      : MIPS_ELF_REL_SIZE (dynobj));
9215 
9216       /* Make room for the .rela.plt.unloaded relocations.  */
9217       if (htab->is_vxworks && !bfd_link_pic (info))
9218 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9219 
9220       /* All relocations against this symbol that could have been made
9221 	 dynamic will now refer to the PLT entry instead.  */
9222       hmips->possibly_dynamic_relocs = 0;
9223 
9224       return TRUE;
9225     }
9226 
9227   /* If this is a weak symbol, and there is a real definition, the
9228      processor independent code will have arranged for us to see the
9229      real definition first, and we can just use the same value.  */
9230   if (h->u.weakdef != NULL)
9231     {
9232       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9233 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
9234       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9235       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9236       return TRUE;
9237     }
9238 
9239   /* Otherwise, there is nothing further to do for symbols defined
9240      in regular objects.  */
9241   if (h->def_regular)
9242     return TRUE;
9243 
9244   /* There's also nothing more to do if we'll convert all relocations
9245      against this symbol into dynamic relocations.  */
9246   if (!hmips->has_static_relocs)
9247     return TRUE;
9248 
9249   /* We're now relying on copy relocations.  Complain if we have
9250      some that we can't convert.  */
9251   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9252     {
9253       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9254 			       "dynamic symbol %s"),
9255 			     h->root.root.string);
9256       bfd_set_error (bfd_error_bad_value);
9257       return FALSE;
9258     }
9259 
9260   /* We must allocate the symbol in our .dynbss section, which will
9261      become part of the .bss section of the executable.  There will be
9262      an entry for this symbol in the .dynsym section.  The dynamic
9263      object will contain position independent code, so all references
9264      from the dynamic object to this symbol will go through the global
9265      offset table.  The dynamic linker will use the .dynsym entry to
9266      determine the address it must put in the global offset table, so
9267      both the dynamic object and the regular object will refer to the
9268      same memory location for the variable.  */
9269 
9270   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9271     {
9272       if (htab->is_vxworks)
9273 	htab->srelbss->size += sizeof (Elf32_External_Rela);
9274       else
9275 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9276       h->needs_copy = 1;
9277     }
9278 
9279   /* All relocations against this symbol that could have been made
9280      dynamic will now refer to the local copy instead.  */
9281   hmips->possibly_dynamic_relocs = 0;
9282 
9283   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9284 }
9285 
9286 /* This function is called after all the input files have been read,
9287    and the input sections have been assigned to output sections.  We
9288    check for any mips16 stub sections that we can discard.  */
9289 
9290 bfd_boolean
9291 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9292 				    struct bfd_link_info *info)
9293 {
9294   asection *sect;
9295   struct mips_elf_link_hash_table *htab;
9296   struct mips_htab_traverse_info hti;
9297 
9298   htab = mips_elf_hash_table (info);
9299   BFD_ASSERT (htab != NULL);
9300 
9301   /* The .reginfo section has a fixed size.  */
9302   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9303   if (sect != NULL)
9304     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9305 
9306   /* The .MIPS.abiflags section has a fixed size.  */
9307   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9308   if (sect != NULL)
9309     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9310 
9311   hti.info = info;
9312   hti.output_bfd = output_bfd;
9313   hti.error = FALSE;
9314   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9315 			       mips_elf_check_symbols, &hti);
9316   if (hti.error)
9317     return FALSE;
9318 
9319   return TRUE;
9320 }
9321 
9322 /* If the link uses a GOT, lay it out and work out its size.  */
9323 
9324 static bfd_boolean
9325 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9326 {
9327   bfd *dynobj;
9328   asection *s;
9329   struct mips_got_info *g;
9330   bfd_size_type loadable_size = 0;
9331   bfd_size_type page_gotno;
9332   bfd *ibfd;
9333   struct mips_elf_traverse_got_arg tga;
9334   struct mips_elf_link_hash_table *htab;
9335 
9336   htab = mips_elf_hash_table (info);
9337   BFD_ASSERT (htab != NULL);
9338 
9339   s = htab->sgot;
9340   if (s == NULL)
9341     return TRUE;
9342 
9343   dynobj = elf_hash_table (info)->dynobj;
9344   g = htab->got_info;
9345 
9346   /* Allocate room for the reserved entries.  VxWorks always reserves
9347      3 entries; other objects only reserve 2 entries.  */
9348   BFD_ASSERT (g->assigned_low_gotno == 0);
9349   if (htab->is_vxworks)
9350     htab->reserved_gotno = 3;
9351   else
9352     htab->reserved_gotno = 2;
9353   g->local_gotno += htab->reserved_gotno;
9354   g->assigned_low_gotno = htab->reserved_gotno;
9355 
9356   /* Decide which symbols need to go in the global part of the GOT and
9357      count the number of reloc-only GOT symbols.  */
9358   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9359 
9360   if (!mips_elf_resolve_final_got_entries (info, g))
9361     return FALSE;
9362 
9363   /* Calculate the total loadable size of the output.  That
9364      will give us the maximum number of GOT_PAGE entries
9365      required.  */
9366   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9367     {
9368       asection *subsection;
9369 
9370       for (subsection = ibfd->sections;
9371 	   subsection;
9372 	   subsection = subsection->next)
9373 	{
9374 	  if ((subsection->flags & SEC_ALLOC) == 0)
9375 	    continue;
9376 	  loadable_size += ((subsection->size + 0xf)
9377 			    &~ (bfd_size_type) 0xf);
9378 	}
9379     }
9380 
9381   if (htab->is_vxworks)
9382     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9383        relocations against local symbols evaluate to "G", and the EABI does
9384        not include R_MIPS_GOT_PAGE.  */
9385     page_gotno = 0;
9386   else
9387     /* Assume there are two loadable segments consisting of contiguous
9388        sections.  Is 5 enough?  */
9389     page_gotno = (loadable_size >> 16) + 5;
9390 
9391   /* Choose the smaller of the two page estimates; both are intended to be
9392      conservative.  */
9393   if (page_gotno > g->page_gotno)
9394     page_gotno = g->page_gotno;
9395 
9396   g->local_gotno += page_gotno;
9397   g->assigned_high_gotno = g->local_gotno - 1;
9398 
9399   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9400   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9401   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9402 
9403   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9404      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9405      dynamic loader.  */
9406   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9407     {
9408       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9409 	return FALSE;
9410     }
9411   else
9412     {
9413       /* Record that all bfds use G.  This also has the effect of freeing
9414 	 the per-bfd GOTs, which we no longer need.  */
9415       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9416 	if (mips_elf_bfd_got (ibfd, FALSE))
9417 	  mips_elf_replace_bfd_got (ibfd, g);
9418       mips_elf_replace_bfd_got (output_bfd, g);
9419 
9420       /* Set up TLS entries.  */
9421       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9422       tga.info = info;
9423       tga.g = g;
9424       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9425       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9426       if (!tga.g)
9427 	return FALSE;
9428       BFD_ASSERT (g->tls_assigned_gotno
9429 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
9430 
9431       /* Each VxWorks GOT entry needs an explicit relocation.  */
9432       if (htab->is_vxworks && bfd_link_pic (info))
9433 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9434 
9435       /* Allocate room for the TLS relocations.  */
9436       if (g->relocs)
9437 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9438     }
9439 
9440   return TRUE;
9441 }
9442 
9443 /* Estimate the size of the .MIPS.stubs section.  */
9444 
9445 static void
9446 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9447 {
9448   struct mips_elf_link_hash_table *htab;
9449   bfd_size_type dynsymcount;
9450 
9451   htab = mips_elf_hash_table (info);
9452   BFD_ASSERT (htab != NULL);
9453 
9454   if (htab->lazy_stub_count == 0)
9455     return;
9456 
9457   /* IRIX rld assumes that a function stub isn't at the end of the .text
9458      section, so add a dummy entry to the end.  */
9459   htab->lazy_stub_count++;
9460 
9461   /* Get a worst-case estimate of the number of dynamic symbols needed.
9462      At this point, dynsymcount does not account for section symbols
9463      and count_section_dynsyms may overestimate the number that will
9464      be needed.  */
9465   dynsymcount = (elf_hash_table (info)->dynsymcount
9466 		 + count_section_dynsyms (output_bfd, info));
9467 
9468   /* Determine the size of one stub entry.  There's no disadvantage
9469      from using microMIPS code here, so for the sake of pure-microMIPS
9470      binaries we prefer it whenever there's any microMIPS code in
9471      output produced at all.  This has a benefit of stubs being
9472      shorter by 4 bytes each too, unless in the insn32 mode.  */
9473   if (!MICROMIPS_P (output_bfd))
9474     htab->function_stub_size = (dynsymcount > 0x10000
9475 				? MIPS_FUNCTION_STUB_BIG_SIZE
9476 				: MIPS_FUNCTION_STUB_NORMAL_SIZE);
9477   else if (htab->insn32)
9478     htab->function_stub_size = (dynsymcount > 0x10000
9479 				? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9480 				: MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9481   else
9482     htab->function_stub_size = (dynsymcount > 0x10000
9483 				? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9484 				: MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9485 
9486   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9487 }
9488 
9489 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9490    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9491    stub, allocate an entry in the stubs section.  */
9492 
9493 static bfd_boolean
9494 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9495 {
9496   struct mips_htab_traverse_info *hti = data;
9497   struct mips_elf_link_hash_table *htab;
9498   struct bfd_link_info *info;
9499   bfd *output_bfd;
9500 
9501   info = hti->info;
9502   output_bfd = hti->output_bfd;
9503   htab = mips_elf_hash_table (info);
9504   BFD_ASSERT (htab != NULL);
9505 
9506   if (h->needs_lazy_stub)
9507     {
9508       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9509       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9510       bfd_vma isa_bit = micromips_p;
9511 
9512       BFD_ASSERT (htab->root.dynobj != NULL);
9513       if (h->root.plt.plist == NULL)
9514 	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9515       if (h->root.plt.plist == NULL)
9516 	{
9517 	  hti->error = TRUE;
9518 	  return FALSE;
9519 	}
9520       h->root.root.u.def.section = htab->sstubs;
9521       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9522       h->root.plt.plist->stub_offset = htab->sstubs->size;
9523       h->root.other = other;
9524       htab->sstubs->size += htab->function_stub_size;
9525     }
9526   return TRUE;
9527 }
9528 
9529 /* Allocate offsets in the stubs section to each symbol that needs one.
9530    Set the final size of the .MIPS.stub section.  */
9531 
9532 static bfd_boolean
9533 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9534 {
9535   bfd *output_bfd = info->output_bfd;
9536   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9537   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9538   bfd_vma isa_bit = micromips_p;
9539   struct mips_elf_link_hash_table *htab;
9540   struct mips_htab_traverse_info hti;
9541   struct elf_link_hash_entry *h;
9542   bfd *dynobj;
9543 
9544   htab = mips_elf_hash_table (info);
9545   BFD_ASSERT (htab != NULL);
9546 
9547   if (htab->lazy_stub_count == 0)
9548     return TRUE;
9549 
9550   htab->sstubs->size = 0;
9551   hti.info = info;
9552   hti.output_bfd = output_bfd;
9553   hti.error = FALSE;
9554   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9555   if (hti.error)
9556     return FALSE;
9557   htab->sstubs->size += htab->function_stub_size;
9558   BFD_ASSERT (htab->sstubs->size
9559 	      == htab->lazy_stub_count * htab->function_stub_size);
9560 
9561   dynobj = elf_hash_table (info)->dynobj;
9562   BFD_ASSERT (dynobj != NULL);
9563   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9564   if (h == NULL)
9565     return FALSE;
9566   h->root.u.def.value = isa_bit;
9567   h->other = other;
9568   h->type = STT_FUNC;
9569 
9570   return TRUE;
9571 }
9572 
9573 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9574    bfd_link_info.  If H uses the address of a PLT entry as the value
9575    of the symbol, then set the entry in the symbol table now.  Prefer
9576    a standard MIPS PLT entry.  */
9577 
9578 static bfd_boolean
9579 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9580 {
9581   struct bfd_link_info *info = data;
9582   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9583   struct mips_elf_link_hash_table *htab;
9584   unsigned int other;
9585   bfd_vma isa_bit;
9586   bfd_vma val;
9587 
9588   htab = mips_elf_hash_table (info);
9589   BFD_ASSERT (htab != NULL);
9590 
9591   if (h->use_plt_entry)
9592     {
9593       BFD_ASSERT (h->root.plt.plist != NULL);
9594       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9595 		  || h->root.plt.plist->comp_offset != MINUS_ONE);
9596 
9597       val = htab->plt_header_size;
9598       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9599 	{
9600 	  isa_bit = 0;
9601 	  val += h->root.plt.plist->mips_offset;
9602 	  other = 0;
9603 	}
9604       else
9605 	{
9606 	  isa_bit = 1;
9607 	  val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9608 	  other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9609 	}
9610       val += isa_bit;
9611       /* For VxWorks, point at the PLT load stub rather than the lazy
9612          resolution stub; this stub will become the canonical function
9613          address.  */
9614       if (htab->is_vxworks)
9615 	val += 8;
9616 
9617       h->root.root.u.def.section = htab->splt;
9618       h->root.root.u.def.value = val;
9619       h->root.other = other;
9620     }
9621 
9622   return TRUE;
9623 }
9624 
9625 /* Set the sizes of the dynamic sections.  */
9626 
9627 bfd_boolean
9628 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9629 				     struct bfd_link_info *info)
9630 {
9631   bfd *dynobj;
9632   asection *s, *sreldyn;
9633   bfd_boolean reltext;
9634   struct mips_elf_link_hash_table *htab;
9635 
9636   htab = mips_elf_hash_table (info);
9637   BFD_ASSERT (htab != NULL);
9638   dynobj = elf_hash_table (info)->dynobj;
9639   BFD_ASSERT (dynobj != NULL);
9640 
9641   if (elf_hash_table (info)->dynamic_sections_created)
9642     {
9643       /* Set the contents of the .interp section to the interpreter.  */
9644       if (bfd_link_executable (info) && !info->nointerp)
9645 	{
9646 	  s = bfd_get_linker_section (dynobj, ".interp");
9647 	  BFD_ASSERT (s != NULL);
9648 	  s->size
9649 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9650 	  s->contents
9651 	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9652 	}
9653 
9654       /* Figure out the size of the PLT header if we know that we
9655          are using it.  For the sake of cache alignment always use
9656          a standard header whenever any standard entries are present
9657          even if microMIPS entries are present as well.  This also
9658          lets the microMIPS header rely on the value of $v0 only set
9659          by microMIPS entries, for a small size reduction.
9660 
9661          Set symbol table entry values for symbols that use the
9662          address of their PLT entry now that we can calculate it.
9663 
9664          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9665          haven't already in _bfd_elf_create_dynamic_sections.  */
9666       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9667 	{
9668 	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9669 				     && !htab->plt_mips_offset);
9670 	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9671 	  bfd_vma isa_bit = micromips_p;
9672 	  struct elf_link_hash_entry *h;
9673 	  bfd_vma size;
9674 
9675 	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
9676 	  BFD_ASSERT (htab->sgotplt->size == 0);
9677 	  BFD_ASSERT (htab->splt->size == 0);
9678 
9679 	  if (htab->is_vxworks && bfd_link_pic (info))
9680 	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9681 	  else if (htab->is_vxworks)
9682 	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9683 	  else if (ABI_64_P (output_bfd))
9684 	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9685 	  else if (ABI_N32_P (output_bfd))
9686 	    size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9687 	  else if (!micromips_p)
9688 	    size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9689 	  else if (htab->insn32)
9690 	    size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9691 	  else
9692 	    size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9693 
9694 	  htab->plt_header_is_comp = micromips_p;
9695 	  htab->plt_header_size = size;
9696 	  htab->splt->size = (size
9697 			      + htab->plt_mips_offset
9698 			      + htab->plt_comp_offset);
9699 	  htab->sgotplt->size = (htab->plt_got_index
9700 				 * MIPS_ELF_GOT_SIZE (dynobj));
9701 
9702 	  mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9703 
9704 	  if (htab->root.hplt == NULL)
9705 	    {
9706 	      h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9707 					       "_PROCEDURE_LINKAGE_TABLE_");
9708 	      htab->root.hplt = h;
9709 	      if (h == NULL)
9710 		return FALSE;
9711 	    }
9712 
9713 	  h = htab->root.hplt;
9714 	  h->root.u.def.value = isa_bit;
9715 	  h->other = other;
9716 	  h->type = STT_FUNC;
9717 	}
9718     }
9719 
9720   /* Allocate space for global sym dynamic relocs.  */
9721   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9722 
9723   mips_elf_estimate_stub_size (output_bfd, info);
9724 
9725   if (!mips_elf_lay_out_got (output_bfd, info))
9726     return FALSE;
9727 
9728   mips_elf_lay_out_lazy_stubs (info);
9729 
9730   /* The check_relocs and adjust_dynamic_symbol entry points have
9731      determined the sizes of the various dynamic sections.  Allocate
9732      memory for them.  */
9733   reltext = FALSE;
9734   for (s = dynobj->sections; s != NULL; s = s->next)
9735     {
9736       const char *name;
9737 
9738       /* It's OK to base decisions on the section name, because none
9739 	 of the dynobj section names depend upon the input files.  */
9740       name = bfd_get_section_name (dynobj, s);
9741 
9742       if ((s->flags & SEC_LINKER_CREATED) == 0)
9743 	continue;
9744 
9745       if (CONST_STRNEQ (name, ".rel"))
9746 	{
9747 	  if (s->size != 0)
9748 	    {
9749 	      const char *outname;
9750 	      asection *target;
9751 
9752 	      /* If this relocation section applies to a read only
9753                  section, then we probably need a DT_TEXTREL entry.
9754                  If the relocation section is .rel(a).dyn, we always
9755                  assert a DT_TEXTREL entry rather than testing whether
9756                  there exists a relocation to a read only section or
9757                  not.  */
9758 	      outname = bfd_get_section_name (output_bfd,
9759 					      s->output_section);
9760 	      target = bfd_get_section_by_name (output_bfd, outname + 4);
9761 	      if ((target != NULL
9762 		   && (target->flags & SEC_READONLY) != 0
9763 		   && (target->flags & SEC_ALLOC) != 0)
9764 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9765 		reltext = TRUE;
9766 
9767 	      /* We use the reloc_count field as a counter if we need
9768 		 to copy relocs into the output file.  */
9769 	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9770 		s->reloc_count = 0;
9771 
9772 	      /* If combreloc is enabled, elf_link_sort_relocs() will
9773 		 sort relocations, but in a different way than we do,
9774 		 and before we're done creating relocations.  Also, it
9775 		 will move them around between input sections'
9776 		 relocation's contents, so our sorting would be
9777 		 broken, so don't let it run.  */
9778 	      info->combreloc = 0;
9779 	    }
9780 	}
9781       else if (bfd_link_executable (info)
9782 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
9783 	       && CONST_STRNEQ (name, ".rld_map"))
9784 	{
9785 	  /* We add a room for __rld_map.  It will be filled in by the
9786 	     rtld to contain a pointer to the _r_debug structure.  */
9787 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9788 	}
9789       else if (SGI_COMPAT (output_bfd)
9790 	       && CONST_STRNEQ (name, ".compact_rel"))
9791 	s->size += mips_elf_hash_table (info)->compact_rel_size;
9792       else if (s == htab->splt)
9793 	{
9794 	  /* If the last PLT entry has a branch delay slot, allocate
9795 	     room for an extra nop to fill the delay slot.  This is
9796 	     for CPUs without load interlocking.  */
9797 	  if (! LOAD_INTERLOCKS_P (output_bfd)
9798 	      && ! htab->is_vxworks && s->size > 0)
9799 	    s->size += 4;
9800 	}
9801       else if (! CONST_STRNEQ (name, ".init")
9802 	       && s != htab->sgot
9803 	       && s != htab->sgotplt
9804 	       && s != htab->sstubs
9805 	       && s != htab->sdynbss)
9806 	{
9807 	  /* It's not one of our sections, so don't allocate space.  */
9808 	  continue;
9809 	}
9810 
9811       if (s->size == 0)
9812 	{
9813 	  s->flags |= SEC_EXCLUDE;
9814 	  continue;
9815 	}
9816 
9817       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9818 	continue;
9819 
9820       /* Allocate memory for the section contents.  */
9821       s->contents = bfd_zalloc (dynobj, s->size);
9822       if (s->contents == NULL)
9823 	{
9824 	  bfd_set_error (bfd_error_no_memory);
9825 	  return FALSE;
9826 	}
9827     }
9828 
9829   if (elf_hash_table (info)->dynamic_sections_created)
9830     {
9831       /* Add some entries to the .dynamic section.  We fill in the
9832 	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9833 	 must add the entries now so that we get the correct size for
9834 	 the .dynamic section.  */
9835 
9836       /* SGI object has the equivalence of DT_DEBUG in the
9837 	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
9838 	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9839 	 may only look at the first one they see.  */
9840       if (!bfd_link_pic (info)
9841 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9842 	return FALSE;
9843 
9844       if (bfd_link_executable (info)
9845 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
9846 	return FALSE;
9847 
9848       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9849 	 used by the debugger.  */
9850       if (bfd_link_executable (info)
9851 	  && !SGI_COMPAT (output_bfd)
9852 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9853 	return FALSE;
9854 
9855       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9856 	info->flags |= DF_TEXTREL;
9857 
9858       if ((info->flags & DF_TEXTREL) != 0)
9859 	{
9860 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9861 	    return FALSE;
9862 
9863 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
9864 	     write out an actual text relocation; we may not, because
9865 	     at this point we do not know whether e.g. any .eh_frame
9866 	     absolute relocations have been converted to PC-relative.  */
9867 	  info->flags &= ~DF_TEXTREL;
9868 	}
9869 
9870       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9871 	return FALSE;
9872 
9873       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9874       if (htab->is_vxworks)
9875 	{
9876 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9877 	     use any of the DT_MIPS_* tags.  */
9878 	  if (sreldyn && sreldyn->size > 0)
9879 	    {
9880 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9881 		return FALSE;
9882 
9883 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9884 		return FALSE;
9885 
9886 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9887 		return FALSE;
9888 	    }
9889 	}
9890       else
9891 	{
9892 	  if (sreldyn && sreldyn->size > 0)
9893 	    {
9894 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9895 		return FALSE;
9896 
9897 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9898 		return FALSE;
9899 
9900 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9901 		return FALSE;
9902 	    }
9903 
9904 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9905 	    return FALSE;
9906 
9907 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9908 	    return FALSE;
9909 
9910 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9911 	    return FALSE;
9912 
9913 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9914 	    return FALSE;
9915 
9916 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9917 	    return FALSE;
9918 
9919 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9920 	    return FALSE;
9921 
9922 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9923 	    return FALSE;
9924 
9925 	  if (IRIX_COMPAT (dynobj) == ict_irix5
9926 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9927 	    return FALSE;
9928 
9929 	  if (IRIX_COMPAT (dynobj) == ict_irix6
9930 	      && (bfd_get_section_by_name
9931 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9932 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9933 	    return FALSE;
9934 	}
9935       if (htab->splt->size > 0)
9936 	{
9937 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9938 	    return FALSE;
9939 
9940 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9941 	    return FALSE;
9942 
9943 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9944 	    return FALSE;
9945 
9946 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9947 	    return FALSE;
9948 	}
9949       if (htab->is_vxworks
9950 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9951 	return FALSE;
9952     }
9953 
9954   return TRUE;
9955 }
9956 
9957 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9958    Adjust its R_ADDEND field so that it is correct for the output file.
9959    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9960    and sections respectively; both use symbol indexes.  */
9961 
9962 static void
9963 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9964 			bfd *input_bfd, Elf_Internal_Sym *local_syms,
9965 			asection **local_sections, Elf_Internal_Rela *rel)
9966 {
9967   unsigned int r_type, r_symndx;
9968   Elf_Internal_Sym *sym;
9969   asection *sec;
9970 
9971   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9972     {
9973       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9974       if (gprel16_reloc_p (r_type)
9975 	  || r_type == R_MIPS_GPREL32
9976 	  || literal_reloc_p (r_type))
9977 	{
9978 	  rel->r_addend += _bfd_get_gp_value (input_bfd);
9979 	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
9980 	}
9981 
9982       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9983       sym = local_syms + r_symndx;
9984 
9985       /* Adjust REL's addend to account for section merging.  */
9986       if (!bfd_link_relocatable (info))
9987 	{
9988 	  sec = local_sections[r_symndx];
9989 	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9990 	}
9991 
9992       /* This would normally be done by the rela_normal code in elflink.c.  */
9993       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9994 	rel->r_addend += local_sections[r_symndx]->output_offset;
9995     }
9996 }
9997 
9998 /* Handle relocations against symbols from removed linkonce sections,
9999    or sections discarded by a linker script.  We use this wrapper around
10000    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10001    on 64-bit ELF targets.  In this case for any relocation handled, which
10002    always be the first in a triplet, the remaining two have to be processed
10003    together with the first, even if they are R_MIPS_NONE.  It is the symbol
10004    index referred by the first reloc that applies to all the three and the
10005    remaining two never refer to an object symbol.  And it is the final
10006    relocation (the last non-null one) that determines the output field of
10007    the whole relocation so retrieve the corresponding howto structure for
10008    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10009 
10010    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10011    and therefore requires to be pasted in a loop.  It also defines a block
10012    and does not protect any of its arguments, hence the extra brackets.  */
10013 
10014 static void
10015 mips_reloc_against_discarded_section (bfd *output_bfd,
10016 				      struct bfd_link_info *info,
10017 				      bfd *input_bfd, asection *input_section,
10018 				      Elf_Internal_Rela **rel,
10019 				      const Elf_Internal_Rela **relend,
10020 				      bfd_boolean rel_reloc,
10021 				      reloc_howto_type *howto,
10022 				      bfd_byte *contents)
10023 {
10024   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10025   int count = bed->s->int_rels_per_ext_rel;
10026   unsigned int r_type;
10027   int i;
10028 
10029   for (i = count - 1; i > 0; i--)
10030     {
10031       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10032       if (r_type != R_MIPS_NONE)
10033 	{
10034 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10035 	  break;
10036 	}
10037     }
10038   do
10039     {
10040        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10041 					(*rel), count, (*relend),
10042 					howto, i, contents);
10043     }
10044   while (0);
10045 }
10046 
10047 /* Relocate a MIPS ELF section.  */
10048 
10049 bfd_boolean
10050 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10051 				bfd *input_bfd, asection *input_section,
10052 				bfd_byte *contents, Elf_Internal_Rela *relocs,
10053 				Elf_Internal_Sym *local_syms,
10054 				asection **local_sections)
10055 {
10056   Elf_Internal_Rela *rel;
10057   const Elf_Internal_Rela *relend;
10058   bfd_vma addend = 0;
10059   bfd_boolean use_saved_addend_p = FALSE;
10060   const struct elf_backend_data *bed;
10061 
10062   bed = get_elf_backend_data (output_bfd);
10063   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
10064   for (rel = relocs; rel < relend; ++rel)
10065     {
10066       const char *name;
10067       bfd_vma value = 0;
10068       reloc_howto_type *howto;
10069       bfd_boolean cross_mode_jump_p = FALSE;
10070       /* TRUE if the relocation is a RELA relocation, rather than a
10071          REL relocation.  */
10072       bfd_boolean rela_relocation_p = TRUE;
10073       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10074       const char *msg;
10075       unsigned long r_symndx;
10076       asection *sec;
10077       Elf_Internal_Shdr *symtab_hdr;
10078       struct elf_link_hash_entry *h;
10079       bfd_boolean rel_reloc;
10080 
10081       rel_reloc = (NEWABI_P (input_bfd)
10082 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
10083 						 relocs, rel));
10084       /* Find the relocation howto for this relocation.  */
10085       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10086 
10087       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10088       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10089       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10090 	{
10091 	  sec = local_sections[r_symndx];
10092 	  h = NULL;
10093 	}
10094       else
10095 	{
10096 	  unsigned long extsymoff;
10097 
10098 	  extsymoff = 0;
10099 	  if (!elf_bad_symtab (input_bfd))
10100 	    extsymoff = symtab_hdr->sh_info;
10101 	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10102 	  while (h->root.type == bfd_link_hash_indirect
10103 		 || h->root.type == bfd_link_hash_warning)
10104 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
10105 
10106 	  sec = NULL;
10107 	  if (h->root.type == bfd_link_hash_defined
10108 	      || h->root.type == bfd_link_hash_defweak)
10109 	    sec = h->root.u.def.section;
10110 	}
10111 
10112       if (sec != NULL && discarded_section (sec))
10113 	{
10114 	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10115 						input_section, &rel, &relend,
10116 						rel_reloc, howto, contents);
10117 	  continue;
10118 	}
10119 
10120       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10121 	{
10122 	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10123 	     64-bit code, but make sure all their addresses are in the
10124 	     lowermost or uppermost 32-bit section of the 64-bit address
10125 	     space.  Thus, when they use an R_MIPS_64 they mean what is
10126 	     usually meant by R_MIPS_32, with the exception that the
10127 	     stored value is sign-extended to 64 bits.  */
10128 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10129 
10130 	  /* On big-endian systems, we need to lie about the position
10131 	     of the reloc.  */
10132 	  if (bfd_big_endian (input_bfd))
10133 	    rel->r_offset += 4;
10134 	}
10135 
10136       if (!use_saved_addend_p)
10137 	{
10138 	  /* If these relocations were originally of the REL variety,
10139 	     we must pull the addend out of the field that will be
10140 	     relocated.  Otherwise, we simply use the contents of the
10141 	     RELA relocation.  */
10142 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
10143 					 relocs, rel))
10144 	    {
10145 	      rela_relocation_p = FALSE;
10146 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
10147 						 howto, contents);
10148 	      if (hi16_reloc_p (r_type)
10149 		  || (got16_reloc_p (r_type)
10150 		      && mips_elf_local_relocation_p (input_bfd, rel,
10151 						      local_sections)))
10152 		{
10153 		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10154 						     contents, &addend))
10155 		    {
10156 		      if (h)
10157 			name = h->root.root.string;
10158 		      else
10159 			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10160 						 local_syms + r_symndx,
10161 						 sec);
10162 		      (*_bfd_error_handler)
10163 			(_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10164 			 input_bfd, input_section, name, howto->name,
10165 			 rel->r_offset);
10166 		    }
10167 		}
10168 	      else
10169 		addend <<= howto->rightshift;
10170 	    }
10171 	  else
10172 	    addend = rel->r_addend;
10173 	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
10174 				  local_syms, local_sections, rel);
10175 	}
10176 
10177       if (bfd_link_relocatable (info))
10178 	{
10179 	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10180 	      && bfd_big_endian (input_bfd))
10181 	    rel->r_offset -= 4;
10182 
10183 	  if (!rela_relocation_p && rel->r_addend)
10184 	    {
10185 	      addend += rel->r_addend;
10186 	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10187 		addend = mips_elf_high (addend);
10188 	      else if (r_type == R_MIPS_HIGHER)
10189 		addend = mips_elf_higher (addend);
10190 	      else if (r_type == R_MIPS_HIGHEST)
10191 		addend = mips_elf_highest (addend);
10192 	      else
10193 		addend >>= howto->rightshift;
10194 
10195 	      /* We use the source mask, rather than the destination
10196 		 mask because the place to which we are writing will be
10197 		 source of the addend in the final link.  */
10198 	      addend &= howto->src_mask;
10199 
10200 	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10201 		/* See the comment above about using R_MIPS_64 in the 32-bit
10202 		   ABI.  Here, we need to update the addend.  It would be
10203 		   possible to get away with just using the R_MIPS_32 reloc
10204 		   but for endianness.  */
10205 		{
10206 		  bfd_vma sign_bits;
10207 		  bfd_vma low_bits;
10208 		  bfd_vma high_bits;
10209 
10210 		  if (addend & ((bfd_vma) 1 << 31))
10211 #ifdef BFD64
10212 		    sign_bits = ((bfd_vma) 1 << 32) - 1;
10213 #else
10214 		    sign_bits = -1;
10215 #endif
10216 		  else
10217 		    sign_bits = 0;
10218 
10219 		  /* If we don't know that we have a 64-bit type,
10220 		     do two separate stores.  */
10221 		  if (bfd_big_endian (input_bfd))
10222 		    {
10223 		      /* Store the sign-bits (which are most significant)
10224 			 first.  */
10225 		      low_bits = sign_bits;
10226 		      high_bits = addend;
10227 		    }
10228 		  else
10229 		    {
10230 		      low_bits = addend;
10231 		      high_bits = sign_bits;
10232 		    }
10233 		  bfd_put_32 (input_bfd, low_bits,
10234 			      contents + rel->r_offset);
10235 		  bfd_put_32 (input_bfd, high_bits,
10236 			      contents + rel->r_offset + 4);
10237 		  continue;
10238 		}
10239 
10240 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
10241 						 input_bfd, input_section,
10242 						 contents, FALSE))
10243 		return FALSE;
10244 	    }
10245 
10246 	  /* Go on to the next relocation.  */
10247 	  continue;
10248 	}
10249 
10250       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10251 	 relocations for the same offset.  In that case we are
10252 	 supposed to treat the output of each relocation as the addend
10253 	 for the next.  */
10254       if (rel + 1 < relend
10255 	  && rel->r_offset == rel[1].r_offset
10256 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10257 	use_saved_addend_p = TRUE;
10258       else
10259 	use_saved_addend_p = FALSE;
10260 
10261       /* Figure out what value we are supposed to relocate.  */
10262       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10263 					     input_section, info, rel,
10264 					     addend, howto, local_syms,
10265 					     local_sections, &value,
10266 					     &name, &cross_mode_jump_p,
10267 					     use_saved_addend_p))
10268 	{
10269 	case bfd_reloc_continue:
10270 	  /* There's nothing to do.  */
10271 	  continue;
10272 
10273 	case bfd_reloc_undefined:
10274 	  /* mips_elf_calculate_relocation already called the
10275 	     undefined_symbol callback.  There's no real point in
10276 	     trying to perform the relocation at this point, so we
10277 	     just skip ahead to the next relocation.  */
10278 	  continue;
10279 
10280 	case bfd_reloc_notsupported:
10281 	  msg = _("internal error: unsupported relocation error");
10282 	  info->callbacks->warning
10283 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
10284 	  return FALSE;
10285 
10286 	case bfd_reloc_overflow:
10287 	  if (use_saved_addend_p)
10288 	    /* Ignore overflow until we reach the last relocation for
10289 	       a given location.  */
10290 	    ;
10291 	  else
10292 	    {
10293 	      struct mips_elf_link_hash_table *htab;
10294 
10295 	      htab = mips_elf_hash_table (info);
10296 	      BFD_ASSERT (htab != NULL);
10297 	      BFD_ASSERT (name != NULL);
10298 	      if (!htab->small_data_overflow_reported
10299 		  && (gprel16_reloc_p (howto->type)
10300 		      || literal_reloc_p (howto->type)))
10301 		{
10302 		  msg = _("small-data section exceeds 64KB;"
10303 			  " lower small-data size limit (see option -G)");
10304 
10305 		  htab->small_data_overflow_reported = TRUE;
10306 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
10307 		}
10308 	      (*info->callbacks->reloc_overflow)
10309 		(info, NULL, name, howto->name, (bfd_vma) 0,
10310 		 input_bfd, input_section, rel->r_offset);
10311 	    }
10312 	  break;
10313 
10314 	case bfd_reloc_ok:
10315 	  break;
10316 
10317 	case bfd_reloc_outofrange:
10318 	  msg = NULL;
10319 	  if (jal_reloc_p (howto->type))
10320 	    msg = _("JALX to a non-word-aligned address");
10321 	  else if (b_reloc_p (howto->type))
10322 	    msg = _("Branch to a non-instruction-aligned address");
10323 	  else if (aligned_pcrel_reloc_p (howto->type))
10324 	    msg = _("PC-relative load from unaligned address");
10325 	  if (msg)
10326 	    {
10327 	      info->callbacks->einfo
10328 		("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10329 	      break;
10330 	    }
10331 	  /* Fall through.  */
10332 
10333 	default:
10334 	  abort ();
10335 	  break;
10336 	}
10337 
10338       /* If we've got another relocation for the address, keep going
10339 	 until we reach the last one.  */
10340       if (use_saved_addend_p)
10341 	{
10342 	  addend = value;
10343 	  continue;
10344 	}
10345 
10346       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10347 	/* See the comment above about using R_MIPS_64 in the 32-bit
10348 	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10349 	   that calculated the right value.  Now, however, we
10350 	   sign-extend the 32-bit result to 64-bits, and store it as a
10351 	   64-bit value.  We are especially generous here in that we
10352 	   go to extreme lengths to support this usage on systems with
10353 	   only a 32-bit VMA.  */
10354 	{
10355 	  bfd_vma sign_bits;
10356 	  bfd_vma low_bits;
10357 	  bfd_vma high_bits;
10358 
10359 	  if (value & ((bfd_vma) 1 << 31))
10360 #ifdef BFD64
10361 	    sign_bits = ((bfd_vma) 1 << 32) - 1;
10362 #else
10363 	    sign_bits = -1;
10364 #endif
10365 	  else
10366 	    sign_bits = 0;
10367 
10368 	  /* If we don't know that we have a 64-bit type,
10369 	     do two separate stores.  */
10370 	  if (bfd_big_endian (input_bfd))
10371 	    {
10372 	      /* Undo what we did above.  */
10373 	      rel->r_offset -= 4;
10374 	      /* Store the sign-bits (which are most significant)
10375 		 first.  */
10376 	      low_bits = sign_bits;
10377 	      high_bits = value;
10378 	    }
10379 	  else
10380 	    {
10381 	      low_bits = value;
10382 	      high_bits = sign_bits;
10383 	    }
10384 	  bfd_put_32 (input_bfd, low_bits,
10385 		      contents + rel->r_offset);
10386 	  bfd_put_32 (input_bfd, high_bits,
10387 		      contents + rel->r_offset + 4);
10388 	  continue;
10389 	}
10390 
10391       /* Actually perform the relocation.  */
10392       if (! mips_elf_perform_relocation (info, howto, rel, value,
10393 					 input_bfd, input_section,
10394 					 contents, cross_mode_jump_p))
10395 	return FALSE;
10396     }
10397 
10398   return TRUE;
10399 }
10400 
10401 /* A function that iterates over each entry in la25_stubs and fills
10402    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10403 
10404 static int
10405 mips_elf_create_la25_stub (void **slot, void *data)
10406 {
10407   struct mips_htab_traverse_info *hti;
10408   struct mips_elf_link_hash_table *htab;
10409   struct mips_elf_la25_stub *stub;
10410   asection *s;
10411   bfd_byte *loc;
10412   bfd_vma offset, target, target_high, target_low;
10413 
10414   stub = (struct mips_elf_la25_stub *) *slot;
10415   hti = (struct mips_htab_traverse_info *) data;
10416   htab = mips_elf_hash_table (hti->info);
10417   BFD_ASSERT (htab != NULL);
10418 
10419   /* Create the section contents, if we haven't already.  */
10420   s = stub->stub_section;
10421   loc = s->contents;
10422   if (loc == NULL)
10423     {
10424       loc = bfd_malloc (s->size);
10425       if (loc == NULL)
10426 	{
10427 	  hti->error = TRUE;
10428 	  return FALSE;
10429 	}
10430       s->contents = loc;
10431     }
10432 
10433   /* Work out where in the section this stub should go.  */
10434   offset = stub->offset;
10435 
10436   /* Work out the target address.  */
10437   target = mips_elf_get_la25_target (stub, &s);
10438   target += s->output_section->vma + s->output_offset;
10439 
10440   target_high = ((target + 0x8000) >> 16) & 0xffff;
10441   target_low = (target & 0xffff);
10442 
10443   if (stub->stub_section != htab->strampoline)
10444     {
10445       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10446 	 of the section and write the two instructions at the end.  */
10447       memset (loc, 0, offset);
10448       loc += offset;
10449       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10450 	{
10451 	  bfd_put_micromips_32 (hti->output_bfd,
10452 				LA25_LUI_MICROMIPS (target_high),
10453 				loc);
10454 	  bfd_put_micromips_32 (hti->output_bfd,
10455 				LA25_ADDIU_MICROMIPS (target_low),
10456 				loc + 4);
10457 	}
10458       else
10459 	{
10460 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10461 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10462 	}
10463     }
10464   else
10465     {
10466       /* This is trampoline.  */
10467       loc += offset;
10468       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10469 	{
10470 	  bfd_put_micromips_32 (hti->output_bfd,
10471 				LA25_LUI_MICROMIPS (target_high), loc);
10472 	  bfd_put_micromips_32 (hti->output_bfd,
10473 				LA25_J_MICROMIPS (target), loc + 4);
10474 	  bfd_put_micromips_32 (hti->output_bfd,
10475 				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10476 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10477 	}
10478       else
10479 	{
10480 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10481 	  bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10482 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10483 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10484 	}
10485     }
10486   return TRUE;
10487 }
10488 
10489 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10490    adjust it appropriately now.  */
10491 
10492 static void
10493 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10494 				      const char *name, Elf_Internal_Sym *sym)
10495 {
10496   /* The linker script takes care of providing names and values for
10497      these, but we must place them into the right sections.  */
10498   static const char* const text_section_symbols[] = {
10499     "_ftext",
10500     "_etext",
10501     "__dso_displacement",
10502     "__elf_header",
10503     "__program_header_table",
10504     NULL
10505   };
10506 
10507   static const char* const data_section_symbols[] = {
10508     "_fdata",
10509     "_edata",
10510     "_end",
10511     "_fbss",
10512     NULL
10513   };
10514 
10515   const char* const *p;
10516   int i;
10517 
10518   for (i = 0; i < 2; ++i)
10519     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10520 	 *p;
10521 	 ++p)
10522       if (strcmp (*p, name) == 0)
10523 	{
10524 	  /* All of these symbols are given type STT_SECTION by the
10525 	     IRIX6 linker.  */
10526 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10527 	  sym->st_other = STO_PROTECTED;
10528 
10529 	  /* The IRIX linker puts these symbols in special sections.  */
10530 	  if (i == 0)
10531 	    sym->st_shndx = SHN_MIPS_TEXT;
10532 	  else
10533 	    sym->st_shndx = SHN_MIPS_DATA;
10534 
10535 	  break;
10536 	}
10537 }
10538 
10539 /* Finish up dynamic symbol handling.  We set the contents of various
10540    dynamic sections here.  */
10541 
10542 bfd_boolean
10543 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10544 				     struct bfd_link_info *info,
10545 				     struct elf_link_hash_entry *h,
10546 				     Elf_Internal_Sym *sym)
10547 {
10548   bfd *dynobj;
10549   asection *sgot;
10550   struct mips_got_info *g, *gg;
10551   const char *name;
10552   int idx;
10553   struct mips_elf_link_hash_table *htab;
10554   struct mips_elf_link_hash_entry *hmips;
10555 
10556   htab = mips_elf_hash_table (info);
10557   BFD_ASSERT (htab != NULL);
10558   dynobj = elf_hash_table (info)->dynobj;
10559   hmips = (struct mips_elf_link_hash_entry *) h;
10560 
10561   BFD_ASSERT (!htab->is_vxworks);
10562 
10563   if (h->plt.plist != NULL
10564       && (h->plt.plist->mips_offset != MINUS_ONE
10565 	  || h->plt.plist->comp_offset != MINUS_ONE))
10566     {
10567       /* We've decided to create a PLT entry for this symbol.  */
10568       bfd_byte *loc;
10569       bfd_vma header_address, got_address;
10570       bfd_vma got_address_high, got_address_low, load;
10571       bfd_vma got_index;
10572       bfd_vma isa_bit;
10573 
10574       got_index = h->plt.plist->gotplt_index;
10575 
10576       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10577       BFD_ASSERT (h->dynindx != -1);
10578       BFD_ASSERT (htab->splt != NULL);
10579       BFD_ASSERT (got_index != MINUS_ONE);
10580       BFD_ASSERT (!h->def_regular);
10581 
10582       /* Calculate the address of the PLT header.  */
10583       isa_bit = htab->plt_header_is_comp;
10584       header_address = (htab->splt->output_section->vma
10585 			+ htab->splt->output_offset + isa_bit);
10586 
10587       /* Calculate the address of the .got.plt entry.  */
10588       got_address = (htab->sgotplt->output_section->vma
10589 		     + htab->sgotplt->output_offset
10590 		     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10591 
10592       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10593       got_address_low = got_address & 0xffff;
10594 
10595       /* Initially point the .got.plt entry at the PLT header.  */
10596       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10597       if (ABI_64_P (output_bfd))
10598 	bfd_put_64 (output_bfd, header_address, loc);
10599       else
10600 	bfd_put_32 (output_bfd, header_address, loc);
10601 
10602       /* Now handle the PLT itself.  First the standard entry (the order
10603          does not matter, we just have to pick one).  */
10604       if (h->plt.plist->mips_offset != MINUS_ONE)
10605 	{
10606 	  const bfd_vma *plt_entry;
10607 	  bfd_vma plt_offset;
10608 
10609 	  plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10610 
10611 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10612 
10613 	  /* Find out where the .plt entry should go.  */
10614 	  loc = htab->splt->contents + plt_offset;
10615 
10616 	  /* Pick the load opcode.  */
10617 	  load = MIPS_ELF_LOAD_WORD (output_bfd);
10618 
10619 	  /* Fill in the PLT entry itself.  */
10620 
10621 	  if (MIPSR6_P (output_bfd))
10622 	    plt_entry = mipsr6_exec_plt_entry;
10623 	  else
10624 	    plt_entry = mips_exec_plt_entry;
10625 	  bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10626 	  bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10627 		      loc + 4);
10628 
10629 	  if (! LOAD_INTERLOCKS_P (output_bfd))
10630 	    {
10631 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10632 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10633 	    }
10634 	  else
10635 	    {
10636 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10637 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10638 			  loc + 12);
10639 	    }
10640 	}
10641 
10642       /* Now the compressed entry.  They come after any standard ones.  */
10643       if (h->plt.plist->comp_offset != MINUS_ONE)
10644 	{
10645 	  bfd_vma plt_offset;
10646 
10647 	  plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10648 			+ h->plt.plist->comp_offset);
10649 
10650 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10651 
10652 	  /* Find out where the .plt entry should go.  */
10653 	  loc = htab->splt->contents + plt_offset;
10654 
10655 	  /* Fill in the PLT entry itself.  */
10656 	  if (!MICROMIPS_P (output_bfd))
10657 	    {
10658 	      const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10659 
10660 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10661 	      bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10662 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10663 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10664 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10665 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10666 	      bfd_put_32 (output_bfd, got_address, loc + 12);
10667 	    }
10668 	  else if (htab->insn32)
10669 	    {
10670 	      const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10671 
10672 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10673 	      bfd_put_16 (output_bfd, got_address_high, loc + 2);
10674 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10675 	      bfd_put_16 (output_bfd, got_address_low, loc + 6);
10676 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10677 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10678 	      bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10679 	      bfd_put_16 (output_bfd, got_address_low, loc + 14);
10680 	    }
10681 	  else
10682 	    {
10683 	      const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10684 	      bfd_signed_vma gotpc_offset;
10685 	      bfd_vma loc_address;
10686 
10687 	      BFD_ASSERT (got_address % 4 == 0);
10688 
10689 	      loc_address = (htab->splt->output_section->vma
10690 			     + htab->splt->output_offset + plt_offset);
10691 	      gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10692 
10693 	      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10694 	      if (gotpc_offset + 0x1000000 >= 0x2000000)
10695 		{
10696 		  (*_bfd_error_handler)
10697 		    (_("%B: `%A' offset of %ld from `%A' "
10698 		       "beyond the range of ADDIUPC"),
10699 		     output_bfd,
10700 		     htab->sgotplt->output_section,
10701 		     htab->splt->output_section,
10702 		     (long) gotpc_offset);
10703 		  bfd_set_error (bfd_error_no_error);
10704 		  return FALSE;
10705 		}
10706 	      bfd_put_16 (output_bfd,
10707 			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10708 	      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10709 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10710 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10711 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10712 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10713 	    }
10714 	}
10715 
10716       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10717       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10718 					  got_index - 2, h->dynindx,
10719 					  R_MIPS_JUMP_SLOT, got_address);
10720 
10721       /* We distinguish between PLT entries and lazy-binding stubs by
10722 	 giving the former an st_other value of STO_MIPS_PLT.  Set the
10723 	 flag and leave the value if there are any relocations in the
10724 	 binary where pointer equality matters.  */
10725       sym->st_shndx = SHN_UNDEF;
10726       if (h->pointer_equality_needed)
10727 	sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10728       else
10729 	{
10730 	  sym->st_value = 0;
10731 	  sym->st_other = 0;
10732 	}
10733     }
10734 
10735   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10736     {
10737       /* We've decided to create a lazy-binding stub.  */
10738       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10739       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10740       bfd_vma stub_size = htab->function_stub_size;
10741       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10742       bfd_vma isa_bit = micromips_p;
10743       bfd_vma stub_big_size;
10744 
10745       if (!micromips_p)
10746 	stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10747       else if (htab->insn32)
10748 	stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10749       else
10750 	stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10751 
10752       /* This symbol has a stub.  Set it up.  */
10753 
10754       BFD_ASSERT (h->dynindx != -1);
10755 
10756       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10757 
10758       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10759 	 sign extension at runtime in the stub, resulting in a negative
10760 	 index value.  */
10761       if (h->dynindx & ~0x7fffffff)
10762 	return FALSE;
10763 
10764       /* Fill the stub.  */
10765       if (micromips_p)
10766 	{
10767 	  idx = 0;
10768 	  bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10769 				stub + idx);
10770 	  idx += 4;
10771 	  if (htab->insn32)
10772 	    {
10773 	      bfd_put_micromips_32 (output_bfd,
10774 				    STUB_MOVE32_MICROMIPS, stub + idx);
10775 	      idx += 4;
10776 	    }
10777 	  else
10778 	    {
10779 	      bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10780 	      idx += 2;
10781 	    }
10782 	  if (stub_size == stub_big_size)
10783 	    {
10784 	      long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10785 
10786 	      bfd_put_micromips_32 (output_bfd,
10787 				    STUB_LUI_MICROMIPS (dynindx_hi),
10788 				    stub + idx);
10789 	      idx += 4;
10790 	    }
10791 	  if (htab->insn32)
10792 	    {
10793 	      bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10794 				    stub + idx);
10795 	      idx += 4;
10796 	    }
10797 	  else
10798 	    {
10799 	      bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10800 	      idx += 2;
10801 	    }
10802 
10803 	  /* If a large stub is not required and sign extension is not a
10804 	     problem, then use legacy code in the stub.  */
10805 	  if (stub_size == stub_big_size)
10806 	    bfd_put_micromips_32 (output_bfd,
10807 				  STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10808 				  stub + idx);
10809 	  else if (h->dynindx & ~0x7fff)
10810 	    bfd_put_micromips_32 (output_bfd,
10811 				  STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10812 				  stub + idx);
10813 	  else
10814 	    bfd_put_micromips_32 (output_bfd,
10815 				  STUB_LI16S_MICROMIPS (output_bfd,
10816 							h->dynindx),
10817 				  stub + idx);
10818 	}
10819       else
10820 	{
10821 	  idx = 0;
10822 	  bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10823 	  idx += 4;
10824 	  bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
10825 	  idx += 4;
10826 	  if (stub_size == stub_big_size)
10827 	    {
10828 	      bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10829 			  stub + idx);
10830 	      idx += 4;
10831 	    }
10832 	  bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10833 	  idx += 4;
10834 
10835 	  /* If a large stub is not required and sign extension is not a
10836 	     problem, then use legacy code in the stub.  */
10837 	  if (stub_size == stub_big_size)
10838 	    bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10839 			stub + idx);
10840 	  else if (h->dynindx & ~0x7fff)
10841 	    bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10842 			stub + idx);
10843 	  else
10844 	    bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10845 			stub + idx);
10846 	}
10847 
10848       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10849       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10850 	      stub, stub_size);
10851 
10852       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10853 	 only for the referenced symbol.  */
10854       sym->st_shndx = SHN_UNDEF;
10855 
10856       /* The run-time linker uses the st_value field of the symbol
10857 	 to reset the global offset table entry for this external
10858 	 to its stub address when unlinking a shared object.  */
10859       sym->st_value = (htab->sstubs->output_section->vma
10860 		       + htab->sstubs->output_offset
10861 		       + h->plt.plist->stub_offset
10862 		       + isa_bit);
10863       sym->st_other = other;
10864     }
10865 
10866   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10867      refer to the stub, since only the stub uses the standard calling
10868      conventions.  */
10869   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10870     {
10871       BFD_ASSERT (hmips->need_fn_stub);
10872       sym->st_value = (hmips->fn_stub->output_section->vma
10873 		       + hmips->fn_stub->output_offset);
10874       sym->st_size = hmips->fn_stub->size;
10875       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10876     }
10877 
10878   BFD_ASSERT (h->dynindx != -1
10879 	      || h->forced_local);
10880 
10881   sgot = htab->sgot;
10882   g = htab->got_info;
10883   BFD_ASSERT (g != NULL);
10884 
10885   /* Run through the global symbol table, creating GOT entries for all
10886      the symbols that need them.  */
10887   if (hmips->global_got_area != GGA_NONE)
10888     {
10889       bfd_vma offset;
10890       bfd_vma value;
10891 
10892       value = sym->st_value;
10893       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10894       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10895     }
10896 
10897   if (hmips->global_got_area != GGA_NONE && g->next)
10898     {
10899       struct mips_got_entry e, *p;
10900       bfd_vma entry;
10901       bfd_vma offset;
10902 
10903       gg = g;
10904 
10905       e.abfd = output_bfd;
10906       e.symndx = -1;
10907       e.d.h = hmips;
10908       e.tls_type = GOT_TLS_NONE;
10909 
10910       for (g = g->next; g->next != gg; g = g->next)
10911 	{
10912 	  if (g->got_entries
10913 	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10914 							   &e)))
10915 	    {
10916 	      offset = p->gotidx;
10917 	      BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10918 	      if (bfd_link_pic (info)
10919 		  || (elf_hash_table (info)->dynamic_sections_created
10920 		      && p->d.h != NULL
10921 		      && p->d.h->root.def_dynamic
10922 		      && !p->d.h->root.def_regular))
10923 		{
10924 		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10925 		     the various compatibility problems, it's easier to mock
10926 		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
10927 		     mips_elf_create_dynamic_relocation to calculate the
10928 		     appropriate addend.  */
10929 		  Elf_Internal_Rela rel[3];
10930 
10931 		  memset (rel, 0, sizeof (rel));
10932 		  if (ABI_64_P (output_bfd))
10933 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10934 		  else
10935 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10936 		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10937 
10938 		  entry = 0;
10939 		  if (! (mips_elf_create_dynamic_relocation
10940 			 (output_bfd, info, rel,
10941 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
10942 		    return FALSE;
10943 		}
10944 	      else
10945 		entry = sym->st_value;
10946 	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10947 	    }
10948 	}
10949     }
10950 
10951   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10952   name = h->root.root.string;
10953   if (h == elf_hash_table (info)->hdynamic
10954       || h == elf_hash_table (info)->hgot)
10955     sym->st_shndx = SHN_ABS;
10956   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10957 	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
10958     {
10959       sym->st_shndx = SHN_ABS;
10960       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10961       sym->st_value = 1;
10962     }
10963   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10964     {
10965       sym->st_shndx = SHN_ABS;
10966       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10967       sym->st_value = elf_gp (output_bfd);
10968     }
10969   else if (SGI_COMPAT (output_bfd))
10970     {
10971       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10972 	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10973 	{
10974 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10975 	  sym->st_other = STO_PROTECTED;
10976 	  sym->st_value = 0;
10977 	  sym->st_shndx = SHN_MIPS_DATA;
10978 	}
10979       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10980 	{
10981 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10982 	  sym->st_other = STO_PROTECTED;
10983 	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
10984 	  sym->st_shndx = SHN_ABS;
10985 	}
10986       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10987 	{
10988 	  if (h->type == STT_FUNC)
10989 	    sym->st_shndx = SHN_MIPS_TEXT;
10990 	  else if (h->type == STT_OBJECT)
10991 	    sym->st_shndx = SHN_MIPS_DATA;
10992 	}
10993     }
10994 
10995   /* Emit a copy reloc, if needed.  */
10996   if (h->needs_copy)
10997     {
10998       asection *s;
10999       bfd_vma symval;
11000 
11001       BFD_ASSERT (h->dynindx != -1);
11002       BFD_ASSERT (htab->use_plts_and_copy_relocs);
11003 
11004       s = mips_elf_rel_dyn_section (info, FALSE);
11005       symval = (h->root.u.def.section->output_section->vma
11006 		+ h->root.u.def.section->output_offset
11007 		+ h->root.u.def.value);
11008       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11009 					  h->dynindx, R_MIPS_COPY, symval);
11010     }
11011 
11012   /* Handle the IRIX6-specific symbols.  */
11013   if (IRIX_COMPAT (output_bfd) == ict_irix6)
11014     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11015 
11016   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
11017      to treat compressed symbols like any other.  */
11018   if (ELF_ST_IS_MIPS16 (sym->st_other))
11019     {
11020       BFD_ASSERT (sym->st_value & 1);
11021       sym->st_other -= STO_MIPS16;
11022     }
11023   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11024     {
11025       BFD_ASSERT (sym->st_value & 1);
11026       sym->st_other -= STO_MICROMIPS;
11027     }
11028 
11029   return TRUE;
11030 }
11031 
11032 /* Likewise, for VxWorks.  */
11033 
11034 bfd_boolean
11035 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11036 					 struct bfd_link_info *info,
11037 					 struct elf_link_hash_entry *h,
11038 					 Elf_Internal_Sym *sym)
11039 {
11040   bfd *dynobj;
11041   asection *sgot;
11042   struct mips_got_info *g;
11043   struct mips_elf_link_hash_table *htab;
11044   struct mips_elf_link_hash_entry *hmips;
11045 
11046   htab = mips_elf_hash_table (info);
11047   BFD_ASSERT (htab != NULL);
11048   dynobj = elf_hash_table (info)->dynobj;
11049   hmips = (struct mips_elf_link_hash_entry *) h;
11050 
11051   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11052     {
11053       bfd_byte *loc;
11054       bfd_vma plt_address, got_address, got_offset, branch_offset;
11055       Elf_Internal_Rela rel;
11056       static const bfd_vma *plt_entry;
11057       bfd_vma gotplt_index;
11058       bfd_vma plt_offset;
11059 
11060       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11061       gotplt_index = h->plt.plist->gotplt_index;
11062 
11063       BFD_ASSERT (h->dynindx != -1);
11064       BFD_ASSERT (htab->splt != NULL);
11065       BFD_ASSERT (gotplt_index != MINUS_ONE);
11066       BFD_ASSERT (plt_offset <= htab->splt->size);
11067 
11068       /* Calculate the address of the .plt entry.  */
11069       plt_address = (htab->splt->output_section->vma
11070 		     + htab->splt->output_offset
11071 		     + plt_offset);
11072 
11073       /* Calculate the address of the .got.plt entry.  */
11074       got_address = (htab->sgotplt->output_section->vma
11075 		     + htab->sgotplt->output_offset
11076 		     + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11077 
11078       /* Calculate the offset of the .got.plt entry from
11079 	 _GLOBAL_OFFSET_TABLE_.  */
11080       got_offset = mips_elf_gotplt_index (info, h);
11081 
11082       /* Calculate the offset for the branch at the start of the PLT
11083 	 entry.  The branch jumps to the beginning of .plt.  */
11084       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11085 
11086       /* Fill in the initial value of the .got.plt entry.  */
11087       bfd_put_32 (output_bfd, plt_address,
11088 		  (htab->sgotplt->contents
11089 		   + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11090 
11091       /* Find out where the .plt entry should go.  */
11092       loc = htab->splt->contents + plt_offset;
11093 
11094       if (bfd_link_pic (info))
11095 	{
11096 	  plt_entry = mips_vxworks_shared_plt_entry;
11097 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11098 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11099 	}
11100       else
11101 	{
11102 	  bfd_vma got_address_high, got_address_low;
11103 
11104 	  plt_entry = mips_vxworks_exec_plt_entry;
11105 	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11106 	  got_address_low = got_address & 0xffff;
11107 
11108 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11109 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11110 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11111 	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11112 	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11113 	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11114 	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11115 	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11116 
11117 	  loc = (htab->srelplt2->contents
11118 		 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11119 
11120 	  /* Emit a relocation for the .got.plt entry.  */
11121 	  rel.r_offset = got_address;
11122 	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11123 	  rel.r_addend = plt_offset;
11124 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11125 
11126 	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11127 	  loc += sizeof (Elf32_External_Rela);
11128 	  rel.r_offset = plt_address + 8;
11129 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11130 	  rel.r_addend = got_offset;
11131 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11132 
11133 	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11134 	  loc += sizeof (Elf32_External_Rela);
11135 	  rel.r_offset += 4;
11136 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11137 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11138 	}
11139 
11140       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11141       loc = (htab->srelplt->contents
11142 	     + gotplt_index * sizeof (Elf32_External_Rela));
11143       rel.r_offset = got_address;
11144       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11145       rel.r_addend = 0;
11146       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11147 
11148       if (!h->def_regular)
11149 	sym->st_shndx = SHN_UNDEF;
11150     }
11151 
11152   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11153 
11154   sgot = htab->sgot;
11155   g = htab->got_info;
11156   BFD_ASSERT (g != NULL);
11157 
11158   /* See if this symbol has an entry in the GOT.  */
11159   if (hmips->global_got_area != GGA_NONE)
11160     {
11161       bfd_vma offset;
11162       Elf_Internal_Rela outrel;
11163       bfd_byte *loc;
11164       asection *s;
11165 
11166       /* Install the symbol value in the GOT.   */
11167       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11168       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11169 
11170       /* Add a dynamic relocation for it.  */
11171       s = mips_elf_rel_dyn_section (info, FALSE);
11172       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11173       outrel.r_offset = (sgot->output_section->vma
11174 			 + sgot->output_offset
11175 			 + offset);
11176       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11177       outrel.r_addend = 0;
11178       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11179     }
11180 
11181   /* Emit a copy reloc, if needed.  */
11182   if (h->needs_copy)
11183     {
11184       Elf_Internal_Rela rel;
11185 
11186       BFD_ASSERT (h->dynindx != -1);
11187 
11188       rel.r_offset = (h->root.u.def.section->output_section->vma
11189 		      + h->root.u.def.section->output_offset
11190 		      + h->root.u.def.value);
11191       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11192       rel.r_addend = 0;
11193       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11194 				 htab->srelbss->contents
11195 				 + (htab->srelbss->reloc_count
11196 				    * sizeof (Elf32_External_Rela)));
11197       ++htab->srelbss->reloc_count;
11198     }
11199 
11200   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11201   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11202     sym->st_value &= ~1;
11203 
11204   return TRUE;
11205 }
11206 
11207 /* Write out a plt0 entry to the beginning of .plt.  */
11208 
11209 static bfd_boolean
11210 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11211 {
11212   bfd_byte *loc;
11213   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11214   static const bfd_vma *plt_entry;
11215   struct mips_elf_link_hash_table *htab;
11216 
11217   htab = mips_elf_hash_table (info);
11218   BFD_ASSERT (htab != NULL);
11219 
11220   if (ABI_64_P (output_bfd))
11221     plt_entry = mips_n64_exec_plt0_entry;
11222   else if (ABI_N32_P (output_bfd))
11223     plt_entry = mips_n32_exec_plt0_entry;
11224   else if (!htab->plt_header_is_comp)
11225     plt_entry = mips_o32_exec_plt0_entry;
11226   else if (htab->insn32)
11227     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11228   else
11229     plt_entry = micromips_o32_exec_plt0_entry;
11230 
11231   /* Calculate the value of .got.plt.  */
11232   gotplt_value = (htab->sgotplt->output_section->vma
11233 		  + htab->sgotplt->output_offset);
11234   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11235   gotplt_value_low = gotplt_value & 0xffff;
11236 
11237   /* The PLT sequence is not safe for N64 if .got.plt's address can
11238      not be loaded in two instructions.  */
11239   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11240 	      || ~(gotplt_value | 0x7fffffff) == 0);
11241 
11242   /* Install the PLT header.  */
11243   loc = htab->splt->contents;
11244   if (plt_entry == micromips_o32_exec_plt0_entry)
11245     {
11246       bfd_vma gotpc_offset;
11247       bfd_vma loc_address;
11248       size_t i;
11249 
11250       BFD_ASSERT (gotplt_value % 4 == 0);
11251 
11252       loc_address = (htab->splt->output_section->vma
11253 		     + htab->splt->output_offset);
11254       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11255 
11256       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11257       if (gotpc_offset + 0x1000000 >= 0x2000000)
11258 	{
11259 	  (*_bfd_error_handler)
11260 	    (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11261 	     output_bfd,
11262 	     htab->sgotplt->output_section,
11263 	     htab->splt->output_section,
11264 	     (long) gotpc_offset);
11265 	  bfd_set_error (bfd_error_no_error);
11266 	  return FALSE;
11267 	}
11268       bfd_put_16 (output_bfd,
11269 		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11270       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11271       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11272 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11273     }
11274   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11275     {
11276       size_t i;
11277 
11278       bfd_put_16 (output_bfd, plt_entry[0], loc);
11279       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11280       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11281       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11282       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11283       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11284       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11285 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11286     }
11287   else
11288     {
11289       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11290       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11291       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11292       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11293       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11294       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11295       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11296       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11297     }
11298 
11299   return TRUE;
11300 }
11301 
11302 /* Install the PLT header for a VxWorks executable and finalize the
11303    contents of .rela.plt.unloaded.  */
11304 
11305 static void
11306 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11307 {
11308   Elf_Internal_Rela rela;
11309   bfd_byte *loc;
11310   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11311   static const bfd_vma *plt_entry;
11312   struct mips_elf_link_hash_table *htab;
11313 
11314   htab = mips_elf_hash_table (info);
11315   BFD_ASSERT (htab != NULL);
11316 
11317   plt_entry = mips_vxworks_exec_plt0_entry;
11318 
11319   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11320   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11321 	       + htab->root.hgot->root.u.def.section->output_offset
11322 	       + htab->root.hgot->root.u.def.value);
11323 
11324   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11325   got_value_low = got_value & 0xffff;
11326 
11327   /* Calculate the address of the PLT header.  */
11328   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11329 
11330   /* Install the PLT header.  */
11331   loc = htab->splt->contents;
11332   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11333   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11334   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11335   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11336   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11337   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11338 
11339   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11340   loc = htab->srelplt2->contents;
11341   rela.r_offset = plt_address;
11342   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11343   rela.r_addend = 0;
11344   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11345   loc += sizeof (Elf32_External_Rela);
11346 
11347   /* Output the relocation for the following addiu of
11348      %lo(_GLOBAL_OFFSET_TABLE_).  */
11349   rela.r_offset += 4;
11350   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11351   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11352   loc += sizeof (Elf32_External_Rela);
11353 
11354   /* Fix up the remaining relocations.  They may have the wrong
11355      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11356      in which symbols were output.  */
11357   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11358     {
11359       Elf_Internal_Rela rel;
11360 
11361       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11362       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11363       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11364       loc += sizeof (Elf32_External_Rela);
11365 
11366       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11367       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11368       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11369       loc += sizeof (Elf32_External_Rela);
11370 
11371       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11372       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11373       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11374       loc += sizeof (Elf32_External_Rela);
11375     }
11376 }
11377 
11378 /* Install the PLT header for a VxWorks shared library.  */
11379 
11380 static void
11381 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11382 {
11383   unsigned int i;
11384   struct mips_elf_link_hash_table *htab;
11385 
11386   htab = mips_elf_hash_table (info);
11387   BFD_ASSERT (htab != NULL);
11388 
11389   /* We just need to copy the entry byte-by-byte.  */
11390   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11391     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11392 		htab->splt->contents + i * 4);
11393 }
11394 
11395 /* Finish up the dynamic sections.  */
11396 
11397 bfd_boolean
11398 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11399 				       struct bfd_link_info *info)
11400 {
11401   bfd *dynobj;
11402   asection *sdyn;
11403   asection *sgot;
11404   struct mips_got_info *gg, *g;
11405   struct mips_elf_link_hash_table *htab;
11406 
11407   htab = mips_elf_hash_table (info);
11408   BFD_ASSERT (htab != NULL);
11409 
11410   dynobj = elf_hash_table (info)->dynobj;
11411 
11412   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11413 
11414   sgot = htab->sgot;
11415   gg = htab->got_info;
11416 
11417   if (elf_hash_table (info)->dynamic_sections_created)
11418     {
11419       bfd_byte *b;
11420       int dyn_to_skip = 0, dyn_skipped = 0;
11421 
11422       BFD_ASSERT (sdyn != NULL);
11423       BFD_ASSERT (gg != NULL);
11424 
11425       g = mips_elf_bfd_got (output_bfd, FALSE);
11426       BFD_ASSERT (g != NULL);
11427 
11428       for (b = sdyn->contents;
11429 	   b < sdyn->contents + sdyn->size;
11430 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11431 	{
11432 	  Elf_Internal_Dyn dyn;
11433 	  const char *name;
11434 	  size_t elemsize;
11435 	  asection *s;
11436 	  bfd_boolean swap_out_p;
11437 
11438 	  /* Read in the current dynamic entry.  */
11439 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11440 
11441 	  /* Assume that we're going to modify it and write it out.  */
11442 	  swap_out_p = TRUE;
11443 
11444 	  switch (dyn.d_tag)
11445 	    {
11446 	    case DT_RELENT:
11447 	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11448 	      break;
11449 
11450 	    case DT_RELAENT:
11451 	      BFD_ASSERT (htab->is_vxworks);
11452 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11453 	      break;
11454 
11455 	    case DT_STRSZ:
11456 	      /* Rewrite DT_STRSZ.  */
11457 	      dyn.d_un.d_val =
11458 		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11459 	      break;
11460 
11461 	    case DT_PLTGOT:
11462 	      s = htab->sgot;
11463 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11464 	      break;
11465 
11466 	    case DT_MIPS_PLTGOT:
11467 	      s = htab->sgotplt;
11468 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11469 	      break;
11470 
11471 	    case DT_MIPS_RLD_VERSION:
11472 	      dyn.d_un.d_val = 1; /* XXX */
11473 	      break;
11474 
11475 	    case DT_MIPS_FLAGS:
11476 	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11477 	      break;
11478 
11479 	    case DT_MIPS_TIME_STAMP:
11480 	      {
11481 		time_t t;
11482 		time (&t);
11483 		dyn.d_un.d_val = t;
11484 	      }
11485 	      break;
11486 
11487 	    case DT_MIPS_ICHECKSUM:
11488 	      /* XXX FIXME: */
11489 	      swap_out_p = FALSE;
11490 	      break;
11491 
11492 	    case DT_MIPS_IVERSION:
11493 	      /* XXX FIXME: */
11494 	      swap_out_p = FALSE;
11495 	      break;
11496 
11497 	    case DT_MIPS_BASE_ADDRESS:
11498 	      s = output_bfd->sections;
11499 	      BFD_ASSERT (s != NULL);
11500 	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11501 	      break;
11502 
11503 	    case DT_MIPS_LOCAL_GOTNO:
11504 	      dyn.d_un.d_val = g->local_gotno;
11505 	      break;
11506 
11507 	    case DT_MIPS_UNREFEXTNO:
11508 	      /* The index into the dynamic symbol table which is the
11509 		 entry of the first external symbol that is not
11510 		 referenced within the same object.  */
11511 	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11512 	      break;
11513 
11514 	    case DT_MIPS_GOTSYM:
11515 	      if (htab->global_gotsym)
11516 		{
11517 		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
11518 		  break;
11519 		}
11520 	      /* In case if we don't have global got symbols we default
11521 		 to setting DT_MIPS_GOTSYM to the same value as
11522 		 DT_MIPS_SYMTABNO, so we just fall through.  */
11523 
11524 	    case DT_MIPS_SYMTABNO:
11525 	      name = ".dynsym";
11526 	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11527 	      s = bfd_get_linker_section (dynobj, name);
11528 
11529 	      if (s != NULL)
11530 		dyn.d_un.d_val = s->size / elemsize;
11531 	      else
11532 		dyn.d_un.d_val = 0;
11533 	      break;
11534 
11535 	    case DT_MIPS_HIPAGENO:
11536 	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11537 	      break;
11538 
11539 	    case DT_MIPS_RLD_MAP:
11540 	      {
11541 		struct elf_link_hash_entry *h;
11542 		h = mips_elf_hash_table (info)->rld_symbol;
11543 		if (!h)
11544 		  {
11545 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11546 		    swap_out_p = FALSE;
11547 		    break;
11548 		  }
11549 		s = h->root.u.def.section;
11550 
11551 		/* The MIPS_RLD_MAP tag stores the absolute address of the
11552 		   debug pointer.  */
11553 		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11554 				  + h->root.u.def.value);
11555 	      }
11556 	      break;
11557 
11558 	    case DT_MIPS_RLD_MAP_REL:
11559 	      {
11560 		struct elf_link_hash_entry *h;
11561 		bfd_vma dt_addr, rld_addr;
11562 		h = mips_elf_hash_table (info)->rld_symbol;
11563 		if (!h)
11564 		  {
11565 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11566 		    swap_out_p = FALSE;
11567 		    break;
11568 		  }
11569 		s = h->root.u.def.section;
11570 
11571 		/* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11572 		   pointer, relative to the address of the tag.  */
11573 		dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11574 			   + (b - sdyn->contents));
11575 		rld_addr = (s->output_section->vma + s->output_offset
11576 			    + h->root.u.def.value);
11577 		dyn.d_un.d_ptr = rld_addr - dt_addr;
11578 	      }
11579 	      break;
11580 
11581 	    case DT_MIPS_OPTIONS:
11582 	      s = (bfd_get_section_by_name
11583 		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11584 	      dyn.d_un.d_ptr = s->vma;
11585 	      break;
11586 
11587 	    case DT_RELASZ:
11588 	      BFD_ASSERT (htab->is_vxworks);
11589 	      /* The count does not include the JUMP_SLOT relocations.  */
11590 	      if (htab->srelplt)
11591 		dyn.d_un.d_val -= htab->srelplt->size;
11592 	      break;
11593 
11594 	    case DT_PLTREL:
11595 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11596 	      if (htab->is_vxworks)
11597 		dyn.d_un.d_val = DT_RELA;
11598 	      else
11599 		dyn.d_un.d_val = DT_REL;
11600 	      break;
11601 
11602 	    case DT_PLTRELSZ:
11603 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11604 	      dyn.d_un.d_val = htab->srelplt->size;
11605 	      break;
11606 
11607 	    case DT_JMPREL:
11608 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11609 	      dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11610 				+ htab->srelplt->output_offset);
11611 	      break;
11612 
11613 	    case DT_TEXTREL:
11614 	      /* If we didn't need any text relocations after all, delete
11615 		 the dynamic tag.  */
11616 	      if (!(info->flags & DF_TEXTREL))
11617 		{
11618 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11619 		  swap_out_p = FALSE;
11620 		}
11621 	      break;
11622 
11623 	    case DT_FLAGS:
11624 	      /* If we didn't need any text relocations after all, clear
11625 		 DF_TEXTREL from DT_FLAGS.  */
11626 	      if (!(info->flags & DF_TEXTREL))
11627 		dyn.d_un.d_val &= ~DF_TEXTREL;
11628 	      else
11629 		swap_out_p = FALSE;
11630 	      break;
11631 
11632 	    default:
11633 	      swap_out_p = FALSE;
11634 	      if (htab->is_vxworks
11635 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11636 		swap_out_p = TRUE;
11637 	      break;
11638 	    }
11639 
11640 	  if (swap_out_p || dyn_skipped)
11641 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11642 	      (dynobj, &dyn, b - dyn_skipped);
11643 
11644 	  if (dyn_to_skip)
11645 	    {
11646 	      dyn_skipped += dyn_to_skip;
11647 	      dyn_to_skip = 0;
11648 	    }
11649 	}
11650 
11651       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11652       if (dyn_skipped > 0)
11653 	memset (b - dyn_skipped, 0, dyn_skipped);
11654     }
11655 
11656   if (sgot != NULL && sgot->size > 0
11657       && !bfd_is_abs_section (sgot->output_section))
11658     {
11659       if (htab->is_vxworks)
11660 	{
11661 	  /* The first entry of the global offset table points to the
11662 	     ".dynamic" section.  The second is initialized by the
11663 	     loader and contains the shared library identifier.
11664 	     The third is also initialized by the loader and points
11665 	     to the lazy resolution stub.  */
11666 	  MIPS_ELF_PUT_WORD (output_bfd,
11667 			     sdyn->output_offset + sdyn->output_section->vma,
11668 			     sgot->contents);
11669 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11670 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11671 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11672 			     sgot->contents
11673 			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11674 	}
11675       else
11676 	{
11677 	  /* The first entry of the global offset table will be filled at
11678 	     runtime. The second entry will be used by some runtime loaders.
11679 	     This isn't the case of IRIX rld.  */
11680 	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11681 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11682 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11683 	}
11684 
11685       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11686 	 = MIPS_ELF_GOT_SIZE (output_bfd);
11687     }
11688 
11689   /* Generate dynamic relocations for the non-primary gots.  */
11690   if (gg != NULL && gg->next)
11691     {
11692       Elf_Internal_Rela rel[3];
11693       bfd_vma addend = 0;
11694 
11695       memset (rel, 0, sizeof (rel));
11696       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11697 
11698       for (g = gg->next; g->next != gg; g = g->next)
11699 	{
11700 	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11701 	    + g->next->tls_gotno;
11702 
11703 	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11704 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11705 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11706 			     sgot->contents
11707 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11708 
11709 	  if (! bfd_link_pic (info))
11710 	    continue;
11711 
11712 	  for (; got_index < g->local_gotno; got_index++)
11713 	    {
11714 	      if (got_index >= g->assigned_low_gotno
11715 		  && got_index <= g->assigned_high_gotno)
11716 		continue;
11717 
11718 	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11719 		= got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11720 	      if (!(mips_elf_create_dynamic_relocation
11721 		    (output_bfd, info, rel, NULL,
11722 		     bfd_abs_section_ptr,
11723 		     0, &addend, sgot)))
11724 		return FALSE;
11725 	      BFD_ASSERT (addend == 0);
11726 	    }
11727 	}
11728     }
11729 
11730   /* The generation of dynamic relocations for the non-primary gots
11731      adds more dynamic relocations.  We cannot count them until
11732      here.  */
11733 
11734   if (elf_hash_table (info)->dynamic_sections_created)
11735     {
11736       bfd_byte *b;
11737       bfd_boolean swap_out_p;
11738 
11739       BFD_ASSERT (sdyn != NULL);
11740 
11741       for (b = sdyn->contents;
11742 	   b < sdyn->contents + sdyn->size;
11743 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11744 	{
11745 	  Elf_Internal_Dyn dyn;
11746 	  asection *s;
11747 
11748 	  /* Read in the current dynamic entry.  */
11749 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11750 
11751 	  /* Assume that we're going to modify it and write it out.  */
11752 	  swap_out_p = TRUE;
11753 
11754 	  switch (dyn.d_tag)
11755 	    {
11756 	    case DT_RELSZ:
11757 	      /* Reduce DT_RELSZ to account for any relocations we
11758 		 decided not to make.  This is for the n64 irix rld,
11759 		 which doesn't seem to apply any relocations if there
11760 		 are trailing null entries.  */
11761 	      s = mips_elf_rel_dyn_section (info, FALSE);
11762 	      dyn.d_un.d_val = (s->reloc_count
11763 				* (ABI_64_P (output_bfd)
11764 				   ? sizeof (Elf64_Mips_External_Rel)
11765 				   : sizeof (Elf32_External_Rel)));
11766 	      /* Adjust the section size too.  Tools like the prelinker
11767 		 can reasonably expect the values to the same.  */
11768 	      elf_section_data (s->output_section)->this_hdr.sh_size
11769 		= dyn.d_un.d_val;
11770 	      break;
11771 
11772 	    default:
11773 	      swap_out_p = FALSE;
11774 	      break;
11775 	    }
11776 
11777 	  if (swap_out_p)
11778 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11779 	      (dynobj, &dyn, b);
11780 	}
11781     }
11782 
11783   {
11784     asection *s;
11785     Elf32_compact_rel cpt;
11786 
11787     if (SGI_COMPAT (output_bfd))
11788       {
11789 	/* Write .compact_rel section out.  */
11790 	s = bfd_get_linker_section (dynobj, ".compact_rel");
11791 	if (s != NULL)
11792 	  {
11793 	    cpt.id1 = 1;
11794 	    cpt.num = s->reloc_count;
11795 	    cpt.id2 = 2;
11796 	    cpt.offset = (s->output_section->filepos
11797 			  + sizeof (Elf32_External_compact_rel));
11798 	    cpt.reserved0 = 0;
11799 	    cpt.reserved1 = 0;
11800 	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11801 					    ((Elf32_External_compact_rel *)
11802 					     s->contents));
11803 
11804 	    /* Clean up a dummy stub function entry in .text.  */
11805 	    if (htab->sstubs != NULL)
11806 	      {
11807 		file_ptr dummy_offset;
11808 
11809 		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11810 		dummy_offset = htab->sstubs->size - htab->function_stub_size;
11811 		memset (htab->sstubs->contents + dummy_offset, 0,
11812 			htab->function_stub_size);
11813 	      }
11814 	  }
11815       }
11816 
11817     /* The psABI says that the dynamic relocations must be sorted in
11818        increasing order of r_symndx.  The VxWorks EABI doesn't require
11819        this, and because the code below handles REL rather than RELA
11820        relocations, using it for VxWorks would be outright harmful.  */
11821     if (!htab->is_vxworks)
11822       {
11823 	s = mips_elf_rel_dyn_section (info, FALSE);
11824 	if (s != NULL
11825 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11826 	  {
11827 	    reldyn_sorting_bfd = output_bfd;
11828 
11829 	    if (ABI_64_P (output_bfd))
11830 	      qsort ((Elf64_External_Rel *) s->contents + 1,
11831 		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11832 		     sort_dynamic_relocs_64);
11833 	    else
11834 	      qsort ((Elf32_External_Rel *) s->contents + 1,
11835 		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
11836 		     sort_dynamic_relocs);
11837 	  }
11838       }
11839   }
11840 
11841   if (htab->splt && htab->splt->size > 0)
11842     {
11843       if (htab->is_vxworks)
11844 	{
11845 	  if (bfd_link_pic (info))
11846 	    mips_vxworks_finish_shared_plt (output_bfd, info);
11847 	  else
11848 	    mips_vxworks_finish_exec_plt (output_bfd, info);
11849 	}
11850       else
11851 	{
11852 	  BFD_ASSERT (!bfd_link_pic (info));
11853 	  if (!mips_finish_exec_plt (output_bfd, info))
11854 	    return FALSE;
11855 	}
11856     }
11857   return TRUE;
11858 }
11859 
11860 
11861 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11862 
11863 static void
11864 mips_set_isa_flags (bfd *abfd)
11865 {
11866   flagword val;
11867 
11868   switch (bfd_get_mach (abfd))
11869     {
11870     default:
11871     case bfd_mach_mips3000:
11872       val = E_MIPS_ARCH_1;
11873       break;
11874 
11875     case bfd_mach_mips3900:
11876       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11877       break;
11878 
11879     case bfd_mach_mips6000:
11880       val = E_MIPS_ARCH_2;
11881       break;
11882 
11883     case bfd_mach_mips4000:
11884     case bfd_mach_mips4300:
11885     case bfd_mach_mips4400:
11886     case bfd_mach_mips4600:
11887       val = E_MIPS_ARCH_3;
11888       break;
11889 
11890     case bfd_mach_mips4010:
11891       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11892       break;
11893 
11894     case bfd_mach_mips4100:
11895       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11896       break;
11897 
11898     case bfd_mach_mips4111:
11899       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11900       break;
11901 
11902     case bfd_mach_mips4120:
11903       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11904       break;
11905 
11906     case bfd_mach_mips4650:
11907       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11908       break;
11909 
11910     case bfd_mach_mips5400:
11911       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11912       break;
11913 
11914     case bfd_mach_mips5500:
11915       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11916       break;
11917 
11918     case bfd_mach_mips5900:
11919       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11920       break;
11921 
11922     case bfd_mach_mips9000:
11923       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11924       break;
11925 
11926     case bfd_mach_mips5000:
11927     case bfd_mach_mips7000:
11928     case bfd_mach_mips8000:
11929     case bfd_mach_mips10000:
11930     case bfd_mach_mips12000:
11931     case bfd_mach_mips14000:
11932     case bfd_mach_mips16000:
11933       val = E_MIPS_ARCH_4;
11934       break;
11935 
11936     case bfd_mach_mips5:
11937       val = E_MIPS_ARCH_5;
11938       break;
11939 
11940     case bfd_mach_mips_loongson_2e:
11941       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11942       break;
11943 
11944     case bfd_mach_mips_loongson_2f:
11945       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11946       break;
11947 
11948     case bfd_mach_mips_sb1:
11949       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11950       break;
11951 
11952     case bfd_mach_mips_loongson_3a:
11953       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11954       break;
11955 
11956     case bfd_mach_mips_octeon:
11957     case bfd_mach_mips_octeonp:
11958       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11959       break;
11960 
11961     case bfd_mach_mips_octeon3:
11962       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11963       break;
11964 
11965     case bfd_mach_mips_xlr:
11966       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11967       break;
11968 
11969     case bfd_mach_mips_octeon2:
11970       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11971       break;
11972 
11973     case bfd_mach_mipsisa32:
11974       val = E_MIPS_ARCH_32;
11975       break;
11976 
11977     case bfd_mach_mipsisa64:
11978       val = E_MIPS_ARCH_64;
11979       break;
11980 
11981     case bfd_mach_mipsisa32r2:
11982     case bfd_mach_mipsisa32r3:
11983     case bfd_mach_mipsisa32r5:
11984       val = E_MIPS_ARCH_32R2;
11985       break;
11986 
11987     case bfd_mach_mipsisa64r2:
11988     case bfd_mach_mipsisa64r3:
11989     case bfd_mach_mipsisa64r5:
11990       val = E_MIPS_ARCH_64R2;
11991       break;
11992 
11993     case bfd_mach_mipsisa32r6:
11994       val = E_MIPS_ARCH_32R6;
11995       break;
11996 
11997     case bfd_mach_mipsisa64r6:
11998       val = E_MIPS_ARCH_64R6;
11999       break;
12000     }
12001   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12002   elf_elfheader (abfd)->e_flags |= val;
12003 
12004 }
12005 
12006 
12007 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12008    Don't do so for code sections.  We want to keep ordering of HI16/LO16
12009    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
12010    relocs to be sorted.  */
12011 
12012 bfd_boolean
12013 _bfd_mips_elf_sort_relocs_p (asection *sec)
12014 {
12015   return (sec->flags & SEC_CODE) == 0;
12016 }
12017 
12018 
12019 /* The final processing done just before writing out a MIPS ELF object
12020    file.  This gets the MIPS architecture right based on the machine
12021    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12022 
12023 void
12024 _bfd_mips_elf_final_write_processing (bfd *abfd,
12025 				      bfd_boolean linker ATTRIBUTE_UNUSED)
12026 {
12027   unsigned int i;
12028   Elf_Internal_Shdr **hdrpp;
12029   const char *name;
12030   asection *sec;
12031 
12032   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12033      is nonzero.  This is for compatibility with old objects, which used
12034      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12035   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12036     mips_set_isa_flags (abfd);
12037 
12038   /* Set the sh_info field for .gptab sections and other appropriate
12039      info for each special section.  */
12040   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12041        i < elf_numsections (abfd);
12042        i++, hdrpp++)
12043     {
12044       switch ((*hdrpp)->sh_type)
12045 	{
12046 	case SHT_MIPS_MSYM:
12047 	case SHT_MIPS_LIBLIST:
12048 	  sec = bfd_get_section_by_name (abfd, ".dynstr");
12049 	  if (sec != NULL)
12050 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12051 	  break;
12052 
12053 	case SHT_MIPS_GPTAB:
12054 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12055 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12056 	  BFD_ASSERT (name != NULL
12057 		      && CONST_STRNEQ (name, ".gptab."));
12058 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12059 	  BFD_ASSERT (sec != NULL);
12060 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12061 	  break;
12062 
12063 	case SHT_MIPS_CONTENT:
12064 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12065 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12066 	  BFD_ASSERT (name != NULL
12067 		      && CONST_STRNEQ (name, ".MIPS.content"));
12068 	  sec = bfd_get_section_by_name (abfd,
12069 					 name + sizeof ".MIPS.content" - 1);
12070 	  BFD_ASSERT (sec != NULL);
12071 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12072 	  break;
12073 
12074 	case SHT_MIPS_SYMBOL_LIB:
12075 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
12076 	  if (sec != NULL)
12077 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12078 	  sec = bfd_get_section_by_name (abfd, ".liblist");
12079 	  if (sec != NULL)
12080 	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12081 	  break;
12082 
12083 	case SHT_MIPS_EVENTS:
12084 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12085 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
12086 	  BFD_ASSERT (name != NULL);
12087 	  if (CONST_STRNEQ (name, ".MIPS.events"))
12088 	    sec = bfd_get_section_by_name (abfd,
12089 					   name + sizeof ".MIPS.events" - 1);
12090 	  else
12091 	    {
12092 	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12093 	      sec = bfd_get_section_by_name (abfd,
12094 					     (name
12095 					      + sizeof ".MIPS.post_rel" - 1));
12096 	    }
12097 	  BFD_ASSERT (sec != NULL);
12098 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12099 	  break;
12100 
12101 	}
12102     }
12103 }
12104 
12105 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12106    segments.  */
12107 
12108 int
12109 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12110 					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
12111 {
12112   asection *s;
12113   int ret = 0;
12114 
12115   /* See if we need a PT_MIPS_REGINFO segment.  */
12116   s = bfd_get_section_by_name (abfd, ".reginfo");
12117   if (s && (s->flags & SEC_LOAD))
12118     ++ret;
12119 
12120   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12121   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12122     ++ret;
12123 
12124   /* See if we need a PT_MIPS_OPTIONS segment.  */
12125   if (IRIX_COMPAT (abfd) == ict_irix6
12126       && bfd_get_section_by_name (abfd,
12127 				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12128     ++ret;
12129 
12130   /* See if we need a PT_MIPS_RTPROC segment.  */
12131   if (IRIX_COMPAT (abfd) == ict_irix5
12132       && bfd_get_section_by_name (abfd, ".dynamic")
12133       && bfd_get_section_by_name (abfd, ".mdebug"))
12134     ++ret;
12135 
12136   /* Allocate a PT_NULL header in dynamic objects.  See
12137      _bfd_mips_elf_modify_segment_map for details.  */
12138   if (!SGI_COMPAT (abfd)
12139       && bfd_get_section_by_name (abfd, ".dynamic"))
12140     ++ret;
12141 
12142   return ret;
12143 }
12144 
12145 /* Modify the segment map for an IRIX5 executable.  */
12146 
12147 bfd_boolean
12148 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12149 				  struct bfd_link_info *info)
12150 {
12151   asection *s;
12152   struct elf_segment_map *m, **pm;
12153   bfd_size_type amt;
12154 
12155   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12156      segment.  */
12157   s = bfd_get_section_by_name (abfd, ".reginfo");
12158   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12159     {
12160       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12161 	if (m->p_type == PT_MIPS_REGINFO)
12162 	  break;
12163       if (m == NULL)
12164 	{
12165 	  amt = sizeof *m;
12166 	  m = bfd_zalloc (abfd, amt);
12167 	  if (m == NULL)
12168 	    return FALSE;
12169 
12170 	  m->p_type = PT_MIPS_REGINFO;
12171 	  m->count = 1;
12172 	  m->sections[0] = s;
12173 
12174 	  /* We want to put it after the PHDR and INTERP segments.  */
12175 	  pm = &elf_seg_map (abfd);
12176 	  while (*pm != NULL
12177 		 && ((*pm)->p_type == PT_PHDR
12178 		     || (*pm)->p_type == PT_INTERP))
12179 	    pm = &(*pm)->next;
12180 
12181 	  m->next = *pm;
12182 	  *pm = m;
12183 	}
12184     }
12185 
12186   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12187      segment.  */
12188   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12189   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12190     {
12191       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12192 	if (m->p_type == PT_MIPS_ABIFLAGS)
12193 	  break;
12194       if (m == NULL)
12195 	{
12196 	  amt = sizeof *m;
12197 	  m = bfd_zalloc (abfd, amt);
12198 	  if (m == NULL)
12199 	    return FALSE;
12200 
12201 	  m->p_type = PT_MIPS_ABIFLAGS;
12202 	  m->count = 1;
12203 	  m->sections[0] = s;
12204 
12205 	  /* We want to put it after the PHDR and INTERP segments.  */
12206 	  pm = &elf_seg_map (abfd);
12207 	  while (*pm != NULL
12208 		 && ((*pm)->p_type == PT_PHDR
12209 		     || (*pm)->p_type == PT_INTERP))
12210 	    pm = &(*pm)->next;
12211 
12212 	  m->next = *pm;
12213 	  *pm = m;
12214 	}
12215     }
12216 
12217   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12218      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12219      PT_MIPS_OPTIONS segment immediately following the program header
12220      table.  */
12221   if (NEWABI_P (abfd)
12222       /* On non-IRIX6 new abi, we'll have already created a segment
12223 	 for this section, so don't create another.  I'm not sure this
12224 	 is not also the case for IRIX 6, but I can't test it right
12225 	 now.  */
12226       && IRIX_COMPAT (abfd) == ict_irix6)
12227     {
12228       for (s = abfd->sections; s; s = s->next)
12229 	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12230 	  break;
12231 
12232       if (s)
12233 	{
12234 	  struct elf_segment_map *options_segment;
12235 
12236 	  pm = &elf_seg_map (abfd);
12237 	  while (*pm != NULL
12238 		 && ((*pm)->p_type == PT_PHDR
12239 		     || (*pm)->p_type == PT_INTERP))
12240 	    pm = &(*pm)->next;
12241 
12242 	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12243 	    {
12244 	      amt = sizeof (struct elf_segment_map);
12245 	      options_segment = bfd_zalloc (abfd, amt);
12246 	      options_segment->next = *pm;
12247 	      options_segment->p_type = PT_MIPS_OPTIONS;
12248 	      options_segment->p_flags = PF_R;
12249 	      options_segment->p_flags_valid = TRUE;
12250 	      options_segment->count = 1;
12251 	      options_segment->sections[0] = s;
12252 	      *pm = options_segment;
12253 	    }
12254 	}
12255     }
12256   else
12257     {
12258       if (IRIX_COMPAT (abfd) == ict_irix5)
12259 	{
12260 	  /* If there are .dynamic and .mdebug sections, we make a room
12261 	     for the RTPROC header.  FIXME: Rewrite without section names.  */
12262 	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
12263 	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12264 	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12265 	    {
12266 	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12267 		if (m->p_type == PT_MIPS_RTPROC)
12268 		  break;
12269 	      if (m == NULL)
12270 		{
12271 		  amt = sizeof *m;
12272 		  m = bfd_zalloc (abfd, amt);
12273 		  if (m == NULL)
12274 		    return FALSE;
12275 
12276 		  m->p_type = PT_MIPS_RTPROC;
12277 
12278 		  s = bfd_get_section_by_name (abfd, ".rtproc");
12279 		  if (s == NULL)
12280 		    {
12281 		      m->count = 0;
12282 		      m->p_flags = 0;
12283 		      m->p_flags_valid = 1;
12284 		    }
12285 		  else
12286 		    {
12287 		      m->count = 1;
12288 		      m->sections[0] = s;
12289 		    }
12290 
12291 		  /* We want to put it after the DYNAMIC segment.  */
12292 		  pm = &elf_seg_map (abfd);
12293 		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12294 		    pm = &(*pm)->next;
12295 		  if (*pm != NULL)
12296 		    pm = &(*pm)->next;
12297 
12298 		  m->next = *pm;
12299 		  *pm = m;
12300 		}
12301 	    }
12302 	}
12303       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12304 	 .dynstr, .dynsym, and .hash sections, and everything in
12305 	 between.  */
12306       for (pm = &elf_seg_map (abfd); *pm != NULL;
12307 	   pm = &(*pm)->next)
12308 	if ((*pm)->p_type == PT_DYNAMIC)
12309 	  break;
12310       m = *pm;
12311       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12312 	 glibc's dynamic linker has traditionally derived the number of
12313 	 tags from the p_filesz field, and sometimes allocates stack
12314 	 arrays of that size.  An overly-big PT_DYNAMIC segment can
12315 	 be actively harmful in such cases.  Making PT_DYNAMIC contain
12316 	 other sections can also make life hard for the prelinker,
12317 	 which might move one of the other sections to a different
12318 	 PT_LOAD segment.  */
12319       if (SGI_COMPAT (abfd)
12320 	  && m != NULL
12321 	  && m->count == 1
12322 	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
12323 	{
12324 	  static const char *sec_names[] =
12325 	  {
12326 	    ".dynamic", ".dynstr", ".dynsym", ".hash"
12327 	  };
12328 	  bfd_vma low, high;
12329 	  unsigned int i, c;
12330 	  struct elf_segment_map *n;
12331 
12332 	  low = ~(bfd_vma) 0;
12333 	  high = 0;
12334 	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12335 	    {
12336 	      s = bfd_get_section_by_name (abfd, sec_names[i]);
12337 	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
12338 		{
12339 		  bfd_size_type sz;
12340 
12341 		  if (low > s->vma)
12342 		    low = s->vma;
12343 		  sz = s->size;
12344 		  if (high < s->vma + sz)
12345 		    high = s->vma + sz;
12346 		}
12347 	    }
12348 
12349 	  c = 0;
12350 	  for (s = abfd->sections; s != NULL; s = s->next)
12351 	    if ((s->flags & SEC_LOAD) != 0
12352 		&& s->vma >= low
12353 		&& s->vma + s->size <= high)
12354 	      ++c;
12355 
12356 	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12357 	  n = bfd_zalloc (abfd, amt);
12358 	  if (n == NULL)
12359 	    return FALSE;
12360 	  *n = *m;
12361 	  n->count = c;
12362 
12363 	  i = 0;
12364 	  for (s = abfd->sections; s != NULL; s = s->next)
12365 	    {
12366 	      if ((s->flags & SEC_LOAD) != 0
12367 		  && s->vma >= low
12368 		  && s->vma + s->size <= high)
12369 		{
12370 		  n->sections[i] = s;
12371 		  ++i;
12372 		}
12373 	    }
12374 
12375 	  *pm = n;
12376 	}
12377     }
12378 
12379   /* Allocate a spare program header in dynamic objects so that tools
12380      like the prelinker can add an extra PT_LOAD entry.
12381 
12382      If the prelinker needs to make room for a new PT_LOAD entry, its
12383      standard procedure is to move the first (read-only) sections into
12384      the new (writable) segment.  However, the MIPS ABI requires
12385      .dynamic to be in a read-only segment, and the section will often
12386      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12387 
12388      Although the prelinker could in principle move .dynamic to a
12389      writable segment, it seems better to allocate a spare program
12390      header instead, and avoid the need to move any sections.
12391      There is a long tradition of allocating spare dynamic tags,
12392      so allocating a spare program header seems like a natural
12393      extension.
12394 
12395      If INFO is NULL, we may be copying an already prelinked binary
12396      with objcopy or strip, so do not add this header.  */
12397   if (info != NULL
12398       && !SGI_COMPAT (abfd)
12399       && bfd_get_section_by_name (abfd, ".dynamic"))
12400     {
12401       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12402 	if ((*pm)->p_type == PT_NULL)
12403 	  break;
12404       if (*pm == NULL)
12405 	{
12406 	  m = bfd_zalloc (abfd, sizeof (*m));
12407 	  if (m == NULL)
12408 	    return FALSE;
12409 
12410 	  m->p_type = PT_NULL;
12411 	  *pm = m;
12412 	}
12413     }
12414 
12415   return TRUE;
12416 }
12417 
12418 /* Return the section that should be marked against GC for a given
12419    relocation.  */
12420 
12421 asection *
12422 _bfd_mips_elf_gc_mark_hook (asection *sec,
12423 			    struct bfd_link_info *info,
12424 			    Elf_Internal_Rela *rel,
12425 			    struct elf_link_hash_entry *h,
12426 			    Elf_Internal_Sym *sym)
12427 {
12428   /* ??? Do mips16 stub sections need to be handled special?  */
12429 
12430   if (h != NULL)
12431     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12432       {
12433       case R_MIPS_GNU_VTINHERIT:
12434       case R_MIPS_GNU_VTENTRY:
12435 	return NULL;
12436       }
12437 
12438   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12439 }
12440 
12441 /* Update the got entry reference counts for the section being removed.  */
12442 
12443 bfd_boolean
12444 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12445 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
12446 			     asection *sec ATTRIBUTE_UNUSED,
12447 			     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12448 {
12449 #if 0
12450   Elf_Internal_Shdr *symtab_hdr;
12451   struct elf_link_hash_entry **sym_hashes;
12452   bfd_signed_vma *local_got_refcounts;
12453   const Elf_Internal_Rela *rel, *relend;
12454   unsigned long r_symndx;
12455   struct elf_link_hash_entry *h;
12456 
12457   if (bfd_link_relocatable (info))
12458     return TRUE;
12459 
12460   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12461   sym_hashes = elf_sym_hashes (abfd);
12462   local_got_refcounts = elf_local_got_refcounts (abfd);
12463 
12464   relend = relocs + sec->reloc_count;
12465   for (rel = relocs; rel < relend; rel++)
12466     switch (ELF_R_TYPE (abfd, rel->r_info))
12467       {
12468       case R_MIPS16_GOT16:
12469       case R_MIPS16_CALL16:
12470       case R_MIPS_GOT16:
12471       case R_MIPS_CALL16:
12472       case R_MIPS_CALL_HI16:
12473       case R_MIPS_CALL_LO16:
12474       case R_MIPS_GOT_HI16:
12475       case R_MIPS_GOT_LO16:
12476       case R_MIPS_GOT_DISP:
12477       case R_MIPS_GOT_PAGE:
12478       case R_MIPS_GOT_OFST:
12479       case R_MICROMIPS_GOT16:
12480       case R_MICROMIPS_CALL16:
12481       case R_MICROMIPS_CALL_HI16:
12482       case R_MICROMIPS_CALL_LO16:
12483       case R_MICROMIPS_GOT_HI16:
12484       case R_MICROMIPS_GOT_LO16:
12485       case R_MICROMIPS_GOT_DISP:
12486       case R_MICROMIPS_GOT_PAGE:
12487       case R_MICROMIPS_GOT_OFST:
12488 	/* ??? It would seem that the existing MIPS code does no sort
12489 	   of reference counting or whatnot on its GOT and PLT entries,
12490 	   so it is not possible to garbage collect them at this time.  */
12491 	break;
12492 
12493       default:
12494 	break;
12495       }
12496 #endif
12497 
12498   return TRUE;
12499 }
12500 
12501 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12502 
12503 bfd_boolean
12504 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12505 				      elf_gc_mark_hook_fn gc_mark_hook)
12506 {
12507   bfd *sub;
12508 
12509   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12510 
12511   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12512     {
12513       asection *o;
12514 
12515       if (! is_mips_elf (sub))
12516 	continue;
12517 
12518       for (o = sub->sections; o != NULL; o = o->next)
12519 	if (!o->gc_mark
12520 	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12521 		 (bfd_get_section_name (sub, o)))
12522 	  {
12523 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12524 	      return FALSE;
12525 	  }
12526     }
12527 
12528   return TRUE;
12529 }
12530 
12531 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12532    hiding the old indirect symbol.  Process additional relocation
12533    information.  Also called for weakdefs, in which case we just let
12534    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12535 
12536 void
12537 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12538 				    struct elf_link_hash_entry *dir,
12539 				    struct elf_link_hash_entry *ind)
12540 {
12541   struct mips_elf_link_hash_entry *dirmips, *indmips;
12542 
12543   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12544 
12545   dirmips = (struct mips_elf_link_hash_entry *) dir;
12546   indmips = (struct mips_elf_link_hash_entry *) ind;
12547   /* Any absolute non-dynamic relocations against an indirect or weak
12548      definition will be against the target symbol.  */
12549   if (indmips->has_static_relocs)
12550     dirmips->has_static_relocs = TRUE;
12551 
12552   if (ind->root.type != bfd_link_hash_indirect)
12553     return;
12554 
12555   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12556   if (indmips->readonly_reloc)
12557     dirmips->readonly_reloc = TRUE;
12558   if (indmips->no_fn_stub)
12559     dirmips->no_fn_stub = TRUE;
12560   if (indmips->fn_stub)
12561     {
12562       dirmips->fn_stub = indmips->fn_stub;
12563       indmips->fn_stub = NULL;
12564     }
12565   if (indmips->need_fn_stub)
12566     {
12567       dirmips->need_fn_stub = TRUE;
12568       indmips->need_fn_stub = FALSE;
12569     }
12570   if (indmips->call_stub)
12571     {
12572       dirmips->call_stub = indmips->call_stub;
12573       indmips->call_stub = NULL;
12574     }
12575   if (indmips->call_fp_stub)
12576     {
12577       dirmips->call_fp_stub = indmips->call_fp_stub;
12578       indmips->call_fp_stub = NULL;
12579     }
12580   if (indmips->global_got_area < dirmips->global_got_area)
12581     dirmips->global_got_area = indmips->global_got_area;
12582   if (indmips->global_got_area < GGA_NONE)
12583     indmips->global_got_area = GGA_NONE;
12584   if (indmips->has_nonpic_branches)
12585     dirmips->has_nonpic_branches = TRUE;
12586 }
12587 
12588 #define PDR_SIZE 32
12589 
12590 bfd_boolean
12591 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12592 			    struct bfd_link_info *info)
12593 {
12594   asection *o;
12595   bfd_boolean ret = FALSE;
12596   unsigned char *tdata;
12597   size_t i, skip;
12598 
12599   o = bfd_get_section_by_name (abfd, ".pdr");
12600   if (! o)
12601     return FALSE;
12602   if (o->size == 0)
12603     return FALSE;
12604   if (o->size % PDR_SIZE != 0)
12605     return FALSE;
12606   if (o->output_section != NULL
12607       && bfd_is_abs_section (o->output_section))
12608     return FALSE;
12609 
12610   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12611   if (! tdata)
12612     return FALSE;
12613 
12614   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12615 					    info->keep_memory);
12616   if (!cookie->rels)
12617     {
12618       free (tdata);
12619       return FALSE;
12620     }
12621 
12622   cookie->rel = cookie->rels;
12623   cookie->relend = cookie->rels + o->reloc_count;
12624 
12625   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12626     {
12627       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12628 	{
12629 	  tdata[i] = 1;
12630 	  skip ++;
12631 	}
12632     }
12633 
12634   if (skip != 0)
12635     {
12636       mips_elf_section_data (o)->u.tdata = tdata;
12637       if (o->rawsize == 0)
12638 	o->rawsize = o->size;
12639       o->size -= skip * PDR_SIZE;
12640       ret = TRUE;
12641     }
12642   else
12643     free (tdata);
12644 
12645   if (! info->keep_memory)
12646     free (cookie->rels);
12647 
12648   return ret;
12649 }
12650 
12651 bfd_boolean
12652 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12653 {
12654   if (strcmp (sec->name, ".pdr") == 0)
12655     return TRUE;
12656   return FALSE;
12657 }
12658 
12659 bfd_boolean
12660 _bfd_mips_elf_write_section (bfd *output_bfd,
12661 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12662                              asection *sec, bfd_byte *contents)
12663 {
12664   bfd_byte *to, *from, *end;
12665   int i;
12666 
12667   if (strcmp (sec->name, ".pdr") != 0)
12668     return FALSE;
12669 
12670   if (mips_elf_section_data (sec)->u.tdata == NULL)
12671     return FALSE;
12672 
12673   to = contents;
12674   end = contents + sec->size;
12675   for (from = contents, i = 0;
12676        from < end;
12677        from += PDR_SIZE, i++)
12678     {
12679       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12680 	continue;
12681       if (to != from)
12682 	memcpy (to, from, PDR_SIZE);
12683       to += PDR_SIZE;
12684     }
12685   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12686 			    sec->output_offset, sec->size);
12687   return TRUE;
12688 }
12689 
12690 /* microMIPS code retains local labels for linker relaxation.  Omit them
12691    from output by default for clarity.  */
12692 
12693 bfd_boolean
12694 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12695 {
12696   return _bfd_elf_is_local_label_name (abfd, sym->name);
12697 }
12698 
12699 /* MIPS ELF uses a special find_nearest_line routine in order the
12700    handle the ECOFF debugging information.  */
12701 
12702 struct mips_elf_find_line
12703 {
12704   struct ecoff_debug_info d;
12705   struct ecoff_find_line i;
12706 };
12707 
12708 bfd_boolean
12709 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12710 				 asection *section, bfd_vma offset,
12711 				 const char **filename_ptr,
12712 				 const char **functionname_ptr,
12713 				 unsigned int *line_ptr,
12714 				 unsigned int *discriminator_ptr)
12715 {
12716   asection *msec;
12717 
12718   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12719 				     filename_ptr, functionname_ptr,
12720 				     line_ptr, discriminator_ptr,
12721 				     dwarf_debug_sections,
12722 				     ABI_64_P (abfd) ? 8 : 0,
12723 				     &elf_tdata (abfd)->dwarf2_find_line_info))
12724     return TRUE;
12725 
12726   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12727 				     filename_ptr, functionname_ptr,
12728 				     line_ptr))
12729     return TRUE;
12730 
12731   msec = bfd_get_section_by_name (abfd, ".mdebug");
12732   if (msec != NULL)
12733     {
12734       flagword origflags;
12735       struct mips_elf_find_line *fi;
12736       const struct ecoff_debug_swap * const swap =
12737 	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12738 
12739       /* If we are called during a link, mips_elf_final_link may have
12740 	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
12741 	 if appropriate (which it normally will be).  */
12742       origflags = msec->flags;
12743       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12744 	msec->flags |= SEC_HAS_CONTENTS;
12745 
12746       fi = mips_elf_tdata (abfd)->find_line_info;
12747       if (fi == NULL)
12748 	{
12749 	  bfd_size_type external_fdr_size;
12750 	  char *fraw_src;
12751 	  char *fraw_end;
12752 	  struct fdr *fdr_ptr;
12753 	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
12754 
12755 	  fi = bfd_zalloc (abfd, amt);
12756 	  if (fi == NULL)
12757 	    {
12758 	      msec->flags = origflags;
12759 	      return FALSE;
12760 	    }
12761 
12762 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12763 	    {
12764 	      msec->flags = origflags;
12765 	      return FALSE;
12766 	    }
12767 
12768 	  /* Swap in the FDR information.  */
12769 	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12770 	  fi->d.fdr = bfd_alloc (abfd, amt);
12771 	  if (fi->d.fdr == NULL)
12772 	    {
12773 	      msec->flags = origflags;
12774 	      return FALSE;
12775 	    }
12776 	  external_fdr_size = swap->external_fdr_size;
12777 	  fdr_ptr = fi->d.fdr;
12778 	  fraw_src = (char *) fi->d.external_fdr;
12779 	  fraw_end = (fraw_src
12780 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
12781 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12782 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12783 
12784 	  mips_elf_tdata (abfd)->find_line_info = fi;
12785 
12786 	  /* Note that we don't bother to ever free this information.
12787              find_nearest_line is either called all the time, as in
12788              objdump -l, so the information should be saved, or it is
12789              rarely called, as in ld error messages, so the memory
12790              wasted is unimportant.  Still, it would probably be a
12791              good idea for free_cached_info to throw it away.  */
12792 	}
12793 
12794       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12795 				  &fi->i, filename_ptr, functionname_ptr,
12796 				  line_ptr))
12797 	{
12798 	  msec->flags = origflags;
12799 	  return TRUE;
12800 	}
12801 
12802       msec->flags = origflags;
12803     }
12804 
12805   /* Fall back on the generic ELF find_nearest_line routine.  */
12806 
12807   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12808 				     filename_ptr, functionname_ptr,
12809 				     line_ptr, discriminator_ptr);
12810 }
12811 
12812 bfd_boolean
12813 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12814 				 const char **filename_ptr,
12815 				 const char **functionname_ptr,
12816 				 unsigned int *line_ptr)
12817 {
12818   bfd_boolean found;
12819   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12820 					 functionname_ptr, line_ptr,
12821 					 & elf_tdata (abfd)->dwarf2_find_line_info);
12822   return found;
12823 }
12824 
12825 
12826 /* When are writing out the .options or .MIPS.options section,
12827    remember the bytes we are writing out, so that we can install the
12828    GP value in the section_processing routine.  */
12829 
12830 bfd_boolean
12831 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12832 				    const void *location,
12833 				    file_ptr offset, bfd_size_type count)
12834 {
12835   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12836     {
12837       bfd_byte *c;
12838 
12839       if (elf_section_data (section) == NULL)
12840 	{
12841 	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12842 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
12843 	  if (elf_section_data (section) == NULL)
12844 	    return FALSE;
12845 	}
12846       c = mips_elf_section_data (section)->u.tdata;
12847       if (c == NULL)
12848 	{
12849 	  c = bfd_zalloc (abfd, section->size);
12850 	  if (c == NULL)
12851 	    return FALSE;
12852 	  mips_elf_section_data (section)->u.tdata = c;
12853 	}
12854 
12855       memcpy (c + offset, location, count);
12856     }
12857 
12858   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12859 					count);
12860 }
12861 
12862 /* This is almost identical to bfd_generic_get_... except that some
12863    MIPS relocations need to be handled specially.  Sigh.  */
12864 
12865 bfd_byte *
12866 _bfd_elf_mips_get_relocated_section_contents
12867   (bfd *abfd,
12868    struct bfd_link_info *link_info,
12869    struct bfd_link_order *link_order,
12870    bfd_byte *data,
12871    bfd_boolean relocatable,
12872    asymbol **symbols)
12873 {
12874   /* Get enough memory to hold the stuff */
12875   bfd *input_bfd = link_order->u.indirect.section->owner;
12876   asection *input_section = link_order->u.indirect.section;
12877   bfd_size_type sz;
12878 
12879   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12880   arelent **reloc_vector = NULL;
12881   long reloc_count;
12882 
12883   if (reloc_size < 0)
12884     goto error_return;
12885 
12886   reloc_vector = bfd_malloc (reloc_size);
12887   if (reloc_vector == NULL && reloc_size != 0)
12888     goto error_return;
12889 
12890   /* read in the section */
12891   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12892   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12893     goto error_return;
12894 
12895   reloc_count = bfd_canonicalize_reloc (input_bfd,
12896 					input_section,
12897 					reloc_vector,
12898 					symbols);
12899   if (reloc_count < 0)
12900     goto error_return;
12901 
12902   if (reloc_count > 0)
12903     {
12904       arelent **parent;
12905       /* for mips */
12906       int gp_found;
12907       bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
12908 
12909       {
12910 	struct bfd_hash_entry *h;
12911 	struct bfd_link_hash_entry *lh;
12912 	/* Skip all this stuff if we aren't mixing formats.  */
12913 	if (abfd && input_bfd
12914 	    && abfd->xvec == input_bfd->xvec)
12915 	  lh = 0;
12916 	else
12917 	  {
12918 	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12919 	    lh = (struct bfd_link_hash_entry *) h;
12920 	  }
12921       lookup:
12922 	if (lh)
12923 	  {
12924 	    switch (lh->type)
12925 	      {
12926 	      case bfd_link_hash_undefined:
12927 	      case bfd_link_hash_undefweak:
12928 	      case bfd_link_hash_common:
12929 		gp_found = 0;
12930 		break;
12931 	      case bfd_link_hash_defined:
12932 	      case bfd_link_hash_defweak:
12933 		gp_found = 1;
12934 		gp = lh->u.def.value;
12935 		break;
12936 	      case bfd_link_hash_indirect:
12937 	      case bfd_link_hash_warning:
12938 		lh = lh->u.i.link;
12939 		/* @@FIXME  ignoring warning for now */
12940 		goto lookup;
12941 	      case bfd_link_hash_new:
12942 	      default:
12943 		abort ();
12944 	      }
12945 	  }
12946 	else
12947 	  gp_found = 0;
12948       }
12949       /* end mips */
12950       for (parent = reloc_vector; *parent != NULL; parent++)
12951 	{
12952 	  char *error_message = NULL;
12953 	  bfd_reloc_status_type r;
12954 
12955 	  /* Specific to MIPS: Deal with relocation types that require
12956 	     knowing the gp of the output bfd.  */
12957 	  asymbol *sym = *(*parent)->sym_ptr_ptr;
12958 
12959 	  /* If we've managed to find the gp and have a special
12960 	     function for the relocation then go ahead, else default
12961 	     to the generic handling.  */
12962 	  if (gp_found
12963 	      && (*parent)->howto->special_function
12964 	      == _bfd_mips_elf32_gprel16_reloc)
12965 	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12966 					       input_section, relocatable,
12967 					       data, gp);
12968 	  else
12969 	    r = bfd_perform_relocation (input_bfd, *parent, data,
12970 					input_section,
12971 					relocatable ? abfd : NULL,
12972 					&error_message);
12973 
12974 	  if (relocatable)
12975 	    {
12976 	      asection *os = input_section->output_section;
12977 
12978 	      /* A partial link, so keep the relocs */
12979 	      os->orelocation[os->reloc_count] = *parent;
12980 	      os->reloc_count++;
12981 	    }
12982 
12983 	  if (r != bfd_reloc_ok)
12984 	    {
12985 	      switch (r)
12986 		{
12987 		case bfd_reloc_undefined:
12988 		  (*link_info->callbacks->undefined_symbol)
12989 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12990 		     input_bfd, input_section, (*parent)->address, TRUE);
12991 		  break;
12992 		case bfd_reloc_dangerous:
12993 		  BFD_ASSERT (error_message != NULL);
12994 		  (*link_info->callbacks->reloc_dangerous)
12995 		    (link_info, error_message,
12996 		     input_bfd, input_section, (*parent)->address);
12997 		  break;
12998 		case bfd_reloc_overflow:
12999 		  (*link_info->callbacks->reloc_overflow)
13000 		    (link_info, NULL,
13001 		     bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13002 		     (*parent)->howto->name, (*parent)->addend,
13003 		     input_bfd, input_section, (*parent)->address);
13004 		  break;
13005 		case bfd_reloc_outofrange:
13006 		default:
13007 		  abort ();
13008 		  break;
13009 		}
13010 
13011 	    }
13012 	}
13013     }
13014   if (reloc_vector != NULL)
13015     free (reloc_vector);
13016   return data;
13017 
13018 error_return:
13019   if (reloc_vector != NULL)
13020     free (reloc_vector);
13021   return NULL;
13022 }
13023 
13024 static bfd_boolean
13025 mips_elf_relax_delete_bytes (bfd *abfd,
13026 			     asection *sec, bfd_vma addr, int count)
13027 {
13028   Elf_Internal_Shdr *symtab_hdr;
13029   unsigned int sec_shndx;
13030   bfd_byte *contents;
13031   Elf_Internal_Rela *irel, *irelend;
13032   Elf_Internal_Sym *isym;
13033   Elf_Internal_Sym *isymend;
13034   struct elf_link_hash_entry **sym_hashes;
13035   struct elf_link_hash_entry **end_hashes;
13036   struct elf_link_hash_entry **start_hashes;
13037   unsigned int symcount;
13038 
13039   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13040   contents = elf_section_data (sec)->this_hdr.contents;
13041 
13042   irel = elf_section_data (sec)->relocs;
13043   irelend = irel + sec->reloc_count;
13044 
13045   /* Actually delete the bytes.  */
13046   memmove (contents + addr, contents + addr + count,
13047 	   (size_t) (sec->size - addr - count));
13048   sec->size -= count;
13049 
13050   /* Adjust all the relocs.  */
13051   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13052     {
13053       /* Get the new reloc address.  */
13054       if (irel->r_offset > addr)
13055 	irel->r_offset -= count;
13056     }
13057 
13058   BFD_ASSERT (addr % 2 == 0);
13059   BFD_ASSERT (count % 2 == 0);
13060 
13061   /* Adjust the local symbols defined in this section.  */
13062   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13063   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13064   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13065     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13066       isym->st_value -= count;
13067 
13068   /* Now adjust the global symbols defined in this section.  */
13069   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13070 	      - symtab_hdr->sh_info);
13071   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13072   end_hashes = sym_hashes + symcount;
13073 
13074   for (; sym_hashes < end_hashes; sym_hashes++)
13075     {
13076       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13077 
13078       if ((sym_hash->root.type == bfd_link_hash_defined
13079 	   || sym_hash->root.type == bfd_link_hash_defweak)
13080 	  && sym_hash->root.u.def.section == sec)
13081 	{
13082 	  bfd_vma value = sym_hash->root.u.def.value;
13083 
13084 	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13085 	    value &= MINUS_TWO;
13086 	  if (value > addr)
13087 	    sym_hash->root.u.def.value -= count;
13088 	}
13089     }
13090 
13091   return TRUE;
13092 }
13093 
13094 
13095 /* Opcodes needed for microMIPS relaxation as found in
13096    opcodes/micromips-opc.c.  */
13097 
13098 struct opcode_descriptor {
13099   unsigned long match;
13100   unsigned long mask;
13101 };
13102 
13103 /* The $ra register aka $31.  */
13104 
13105 #define RA 31
13106 
13107 /* 32-bit instruction format register fields.  */
13108 
13109 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13110 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13111 
13112 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13113 
13114 #define OP16_VALID_REG(r) \
13115   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13116 
13117 
13118 /* 32-bit and 16-bit branches.  */
13119 
13120 static const struct opcode_descriptor b_insns_32[] = {
13121   { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
13122   { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13123   { 0, 0 }  /* End marker for find_match().  */
13124 };
13125 
13126 static const struct opcode_descriptor bc_insn_32 =
13127   { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
13128 
13129 static const struct opcode_descriptor bz_insn_32 =
13130   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
13131 
13132 static const struct opcode_descriptor bzal_insn_32 =
13133   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
13134 
13135 static const struct opcode_descriptor beq_insn_32 =
13136   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
13137 
13138 static const struct opcode_descriptor b_insn_16 =
13139   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
13140 
13141 static const struct opcode_descriptor bz_insn_16 =
13142   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
13143 
13144 
13145 /* 32-bit and 16-bit branch EQ and NE zero.  */
13146 
13147 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13148    eq and second the ne.  This convention is used when replacing a
13149    32-bit BEQ/BNE with the 16-bit version.  */
13150 
13151 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13152 
13153 static const struct opcode_descriptor bz_rs_insns_32[] = {
13154   { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
13155   { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
13156   { 0, 0 }  /* End marker for find_match().  */
13157 };
13158 
13159 static const struct opcode_descriptor bz_rt_insns_32[] = {
13160   { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
13161   { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
13162   { 0, 0 }  /* End marker for find_match().  */
13163 };
13164 
13165 static const struct opcode_descriptor bzc_insns_32[] = {
13166   { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
13167   { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
13168   { 0, 0 }  /* End marker for find_match().  */
13169 };
13170 
13171 static const struct opcode_descriptor bz_insns_16[] = {
13172   { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
13173   { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
13174   { 0, 0 }  /* End marker for find_match().  */
13175 };
13176 
13177 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13178 
13179 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13180 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13181 
13182 
13183 /* 32-bit instructions with a delay slot.  */
13184 
13185 static const struct opcode_descriptor jal_insn_32_bd16 =
13186   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
13187 
13188 static const struct opcode_descriptor jal_insn_32_bd32 =
13189   { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
13190 
13191 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13192   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
13193 
13194 static const struct opcode_descriptor j_insn_32 =
13195   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
13196 
13197 static const struct opcode_descriptor jalr_insn_32 =
13198   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
13199 
13200 /* This table can be compacted, because no opcode replacement is made.  */
13201 
13202 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13203   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
13204 
13205   { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
13206   { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
13207 
13208   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
13209   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
13210   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
13211   { 0, 0 }  /* End marker for find_match().  */
13212 };
13213 
13214 /* This table can be compacted, because no opcode replacement is made.  */
13215 
13216 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13217   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
13218 
13219   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
13220   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
13221   { 0, 0 }  /* End marker for find_match().  */
13222 };
13223 
13224 
13225 /* 16-bit instructions with a delay slot.  */
13226 
13227 static const struct opcode_descriptor jalr_insn_16_bd16 =
13228   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
13229 
13230 static const struct opcode_descriptor jalr_insn_16_bd32 =
13231   { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
13232 
13233 static const struct opcode_descriptor jr_insn_16 =
13234   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
13235 
13236 #define JR16_REG(opcode) ((opcode) & 0x1f)
13237 
13238 /* This table can be compacted, because no opcode replacement is made.  */
13239 
13240 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13241   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
13242 
13243   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
13244   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
13245   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
13246   { 0, 0 }  /* End marker for find_match().  */
13247 };
13248 
13249 
13250 /* LUI instruction.  */
13251 
13252 static const struct opcode_descriptor lui_insn =
13253  { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
13254 
13255 
13256 /* ADDIU instruction.  */
13257 
13258 static const struct opcode_descriptor addiu_insn =
13259   { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
13260 
13261 static const struct opcode_descriptor addiupc_insn =
13262   { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
13263 
13264 #define ADDIUPC_REG_FIELD(r) \
13265   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13266 
13267 
13268 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13269 
13270 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13271    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13272 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13273 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13274 
13275 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13276 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13277 
13278 static const struct opcode_descriptor move_insns_32[] = {
13279   { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13280   { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13281   { 0, 0 }  /* End marker for find_match().  */
13282 };
13283 
13284 static const struct opcode_descriptor move_insn_16 =
13285   { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
13286 
13287 
13288 /* NOP instructions.  */
13289 
13290 static const struct opcode_descriptor nop_insn_32 =
13291   { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
13292 
13293 static const struct opcode_descriptor nop_insn_16 =
13294   { /* "nop",	"",		*/ 0x0c00,     0xffff };
13295 
13296 
13297 /* Instruction match support.  */
13298 
13299 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13300 
13301 static int
13302 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13303 {
13304   unsigned long indx;
13305 
13306   for (indx = 0; insn[indx].mask != 0; indx++)
13307     if (MATCH (opcode, insn[indx]))
13308       return indx;
13309 
13310   return -1;
13311 }
13312 
13313 
13314 /* Branch and delay slot decoding support.  */
13315 
13316 /* If PTR points to what *might* be a 16-bit branch or jump, then
13317    return the minimum length of its delay slot, otherwise return 0.
13318    Non-zero results are not definitive as we might be checking against
13319    the second half of another instruction.  */
13320 
13321 static int
13322 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13323 {
13324   unsigned long opcode;
13325   int bdsize;
13326 
13327   opcode = bfd_get_16 (abfd, ptr);
13328   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13329     /* 16-bit branch/jump with a 32-bit delay slot.  */
13330     bdsize = 4;
13331   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13332 	   || find_match (opcode, ds_insns_16_bd16) >= 0)
13333     /* 16-bit branch/jump with a 16-bit delay slot.  */
13334     bdsize = 2;
13335   else
13336     /* No delay slot.  */
13337     bdsize = 0;
13338 
13339   return bdsize;
13340 }
13341 
13342 /* If PTR points to what *might* be a 32-bit branch or jump, then
13343    return the minimum length of its delay slot, otherwise return 0.
13344    Non-zero results are not definitive as we might be checking against
13345    the second half of another instruction.  */
13346 
13347 static int
13348 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13349 {
13350   unsigned long opcode;
13351   int bdsize;
13352 
13353   opcode = bfd_get_micromips_32 (abfd, ptr);
13354   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13355     /* 32-bit branch/jump with a 32-bit delay slot.  */
13356     bdsize = 4;
13357   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13358     /* 32-bit branch/jump with a 16-bit delay slot.  */
13359     bdsize = 2;
13360   else
13361     /* No delay slot.  */
13362     bdsize = 0;
13363 
13364   return bdsize;
13365 }
13366 
13367 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13368    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13369 
13370 static bfd_boolean
13371 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13372 {
13373   unsigned long opcode;
13374 
13375   opcode = bfd_get_16 (abfd, ptr);
13376   if (MATCH (opcode, b_insn_16)
13377 						/* B16  */
13378       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13379 						/* JR16  */
13380       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13381 						/* BEQZ16, BNEZ16  */
13382       || (MATCH (opcode, jalr_insn_16_bd32)
13383 						/* JALR16  */
13384 	  && reg != JR16_REG (opcode) && reg != RA))
13385     return TRUE;
13386 
13387   return FALSE;
13388 }
13389 
13390 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13391    then return TRUE, otherwise FALSE.  */
13392 
13393 static bfd_boolean
13394 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13395 {
13396   unsigned long opcode;
13397 
13398   opcode = bfd_get_micromips_32 (abfd, ptr);
13399   if (MATCH (opcode, j_insn_32)
13400 						/* J  */
13401       || MATCH (opcode, bc_insn_32)
13402 						/* BC1F, BC1T, BC2F, BC2T  */
13403       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13404 						/* JAL, JALX  */
13405       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13406 						/* BGEZ, BGTZ, BLEZ, BLTZ  */
13407       || (MATCH (opcode, bzal_insn_32)
13408 						/* BGEZAL, BLTZAL  */
13409 	  && reg != OP32_SREG (opcode) && reg != RA)
13410       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13411 						/* JALR, JALR.HB, BEQ, BNE  */
13412 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13413     return TRUE;
13414 
13415   return FALSE;
13416 }
13417 
13418 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13419    IRELEND) at OFFSET indicate that there must be a compact branch there,
13420    then return TRUE, otherwise FALSE.  */
13421 
13422 static bfd_boolean
13423 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13424 		     const Elf_Internal_Rela *internal_relocs,
13425 		     const Elf_Internal_Rela *irelend)
13426 {
13427   const Elf_Internal_Rela *irel;
13428   unsigned long opcode;
13429 
13430   opcode = bfd_get_micromips_32 (abfd, ptr);
13431   if (find_match (opcode, bzc_insns_32) < 0)
13432     return FALSE;
13433 
13434   for (irel = internal_relocs; irel < irelend; irel++)
13435     if (irel->r_offset == offset
13436 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13437       return TRUE;
13438 
13439   return FALSE;
13440 }
13441 
13442 /* Bitsize checking.  */
13443 #define IS_BITSIZE(val, N)						\
13444   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
13445     - (1ULL << ((N) - 1))) == (val))
13446 
13447 
13448 bfd_boolean
13449 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13450 			     struct bfd_link_info *link_info,
13451 			     bfd_boolean *again)
13452 {
13453   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13454   Elf_Internal_Shdr *symtab_hdr;
13455   Elf_Internal_Rela *internal_relocs;
13456   Elf_Internal_Rela *irel, *irelend;
13457   bfd_byte *contents = NULL;
13458   Elf_Internal_Sym *isymbuf = NULL;
13459 
13460   /* Assume nothing changes.  */
13461   *again = FALSE;
13462 
13463   /* We don't have to do anything for a relocatable link, if
13464      this section does not have relocs, or if this is not a
13465      code section.  */
13466 
13467   if (bfd_link_relocatable (link_info)
13468       || (sec->flags & SEC_RELOC) == 0
13469       || sec->reloc_count == 0
13470       || (sec->flags & SEC_CODE) == 0)
13471     return TRUE;
13472 
13473   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13474 
13475   /* Get a copy of the native relocations.  */
13476   internal_relocs = (_bfd_elf_link_read_relocs
13477 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13478 		      link_info->keep_memory));
13479   if (internal_relocs == NULL)
13480     goto error_return;
13481 
13482   /* Walk through them looking for relaxing opportunities.  */
13483   irelend = internal_relocs + sec->reloc_count;
13484   for (irel = internal_relocs; irel < irelend; irel++)
13485     {
13486       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13487       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13488       bfd_boolean target_is_micromips_code_p;
13489       unsigned long opcode;
13490       bfd_vma symval;
13491       bfd_vma pcrval;
13492       bfd_byte *ptr;
13493       int fndopc;
13494 
13495       /* The number of bytes to delete for relaxation and from where
13496          to delete these bytes starting at irel->r_offset.  */
13497       int delcnt = 0;
13498       int deloff = 0;
13499 
13500       /* If this isn't something that can be relaxed, then ignore
13501          this reloc.  */
13502       if (r_type != R_MICROMIPS_HI16
13503 	  && r_type != R_MICROMIPS_PC16_S1
13504 	  && r_type != R_MICROMIPS_26_S1)
13505 	continue;
13506 
13507       /* Get the section contents if we haven't done so already.  */
13508       if (contents == NULL)
13509 	{
13510 	  /* Get cached copy if it exists.  */
13511 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
13512 	    contents = elf_section_data (sec)->this_hdr.contents;
13513 	  /* Go get them off disk.  */
13514 	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13515 	    goto error_return;
13516 	}
13517       ptr = contents + irel->r_offset;
13518 
13519       /* Read this BFD's local symbols if we haven't done so already.  */
13520       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13521 	{
13522 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13523 	  if (isymbuf == NULL)
13524 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13525 					    symtab_hdr->sh_info, 0,
13526 					    NULL, NULL, NULL);
13527 	  if (isymbuf == NULL)
13528 	    goto error_return;
13529 	}
13530 
13531       /* Get the value of the symbol referred to by the reloc.  */
13532       if (r_symndx < symtab_hdr->sh_info)
13533 	{
13534 	  /* A local symbol.  */
13535 	  Elf_Internal_Sym *isym;
13536 	  asection *sym_sec;
13537 
13538 	  isym = isymbuf + r_symndx;
13539 	  if (isym->st_shndx == SHN_UNDEF)
13540 	    sym_sec = bfd_und_section_ptr;
13541 	  else if (isym->st_shndx == SHN_ABS)
13542 	    sym_sec = bfd_abs_section_ptr;
13543 	  else if (isym->st_shndx == SHN_COMMON)
13544 	    sym_sec = bfd_com_section_ptr;
13545 	  else
13546 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13547 	  symval = (isym->st_value
13548 		    + sym_sec->output_section->vma
13549 		    + sym_sec->output_offset);
13550 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13551 	}
13552       else
13553 	{
13554 	  unsigned long indx;
13555 	  struct elf_link_hash_entry *h;
13556 
13557 	  /* An external symbol.  */
13558 	  indx = r_symndx - symtab_hdr->sh_info;
13559 	  h = elf_sym_hashes (abfd)[indx];
13560 	  BFD_ASSERT (h != NULL);
13561 
13562 	  if (h->root.type != bfd_link_hash_defined
13563 	      && h->root.type != bfd_link_hash_defweak)
13564 	    /* This appears to be a reference to an undefined
13565 	       symbol.  Just ignore it -- it will be caught by the
13566 	       regular reloc processing.  */
13567 	    continue;
13568 
13569 	  symval = (h->root.u.def.value
13570 		    + h->root.u.def.section->output_section->vma
13571 		    + h->root.u.def.section->output_offset);
13572 	  target_is_micromips_code_p = (!h->needs_plt
13573 					&& ELF_ST_IS_MICROMIPS (h->other));
13574 	}
13575 
13576 
13577       /* For simplicity of coding, we are going to modify the
13578          section contents, the section relocs, and the BFD symbol
13579          table.  We must tell the rest of the code not to free up this
13580          information.  It would be possible to instead create a table
13581          of changes which have to be made, as is done in coff-mips.c;
13582          that would be more work, but would require less memory when
13583          the linker is run.  */
13584 
13585       /* Only 32-bit instructions relaxed.  */
13586       if (irel->r_offset + 4 > sec->size)
13587 	continue;
13588 
13589       opcode = bfd_get_micromips_32 (abfd, ptr);
13590 
13591       /* This is the pc-relative distance from the instruction the
13592          relocation is applied to, to the symbol referred.  */
13593       pcrval = (symval
13594 		- (sec->output_section->vma + sec->output_offset)
13595 		- irel->r_offset);
13596 
13597       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13598          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13599          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13600 
13601            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13602 
13603          where pcrval has first to be adjusted to apply against the LO16
13604          location (we make the adjustment later on, when we have figured
13605          out the offset).  */
13606       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13607 	{
13608 	  bfd_boolean bzc = FALSE;
13609 	  unsigned long nextopc;
13610 	  unsigned long reg;
13611 	  bfd_vma offset;
13612 
13613 	  /* Give up if the previous reloc was a HI16 against this symbol
13614 	     too.  */
13615 	  if (irel > internal_relocs
13616 	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13617 	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13618 	    continue;
13619 
13620 	  /* Or if the next reloc is not a LO16 against this symbol.  */
13621 	  if (irel + 1 >= irelend
13622 	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13623 	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13624 	    continue;
13625 
13626 	  /* Or if the second next reloc is a LO16 against this symbol too.  */
13627 	  if (irel + 2 >= irelend
13628 	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13629 	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13630 	    continue;
13631 
13632 	  /* See if the LUI instruction *might* be in a branch delay slot.
13633 	     We check whether what looks like a 16-bit branch or jump is
13634 	     actually an immediate argument to a compact branch, and let
13635 	     it through if so.  */
13636 	  if (irel->r_offset >= 2
13637 	      && check_br16_dslot (abfd, ptr - 2)
13638 	      && !(irel->r_offset >= 4
13639 		   && (bzc = check_relocated_bzc (abfd,
13640 						  ptr - 4, irel->r_offset - 4,
13641 						  internal_relocs, irelend))))
13642 	    continue;
13643 	  if (irel->r_offset >= 4
13644 	      && !bzc
13645 	      && check_br32_dslot (abfd, ptr - 4))
13646 	    continue;
13647 
13648 	  reg = OP32_SREG (opcode);
13649 
13650 	  /* We only relax adjacent instructions or ones separated with
13651 	     a branch or jump that has a delay slot.  The branch or jump
13652 	     must not fiddle with the register used to hold the address.
13653 	     Subtract 4 for the LUI itself.  */
13654 	  offset = irel[1].r_offset - irel[0].r_offset;
13655 	  switch (offset - 4)
13656 	    {
13657 	    case 0:
13658 	      break;
13659 	    case 2:
13660 	      if (check_br16 (abfd, ptr + 4, reg))
13661 		break;
13662 	      continue;
13663 	    case 4:
13664 	      if (check_br32 (abfd, ptr + 4, reg))
13665 		break;
13666 	      continue;
13667 	    default:
13668 	      continue;
13669 	    }
13670 
13671 	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13672 
13673 	  /* Give up unless the same register is used with both
13674 	     relocations.  */
13675 	  if (OP32_SREG (nextopc) != reg)
13676 	    continue;
13677 
13678 	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13679 	     and rounding up to take masking of the two LSBs into account.  */
13680 	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13681 
13682 	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13683 	  if (IS_BITSIZE (symval, 16))
13684 	    {
13685 	      /* Fix the relocation's type.  */
13686 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13687 
13688 	      /* Instructions using R_MICROMIPS_LO16 have the base or
13689 	         source register in bits 20:16.  This register becomes $0
13690 	         (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13691 	      nextopc &= ~0x001f0000;
13692 	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13693 			  contents + irel[1].r_offset);
13694 	    }
13695 
13696 	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13697 	     We add 4 to take LUI deletion into account while checking
13698 	     the PC-relative distance.  */
13699 	  else if (symval % 4 == 0
13700 		   && IS_BITSIZE (pcrval + 4, 25)
13701 		   && MATCH (nextopc, addiu_insn)
13702 		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13703 		   && OP16_VALID_REG (OP32_TREG (nextopc)))
13704 	    {
13705 	      /* Fix the relocation's type.  */
13706 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13707 
13708 	      /* Replace ADDIU with the ADDIUPC version.  */
13709 	      nextopc = (addiupc_insn.match
13710 			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13711 
13712 	      bfd_put_micromips_32 (abfd, nextopc,
13713 				    contents + irel[1].r_offset);
13714 	    }
13715 
13716 	  /* Can't do anything, give up, sigh...  */
13717 	  else
13718 	    continue;
13719 
13720 	  /* Fix the relocation's type.  */
13721 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13722 
13723 	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13724 	  delcnt = 4;
13725 	  deloff = 0;
13726 	}
13727 
13728       /* Compact branch relaxation -- due to the multitude of macros
13729          employed by the compiler/assembler, compact branches are not
13730          always generated.  Obviously, this can/will be fixed elsewhere,
13731          but there is no drawback in double checking it here.  */
13732       else if (r_type == R_MICROMIPS_PC16_S1
13733 	       && irel->r_offset + 5 < sec->size
13734 	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13735 		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13736 	       && ((!insn32
13737 		    && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13738 					nop_insn_16) ? 2 : 0))
13739 		   || (irel->r_offset + 7 < sec->size
13740 		       && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13741 								 ptr + 4),
13742 					   nop_insn_32) ? 4 : 0))))
13743 	{
13744 	  unsigned long reg;
13745 
13746 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13747 
13748 	  /* Replace BEQZ/BNEZ with the compact version.  */
13749 	  opcode = (bzc_insns_32[fndopc].match
13750 		    | BZC32_REG_FIELD (reg)
13751 		    | (opcode & 0xffff));		/* Addend value.  */
13752 
13753 	  bfd_put_micromips_32 (abfd, opcode, ptr);
13754 
13755 	  /* Delete the delay slot NOP: two or four bytes from
13756 	     irel->offset + 4; delcnt has already been set above.  */
13757 	  deloff = 4;
13758 	}
13759 
13760       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_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, 11)
13765 	       && find_match (opcode, b_insns_32) >= 0)
13766 	{
13767 	  /* Fix the relocation's type.  */
13768 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13769 
13770 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13771 	  bfd_put_16 (abfd,
13772 		      (b_insn_16.match
13773 		       | (opcode & 0x3ff)),		/* Addend value.  */
13774 		      ptr);
13775 
13776 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13777 	  delcnt = 2;
13778 	  deloff = 2;
13779 	}
13780 
13781       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13782          to check the distance from the next instruction, so subtract 2.  */
13783       else if (!insn32
13784 	       && r_type == R_MICROMIPS_PC16_S1
13785 	       && IS_BITSIZE (pcrval - 2, 8)
13786 	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13787 		    && OP16_VALID_REG (OP32_SREG (opcode)))
13788 		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13789 		       && OP16_VALID_REG (OP32_TREG (opcode)))))
13790 	{
13791 	  unsigned long reg;
13792 
13793 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13794 
13795 	  /* Fix the relocation's type.  */
13796 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13797 
13798 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13799 	  bfd_put_16 (abfd,
13800 		      (bz_insns_16[fndopc].match
13801 		       | BZ16_REG_FIELD (reg)
13802 		       | (opcode & 0x7f)),		/* Addend value.  */
13803 		      ptr);
13804 
13805 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13806 	  delcnt = 2;
13807 	  deloff = 2;
13808 	}
13809 
13810       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13811       else if (!insn32
13812 	       && r_type == R_MICROMIPS_26_S1
13813 	       && target_is_micromips_code_p
13814 	       && irel->r_offset + 7 < sec->size
13815 	       && MATCH (opcode, jal_insn_32_bd32))
13816 	{
13817 	  unsigned long n32opc;
13818 	  bfd_boolean relaxed = FALSE;
13819 
13820 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13821 
13822 	  if (MATCH (n32opc, nop_insn_32))
13823 	    {
13824 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13825 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13826 
13827 	      relaxed = TRUE;
13828 	    }
13829 	  else if (find_match (n32opc, move_insns_32) >= 0)
13830 	    {
13831 	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13832 	      bfd_put_16 (abfd,
13833 			  (move_insn_16.match
13834 			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13835 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13836 			  ptr + 4);
13837 
13838 	      relaxed = TRUE;
13839 	    }
13840 	  /* Other 32-bit instructions relaxable to 16-bit
13841 	     instructions will be handled here later.  */
13842 
13843 	  if (relaxed)
13844 	    {
13845 	      /* JAL with 32-bit delay slot that is changed to a JALS
13846 	         with 16-bit delay slot.  */
13847 	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13848 
13849 	      /* Delete 2 bytes from irel->r_offset + 6.  */
13850 	      delcnt = 2;
13851 	      deloff = 6;
13852 	    }
13853 	}
13854 
13855       if (delcnt != 0)
13856 	{
13857 	  /* Note that we've changed the relocs, section contents, etc.  */
13858 	  elf_section_data (sec)->relocs = internal_relocs;
13859 	  elf_section_data (sec)->this_hdr.contents = contents;
13860 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13861 
13862 	  /* Delete bytes depending on the delcnt and deloff.  */
13863 	  if (!mips_elf_relax_delete_bytes (abfd, sec,
13864 					    irel->r_offset + deloff, delcnt))
13865 	    goto error_return;
13866 
13867 	  /* That will change things, so we should relax again.
13868 	     Note that this is not required, and it may be slow.  */
13869 	  *again = TRUE;
13870 	}
13871     }
13872 
13873   if (isymbuf != NULL
13874       && symtab_hdr->contents != (unsigned char *) isymbuf)
13875     {
13876       if (! link_info->keep_memory)
13877 	free (isymbuf);
13878       else
13879 	{
13880 	  /* Cache the symbols for elf_link_input_bfd.  */
13881 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13882 	}
13883     }
13884 
13885   if (contents != NULL
13886       && elf_section_data (sec)->this_hdr.contents != contents)
13887     {
13888       if (! link_info->keep_memory)
13889 	free (contents);
13890       else
13891 	{
13892 	  /* Cache the section contents for elf_link_input_bfd.  */
13893 	  elf_section_data (sec)->this_hdr.contents = contents;
13894 	}
13895     }
13896 
13897   if (internal_relocs != NULL
13898       && elf_section_data (sec)->relocs != internal_relocs)
13899     free (internal_relocs);
13900 
13901   return TRUE;
13902 
13903  error_return:
13904   if (isymbuf != NULL
13905       && symtab_hdr->contents != (unsigned char *) isymbuf)
13906     free (isymbuf);
13907   if (contents != NULL
13908       && elf_section_data (sec)->this_hdr.contents != contents)
13909     free (contents);
13910   if (internal_relocs != NULL
13911       && elf_section_data (sec)->relocs != internal_relocs)
13912     free (internal_relocs);
13913 
13914   return FALSE;
13915 }
13916 
13917 /* Create a MIPS ELF linker hash table.  */
13918 
13919 struct bfd_link_hash_table *
13920 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13921 {
13922   struct mips_elf_link_hash_table *ret;
13923   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13924 
13925   ret = bfd_zmalloc (amt);
13926   if (ret == NULL)
13927     return NULL;
13928 
13929   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13930 				      mips_elf_link_hash_newfunc,
13931 				      sizeof (struct mips_elf_link_hash_entry),
13932 				      MIPS_ELF_DATA))
13933     {
13934       free (ret);
13935       return NULL;
13936     }
13937   ret->root.init_plt_refcount.plist = NULL;
13938   ret->root.init_plt_offset.plist = NULL;
13939 
13940   return &ret->root.root;
13941 }
13942 
13943 /* Likewise, but indicate that the target is VxWorks.  */
13944 
13945 struct bfd_link_hash_table *
13946 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13947 {
13948   struct bfd_link_hash_table *ret;
13949 
13950   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13951   if (ret)
13952     {
13953       struct mips_elf_link_hash_table *htab;
13954 
13955       htab = (struct mips_elf_link_hash_table *) ret;
13956       htab->use_plts_and_copy_relocs = TRUE;
13957       htab->is_vxworks = TRUE;
13958     }
13959   return ret;
13960 }
13961 
13962 /* A function that the linker calls if we are allowed to use PLTs
13963    and copy relocs.  */
13964 
13965 void
13966 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13967 {
13968   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13969 }
13970 
13971 /* A function that the linker calls to select between all or only
13972    32-bit microMIPS instructions.  */
13973 
13974 void
13975 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13976 {
13977   mips_elf_hash_table (info)->insn32 = on;
13978 }
13979 
13980 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
13981 
13982 struct mips_mach_extension
13983 {
13984   unsigned long extension, base;
13985 };
13986 
13987 
13988 /* An array describing how BFD machines relate to one another.  The entries
13989    are ordered topologically with MIPS I extensions listed last.  */
13990 
13991 static const struct mips_mach_extension mips_mach_extensions[] =
13992 {
13993   /* MIPS64r2 extensions.  */
13994   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
13995   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
13996   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
13997   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
13998   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
13999 
14000   /* MIPS64 extensions.  */
14001   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14002   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14003   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14004 
14005   /* MIPS V extensions.  */
14006   { bfd_mach_mipsisa64, bfd_mach_mips5 },
14007 
14008   /* R10000 extensions.  */
14009   { bfd_mach_mips12000, bfd_mach_mips10000 },
14010   { bfd_mach_mips14000, bfd_mach_mips10000 },
14011   { bfd_mach_mips16000, bfd_mach_mips10000 },
14012 
14013   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14014      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14015      better to allow vr5400 and vr5500 code to be merged anyway, since
14016      many libraries will just use the core ISA.  Perhaps we could add
14017      some sort of ASE flag if this ever proves a problem.  */
14018   { bfd_mach_mips5500, bfd_mach_mips5400 },
14019   { bfd_mach_mips5400, bfd_mach_mips5000 },
14020 
14021   /* MIPS IV extensions.  */
14022   { bfd_mach_mips5, bfd_mach_mips8000 },
14023   { bfd_mach_mips10000, bfd_mach_mips8000 },
14024   { bfd_mach_mips5000, bfd_mach_mips8000 },
14025   { bfd_mach_mips7000, bfd_mach_mips8000 },
14026   { bfd_mach_mips9000, bfd_mach_mips8000 },
14027 
14028   /* VR4100 extensions.  */
14029   { bfd_mach_mips4120, bfd_mach_mips4100 },
14030   { bfd_mach_mips4111, bfd_mach_mips4100 },
14031 
14032   /* MIPS III extensions.  */
14033   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14034   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14035   { bfd_mach_mips8000, bfd_mach_mips4000 },
14036   { bfd_mach_mips4650, bfd_mach_mips4000 },
14037   { bfd_mach_mips4600, bfd_mach_mips4000 },
14038   { bfd_mach_mips4400, bfd_mach_mips4000 },
14039   { bfd_mach_mips4300, bfd_mach_mips4000 },
14040   { bfd_mach_mips4100, bfd_mach_mips4000 },
14041   { bfd_mach_mips4010, bfd_mach_mips4000 },
14042   { bfd_mach_mips5900, bfd_mach_mips4000 },
14043 
14044   /* MIPS32 extensions.  */
14045   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14046 
14047   /* MIPS II extensions.  */
14048   { bfd_mach_mips4000, bfd_mach_mips6000 },
14049   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14050 
14051   /* MIPS I extensions.  */
14052   { bfd_mach_mips6000, bfd_mach_mips3000 },
14053   { bfd_mach_mips3900, bfd_mach_mips3000 }
14054 };
14055 
14056 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14057 
14058 static bfd_boolean
14059 mips_mach_extends_p (unsigned long base, unsigned long extension)
14060 {
14061   size_t i;
14062 
14063   if (extension == base)
14064     return TRUE;
14065 
14066   if (base == bfd_mach_mipsisa32
14067       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14068     return TRUE;
14069 
14070   if (base == bfd_mach_mipsisa32r2
14071       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14072     return TRUE;
14073 
14074   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14075     if (extension == mips_mach_extensions[i].extension)
14076       {
14077 	extension = mips_mach_extensions[i].base;
14078 	if (extension == base)
14079 	  return TRUE;
14080       }
14081 
14082   return FALSE;
14083 }
14084 
14085 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14086 
14087 static unsigned long
14088 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14089 {
14090   switch (isa_ext)
14091     {
14092     case AFL_EXT_3900:        return bfd_mach_mips3900;
14093     case AFL_EXT_4010:        return bfd_mach_mips4010;
14094     case AFL_EXT_4100:        return bfd_mach_mips4100;
14095     case AFL_EXT_4111:        return bfd_mach_mips4111;
14096     case AFL_EXT_4120:        return bfd_mach_mips4120;
14097     case AFL_EXT_4650:        return bfd_mach_mips4650;
14098     case AFL_EXT_5400:        return bfd_mach_mips5400;
14099     case AFL_EXT_5500:        return bfd_mach_mips5500;
14100     case AFL_EXT_5900:        return bfd_mach_mips5900;
14101     case AFL_EXT_10000:       return bfd_mach_mips10000;
14102     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14103     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14104     case AFL_EXT_LOONGSON_3A: return bfd_mach_mips_loongson_3a;
14105     case AFL_EXT_SB1:         return bfd_mach_mips_sb1;
14106     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14107     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14108     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14109     case AFL_EXT_XLR:         return bfd_mach_mips_xlr;
14110     default:                  return bfd_mach_mips3000;
14111     }
14112 }
14113 
14114 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14115 
14116 unsigned int
14117 bfd_mips_isa_ext (bfd *abfd)
14118 {
14119   switch (bfd_get_mach (abfd))
14120     {
14121     case bfd_mach_mips3900:         return AFL_EXT_3900;
14122     case bfd_mach_mips4010:         return AFL_EXT_4010;
14123     case bfd_mach_mips4100:         return AFL_EXT_4100;
14124     case bfd_mach_mips4111:         return AFL_EXT_4111;
14125     case bfd_mach_mips4120:         return AFL_EXT_4120;
14126     case bfd_mach_mips4650:         return AFL_EXT_4650;
14127     case bfd_mach_mips5400:         return AFL_EXT_5400;
14128     case bfd_mach_mips5500:         return AFL_EXT_5500;
14129     case bfd_mach_mips5900:         return AFL_EXT_5900;
14130     case bfd_mach_mips10000:        return AFL_EXT_10000;
14131     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14132     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14133     case bfd_mach_mips_loongson_3a: return AFL_EXT_LOONGSON_3A;
14134     case bfd_mach_mips_sb1:         return AFL_EXT_SB1;
14135     case bfd_mach_mips_octeon:      return AFL_EXT_OCTEON;
14136     case bfd_mach_mips_octeonp:     return AFL_EXT_OCTEONP;
14137     case bfd_mach_mips_octeon3:     return AFL_EXT_OCTEON3;
14138     case bfd_mach_mips_octeon2:     return AFL_EXT_OCTEON2;
14139     case bfd_mach_mips_xlr:         return AFL_EXT_XLR;
14140     default:                        return 0;
14141     }
14142 }
14143 
14144 /* Encode ISA level and revision as a single value.  */
14145 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14146 
14147 /* Decode a single value into level and revision.  */
14148 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14149 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14150 
14151 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14152 
14153 static void
14154 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14155 {
14156   int new_isa = 0;
14157   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14158     {
14159     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14160     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14161     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14162     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14163     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14164     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14165     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14166     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14167     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14168     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14169     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14170     default:
14171       (*_bfd_error_handler)
14172 	(_("%B: Unknown architecture %s"),
14173 	 abfd, bfd_printable_name (abfd));
14174     }
14175 
14176   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14177     {
14178       abiflags->isa_level = ISA_LEVEL (new_isa);
14179       abiflags->isa_rev = ISA_REV (new_isa);
14180     }
14181 
14182   /* Update the isa_ext if ABFD describes a further extension.  */
14183   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14184 			   bfd_get_mach (abfd)))
14185     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14186 }
14187 
14188 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14189 
14190 static bfd_boolean
14191 mips_32bit_flags_p (flagword flags)
14192 {
14193   return ((flags & EF_MIPS_32BITMODE) != 0
14194 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14195 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14196 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14197 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14198 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14199 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14200 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14201 }
14202 
14203 /* Infer the content of the ABI flags based on the elf header.  */
14204 
14205 static void
14206 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14207 {
14208   obj_attribute *in_attr;
14209 
14210   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14211   update_mips_abiflags_isa (abfd, abiflags);
14212 
14213   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14214     abiflags->gpr_size = AFL_REG_32;
14215   else
14216     abiflags->gpr_size = AFL_REG_64;
14217 
14218   abiflags->cpr1_size = AFL_REG_NONE;
14219 
14220   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14221   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14222 
14223   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14224       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14225       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14226 	  && abiflags->gpr_size == AFL_REG_32))
14227     abiflags->cpr1_size = AFL_REG_32;
14228   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14229 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14230 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14231     abiflags->cpr1_size = AFL_REG_64;
14232 
14233   abiflags->cpr2_size = AFL_REG_NONE;
14234 
14235   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14236     abiflags->ases |= AFL_ASE_MDMX;
14237   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14238     abiflags->ases |= AFL_ASE_MIPS16;
14239   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14240     abiflags->ases |= AFL_ASE_MICROMIPS;
14241 
14242   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14243       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14244       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14245       && abiflags->isa_level >= 32
14246       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14247     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14248 }
14249 
14250 /* We need to use a special link routine to handle the .reginfo and
14251    the .mdebug sections.  We need to merge all instances of these
14252    sections together, not write them all out sequentially.  */
14253 
14254 bfd_boolean
14255 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14256 {
14257   asection *o;
14258   struct bfd_link_order *p;
14259   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14260   asection *rtproc_sec, *abiflags_sec;
14261   Elf32_RegInfo reginfo;
14262   struct ecoff_debug_info debug;
14263   struct mips_htab_traverse_info hti;
14264   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14265   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14266   HDRR *symhdr = &debug.symbolic_header;
14267   void *mdebug_handle = NULL;
14268   asection *s;
14269   EXTR esym;
14270   unsigned int i;
14271   bfd_size_type amt;
14272   struct mips_elf_link_hash_table *htab;
14273 
14274   static const char * const secname[] =
14275   {
14276     ".text", ".init", ".fini", ".data",
14277     ".rodata", ".sdata", ".sbss", ".bss"
14278   };
14279   static const int sc[] =
14280   {
14281     scText, scInit, scFini, scData,
14282     scRData, scSData, scSBss, scBss
14283   };
14284 
14285   /* Sort the dynamic symbols so that those with GOT entries come after
14286      those without.  */
14287   htab = mips_elf_hash_table (info);
14288   BFD_ASSERT (htab != NULL);
14289 
14290   if (!mips_elf_sort_hash_table (abfd, info))
14291     return FALSE;
14292 
14293   /* Create any scheduled LA25 stubs.  */
14294   hti.info = info;
14295   hti.output_bfd = abfd;
14296   hti.error = FALSE;
14297   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14298   if (hti.error)
14299     return FALSE;
14300 
14301   /* Get a value for the GP register.  */
14302   if (elf_gp (abfd) == 0)
14303     {
14304       struct bfd_link_hash_entry *h;
14305 
14306       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14307       if (h != NULL && h->type == bfd_link_hash_defined)
14308 	elf_gp (abfd) = (h->u.def.value
14309 			 + h->u.def.section->output_section->vma
14310 			 + h->u.def.section->output_offset);
14311       else if (htab->is_vxworks
14312 	       && (h = bfd_link_hash_lookup (info->hash,
14313 					     "_GLOBAL_OFFSET_TABLE_",
14314 					     FALSE, FALSE, TRUE))
14315 	       && h->type == bfd_link_hash_defined)
14316 	elf_gp (abfd) = (h->u.def.section->output_section->vma
14317 			 + h->u.def.section->output_offset
14318 			 + h->u.def.value);
14319       else if (bfd_link_relocatable (info))
14320 	{
14321 	  bfd_vma lo = MINUS_ONE;
14322 
14323 	  /* Find the GP-relative section with the lowest offset.  */
14324 	  for (o = abfd->sections; o != NULL; o = o->next)
14325 	    if (o->vma < lo
14326 		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14327 	      lo = o->vma;
14328 
14329 	  /* And calculate GP relative to that.  */
14330 	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14331 	}
14332       else
14333 	{
14334 	  /* If the relocate_section function needs to do a reloc
14335 	     involving the GP value, it should make a reloc_dangerous
14336 	     callback to warn that GP is not defined.  */
14337 	}
14338     }
14339 
14340   /* Go through the sections and collect the .reginfo and .mdebug
14341      information.  */
14342   abiflags_sec = NULL;
14343   reginfo_sec = NULL;
14344   mdebug_sec = NULL;
14345   gptab_data_sec = NULL;
14346   gptab_bss_sec = NULL;
14347   for (o = abfd->sections; o != NULL; o = o->next)
14348     {
14349       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14350 	{
14351 	  /* We have found the .MIPS.abiflags section in the output file.
14352 	     Look through all the link_orders comprising it and remove them.
14353 	     The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14354 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14355 	    {
14356 	      asection *input_section;
14357 
14358 	      if (p->type != bfd_indirect_link_order)
14359 		{
14360 		  if (p->type == bfd_data_link_order)
14361 		    continue;
14362 		  abort ();
14363 		}
14364 
14365 	      input_section = p->u.indirect.section;
14366 
14367 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14368 		 elf_link_input_bfd ignores this section.  */
14369 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14370 	    }
14371 
14372 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14373 	  BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14374 
14375 	  /* Skip this section later on (I don't think this currently
14376 	     matters, but someday it might).  */
14377 	  o->map_head.link_order = NULL;
14378 
14379 	  abiflags_sec = o;
14380 	}
14381 
14382       if (strcmp (o->name, ".reginfo") == 0)
14383 	{
14384 	  memset (&reginfo, 0, sizeof reginfo);
14385 
14386 	  /* We have found the .reginfo section in the output file.
14387 	     Look through all the link_orders comprising it and merge
14388 	     the information together.  */
14389 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14390 	    {
14391 	      asection *input_section;
14392 	      bfd *input_bfd;
14393 	      Elf32_External_RegInfo ext;
14394 	      Elf32_RegInfo sub;
14395 
14396 	      if (p->type != bfd_indirect_link_order)
14397 		{
14398 		  if (p->type == bfd_data_link_order)
14399 		    continue;
14400 		  abort ();
14401 		}
14402 
14403 	      input_section = p->u.indirect.section;
14404 	      input_bfd = input_section->owner;
14405 
14406 	      if (! bfd_get_section_contents (input_bfd, input_section,
14407 					      &ext, 0, sizeof ext))
14408 		return FALSE;
14409 
14410 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14411 
14412 	      reginfo.ri_gprmask |= sub.ri_gprmask;
14413 	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14414 	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14415 	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14416 	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14417 
14418 	      /* ri_gp_value is set by the function
14419 		 mips_elf32_section_processing when the section is
14420 		 finally written out.  */
14421 
14422 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14423 		 elf_link_input_bfd ignores this section.  */
14424 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14425 	    }
14426 
14427 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14428 	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14429 
14430 	  /* Skip this section later on (I don't think this currently
14431 	     matters, but someday it might).  */
14432 	  o->map_head.link_order = NULL;
14433 
14434 	  reginfo_sec = o;
14435 	}
14436 
14437       if (strcmp (o->name, ".mdebug") == 0)
14438 	{
14439 	  struct extsym_info einfo;
14440 	  bfd_vma last;
14441 
14442 	  /* We have found the .mdebug section in the output file.
14443 	     Look through all the link_orders comprising it and merge
14444 	     the information together.  */
14445 	  symhdr->magic = swap->sym_magic;
14446 	  /* FIXME: What should the version stamp be?  */
14447 	  symhdr->vstamp = 0;
14448 	  symhdr->ilineMax = 0;
14449 	  symhdr->cbLine = 0;
14450 	  symhdr->idnMax = 0;
14451 	  symhdr->ipdMax = 0;
14452 	  symhdr->isymMax = 0;
14453 	  symhdr->ioptMax = 0;
14454 	  symhdr->iauxMax = 0;
14455 	  symhdr->issMax = 0;
14456 	  symhdr->issExtMax = 0;
14457 	  symhdr->ifdMax = 0;
14458 	  symhdr->crfd = 0;
14459 	  symhdr->iextMax = 0;
14460 
14461 	  /* We accumulate the debugging information itself in the
14462 	     debug_info structure.  */
14463 	  debug.line = NULL;
14464 	  debug.external_dnr = NULL;
14465 	  debug.external_pdr = NULL;
14466 	  debug.external_sym = NULL;
14467 	  debug.external_opt = NULL;
14468 	  debug.external_aux = NULL;
14469 	  debug.ss = NULL;
14470 	  debug.ssext = debug.ssext_end = NULL;
14471 	  debug.external_fdr = NULL;
14472 	  debug.external_rfd = NULL;
14473 	  debug.external_ext = debug.external_ext_end = NULL;
14474 
14475 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14476 	  if (mdebug_handle == NULL)
14477 	    return FALSE;
14478 
14479 	  esym.jmptbl = 0;
14480 	  esym.cobol_main = 0;
14481 	  esym.weakext = 0;
14482 	  esym.reserved = 0;
14483 	  esym.ifd = ifdNil;
14484 	  esym.asym.iss = issNil;
14485 	  esym.asym.st = stLocal;
14486 	  esym.asym.reserved = 0;
14487 	  esym.asym.index = indexNil;
14488 	  last = 0;
14489 	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14490 	    {
14491 	      esym.asym.sc = sc[i];
14492 	      s = bfd_get_section_by_name (abfd, secname[i]);
14493 	      if (s != NULL)
14494 		{
14495 		  esym.asym.value = s->vma;
14496 		  last = s->vma + s->size;
14497 		}
14498 	      else
14499 		esym.asym.value = last;
14500 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14501 						 secname[i], &esym))
14502 		return FALSE;
14503 	    }
14504 
14505 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14506 	    {
14507 	      asection *input_section;
14508 	      bfd *input_bfd;
14509 	      const struct ecoff_debug_swap *input_swap;
14510 	      struct ecoff_debug_info input_debug;
14511 	      char *eraw_src;
14512 	      char *eraw_end;
14513 
14514 	      if (p->type != bfd_indirect_link_order)
14515 		{
14516 		  if (p->type == bfd_data_link_order)
14517 		    continue;
14518 		  abort ();
14519 		}
14520 
14521 	      input_section = p->u.indirect.section;
14522 	      input_bfd = input_section->owner;
14523 
14524 	      if (!is_mips_elf (input_bfd))
14525 		{
14526 		  /* I don't know what a non MIPS ELF bfd would be
14527 		     doing with a .mdebug section, but I don't really
14528 		     want to deal with it.  */
14529 		  continue;
14530 		}
14531 
14532 	      input_swap = (get_elf_backend_data (input_bfd)
14533 			    ->elf_backend_ecoff_debug_swap);
14534 
14535 	      BFD_ASSERT (p->size == input_section->size);
14536 
14537 	      /* The ECOFF linking code expects that we have already
14538 		 read in the debugging information and set up an
14539 		 ecoff_debug_info structure, so we do that now.  */
14540 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14541 						   &input_debug))
14542 		return FALSE;
14543 
14544 	      if (! (bfd_ecoff_debug_accumulate
14545 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
14546 		      &input_debug, input_swap, info)))
14547 		return FALSE;
14548 
14549 	      /* Loop through the external symbols.  For each one with
14550 		 interesting information, try to find the symbol in
14551 		 the linker global hash table and save the information
14552 		 for the output external symbols.  */
14553 	      eraw_src = input_debug.external_ext;
14554 	      eraw_end = (eraw_src
14555 			  + (input_debug.symbolic_header.iextMax
14556 			     * input_swap->external_ext_size));
14557 	      for (;
14558 		   eraw_src < eraw_end;
14559 		   eraw_src += input_swap->external_ext_size)
14560 		{
14561 		  EXTR ext;
14562 		  const char *name;
14563 		  struct mips_elf_link_hash_entry *h;
14564 
14565 		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14566 		  if (ext.asym.sc == scNil
14567 		      || ext.asym.sc == scUndefined
14568 		      || ext.asym.sc == scSUndefined)
14569 		    continue;
14570 
14571 		  name = input_debug.ssext + ext.asym.iss;
14572 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14573 						 name, FALSE, FALSE, TRUE);
14574 		  if (h == NULL || h->esym.ifd != -2)
14575 		    continue;
14576 
14577 		  if (ext.ifd != -1)
14578 		    {
14579 		      BFD_ASSERT (ext.ifd
14580 				  < input_debug.symbolic_header.ifdMax);
14581 		      ext.ifd = input_debug.ifdmap[ext.ifd];
14582 		    }
14583 
14584 		  h->esym = ext;
14585 		}
14586 
14587 	      /* Free up the information we just read.  */
14588 	      free (input_debug.line);
14589 	      free (input_debug.external_dnr);
14590 	      free (input_debug.external_pdr);
14591 	      free (input_debug.external_sym);
14592 	      free (input_debug.external_opt);
14593 	      free (input_debug.external_aux);
14594 	      free (input_debug.ss);
14595 	      free (input_debug.ssext);
14596 	      free (input_debug.external_fdr);
14597 	      free (input_debug.external_rfd);
14598 	      free (input_debug.external_ext);
14599 
14600 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14601 		 elf_link_input_bfd ignores this section.  */
14602 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14603 	    }
14604 
14605 	  if (SGI_COMPAT (abfd) && bfd_link_pic (info))
14606 	    {
14607 	      /* Create .rtproc section.  */
14608 	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14609 	      if (rtproc_sec == NULL)
14610 		{
14611 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14612 				    | SEC_LINKER_CREATED | SEC_READONLY);
14613 
14614 		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14615 								   ".rtproc",
14616 								   flags);
14617 		  if (rtproc_sec == NULL
14618 		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14619 		    return FALSE;
14620 		}
14621 
14622 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14623 						     info, rtproc_sec,
14624 						     &debug))
14625 		return FALSE;
14626 	    }
14627 
14628 	  /* Build the external symbol information.  */
14629 	  einfo.abfd = abfd;
14630 	  einfo.info = info;
14631 	  einfo.debug = &debug;
14632 	  einfo.swap = swap;
14633 	  einfo.failed = FALSE;
14634 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14635 				       mips_elf_output_extsym, &einfo);
14636 	  if (einfo.failed)
14637 	    return FALSE;
14638 
14639 	  /* Set the size of the .mdebug section.  */
14640 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14641 
14642 	  /* Skip this section later on (I don't think this currently
14643 	     matters, but someday it might).  */
14644 	  o->map_head.link_order = NULL;
14645 
14646 	  mdebug_sec = o;
14647 	}
14648 
14649       if (CONST_STRNEQ (o->name, ".gptab."))
14650 	{
14651 	  const char *subname;
14652 	  unsigned int c;
14653 	  Elf32_gptab *tab;
14654 	  Elf32_External_gptab *ext_tab;
14655 	  unsigned int j;
14656 
14657 	  /* The .gptab.sdata and .gptab.sbss sections hold
14658 	     information describing how the small data area would
14659 	     change depending upon the -G switch.  These sections
14660 	     not used in executables files.  */
14661 	  if (! bfd_link_relocatable (info))
14662 	    {
14663 	      for (p = o->map_head.link_order; p != NULL; p = p->next)
14664 		{
14665 		  asection *input_section;
14666 
14667 		  if (p->type != bfd_indirect_link_order)
14668 		    {
14669 		      if (p->type == bfd_data_link_order)
14670 			continue;
14671 		      abort ();
14672 		    }
14673 
14674 		  input_section = p->u.indirect.section;
14675 
14676 		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
14677 		     elf_link_input_bfd ignores this section.  */
14678 		  input_section->flags &= ~SEC_HAS_CONTENTS;
14679 		}
14680 
14681 	      /* Skip this section later on (I don't think this
14682 		 currently matters, but someday it might).  */
14683 	      o->map_head.link_order = NULL;
14684 
14685 	      /* Really remove the section.  */
14686 	      bfd_section_list_remove (abfd, o);
14687 	      --abfd->section_count;
14688 
14689 	      continue;
14690 	    }
14691 
14692 	  /* There is one gptab for initialized data, and one for
14693 	     uninitialized data.  */
14694 	  if (strcmp (o->name, ".gptab.sdata") == 0)
14695 	    gptab_data_sec = o;
14696 	  else if (strcmp (o->name, ".gptab.sbss") == 0)
14697 	    gptab_bss_sec = o;
14698 	  else
14699 	    {
14700 	      (*_bfd_error_handler)
14701 		(_("%s: illegal section name `%s'"),
14702 		 bfd_get_filename (abfd), o->name);
14703 	      bfd_set_error (bfd_error_nonrepresentable_section);
14704 	      return FALSE;
14705 	    }
14706 
14707 	  /* The linker script always combines .gptab.data and
14708 	     .gptab.sdata into .gptab.sdata, and likewise for
14709 	     .gptab.bss and .gptab.sbss.  It is possible that there is
14710 	     no .sdata or .sbss section in the output file, in which
14711 	     case we must change the name of the output section.  */
14712 	  subname = o->name + sizeof ".gptab" - 1;
14713 	  if (bfd_get_section_by_name (abfd, subname) == NULL)
14714 	    {
14715 	      if (o == gptab_data_sec)
14716 		o->name = ".gptab.data";
14717 	      else
14718 		o->name = ".gptab.bss";
14719 	      subname = o->name + sizeof ".gptab" - 1;
14720 	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14721 	    }
14722 
14723 	  /* Set up the first entry.  */
14724 	  c = 1;
14725 	  amt = c * sizeof (Elf32_gptab);
14726 	  tab = bfd_malloc (amt);
14727 	  if (tab == NULL)
14728 	    return FALSE;
14729 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14730 	  tab[0].gt_header.gt_unused = 0;
14731 
14732 	  /* Combine the input sections.  */
14733 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14734 	    {
14735 	      asection *input_section;
14736 	      bfd *input_bfd;
14737 	      bfd_size_type size;
14738 	      unsigned long last;
14739 	      bfd_size_type gpentry;
14740 
14741 	      if (p->type != bfd_indirect_link_order)
14742 		{
14743 		  if (p->type == bfd_data_link_order)
14744 		    continue;
14745 		  abort ();
14746 		}
14747 
14748 	      input_section = p->u.indirect.section;
14749 	      input_bfd = input_section->owner;
14750 
14751 	      /* Combine the gptab entries for this input section one
14752 		 by one.  We know that the input gptab entries are
14753 		 sorted by ascending -G value.  */
14754 	      size = input_section->size;
14755 	      last = 0;
14756 	      for (gpentry = sizeof (Elf32_External_gptab);
14757 		   gpentry < size;
14758 		   gpentry += sizeof (Elf32_External_gptab))
14759 		{
14760 		  Elf32_External_gptab ext_gptab;
14761 		  Elf32_gptab int_gptab;
14762 		  unsigned long val;
14763 		  unsigned long add;
14764 		  bfd_boolean exact;
14765 		  unsigned int look;
14766 
14767 		  if (! (bfd_get_section_contents
14768 			 (input_bfd, input_section, &ext_gptab, gpentry,
14769 			  sizeof (Elf32_External_gptab))))
14770 		    {
14771 		      free (tab);
14772 		      return FALSE;
14773 		    }
14774 
14775 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14776 						&int_gptab);
14777 		  val = int_gptab.gt_entry.gt_g_value;
14778 		  add = int_gptab.gt_entry.gt_bytes - last;
14779 
14780 		  exact = FALSE;
14781 		  for (look = 1; look < c; look++)
14782 		    {
14783 		      if (tab[look].gt_entry.gt_g_value >= val)
14784 			tab[look].gt_entry.gt_bytes += add;
14785 
14786 		      if (tab[look].gt_entry.gt_g_value == val)
14787 			exact = TRUE;
14788 		    }
14789 
14790 		  if (! exact)
14791 		    {
14792 		      Elf32_gptab *new_tab;
14793 		      unsigned int max;
14794 
14795 		      /* We need a new table entry.  */
14796 		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14797 		      new_tab = bfd_realloc (tab, amt);
14798 		      if (new_tab == NULL)
14799 			{
14800 			  free (tab);
14801 			  return FALSE;
14802 			}
14803 		      tab = new_tab;
14804 		      tab[c].gt_entry.gt_g_value = val;
14805 		      tab[c].gt_entry.gt_bytes = add;
14806 
14807 		      /* Merge in the size for the next smallest -G
14808 			 value, since that will be implied by this new
14809 			 value.  */
14810 		      max = 0;
14811 		      for (look = 1; look < c; look++)
14812 			{
14813 			  if (tab[look].gt_entry.gt_g_value < val
14814 			      && (max == 0
14815 				  || (tab[look].gt_entry.gt_g_value
14816 				      > tab[max].gt_entry.gt_g_value)))
14817 			    max = look;
14818 			}
14819 		      if (max != 0)
14820 			tab[c].gt_entry.gt_bytes +=
14821 			  tab[max].gt_entry.gt_bytes;
14822 
14823 		      ++c;
14824 		    }
14825 
14826 		  last = int_gptab.gt_entry.gt_bytes;
14827 		}
14828 
14829 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14830 		 elf_link_input_bfd ignores this section.  */
14831 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14832 	    }
14833 
14834 	  /* The table must be sorted by -G value.  */
14835 	  if (c > 2)
14836 	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14837 
14838 	  /* Swap out the table.  */
14839 	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14840 	  ext_tab = bfd_alloc (abfd, amt);
14841 	  if (ext_tab == NULL)
14842 	    {
14843 	      free (tab);
14844 	      return FALSE;
14845 	    }
14846 
14847 	  for (j = 0; j < c; j++)
14848 	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14849 	  free (tab);
14850 
14851 	  o->size = c * sizeof (Elf32_External_gptab);
14852 	  o->contents = (bfd_byte *) ext_tab;
14853 
14854 	  /* Skip this section later on (I don't think this currently
14855 	     matters, but someday it might).  */
14856 	  o->map_head.link_order = NULL;
14857 	}
14858     }
14859 
14860   /* Invoke the regular ELF backend linker to do all the work.  */
14861   if (!bfd_elf_final_link (abfd, info))
14862     return FALSE;
14863 
14864   /* Now write out the computed sections.  */
14865 
14866   if (abiflags_sec != NULL)
14867     {
14868       Elf_External_ABIFlags_v0 ext;
14869       Elf_Internal_ABIFlags_v0 *abiflags;
14870 
14871       abiflags = &mips_elf_tdata (abfd)->abiflags;
14872 
14873       /* Set up the abiflags if no valid input sections were found.  */
14874       if (!mips_elf_tdata (abfd)->abiflags_valid)
14875 	{
14876 	  infer_mips_abiflags (abfd, abiflags);
14877 	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14878 	}
14879       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14880       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14881 	return FALSE;
14882     }
14883 
14884   if (reginfo_sec != NULL)
14885     {
14886       Elf32_External_RegInfo ext;
14887 
14888       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14889       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14890 	return FALSE;
14891     }
14892 
14893   if (mdebug_sec != NULL)
14894     {
14895       BFD_ASSERT (abfd->output_has_begun);
14896       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14897 					       swap, info,
14898 					       mdebug_sec->filepos))
14899 	return FALSE;
14900 
14901       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14902     }
14903 
14904   if (gptab_data_sec != NULL)
14905     {
14906       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14907 				      gptab_data_sec->contents,
14908 				      0, gptab_data_sec->size))
14909 	return FALSE;
14910     }
14911 
14912   if (gptab_bss_sec != NULL)
14913     {
14914       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14915 				      gptab_bss_sec->contents,
14916 				      0, gptab_bss_sec->size))
14917 	return FALSE;
14918     }
14919 
14920   if (SGI_COMPAT (abfd))
14921     {
14922       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14923       if (rtproc_sec != NULL)
14924 	{
14925 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
14926 					  rtproc_sec->contents,
14927 					  0, rtproc_sec->size))
14928 	    return FALSE;
14929 	}
14930     }
14931 
14932   return TRUE;
14933 }
14934 
14935 /* Merge object file header flags from IBFD into OBFD.  Raise an error
14936    if there are conflicting settings.  */
14937 
14938 static bfd_boolean
14939 mips_elf_merge_obj_e_flags (bfd *ibfd, bfd *obfd)
14940 {
14941   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
14942   flagword old_flags;
14943   flagword new_flags;
14944   bfd_boolean ok;
14945 
14946   new_flags = elf_elfheader (ibfd)->e_flags;
14947   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
14948   old_flags = elf_elfheader (obfd)->e_flags;
14949 
14950   /* Check flag compatibility.  */
14951 
14952   new_flags &= ~EF_MIPS_NOREORDER;
14953   old_flags &= ~EF_MIPS_NOREORDER;
14954 
14955   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
14956      doesn't seem to matter.  */
14957   new_flags &= ~EF_MIPS_XGOT;
14958   old_flags &= ~EF_MIPS_XGOT;
14959 
14960   /* MIPSpro generates ucode info in n64 objects.  Again, we should
14961      just be able to ignore this.  */
14962   new_flags &= ~EF_MIPS_UCODE;
14963   old_flags &= ~EF_MIPS_UCODE;
14964 
14965   /* DSOs should only be linked with CPIC code.  */
14966   if ((ibfd->flags & DYNAMIC) != 0)
14967     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
14968 
14969   if (new_flags == old_flags)
14970     return TRUE;
14971 
14972   ok = TRUE;
14973 
14974   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
14975       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
14976     {
14977       (*_bfd_error_handler)
14978 	(_("%B: warning: linking abicalls files with non-abicalls files"),
14979 	 ibfd);
14980       ok = TRUE;
14981     }
14982 
14983   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
14984     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
14985   if (! (new_flags & EF_MIPS_PIC))
14986     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
14987 
14988   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14989   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
14990 
14991   /* Compare the ISAs.  */
14992   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
14993     {
14994       (*_bfd_error_handler)
14995 	(_("%B: linking 32-bit code with 64-bit code"),
14996 	 ibfd);
14997       ok = FALSE;
14998     }
14999   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15000     {
15001       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15002       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15003 	{
15004 	  /* Copy the architecture info from IBFD to OBFD.  Also copy
15005 	     the 32-bit flag (if set) so that we continue to recognise
15006 	     OBFD as a 32-bit binary.  */
15007 	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15008 	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15009 	  elf_elfheader (obfd)->e_flags
15010 	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15011 
15012 	  /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15013 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15014 
15015 	  /* Copy across the ABI flags if OBFD doesn't use them
15016 	     and if that was what caused us to treat IBFD as 32-bit.  */
15017 	  if ((old_flags & EF_MIPS_ABI) == 0
15018 	      && mips_32bit_flags_p (new_flags)
15019 	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15020 	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15021 	}
15022       else
15023 	{
15024 	  /* The ISAs aren't compatible.  */
15025 	  (*_bfd_error_handler)
15026 	    (_("%B: linking %s module with previous %s modules"),
15027 	     ibfd,
15028 	     bfd_printable_name (ibfd),
15029 	     bfd_printable_name (obfd));
15030 	  ok = FALSE;
15031 	}
15032     }
15033 
15034   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15035   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15036 
15037   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15038      does set EI_CLASS differently from any 32-bit ABI.  */
15039   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15040       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15041 	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15042     {
15043       /* Only error if both are set (to different values).  */
15044       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15045 	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15046 	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15047 	{
15048 	  (*_bfd_error_handler)
15049 	    (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15050 	     ibfd,
15051 	     elf_mips_abi_name (ibfd),
15052 	     elf_mips_abi_name (obfd));
15053 	  ok = FALSE;
15054 	}
15055       new_flags &= ~EF_MIPS_ABI;
15056       old_flags &= ~EF_MIPS_ABI;
15057     }
15058 
15059   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15060      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15061   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15062     {
15063       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15064       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15065       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15066       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15067       int micro_mis = old_m16 && new_micro;
15068       int m16_mis = old_micro && new_m16;
15069 
15070       if (m16_mis || micro_mis)
15071 	{
15072 	  (*_bfd_error_handler)
15073 	    (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15074 	     ibfd,
15075 	     m16_mis ? "MIPS16" : "microMIPS",
15076 	     m16_mis ? "microMIPS" : "MIPS16");
15077 	  ok = FALSE;
15078 	}
15079 
15080       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15081 
15082       new_flags &= ~ EF_MIPS_ARCH_ASE;
15083       old_flags &= ~ EF_MIPS_ARCH_ASE;
15084     }
15085 
15086   /* Compare NaN encodings.  */
15087   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15088     {
15089       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15090 			  ibfd,
15091 			  (new_flags & EF_MIPS_NAN2008
15092 			   ? "-mnan=2008" : "-mnan=legacy"),
15093 			  (old_flags & EF_MIPS_NAN2008
15094 			   ? "-mnan=2008" : "-mnan=legacy"));
15095       ok = FALSE;
15096       new_flags &= ~EF_MIPS_NAN2008;
15097       old_flags &= ~EF_MIPS_NAN2008;
15098     }
15099 
15100   /* Compare FP64 state.  */
15101   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15102     {
15103       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15104 			  ibfd,
15105 			  (new_flags & EF_MIPS_FP64
15106 			   ? "-mfp64" : "-mfp32"),
15107 			  (old_flags & EF_MIPS_FP64
15108 			   ? "-mfp64" : "-mfp32"));
15109       ok = FALSE;
15110       new_flags &= ~EF_MIPS_FP64;
15111       old_flags &= ~EF_MIPS_FP64;
15112     }
15113 
15114   /* Warn about any other mismatches */
15115   if (new_flags != old_flags)
15116     {
15117       (*_bfd_error_handler)
15118 	(_("%B: uses different e_flags (0x%lx) fields than previous modules "
15119 	   "(0x%lx)"),
15120 	 ibfd, (unsigned long) new_flags,
15121 	 (unsigned long) old_flags);
15122       ok = FALSE;
15123     }
15124 
15125   return ok;
15126 }
15127 
15128 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15129    there are conflicting attributes.  */
15130 static bfd_boolean
15131 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
15132 {
15133   obj_attribute *in_attr;
15134   obj_attribute *out_attr;
15135   bfd *abi_fp_bfd;
15136   bfd *abi_msa_bfd;
15137 
15138   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15139   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15140   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15141     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15142 
15143   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15144   if (!abi_msa_bfd
15145       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15146     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15147 
15148   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15149     {
15150       /* This is the first object.  Copy the attributes.  */
15151       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15152 
15153       /* Use the Tag_null value to indicate the attributes have been
15154 	 initialized.  */
15155       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15156 
15157       return TRUE;
15158     }
15159 
15160   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15161      non-conflicting ones.  */
15162   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15163   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15164     {
15165       int out_fp, in_fp;
15166 
15167       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15168       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15169       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15170       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15171 	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15172       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15173 	       && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15174 		   || in_fp == Val_GNU_MIPS_ABI_FP_64
15175 		   || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15176 	{
15177 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15178 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15179 	}
15180       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15181 	       && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15182 		   || out_fp == Val_GNU_MIPS_ABI_FP_64
15183 		   || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15184 	/* Keep the current setting.  */;
15185       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15186 	       && in_fp == Val_GNU_MIPS_ABI_FP_64)
15187 	{
15188 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15189 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15190 	}
15191       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15192 	       && out_fp == Val_GNU_MIPS_ABI_FP_64)
15193 	/* Keep the current setting.  */;
15194       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15195 	{
15196 	  const char *out_string, *in_string;
15197 
15198 	  out_string = _bfd_mips_fp_abi_string (out_fp);
15199 	  in_string = _bfd_mips_fp_abi_string (in_fp);
15200 	  /* First warn about cases involving unrecognised ABIs.  */
15201 	  if (!out_string && !in_string)
15202 	    _bfd_error_handler
15203 	      (_("Warning: %B uses unknown floating point ABI %d "
15204 		 "(set by %B), %B uses unknown floating point ABI %d"),
15205 	       obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
15206 	  else if (!out_string)
15207 	    _bfd_error_handler
15208 	      (_("Warning: %B uses unknown floating point ABI %d "
15209 		 "(set by %B), %B uses %s"),
15210 	       obfd, abi_fp_bfd, ibfd, out_fp, in_string);
15211 	  else if (!in_string)
15212 	    _bfd_error_handler
15213 	      (_("Warning: %B uses %s (set by %B), "
15214 		 "%B uses unknown floating point ABI %d"),
15215 	       obfd, abi_fp_bfd, ibfd, out_string, in_fp);
15216 	  else
15217 	    {
15218 	      /* If one of the bfds is soft-float, the other must be
15219 		 hard-float.  The exact choice of hard-float ABI isn't
15220 		 really relevant to the error message.  */
15221 	      if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15222 		out_string = "-mhard-float";
15223 	      else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15224 		in_string = "-mhard-float";
15225 	      _bfd_error_handler
15226 		(_("Warning: %B uses %s (set by %B), %B uses %s"),
15227 		 obfd, abi_fp_bfd, ibfd, out_string, in_string);
15228 	    }
15229 	}
15230     }
15231 
15232   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15233      non-conflicting ones.  */
15234   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15235     {
15236       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15237       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15238 	out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15239       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15240 	switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15241 	  {
15242 	  case Val_GNU_MIPS_ABI_MSA_128:
15243 	    _bfd_error_handler
15244 	      (_("Warning: %B uses %s (set by %B), "
15245 		 "%B uses unknown MSA ABI %d"),
15246 	       obfd, abi_msa_bfd, ibfd,
15247 	       "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15248 	    break;
15249 
15250 	  default:
15251 	    switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15252 	      {
15253 	      case Val_GNU_MIPS_ABI_MSA_128:
15254 		_bfd_error_handler
15255 		  (_("Warning: %B uses unknown MSA ABI %d "
15256 		     "(set by %B), %B uses %s"),
15257 		     obfd, abi_msa_bfd, ibfd,
15258 		     out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
15259 		  break;
15260 
15261 	      default:
15262 		_bfd_error_handler
15263 		  (_("Warning: %B uses unknown MSA ABI %d "
15264 		     "(set by %B), %B uses unknown MSA ABI %d"),
15265 		   obfd, abi_msa_bfd, ibfd,
15266 		   out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15267 		   in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15268 		break;
15269 	      }
15270 	  }
15271     }
15272 
15273   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15274   return _bfd_elf_merge_object_attributes (ibfd, obfd);
15275 }
15276 
15277 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15278    there are conflicting settings.  */
15279 
15280 static bfd_boolean
15281 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15282 {
15283   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15284   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15285   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15286 
15287   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15288   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15289 
15290 #define max(a, b) ((a) > (b) ? (a) : (b))
15291   /* Merge abiflags.  */
15292   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15293 				       in_tdata->abiflags.isa_level);
15294   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15295 				     in_tdata->abiflags.isa_rev);
15296   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15297 				      in_tdata->abiflags.gpr_size);
15298   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15299 				       in_tdata->abiflags.cpr1_size);
15300   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15301 				       in_tdata->abiflags.cpr2_size);
15302 #undef max
15303   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15304   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15305 
15306   return TRUE;
15307 }
15308 
15309 /* Merge backend specific data from an object file to the output
15310    object file when linking.  */
15311 
15312 bfd_boolean
15313 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15314 {
15315   struct mips_elf_obj_tdata *out_tdata;
15316   struct mips_elf_obj_tdata *in_tdata;
15317   bfd_boolean null_input_bfd = TRUE;
15318   asection *sec;
15319   bfd_boolean ok;
15320 
15321   /* Check if we have the same endianness.  */
15322   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15323     {
15324       (*_bfd_error_handler)
15325 	(_("%B: endianness incompatible with that of the selected emulation"),
15326 	 ibfd);
15327       return FALSE;
15328     }
15329 
15330   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15331     return TRUE;
15332 
15333   in_tdata = mips_elf_tdata (ibfd);
15334   out_tdata = mips_elf_tdata (obfd);
15335 
15336   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15337     {
15338       (*_bfd_error_handler)
15339 	(_("%B: ABI is incompatible with that of the selected emulation"),
15340 	 ibfd);
15341       return FALSE;
15342     }
15343 
15344   /* Check to see if the input BFD actually contains any sections.  If not,
15345      then it has no attributes, and its flags may not have been initialized
15346      either, but it cannot actually cause any incompatibility.  */
15347   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15348     {
15349       /* Ignore synthetic sections and empty .text, .data and .bss sections
15350 	 which are automatically generated by gas.  Also ignore fake
15351 	 (s)common sections, since merely defining a common symbol does
15352 	 not affect compatibility.  */
15353       if ((sec->flags & SEC_IS_COMMON) == 0
15354 	  && strcmp (sec->name, ".reginfo")
15355 	  && strcmp (sec->name, ".mdebug")
15356 	  && (sec->size != 0
15357 	      || (strcmp (sec->name, ".text")
15358 		  && strcmp (sec->name, ".data")
15359 		  && strcmp (sec->name, ".bss"))))
15360 	{
15361 	  null_input_bfd = FALSE;
15362 	  break;
15363 	}
15364     }
15365   if (null_input_bfd)
15366     return TRUE;
15367 
15368   /* Populate abiflags using existing information.  */
15369   if (in_tdata->abiflags_valid)
15370     {
15371       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15372       Elf_Internal_ABIFlags_v0 in_abiflags;
15373       Elf_Internal_ABIFlags_v0 abiflags;
15374 
15375       /* Set up the FP ABI attribute from the abiflags if it is not already
15376          set.  */
15377       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15378         in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15379 
15380       infer_mips_abiflags (ibfd, &abiflags);
15381       in_abiflags = in_tdata->abiflags;
15382 
15383       /* It is not possible to infer the correct ISA revision
15384          for R3 or R5 so drop down to R2 for the checks.  */
15385       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15386 	in_abiflags.isa_rev = 2;
15387 
15388       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15389 	  < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15390 	(*_bfd_error_handler)
15391 	  (_("%B: warning: Inconsistent ISA between e_flags and "
15392 	     ".MIPS.abiflags"), ibfd);
15393       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15394 	  && in_abiflags.fp_abi != abiflags.fp_abi)
15395 	(*_bfd_error_handler)
15396 	  (_("%B: warning: Inconsistent FP ABI between .gnu.attributes and "
15397 	     ".MIPS.abiflags"), ibfd);
15398       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15399 	(*_bfd_error_handler)
15400 	  (_("%B: warning: Inconsistent ASEs between e_flags and "
15401 	     ".MIPS.abiflags"), ibfd);
15402       /* The isa_ext is allowed to be an extension of what can be inferred
15403 	 from e_flags.  */
15404       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15405 				bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15406 	(*_bfd_error_handler)
15407 	  (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15408 	     ".MIPS.abiflags"), ibfd);
15409       if (in_abiflags.flags2 != 0)
15410 	(*_bfd_error_handler)
15411 	  (_("%B: warning: Unexpected flag in the flags2 field of "
15412 	     ".MIPS.abiflags (0x%lx)"), ibfd,
15413 	   (unsigned long) in_abiflags.flags2);
15414     }
15415   else
15416     {
15417       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15418       in_tdata->abiflags_valid = TRUE;
15419     }
15420 
15421   if (!out_tdata->abiflags_valid)
15422     {
15423       /* Copy input abiflags if output abiflags are not already valid.  */
15424       out_tdata->abiflags = in_tdata->abiflags;
15425       out_tdata->abiflags_valid = TRUE;
15426     }
15427 
15428   if (! elf_flags_init (obfd))
15429     {
15430       elf_flags_init (obfd) = TRUE;
15431       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15432       elf_elfheader (obfd)->e_ident[EI_CLASS]
15433 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
15434 
15435       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15436 	  && (bfd_get_arch_info (obfd)->the_default
15437 	      || mips_mach_extends_p (bfd_get_mach (obfd),
15438 				      bfd_get_mach (ibfd))))
15439 	{
15440 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15441 				   bfd_get_mach (ibfd)))
15442 	    return FALSE;
15443 
15444 	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15445 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15446 	}
15447 
15448       ok = TRUE;
15449     }
15450   else
15451     ok = mips_elf_merge_obj_e_flags (ibfd, obfd);
15452 
15453   ok = mips_elf_merge_obj_attributes (ibfd, obfd) && ok;
15454 
15455   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15456 
15457   if (!ok)
15458     {
15459       bfd_set_error (bfd_error_bad_value);
15460       return FALSE;
15461     }
15462 
15463   return TRUE;
15464 }
15465 
15466 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15467 
15468 bfd_boolean
15469 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15470 {
15471   BFD_ASSERT (!elf_flags_init (abfd)
15472 	      || elf_elfheader (abfd)->e_flags == flags);
15473 
15474   elf_elfheader (abfd)->e_flags = flags;
15475   elf_flags_init (abfd) = TRUE;
15476   return TRUE;
15477 }
15478 
15479 char *
15480 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15481 {
15482   switch (dtag)
15483     {
15484     default: return "";
15485     case DT_MIPS_RLD_VERSION:
15486       return "MIPS_RLD_VERSION";
15487     case DT_MIPS_TIME_STAMP:
15488       return "MIPS_TIME_STAMP";
15489     case DT_MIPS_ICHECKSUM:
15490       return "MIPS_ICHECKSUM";
15491     case DT_MIPS_IVERSION:
15492       return "MIPS_IVERSION";
15493     case DT_MIPS_FLAGS:
15494       return "MIPS_FLAGS";
15495     case DT_MIPS_BASE_ADDRESS:
15496       return "MIPS_BASE_ADDRESS";
15497     case DT_MIPS_MSYM:
15498       return "MIPS_MSYM";
15499     case DT_MIPS_CONFLICT:
15500       return "MIPS_CONFLICT";
15501     case DT_MIPS_LIBLIST:
15502       return "MIPS_LIBLIST";
15503     case DT_MIPS_LOCAL_GOTNO:
15504       return "MIPS_LOCAL_GOTNO";
15505     case DT_MIPS_CONFLICTNO:
15506       return "MIPS_CONFLICTNO";
15507     case DT_MIPS_LIBLISTNO:
15508       return "MIPS_LIBLISTNO";
15509     case DT_MIPS_SYMTABNO:
15510       return "MIPS_SYMTABNO";
15511     case DT_MIPS_UNREFEXTNO:
15512       return "MIPS_UNREFEXTNO";
15513     case DT_MIPS_GOTSYM:
15514       return "MIPS_GOTSYM";
15515     case DT_MIPS_HIPAGENO:
15516       return "MIPS_HIPAGENO";
15517     case DT_MIPS_RLD_MAP:
15518       return "MIPS_RLD_MAP";
15519     case DT_MIPS_RLD_MAP_REL:
15520       return "MIPS_RLD_MAP_REL";
15521     case DT_MIPS_DELTA_CLASS:
15522       return "MIPS_DELTA_CLASS";
15523     case DT_MIPS_DELTA_CLASS_NO:
15524       return "MIPS_DELTA_CLASS_NO";
15525     case DT_MIPS_DELTA_INSTANCE:
15526       return "MIPS_DELTA_INSTANCE";
15527     case DT_MIPS_DELTA_INSTANCE_NO:
15528       return "MIPS_DELTA_INSTANCE_NO";
15529     case DT_MIPS_DELTA_RELOC:
15530       return "MIPS_DELTA_RELOC";
15531     case DT_MIPS_DELTA_RELOC_NO:
15532       return "MIPS_DELTA_RELOC_NO";
15533     case DT_MIPS_DELTA_SYM:
15534       return "MIPS_DELTA_SYM";
15535     case DT_MIPS_DELTA_SYM_NO:
15536       return "MIPS_DELTA_SYM_NO";
15537     case DT_MIPS_DELTA_CLASSSYM:
15538       return "MIPS_DELTA_CLASSSYM";
15539     case DT_MIPS_DELTA_CLASSSYM_NO:
15540       return "MIPS_DELTA_CLASSSYM_NO";
15541     case DT_MIPS_CXX_FLAGS:
15542       return "MIPS_CXX_FLAGS";
15543     case DT_MIPS_PIXIE_INIT:
15544       return "MIPS_PIXIE_INIT";
15545     case DT_MIPS_SYMBOL_LIB:
15546       return "MIPS_SYMBOL_LIB";
15547     case DT_MIPS_LOCALPAGE_GOTIDX:
15548       return "MIPS_LOCALPAGE_GOTIDX";
15549     case DT_MIPS_LOCAL_GOTIDX:
15550       return "MIPS_LOCAL_GOTIDX";
15551     case DT_MIPS_HIDDEN_GOTIDX:
15552       return "MIPS_HIDDEN_GOTIDX";
15553     case DT_MIPS_PROTECTED_GOTIDX:
15554       return "MIPS_PROTECTED_GOT_IDX";
15555     case DT_MIPS_OPTIONS:
15556       return "MIPS_OPTIONS";
15557     case DT_MIPS_INTERFACE:
15558       return "MIPS_INTERFACE";
15559     case DT_MIPS_DYNSTR_ALIGN:
15560       return "DT_MIPS_DYNSTR_ALIGN";
15561     case DT_MIPS_INTERFACE_SIZE:
15562       return "DT_MIPS_INTERFACE_SIZE";
15563     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15564       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15565     case DT_MIPS_PERF_SUFFIX:
15566       return "DT_MIPS_PERF_SUFFIX";
15567     case DT_MIPS_COMPACT_SIZE:
15568       return "DT_MIPS_COMPACT_SIZE";
15569     case DT_MIPS_GP_VALUE:
15570       return "DT_MIPS_GP_VALUE";
15571     case DT_MIPS_AUX_DYNAMIC:
15572       return "DT_MIPS_AUX_DYNAMIC";
15573     case DT_MIPS_PLTGOT:
15574       return "DT_MIPS_PLTGOT";
15575     case DT_MIPS_RWPLT:
15576       return "DT_MIPS_RWPLT";
15577     }
15578 }
15579 
15580 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15581    not known.  */
15582 
15583 const char *
15584 _bfd_mips_fp_abi_string (int fp)
15585 {
15586   switch (fp)
15587     {
15588       /* These strings aren't translated because they're simply
15589 	 option lists.  */
15590     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15591       return "-mdouble-float";
15592 
15593     case Val_GNU_MIPS_ABI_FP_SINGLE:
15594       return "-msingle-float";
15595 
15596     case Val_GNU_MIPS_ABI_FP_SOFT:
15597       return "-msoft-float";
15598 
15599     case Val_GNU_MIPS_ABI_FP_OLD_64:
15600       return _("-mips32r2 -mfp64 (12 callee-saved)");
15601 
15602     case Val_GNU_MIPS_ABI_FP_XX:
15603       return "-mfpxx";
15604 
15605     case Val_GNU_MIPS_ABI_FP_64:
15606       return "-mgp32 -mfp64";
15607 
15608     case Val_GNU_MIPS_ABI_FP_64A:
15609       return "-mgp32 -mfp64 -mno-odd-spreg";
15610 
15611     default:
15612       return 0;
15613     }
15614 }
15615 
15616 static void
15617 print_mips_ases (FILE *file, unsigned int mask)
15618 {
15619   if (mask & AFL_ASE_DSP)
15620     fputs ("\n\tDSP ASE", file);
15621   if (mask & AFL_ASE_DSPR2)
15622     fputs ("\n\tDSP R2 ASE", file);
15623   if (mask & AFL_ASE_DSPR3)
15624     fputs ("\n\tDSP R3 ASE", file);
15625   if (mask & AFL_ASE_EVA)
15626     fputs ("\n\tEnhanced VA Scheme", file);
15627   if (mask & AFL_ASE_MCU)
15628     fputs ("\n\tMCU (MicroController) ASE", file);
15629   if (mask & AFL_ASE_MDMX)
15630     fputs ("\n\tMDMX ASE", file);
15631   if (mask & AFL_ASE_MIPS3D)
15632     fputs ("\n\tMIPS-3D ASE", file);
15633   if (mask & AFL_ASE_MT)
15634     fputs ("\n\tMT ASE", file);
15635   if (mask & AFL_ASE_SMARTMIPS)
15636     fputs ("\n\tSmartMIPS ASE", file);
15637   if (mask & AFL_ASE_VIRT)
15638     fputs ("\n\tVZ ASE", file);
15639   if (mask & AFL_ASE_MSA)
15640     fputs ("\n\tMSA ASE", file);
15641   if (mask & AFL_ASE_MIPS16)
15642     fputs ("\n\tMIPS16 ASE", file);
15643   if (mask & AFL_ASE_MICROMIPS)
15644     fputs ("\n\tMICROMIPS ASE", file);
15645   if (mask & AFL_ASE_XPA)
15646     fputs ("\n\tXPA ASE", file);
15647   if (mask == 0)
15648     fprintf (file, "\n\t%s", _("None"));
15649   else if ((mask & ~AFL_ASE_MASK) != 0)
15650     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15651 }
15652 
15653 static void
15654 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15655 {
15656   switch (isa_ext)
15657     {
15658     case 0:
15659       fputs (_("None"), file);
15660       break;
15661     case AFL_EXT_XLR:
15662       fputs ("RMI XLR", file);
15663       break;
15664     case AFL_EXT_OCTEON3:
15665       fputs ("Cavium Networks Octeon3", file);
15666       break;
15667     case AFL_EXT_OCTEON2:
15668       fputs ("Cavium Networks Octeon2", file);
15669       break;
15670     case AFL_EXT_OCTEONP:
15671       fputs ("Cavium Networks OcteonP", file);
15672       break;
15673     case AFL_EXT_LOONGSON_3A:
15674       fputs ("Loongson 3A", file);
15675       break;
15676     case AFL_EXT_OCTEON:
15677       fputs ("Cavium Networks Octeon", file);
15678       break;
15679     case AFL_EXT_5900:
15680       fputs ("Toshiba R5900", file);
15681       break;
15682     case AFL_EXT_4650:
15683       fputs ("MIPS R4650", file);
15684       break;
15685     case AFL_EXT_4010:
15686       fputs ("LSI R4010", file);
15687       break;
15688     case AFL_EXT_4100:
15689       fputs ("NEC VR4100", file);
15690       break;
15691     case AFL_EXT_3900:
15692       fputs ("Toshiba R3900", file);
15693       break;
15694     case AFL_EXT_10000:
15695       fputs ("MIPS R10000", file);
15696       break;
15697     case AFL_EXT_SB1:
15698       fputs ("Broadcom SB-1", file);
15699       break;
15700     case AFL_EXT_4111:
15701       fputs ("NEC VR4111/VR4181", file);
15702       break;
15703     case AFL_EXT_4120:
15704       fputs ("NEC VR4120", file);
15705       break;
15706     case AFL_EXT_5400:
15707       fputs ("NEC VR5400", file);
15708       break;
15709     case AFL_EXT_5500:
15710       fputs ("NEC VR5500", file);
15711       break;
15712     case AFL_EXT_LOONGSON_2E:
15713       fputs ("ST Microelectronics Loongson 2E", file);
15714       break;
15715     case AFL_EXT_LOONGSON_2F:
15716       fputs ("ST Microelectronics Loongson 2F", file);
15717       break;
15718     default:
15719       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15720       break;
15721     }
15722 }
15723 
15724 static void
15725 print_mips_fp_abi_value (FILE *file, int val)
15726 {
15727   switch (val)
15728     {
15729     case Val_GNU_MIPS_ABI_FP_ANY:
15730       fprintf (file, _("Hard or soft float\n"));
15731       break;
15732     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15733       fprintf (file, _("Hard float (double precision)\n"));
15734       break;
15735     case Val_GNU_MIPS_ABI_FP_SINGLE:
15736       fprintf (file, _("Hard float (single precision)\n"));
15737       break;
15738     case Val_GNU_MIPS_ABI_FP_SOFT:
15739       fprintf (file, _("Soft float\n"));
15740       break;
15741     case Val_GNU_MIPS_ABI_FP_OLD_64:
15742       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15743       break;
15744     case Val_GNU_MIPS_ABI_FP_XX:
15745       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15746       break;
15747     case Val_GNU_MIPS_ABI_FP_64:
15748       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15749       break;
15750     case Val_GNU_MIPS_ABI_FP_64A:
15751       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15752       break;
15753     default:
15754       fprintf (file, "??? (%d)\n", val);
15755       break;
15756     }
15757 }
15758 
15759 static int
15760 get_mips_reg_size (int reg_size)
15761 {
15762   return (reg_size == AFL_REG_NONE) ? 0
15763 	 : (reg_size == AFL_REG_32) ? 32
15764 	 : (reg_size == AFL_REG_64) ? 64
15765 	 : (reg_size == AFL_REG_128) ? 128
15766 	 : -1;
15767 }
15768 
15769 bfd_boolean
15770 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15771 {
15772   FILE *file = ptr;
15773 
15774   BFD_ASSERT (abfd != NULL && ptr != NULL);
15775 
15776   /* Print normal ELF private data.  */
15777   _bfd_elf_print_private_bfd_data (abfd, ptr);
15778 
15779   /* xgettext:c-format */
15780   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15781 
15782   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15783     fprintf (file, _(" [abi=O32]"));
15784   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15785     fprintf (file, _(" [abi=O64]"));
15786   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15787     fprintf (file, _(" [abi=EABI32]"));
15788   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15789     fprintf (file, _(" [abi=EABI64]"));
15790   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15791     fprintf (file, _(" [abi unknown]"));
15792   else if (ABI_N32_P (abfd))
15793     fprintf (file, _(" [abi=N32]"));
15794   else if (ABI_64_P (abfd))
15795     fprintf (file, _(" [abi=64]"));
15796   else
15797     fprintf (file, _(" [no abi set]"));
15798 
15799   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15800     fprintf (file, " [mips1]");
15801   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15802     fprintf (file, " [mips2]");
15803   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15804     fprintf (file, " [mips3]");
15805   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15806     fprintf (file, " [mips4]");
15807   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15808     fprintf (file, " [mips5]");
15809   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15810     fprintf (file, " [mips32]");
15811   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15812     fprintf (file, " [mips64]");
15813   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15814     fprintf (file, " [mips32r2]");
15815   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15816     fprintf (file, " [mips64r2]");
15817   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15818     fprintf (file, " [mips32r6]");
15819   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15820     fprintf (file, " [mips64r6]");
15821   else
15822     fprintf (file, _(" [unknown ISA]"));
15823 
15824   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15825     fprintf (file, " [mdmx]");
15826 
15827   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15828     fprintf (file, " [mips16]");
15829 
15830   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15831     fprintf (file, " [micromips]");
15832 
15833   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15834     fprintf (file, " [nan2008]");
15835 
15836   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15837     fprintf (file, " [old fp64]");
15838 
15839   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15840     fprintf (file, " [32bitmode]");
15841   else
15842     fprintf (file, _(" [not 32bitmode]"));
15843 
15844   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15845     fprintf (file, " [noreorder]");
15846 
15847   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15848     fprintf (file, " [PIC]");
15849 
15850   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15851     fprintf (file, " [CPIC]");
15852 
15853   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15854     fprintf (file, " [XGOT]");
15855 
15856   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15857     fprintf (file, " [UCODE]");
15858 
15859   fputc ('\n', file);
15860 
15861   if (mips_elf_tdata (abfd)->abiflags_valid)
15862     {
15863       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15864       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15865       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15866       if (abiflags->isa_rev > 1)
15867 	fprintf (file, "r%d", abiflags->isa_rev);
15868       fprintf (file, "\nGPR size: %d",
15869 	       get_mips_reg_size (abiflags->gpr_size));
15870       fprintf (file, "\nCPR1 size: %d",
15871 	       get_mips_reg_size (abiflags->cpr1_size));
15872       fprintf (file, "\nCPR2 size: %d",
15873 	       get_mips_reg_size (abiflags->cpr2_size));
15874       fputs ("\nFP ABI: ", file);
15875       print_mips_fp_abi_value (file, abiflags->fp_abi);
15876       fputs ("ISA Extension: ", file);
15877       print_mips_isa_ext (file, abiflags->isa_ext);
15878       fputs ("\nASEs:", file);
15879       print_mips_ases (file, abiflags->ases);
15880       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15881       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15882       fputc ('\n', file);
15883     }
15884 
15885   return TRUE;
15886 }
15887 
15888 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15889 {
15890   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15891   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15892   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15893   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15894   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15895   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15896   { NULL,                     0,  0, 0,              0 }
15897 };
15898 
15899 /* Merge non visibility st_other attributes.  Ensure that the
15900    STO_OPTIONAL flag is copied into h->other, even if this is not a
15901    definiton of the symbol.  */
15902 void
15903 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15904 				      const Elf_Internal_Sym *isym,
15905 				      bfd_boolean definition,
15906 				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
15907 {
15908   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15909     {
15910       unsigned char other;
15911 
15912       other = (definition ? isym->st_other : h->other);
15913       other &= ~ELF_ST_VISIBILITY (-1);
15914       h->other = other | ELF_ST_VISIBILITY (h->other);
15915     }
15916 
15917   if (!definition
15918       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15919     h->other |= STO_OPTIONAL;
15920 }
15921 
15922 /* Decide whether an undefined symbol is special and can be ignored.
15923    This is the case for OPTIONAL symbols on IRIX.  */
15924 bfd_boolean
15925 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15926 {
15927   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15928 }
15929 
15930 bfd_boolean
15931 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15932 {
15933   return (sym->st_shndx == SHN_COMMON
15934 	  || sym->st_shndx == SHN_MIPS_ACOMMON
15935 	  || sym->st_shndx == SHN_MIPS_SCOMMON);
15936 }
15937 
15938 /* Return address for Ith PLT stub in section PLT, for relocation REL
15939    or (bfd_vma) -1 if it should not be included.  */
15940 
15941 bfd_vma
15942 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15943 			   const arelent *rel ATTRIBUTE_UNUSED)
15944 {
15945   return (plt->vma
15946 	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15947 	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15948 }
15949 
15950 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15951    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15952    and .got.plt and also the slots may be of a different size each we walk
15953    the PLT manually fetching instructions and matching them against known
15954    patterns.  To make things easier standard MIPS slots, if any, always come
15955    first.  As we don't create proper ELF symbols we use the UDATA.I member
15956    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15957    with the ST_OTHER member of the ELF symbol.  */
15958 
15959 long
15960 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15961 				    long symcount ATTRIBUTE_UNUSED,
15962 				    asymbol **syms ATTRIBUTE_UNUSED,
15963 				    long dynsymcount, asymbol **dynsyms,
15964 				    asymbol **ret)
15965 {
15966   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15967   static const char microsuffix[] = "@micromipsplt";
15968   static const char m16suffix[] = "@mips16plt";
15969   static const char mipssuffix[] = "@plt";
15970 
15971   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15972   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15973   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15974   Elf_Internal_Shdr *hdr;
15975   bfd_byte *plt_data;
15976   bfd_vma plt_offset;
15977   unsigned int other;
15978   bfd_vma entry_size;
15979   bfd_vma plt0_size;
15980   asection *relplt;
15981   bfd_vma opcode;
15982   asection *plt;
15983   asymbol *send;
15984   size_t size;
15985   char *names;
15986   long counti;
15987   arelent *p;
15988   asymbol *s;
15989   char *nend;
15990   long count;
15991   long pi;
15992   long i;
15993   long n;
15994 
15995   *ret = NULL;
15996 
15997   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15998     return 0;
15999 
16000   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16001   if (relplt == NULL)
16002     return 0;
16003 
16004   hdr = &elf_section_data (relplt)->this_hdr;
16005   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16006     return 0;
16007 
16008   plt = bfd_get_section_by_name (abfd, ".plt");
16009   if (plt == NULL)
16010     return 0;
16011 
16012   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16013   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16014     return -1;
16015   p = relplt->relocation;
16016 
16017   /* Calculating the exact amount of space required for symbols would
16018      require two passes over the PLT, so just pessimise assuming two
16019      PLT slots per relocation.  */
16020   count = relplt->size / hdr->sh_entsize;
16021   counti = count * bed->s->int_rels_per_ext_rel;
16022   size = 2 * count * sizeof (asymbol);
16023   size += count * (sizeof (mipssuffix) +
16024 		   (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16025   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16026     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16027 
16028   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16029   size += sizeof (asymbol) + sizeof (pltname);
16030 
16031   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16032     return -1;
16033 
16034   if (plt->size < 16)
16035     return -1;
16036 
16037   s = *ret = bfd_malloc (size);
16038   if (s == NULL)
16039     return -1;
16040   send = s + 2 * count + 1;
16041 
16042   names = (char *) send;
16043   nend = (char *) s + size;
16044   n = 0;
16045 
16046   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16047   if (opcode == 0x3302fffe)
16048     {
16049       if (!micromips_p)
16050 	return -1;
16051       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16052       other = STO_MICROMIPS;
16053     }
16054   else if (opcode == 0x0398c1d0)
16055     {
16056       if (!micromips_p)
16057 	return -1;
16058       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16059       other = STO_MICROMIPS;
16060     }
16061   else
16062     {
16063       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16064       other = 0;
16065     }
16066 
16067   s->the_bfd = abfd;
16068   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16069   s->section = plt;
16070   s->value = 0;
16071   s->name = names;
16072   s->udata.i = other;
16073   memcpy (names, pltname, sizeof (pltname));
16074   names += sizeof (pltname);
16075   ++s, ++n;
16076 
16077   pi = 0;
16078   for (plt_offset = plt0_size;
16079        plt_offset + 8 <= plt->size && s < send;
16080        plt_offset += entry_size)
16081     {
16082       bfd_vma gotplt_addr;
16083       const char *suffix;
16084       bfd_vma gotplt_hi;
16085       bfd_vma gotplt_lo;
16086       size_t suffixlen;
16087 
16088       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16089 
16090       /* Check if the second word matches the expected MIPS16 instruction.  */
16091       if (opcode == 0x651aeb00)
16092 	{
16093 	  if (micromips_p)
16094 	    return -1;
16095 	  /* Truncated table???  */
16096 	  if (plt_offset + 16 > plt->size)
16097 	    break;
16098 	  gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16099 	  entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16100 	  suffixlen = sizeof (m16suffix);
16101 	  suffix = m16suffix;
16102 	  other = STO_MIPS16;
16103 	}
16104       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16105       else if (opcode == 0xff220000)
16106 	{
16107 	  if (!micromips_p)
16108 	    return -1;
16109 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16110 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16111 	  gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16112 	  gotplt_lo <<= 2;
16113 	  gotplt_addr = gotplt_hi + gotplt_lo;
16114 	  gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16115 	  entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16116 	  suffixlen = sizeof (microsuffix);
16117 	  suffix = microsuffix;
16118 	  other = STO_MICROMIPS;
16119 	}
16120       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16121       else if ((opcode & 0xffff0000) == 0xff2f0000)
16122 	{
16123 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16124 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16125 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16126 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16127 	  gotplt_addr = gotplt_hi + gotplt_lo;
16128 	  entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16129 	  suffixlen = sizeof (microsuffix);
16130 	  suffix = microsuffix;
16131 	  other = STO_MICROMIPS;
16132 	}
16133       /* Otherwise assume standard MIPS code.  */
16134       else
16135 	{
16136 	  gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16137 	  gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16138 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16139 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16140 	  gotplt_addr = gotplt_hi + gotplt_lo;
16141 	  entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16142 	  suffixlen = sizeof (mipssuffix);
16143 	  suffix = mipssuffix;
16144 	  other = 0;
16145 	}
16146       /* Truncated table???  */
16147       if (plt_offset + entry_size > plt->size)
16148 	break;
16149 
16150       for (i = 0;
16151 	   i < count && p[pi].address != gotplt_addr;
16152 	   i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16153 
16154       if (i < count)
16155 	{
16156 	  size_t namelen;
16157 	  size_t len;
16158 
16159 	  *s = **p[pi].sym_ptr_ptr;
16160 	  /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16161 	     we are defining a symbol, ensure one of them is set.  */
16162 	  if ((s->flags & BSF_LOCAL) == 0)
16163 	    s->flags |= BSF_GLOBAL;
16164 	  s->flags |= BSF_SYNTHETIC;
16165 	  s->section = plt;
16166 	  s->value = plt_offset;
16167 	  s->name = names;
16168 	  s->udata.i = other;
16169 
16170 	  len = strlen ((*p[pi].sym_ptr_ptr)->name);
16171 	  namelen = len + suffixlen;
16172 	  if (names + namelen > nend)
16173 	    break;
16174 
16175 	  memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16176 	  names += len;
16177 	  memcpy (names, suffix, suffixlen);
16178 	  names += suffixlen;
16179 
16180 	  ++s, ++n;
16181 	  pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16182 	}
16183     }
16184 
16185   free (plt_data);
16186 
16187   return n;
16188 }
16189 
16190 void
16191 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16192 {
16193   struct mips_elf_link_hash_table *htab;
16194   Elf_Internal_Ehdr *i_ehdrp;
16195 
16196   i_ehdrp = elf_elfheader (abfd);
16197   if (link_info)
16198     {
16199       htab = mips_elf_hash_table (link_info);
16200       BFD_ASSERT (htab != NULL);
16201 
16202       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16203 	i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16204     }
16205 
16206   _bfd_elf_post_process_headers (abfd, link_info);
16207 
16208   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16209       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16210     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16211 
16212   if (elf_stack_flags (abfd) && !(elf_stack_flags (abfd) & PF_X))
16213     i_ehdrp->e_ident[EI_ABIVERSION] = 5;
16214 }
16215 
16216 int
16217 _bfd_mips_elf_compact_eh_encoding (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16218 {
16219   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16220 }
16221 
16222 /* Return the opcode for can't unwind.  */
16223 
16224 int
16225 _bfd_mips_elf_cant_unwind_opcode (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16226 {
16227   return COMPACT_EH_CANT_UNWIND_OPCODE;
16228 }
16229