xref: /netbsd-src/external/gpl3/binutils/dist/bfd/elfxx-mips.c (revision 2718af68c3efc72c9769069b5c7f9ed36f6b9def)
1 /* MIPS-specific support for ELF
2    Copyright (C) 1993-2020 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 "ecoff-bfd.h"
37 #include "elfxx-mips.h"
38 #include "elf/mips.h"
39 #include "elf-vxworks.h"
40 #include "dwarf2.h"
41 
42 /* Get the ECOFF swapping routines.  */
43 #include "coff/sym.h"
44 #include "coff/symconst.h"
45 #include "coff/ecoff.h"
46 #include "coff/mips.h"
47 
48 #include "hashtab.h"
49 
50 /* Types of TLS GOT entry.  */
51 enum mips_got_tls_type {
52   GOT_TLS_NONE,
53   GOT_TLS_GD,
54   GOT_TLS_LDM,
55   GOT_TLS_IE
56 };
57 
58 /* This structure is used to hold information about one GOT entry.
59    There are four types of entry:
60 
61       (1) an absolute address
62 	    requires: abfd == NULL
63 	    fields: d.address
64 
65       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
66 	    requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
67 	    fields: abfd, symndx, d.addend, tls_type
68 
69       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
70 	    requires: abfd != NULL, symndx == -1
71 	    fields: d.h, tls_type
72 
73       (4) a TLS LDM slot
74 	    requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
75 	    fields: none; there's only one of these per GOT.  */
76 struct mips_got_entry
77 {
78   /* One input bfd that needs the GOT entry.  */
79   bfd *abfd;
80   /* The index of the symbol, as stored in the relocation r_info, if
81      we have a local symbol; -1 otherwise.  */
82   long symndx;
83   union
84   {
85     /* If abfd == NULL, an address that must be stored in the got.  */
86     bfd_vma address;
87     /* If abfd != NULL && symndx != -1, the addend of the relocation
88        that should be added to the symbol value.  */
89     bfd_vma addend;
90     /* If abfd != NULL && symndx == -1, the hash table entry
91        corresponding to a symbol in the GOT.  The symbol's entry
92        is in the local area if h->global_got_area is GGA_NONE,
93        otherwise it is in the global area.  */
94     struct mips_elf_link_hash_entry *h;
95   } d;
96 
97   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
98      symbol entry with r_symndx == 0.  */
99   unsigned char tls_type;
100 
101   /* True if we have filled in the GOT contents for a TLS entry,
102      and created the associated relocations.  */
103   unsigned char tls_initialized;
104 
105   /* The offset from the beginning of the .got section to the entry
106      corresponding to this symbol+addend.  If it's a global symbol
107      whose offset is yet to be decided, it's going to be -1.  */
108   long gotidx;
109 };
110 
111 /* This structure represents a GOT page reference from an input bfd.
112    Each instance represents a symbol + ADDEND, where the representation
113    of the symbol depends on whether it is local to the input bfd.
114    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
115    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
116 
117    Page references with SYMNDX >= 0 always become page references
118    in the output.  Page references with SYMNDX < 0 only become page
119    references if the symbol binds locally; in other cases, the page
120    reference decays to a global GOT reference.  */
121 struct mips_got_page_ref
122 {
123   long symndx;
124   union
125   {
126     struct mips_elf_link_hash_entry *h;
127     bfd *abfd;
128   } u;
129   bfd_vma addend;
130 };
131 
132 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
133    The structures form a non-overlapping list that is sorted by increasing
134    MIN_ADDEND.  */
135 struct mips_got_page_range
136 {
137   struct mips_got_page_range *next;
138   bfd_signed_vma min_addend;
139   bfd_signed_vma max_addend;
140 };
141 
142 /* This structure describes the range of addends that are applied to page
143    relocations against a given section.  */
144 struct mips_got_page_entry
145 {
146   /* The section that these entries are based on.  */
147   asection *sec;
148   /* The ranges for this page entry.  */
149   struct mips_got_page_range *ranges;
150   /* The maximum number of page entries needed for RANGES.  */
151   bfd_vma num_pages;
152 };
153 
154 /* This structure is used to hold .got information when linking.  */
155 
156 struct mips_got_info
157 {
158   /* The number of global .got entries.  */
159   unsigned int global_gotno;
160   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
161   unsigned int reloc_only_gotno;
162   /* The number of .got slots used for TLS.  */
163   unsigned int tls_gotno;
164   /* The first unused TLS .got entry.  Used only during
165      mips_elf_initialize_tls_index.  */
166   unsigned int tls_assigned_gotno;
167   /* The number of local .got entries, eventually including page entries.  */
168   unsigned int local_gotno;
169   /* The maximum number of page entries needed.  */
170   unsigned int page_gotno;
171   /* The number of relocations needed for the GOT entries.  */
172   unsigned int relocs;
173   /* The first unused local .got entry.  */
174   unsigned int assigned_low_gotno;
175   /* The last unused local .got entry.  */
176   unsigned int assigned_high_gotno;
177   /* A hash table holding members of the got.  */
178   struct htab *got_entries;
179   /* A hash table holding mips_got_page_ref structures.  */
180   struct htab *got_page_refs;
181   /* A hash table of mips_got_page_entry structures.  */
182   struct htab *got_page_entries;
183   /* In multi-got links, a pointer to the next got (err, rather, most
184      of the time, it points to the previous got).  */
185   struct mips_got_info *next;
186 };
187 
188 /* Structure passed when merging bfds' gots.  */
189 
190 struct mips_elf_got_per_bfd_arg
191 {
192   /* The output bfd.  */
193   bfd *obfd;
194   /* The link information.  */
195   struct bfd_link_info *info;
196   /* A pointer to the primary got, i.e., the one that's going to get
197      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
198      DT_MIPS_GOTSYM.  */
199   struct mips_got_info *primary;
200   /* A non-primary got we're trying to merge with other input bfd's
201      gots.  */
202   struct mips_got_info *current;
203   /* The maximum number of got entries that can be addressed with a
204      16-bit offset.  */
205   unsigned int max_count;
206   /* The maximum number of page entries needed by each got.  */
207   unsigned int max_pages;
208   /* The total number of global entries which will live in the
209      primary got and be automatically relocated.  This includes
210      those not referenced by the primary GOT but included in
211      the "master" GOT.  */
212   unsigned int global_count;
213 };
214 
215 /* A structure used to pass information to htab_traverse callbacks
216    when laying out the GOT.  */
217 
218 struct mips_elf_traverse_got_arg
219 {
220   struct bfd_link_info *info;
221   struct mips_got_info *g;
222   int value;
223 };
224 
225 struct _mips_elf_section_data
226 {
227   struct bfd_elf_section_data elf;
228   union
229   {
230     bfd_byte *tdata;
231   } u;
232 };
233 
234 #define mips_elf_section_data(sec) \
235   ((struct _mips_elf_section_data *) elf_section_data (sec))
236 
237 #define is_mips_elf(bfd)				\
238   (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
239    && elf_tdata (bfd) != NULL				\
240    && elf_object_id (bfd) == MIPS_ELF_DATA)
241 
242 /* The ABI says that every symbol used by dynamic relocations must have
243    a global GOT entry.  Among other things, this provides the dynamic
244    linker with a free, directly-indexed cache.  The GOT can therefore
245    contain symbols that are not referenced by GOT relocations themselves
246    (in other words, it may have symbols that are not referenced by things
247    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
248 
249    GOT relocations are less likely to overflow if we put the associated
250    GOT entries towards the beginning.  We therefore divide the global
251    GOT entries into two areas: "normal" and "reloc-only".  Entries in
252    the first area can be used for both dynamic relocations and GP-relative
253    accesses, while those in the "reloc-only" area are for dynamic
254    relocations only.
255 
256    These GGA_* ("Global GOT Area") values are organised so that lower
257    values are more general than higher values.  Also, non-GGA_NONE
258    values are ordered by the position of the area in the GOT.  */
259 #define GGA_NORMAL 0
260 #define GGA_RELOC_ONLY 1
261 #define GGA_NONE 2
262 
263 /* Information about a non-PIC interface to a PIC function.  There are
264    two ways of creating these interfaces.  The first is to add:
265 
266 	lui	$25,%hi(func)
267 	addiu	$25,$25,%lo(func)
268 
269    immediately before a PIC function "func".  The second is to add:
270 
271 	lui	$25,%hi(func)
272 	j	func
273 	addiu	$25,$25,%lo(func)
274 
275    to a separate trampoline section.
276 
277    Stubs of the first kind go in a new section immediately before the
278    target function.  Stubs of the second kind go in a single section
279    pointed to by the hash table's "strampoline" field.  */
280 struct mips_elf_la25_stub {
281   /* The generated section that contains this stub.  */
282   asection *stub_section;
283 
284   /* The offset of the stub from the start of STUB_SECTION.  */
285   bfd_vma offset;
286 
287   /* One symbol for the original function.  Its location is available
288      in H->root.root.u.def.  */
289   struct mips_elf_link_hash_entry *h;
290 };
291 
292 /* Macros for populating a mips_elf_la25_stub.  */
293 
294 #define LA25_LUI(VAL) (0x3c190000 | (VAL))	/* lui t9,VAL */
295 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
296 #define LA25_BC(VAL) (0xc8000000 | (((VAL) >> 2) & 0x3ffffff)) /* bc VAL */
297 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))	/* addiu t9,t9,VAL */
298 #define LA25_LUI_MICROMIPS(VAL)						\
299   (0x41b90000 | (VAL))				/* lui t9,VAL */
300 #define LA25_J_MICROMIPS(VAL)						\
301   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))	/* j VAL */
302 #define LA25_ADDIU_MICROMIPS(VAL)					\
303   (0x33390000 | (VAL))				/* addiu t9,t9,VAL */
304 
305 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
306    the dynamic symbols.  */
307 
308 struct mips_elf_hash_sort_data
309 {
310   /* The symbol in the global GOT with the lowest dynamic symbol table
311      index.  */
312   struct elf_link_hash_entry *low;
313   /* The least dynamic symbol table index corresponding to a non-TLS
314      symbol with a GOT entry.  */
315   bfd_size_type min_got_dynindx;
316   /* The greatest dynamic symbol table index corresponding to a symbol
317      with a GOT entry that is not referenced (e.g., a dynamic symbol
318      with dynamic relocations pointing to it from non-primary GOTs).  */
319   bfd_size_type max_unref_got_dynindx;
320   /* The greatest dynamic symbol table index corresponding to a local
321      symbol.  */
322   bfd_size_type max_local_dynindx;
323   /* The greatest dynamic symbol table index corresponding to an external
324      symbol without a GOT entry.  */
325   bfd_size_type max_non_got_dynindx;
326   /* If non-NULL, output BFD for .MIPS.xhash finalization.  */
327   bfd *output_bfd;
328   /* If non-NULL, pointer to contents of .MIPS.xhash for filling in
329      real final dynindx.  */
330   bfd_byte *mipsxhash;
331 };
332 
333 /* We make up to two PLT entries if needed, one for standard MIPS code
334    and one for compressed code, either a MIPS16 or microMIPS one.  We
335    keep a separate record of traditional lazy-binding stubs, for easier
336    processing.  */
337 
338 struct plt_entry
339 {
340   /* Traditional SVR4 stub offset, or -1 if none.  */
341   bfd_vma stub_offset;
342 
343   /* Standard PLT entry offset, or -1 if none.  */
344   bfd_vma mips_offset;
345 
346   /* Compressed PLT entry offset, or -1 if none.  */
347   bfd_vma comp_offset;
348 
349   /* The corresponding .got.plt index, or -1 if none.  */
350   bfd_vma gotplt_index;
351 
352   /* Whether we need a standard PLT entry.  */
353   unsigned int need_mips : 1;
354 
355   /* Whether we need a compressed PLT entry.  */
356   unsigned int need_comp : 1;
357 };
358 
359 /* The MIPS ELF linker needs additional information for each symbol in
360    the global hash table.  */
361 
362 struct mips_elf_link_hash_entry
363 {
364   struct elf_link_hash_entry root;
365 
366   /* External symbol information.  */
367   EXTR esym;
368 
369   /* The la25 stub we have created for ths symbol, if any.  */
370   struct mips_elf_la25_stub *la25_stub;
371 
372   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
373      this symbol.  */
374   unsigned int possibly_dynamic_relocs;
375 
376   /* If there is a stub that 32 bit functions should use to call this
377      16 bit function, this points to the section containing the stub.  */
378   asection *fn_stub;
379 
380   /* If there is a stub that 16 bit functions should use to call this
381      32 bit function, this points to the section containing the stub.  */
382   asection *call_stub;
383 
384   /* This is like the call_stub field, but it is used if the function
385      being called returns a floating point value.  */
386   asection *call_fp_stub;
387 
388   /* If non-zero, location in .MIPS.xhash to write real final dynindx.  */
389   bfd_vma mipsxhash_loc;
390 
391   /* The highest GGA_* value that satisfies all references to this symbol.  */
392   unsigned int global_got_area : 2;
393 
394   /* True if all GOT relocations against this symbol are for calls.  This is
395      a looser condition than no_fn_stub below, because there may be other
396      non-call non-GOT relocations against the symbol.  */
397   unsigned int got_only_for_calls : 1;
398 
399   /* True if one of the relocations described by possibly_dynamic_relocs
400      is against a readonly section.  */
401   unsigned int readonly_reloc : 1;
402 
403   /* True if there is a relocation against this symbol that must be
404      resolved by the static linker (in other words, if the relocation
405      cannot possibly be made dynamic).  */
406   unsigned int has_static_relocs : 1;
407 
408   /* True if we must not create a .MIPS.stubs entry for this symbol.
409      This is set, for example, if there are relocations related to
410      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
411      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
412   unsigned int no_fn_stub : 1;
413 
414   /* Whether we need the fn_stub; this is true if this symbol appears
415      in any relocs other than a 16 bit call.  */
416   unsigned int need_fn_stub : 1;
417 
418   /* True if this symbol is referenced by branch relocations from
419      any non-PIC input file.  This is used to determine whether an
420      la25 stub is required.  */
421   unsigned int has_nonpic_branches : 1;
422 
423   /* Does this symbol need a traditional MIPS lazy-binding stub
424      (as opposed to a PLT entry)?  */
425   unsigned int needs_lazy_stub : 1;
426 
427   /* Does this symbol resolve to a PLT entry?  */
428   unsigned int use_plt_entry : 1;
429 };
430 
431 /* MIPS ELF linker hash table.  */
432 
433 struct mips_elf_link_hash_table
434 {
435   struct elf_link_hash_table root;
436 
437   /* The number of .rtproc entries.  */
438   bfd_size_type procedure_count;
439 
440   /* The size of the .compact_rel section (if SGI_COMPAT).  */
441   bfd_size_type compact_rel_size;
442 
443   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
444      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
445   bfd_boolean use_rld_obj_head;
446 
447   /* The  __rld_map or __rld_obj_head symbol. */
448   struct elf_link_hash_entry *rld_symbol;
449 
450   /* This is set if we see any mips16 stub sections.  */
451   bfd_boolean mips16_stubs_seen;
452 
453   /* True if we can generate copy relocs and PLTs.  */
454   bfd_boolean use_plts_and_copy_relocs;
455 
456   /* True if we can only use 32-bit microMIPS instructions.  */
457   bfd_boolean insn32;
458 
459   /* True if we suppress checks for invalid branches between ISA modes.  */
460   bfd_boolean ignore_branch_isa;
461 
462   /* True if we are targetting R6 compact branches.  */
463   bfd_boolean compact_branches;
464 
465   /* True if we're generating code for VxWorks.  */
466   bfd_boolean is_vxworks;
467 
468   /* True if we already reported the small-data section overflow.  */
469   bfd_boolean small_data_overflow_reported;
470 
471   /* True if we use the special `__gnu_absolute_zero' symbol.  */
472   bfd_boolean use_absolute_zero;
473 
474   /* True if we have been configured for a GNU target.  */
475   bfd_boolean gnu_target;
476 
477   /* Shortcuts to some dynamic sections, or NULL if they are not
478      being used.  */
479   asection *srelplt2;
480   asection *sstubs;
481 
482   /* The master GOT information.  */
483   struct mips_got_info *got_info;
484 
485   /* The global symbol in the GOT with the lowest index in the dynamic
486      symbol table.  */
487   struct elf_link_hash_entry *global_gotsym;
488 
489   /* The size of the PLT header in bytes.  */
490   bfd_vma plt_header_size;
491 
492   /* The size of a standard PLT entry in bytes.  */
493   bfd_vma plt_mips_entry_size;
494 
495   /* The size of a compressed PLT entry in bytes.  */
496   bfd_vma plt_comp_entry_size;
497 
498   /* The offset of the next standard PLT entry to create.  */
499   bfd_vma plt_mips_offset;
500 
501   /* The offset of the next compressed PLT entry to create.  */
502   bfd_vma plt_comp_offset;
503 
504   /* The index of the next .got.plt entry to create.  */
505   bfd_vma plt_got_index;
506 
507   /* The number of functions that need a lazy-binding stub.  */
508   bfd_vma lazy_stub_count;
509 
510   /* The size of a function stub entry in bytes.  */
511   bfd_vma function_stub_size;
512 
513   /* The number of reserved entries at the beginning of the GOT.  */
514   unsigned int reserved_gotno;
515 
516   /* The section used for mips_elf_la25_stub trampolines.
517      See the comment above that structure for details.  */
518   asection *strampoline;
519 
520   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
521      pairs.  */
522   htab_t la25_stubs;
523 
524   /* A function FN (NAME, IS, OS) that creates a new input section
525      called NAME and links it to output section OS.  If IS is nonnull,
526      the new section should go immediately before it, otherwise it
527      should go at the (current) beginning of OS.
528 
529      The function returns the new section on success, otherwise it
530      returns null.  */
531   asection *(*add_stub_section) (const char *, asection *, asection *);
532 
533   /* Small local sym cache.  */
534   struct sym_cache sym_cache;
535 
536   /* Is the PLT header compressed?  */
537   unsigned int plt_header_is_comp : 1;
538 };
539 
540 /* Get the MIPS ELF linker hash table from a link_info structure.  */
541 
542 #define mips_elf_hash_table(p) \
543   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
544   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
545 
546 /* A structure used to communicate with htab_traverse callbacks.  */
547 struct mips_htab_traverse_info
548 {
549   /* The usual link-wide information.  */
550   struct bfd_link_info *info;
551   bfd *output_bfd;
552 
553   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
554   bfd_boolean error;
555 };
556 
557 /* MIPS ELF private object data.  */
558 
559 struct mips_elf_obj_tdata
560 {
561   /* Generic ELF private object data.  */
562   struct elf_obj_tdata root;
563 
564   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
565   bfd *abi_fp_bfd;
566 
567   /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
568   bfd *abi_msa_bfd;
569 
570   /* The abiflags for this object.  */
571   Elf_Internal_ABIFlags_v0 abiflags;
572   bfd_boolean abiflags_valid;
573 
574   /* The GOT requirements of input bfds.  */
575   struct mips_got_info *got;
576 
577   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
578      included directly in this one, but there's no point to wasting
579      the memory just for the infrequently called find_nearest_line.  */
580   struct mips_elf_find_line *find_line_info;
581 
582   /* An array of stub sections indexed by symbol number.  */
583   asection **local_stubs;
584   asection **local_call_stubs;
585 
586   /* The Irix 5 support uses two virtual sections, which represent
587      text/data symbols defined in dynamic objects.  */
588   asymbol *elf_data_symbol;
589   asymbol *elf_text_symbol;
590   asection *elf_data_section;
591   asection *elf_text_section;
592 };
593 
594 /* Get MIPS ELF private object data from BFD's tdata.  */
595 
596 #define mips_elf_tdata(bfd) \
597   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
598 
599 #define TLS_RELOC_P(r_type) \
600   (r_type == R_MIPS_TLS_DTPMOD32		\
601    || r_type == R_MIPS_TLS_DTPMOD64		\
602    || r_type == R_MIPS_TLS_DTPREL32		\
603    || r_type == R_MIPS_TLS_DTPREL64		\
604    || r_type == R_MIPS_TLS_GD			\
605    || r_type == R_MIPS_TLS_LDM			\
606    || r_type == R_MIPS_TLS_DTPREL_HI16		\
607    || r_type == R_MIPS_TLS_DTPREL_LO16		\
608    || r_type == R_MIPS_TLS_GOTTPREL		\
609    || r_type == R_MIPS_TLS_TPREL32		\
610    || r_type == R_MIPS_TLS_TPREL64		\
611    || r_type == R_MIPS_TLS_TPREL_HI16		\
612    || r_type == R_MIPS_TLS_TPREL_LO16		\
613    || r_type == R_MIPS16_TLS_GD			\
614    || r_type == R_MIPS16_TLS_LDM		\
615    || r_type == R_MIPS16_TLS_DTPREL_HI16	\
616    || r_type == R_MIPS16_TLS_DTPREL_LO16	\
617    || r_type == R_MIPS16_TLS_GOTTPREL		\
618    || r_type == R_MIPS16_TLS_TPREL_HI16		\
619    || r_type == R_MIPS16_TLS_TPREL_LO16		\
620    || r_type == R_MICROMIPS_TLS_GD		\
621    || r_type == R_MICROMIPS_TLS_LDM		\
622    || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
623    || r_type == R_MICROMIPS_TLS_DTPREL_LO16	\
624    || r_type == R_MICROMIPS_TLS_GOTTPREL	\
625    || r_type == R_MICROMIPS_TLS_TPREL_HI16	\
626    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
627 
628 /* Structure used to pass information to mips_elf_output_extsym.  */
629 
630 struct extsym_info
631 {
632   bfd *abfd;
633   struct bfd_link_info *info;
634   struct ecoff_debug_info *debug;
635   const struct ecoff_debug_swap *swap;
636   bfd_boolean failed;
637 };
638 
639 /* The names of the runtime procedure table symbols used on IRIX5.  */
640 
641 static const char * const mips_elf_dynsym_rtproc_names[] =
642 {
643   "_procedure_table",
644   "_procedure_string_table",
645   "_procedure_table_size",
646   NULL
647 };
648 
649 /* These structures are used to generate the .compact_rel section on
650    IRIX5.  */
651 
652 typedef struct
653 {
654   unsigned long id1;		/* Always one?  */
655   unsigned long num;		/* Number of compact relocation entries.  */
656   unsigned long id2;		/* Always two?  */
657   unsigned long offset;		/* The file offset of the first relocation.  */
658   unsigned long reserved0;	/* Zero?  */
659   unsigned long reserved1;	/* Zero?  */
660 } Elf32_compact_rel;
661 
662 typedef struct
663 {
664   bfd_byte id1[4];
665   bfd_byte num[4];
666   bfd_byte id2[4];
667   bfd_byte offset[4];
668   bfd_byte reserved0[4];
669   bfd_byte reserved1[4];
670 } Elf32_External_compact_rel;
671 
672 typedef struct
673 {
674   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
675   unsigned int rtype : 4;	/* Relocation types. See below.  */
676   unsigned int dist2to : 8;
677   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
678   unsigned long konst;		/* KONST field. See below.  */
679   unsigned long vaddr;		/* VADDR to be relocated.  */
680 } Elf32_crinfo;
681 
682 typedef struct
683 {
684   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
685   unsigned int rtype : 4;	/* Relocation types. See below.  */
686   unsigned int dist2to : 8;
687   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
688   unsigned long konst;		/* KONST field. See below.  */
689 } Elf32_crinfo2;
690 
691 typedef struct
692 {
693   bfd_byte info[4];
694   bfd_byte konst[4];
695   bfd_byte vaddr[4];
696 } Elf32_External_crinfo;
697 
698 typedef struct
699 {
700   bfd_byte info[4];
701   bfd_byte konst[4];
702 } Elf32_External_crinfo2;
703 
704 /* These are the constants used to swap the bitfields in a crinfo.  */
705 
706 #define CRINFO_CTYPE (0x1)
707 #define CRINFO_CTYPE_SH (31)
708 #define CRINFO_RTYPE (0xf)
709 #define CRINFO_RTYPE_SH (27)
710 #define CRINFO_DIST2TO (0xff)
711 #define CRINFO_DIST2TO_SH (19)
712 #define CRINFO_RELVADDR (0x7ffff)
713 #define CRINFO_RELVADDR_SH (0)
714 
715 /* A compact relocation info has long (3 words) or short (2 words)
716    formats.  A short format doesn't have VADDR field and relvaddr
717    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
718 #define CRF_MIPS_LONG			1
719 #define CRF_MIPS_SHORT			0
720 
721 /* There are 4 types of compact relocation at least. The value KONST
722    has different meaning for each type:
723 
724    (type)		(konst)
725    CT_MIPS_REL32	Address in data
726    CT_MIPS_WORD		Address in word (XXX)
727    CT_MIPS_GPHI_LO	GP - vaddr
728    CT_MIPS_JMPAD	Address to jump
729    */
730 
731 #define CRT_MIPS_REL32			0xa
732 #define CRT_MIPS_WORD			0xb
733 #define CRT_MIPS_GPHI_LO		0xc
734 #define CRT_MIPS_JMPAD			0xd
735 
736 #define mips_elf_set_cr_format(x,format)	((x).ctype = (format))
737 #define mips_elf_set_cr_type(x,type)		((x).rtype = (type))
738 #define mips_elf_set_cr_dist2to(x,v)		((x).dist2to = (v))
739 #define mips_elf_set_cr_relvaddr(x,d)		((x).relvaddr = (d)<<2)
740 
741 /* The structure of the runtime procedure descriptor created by the
742    loader for use by the static exception system.  */
743 
744 typedef struct runtime_pdr {
745 	bfd_vma	adr;		/* Memory address of start of procedure.  */
746 	long	regmask;	/* Save register mask.  */
747 	long	regoffset;	/* Save register offset.  */
748 	long	fregmask;	/* Save floating point register mask.  */
749 	long	fregoffset;	/* Save floating point register offset.  */
750 	long	frameoffset;	/* Frame size.  */
751 	short	framereg;	/* Frame pointer register.  */
752 	short	pcreg;		/* Offset or reg of return pc.  */
753 	long	irpss;		/* Index into the runtime string table.  */
754 	long	reserved;
755 	struct exception_info *exception_info;/* Pointer to exception array.  */
756 } RPDR, *pRPDR;
757 #define cbRPDR sizeof (RPDR)
758 #define rpdNil ((pRPDR) 0)
759 
760 static struct mips_got_entry *mips_elf_create_local_got_entry
761   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
762    struct mips_elf_link_hash_entry *, int);
763 static bfd_boolean mips_elf_sort_hash_table_f
764   (struct mips_elf_link_hash_entry *, void *);
765 static bfd_vma mips_elf_high
766   (bfd_vma);
767 static bfd_boolean mips_elf_create_dynamic_relocation
768   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
769    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
770    bfd_vma *, asection *);
771 static bfd_vma mips_elf_adjust_gp
772   (bfd *, struct mips_got_info *, bfd *);
773 
774 /* This will be used when we sort the dynamic relocation records.  */
775 static bfd *reldyn_sorting_bfd;
776 
777 /* True if ABFD is for CPUs with load interlocking that include
778    non-MIPS1 CPUs and R3900.  */
779 #define LOAD_INTERLOCKS_P(abfd) \
780   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
781    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
782 
783 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
784    This should be safe for all architectures.  We enable this predicate
785    for RM9000 for now.  */
786 #define JAL_TO_BAL_P(abfd) \
787   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
788 
789 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
790    This should be safe for all architectures.  We enable this predicate for
791    all CPUs.  */
792 #define JALR_TO_BAL_P(abfd) 1
793 
794 /* True if ABFD is for CPUs that are faster if JR is converted to B.
795    This should be safe for all architectures.  We enable this predicate for
796    all CPUs.  */
797 #define JR_TO_B_P(abfd) 1
798 
799 /* True if ABFD is a PIC object.  */
800 #define PIC_OBJECT_P(abfd) \
801   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
802 
803 /* Nonzero if ABFD is using the O32 ABI.  */
804 #define ABI_O32_P(abfd) \
805   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
806 
807 /* Nonzero if ABFD is using the N32 ABI.  */
808 #define ABI_N32_P(abfd) \
809   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
810 
811 /* Nonzero if ABFD is using the N64 ABI.  */
812 #define ABI_64_P(abfd) \
813   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
814 
815 /* Nonzero if ABFD is using NewABI conventions.  */
816 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
817 
818 /* Nonzero if ABFD has microMIPS code.  */
819 #define MICROMIPS_P(abfd) \
820   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
821 
822 /* Nonzero if ABFD is MIPS R6.  */
823 #define MIPSR6_P(abfd) \
824   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
825     || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
826 
827 /* The IRIX compatibility level we are striving for.  */
828 #define IRIX_COMPAT(abfd) \
829   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
830 
831 /* Whether we are trying to be compatible with IRIX at all.  */
832 #define SGI_COMPAT(abfd) \
833   (IRIX_COMPAT (abfd) != ict_none)
834 
835 /* The name of the options section.  */
836 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
837   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
838 
839 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
840    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
841 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
842   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
843 
844 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
845 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
846   (strcmp (NAME, ".MIPS.abiflags") == 0)
847 
848 /* Whether the section is readonly.  */
849 #define MIPS_ELF_READONLY_SECTION(sec) \
850   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))		\
851    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
852 
853 /* The name of the stub section.  */
854 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
855 
856 /* The size of an external REL relocation.  */
857 #define MIPS_ELF_REL_SIZE(abfd) \
858   (get_elf_backend_data (abfd)->s->sizeof_rel)
859 
860 /* The size of an external RELA relocation.  */
861 #define MIPS_ELF_RELA_SIZE(abfd) \
862   (get_elf_backend_data (abfd)->s->sizeof_rela)
863 
864 /* The size of an external dynamic table entry.  */
865 #define MIPS_ELF_DYN_SIZE(abfd) \
866   (get_elf_backend_data (abfd)->s->sizeof_dyn)
867 
868 /* The size of a GOT entry.  */
869 #define MIPS_ELF_GOT_SIZE(abfd) \
870   (get_elf_backend_data (abfd)->s->arch_size / 8)
871 
872 /* The size of the .rld_map section. */
873 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
874   (get_elf_backend_data (abfd)->s->arch_size / 8)
875 
876 /* The size of a symbol-table entry.  */
877 #define MIPS_ELF_SYM_SIZE(abfd) \
878   (get_elf_backend_data (abfd)->s->sizeof_sym)
879 
880 /* The default alignment for sections, as a power of two.  */
881 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)				\
882   (get_elf_backend_data (abfd)->s->log_file_align)
883 
884 /* Get word-sized data.  */
885 #define MIPS_ELF_GET_WORD(abfd, ptr) \
886   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
887 
888 /* Put out word-sized data.  */
889 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)	\
890   (ABI_64_P (abfd)				\
891    ? bfd_put_64 (abfd, val, ptr)		\
892    : bfd_put_32 (abfd, val, ptr))
893 
894 /* The opcode for word-sized loads (LW or LD).  */
895 #define MIPS_ELF_LOAD_WORD(abfd) \
896   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
897 
898 /* Add a dynamic symbol table-entry.  */
899 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)	\
900   _bfd_elf_add_dynamic_entry (info, tag, val)
901 
902 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)			\
903   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (abfd, rtype, rela))
904 
905 /* The name of the dynamic relocation section.  */
906 #define MIPS_ELF_REL_DYN_NAME(INFO) \
907   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
908 
909 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
910    from smaller values.  Start with zero, widen, *then* decrement.  */
911 #define MINUS_ONE	(((bfd_vma)0) - 1)
912 #define MINUS_TWO	(((bfd_vma)0) - 2)
913 
914 /* The value to write into got[1] for SVR4 targets, to identify it is
915    a GNU object.  The dynamic linker can then use got[1] to store the
916    module pointer.  */
917 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
918   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
919 
920 /* The offset of $gp from the beginning of the .got section.  */
921 #define ELF_MIPS_GP_OFFSET(INFO) \
922   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
923 
924 /* The maximum size of the GOT for it to be addressable using 16-bit
925    offsets from $gp.  */
926 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
927 
928 /* Instructions which appear in a stub.  */
929 #define STUB_LW(abfd)							\
930   ((ABI_64_P (abfd)							\
931     ? 0xdf998010				/* ld t9,0x8010(gp) */	\
932     : 0x8f998010))				/* lw t9,0x8010(gp) */
933 #define STUB_MOVE 0x03e07825			/* or t7,ra,zero */
934 #define STUB_LUI(VAL) (0x3c180000 + (VAL))	/* lui t8,VAL */
935 #define STUB_JALR 0x0320f809			/* jalr ra,t9 */
936 #define STUB_JALRC 0xf8190000			/* jalrc ra,t9 */
937 #define STUB_ORI(VAL) (0x37180000 + (VAL))	/* ori t8,t8,VAL */
938 #define STUB_LI16U(VAL) (0x34180000 + (VAL))	/* ori t8,zero,VAL unsigned */
939 #define STUB_LI16S(abfd, VAL)						\
940    ((ABI_64_P (abfd)							\
941     ? (0x64180000 + (VAL))	/* daddiu t8,zero,VAL sign extended */	\
942     : (0x24180000 + (VAL))))	/* addiu t8,zero,VAL sign extended */
943 
944 /* Likewise for the microMIPS ASE.  */
945 #define STUB_LW_MICROMIPS(abfd)						\
946   (ABI_64_P (abfd)							\
947    ? 0xdf3c8010					/* ld t9,0x8010(gp) */	\
948    : 0xff3c8010)				/* lw t9,0x8010(gp) */
949 #define STUB_MOVE_MICROMIPS 0x0dff		/* move t7,ra */
950 #define STUB_MOVE32_MICROMIPS 0x001f7a90	/* or t7,ra,zero */
951 #define STUB_LUI_MICROMIPS(VAL)						\
952    (0x41b80000 + (VAL))				/* lui t8,VAL */
953 #define STUB_JALR_MICROMIPS 0x45d9		/* jalr t9 */
954 #define STUB_JALR32_MICROMIPS 0x03f90f3c	/* jalr ra,t9 */
955 #define STUB_ORI_MICROMIPS(VAL)						\
956   (0x53180000 + (VAL))				/* ori t8,t8,VAL */
957 #define STUB_LI16U_MICROMIPS(VAL)					\
958   (0x53000000 + (VAL))				/* ori t8,zero,VAL unsigned */
959 #define STUB_LI16S_MICROMIPS(abfd, VAL)					\
960    (ABI_64_P (abfd)							\
961     ? 0x5f000000 + (VAL)	/* daddiu t8,zero,VAL sign extended */	\
962     : 0x33000000 + (VAL))	/* addiu t8,zero,VAL sign extended */
963 
964 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
965 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
966 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
967 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
968 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
969 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
970 
971 /* The name of the dynamic interpreter.  This is put in the .interp
972    section.  */
973 
974 #define ELF_DYNAMIC_INTERPRETER(abfd)		\
975    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1"	\
976     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1"	\
977     : "/usr/lib/libc.so.1")
978 
979 #ifdef BFD64
980 #define MNAME(bfd,pre,pos) \
981   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
982 #define ELF_R_SYM(bfd, i)					\
983   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
984 #define ELF_R_TYPE(bfd, i)					\
985   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
986 #define ELF_R_INFO(bfd, s, t)					\
987   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
988 #else
989 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
990 #define ELF_R_SYM(bfd, i)					\
991   (ELF32_R_SYM (i))
992 #define ELF_R_TYPE(bfd, i)					\
993   (ELF32_R_TYPE (i))
994 #define ELF_R_INFO(bfd, s, t)					\
995   (ELF32_R_INFO (s, t))
996 #endif
997 
998   /* The mips16 compiler uses a couple of special sections to handle
999      floating point arguments.
1000 
1001      Section names that look like .mips16.fn.FNNAME contain stubs that
1002      copy floating point arguments from the fp regs to the gp regs and
1003      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
1004      call should be redirected to the stub instead.  If no 32 bit
1005      function calls FNNAME, the stub should be discarded.  We need to
1006      consider any reference to the function, not just a call, because
1007      if the address of the function is taken we will need the stub,
1008      since the address might be passed to a 32 bit function.
1009 
1010      Section names that look like .mips16.call.FNNAME contain stubs
1011      that copy floating point arguments from the gp regs to the fp
1012      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
1013      then any 16 bit function that calls FNNAME should be redirected
1014      to the stub instead.  If FNNAME is not a 32 bit function, the
1015      stub should be discarded.
1016 
1017      .mips16.call.fp.FNNAME sections are similar, but contain stubs
1018      which call FNNAME and then copy the return value from the fp regs
1019      to the gp regs.  These stubs store the return value in $18 while
1020      calling FNNAME; any function which might call one of these stubs
1021      must arrange to save $18 around the call.  (This case is not
1022      needed for 32 bit functions that call 16 bit functions, because
1023      16 bit functions always return floating point values in both
1024      $f0/$f1 and $2/$3.)
1025 
1026      Note that in all cases FNNAME might be defined statically.
1027      Therefore, FNNAME is not used literally.  Instead, the relocation
1028      information will indicate which symbol the section is for.
1029 
1030      We record any stubs that we find in the symbol table.  */
1031 
1032 #define FN_STUB ".mips16.fn."
1033 #define CALL_STUB ".mips16.call."
1034 #define CALL_FP_STUB ".mips16.call.fp."
1035 
1036 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1037 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1038 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1039 
1040 /* The format of the first PLT entry in an O32 executable.  */
1041 static const bfd_vma mips_o32_exec_plt0_entry[] =
1042 {
1043   0x3c1c0000,	/* lui $28, %hi(&GOTPLT[0])				*/
1044   0x8f990000,	/* lw $25, %lo(&GOTPLT[0])($28)				*/
1045   0x279c0000,	/* addiu $28, $28, %lo(&GOTPLT[0])			*/
1046   0x031cc023,	/* subu $24, $24, $28					*/
1047   0x03e07825,	/* or t7, ra, zero					*/
1048   0x0018c082,	/* srl $24, $24, 2					*/
1049   0x0320f809,	/* jalr $25						*/
1050   0x2718fffe	/* subu $24, $24, 2					*/
1051 };
1052 
1053 /* The format of the first PLT entry in an O32 executable using compact
1054    jumps.  */
1055 static const bfd_vma mipsr6_o32_exec_plt0_entry_compact[] =
1056 {
1057   0x3c1c0000,	/* lui $28, %hi(&GOTPLT[0])				*/
1058   0x8f990000,	/* lw $25, %lo(&GOTPLT[0])($28)				*/
1059   0x279c0000,	/* addiu $28, $28, %lo(&GOTPLT[0])			*/
1060   0x031cc023,	/* subu $24, $24, $28					*/
1061   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
1062   0x0018c082,	/* srl $24, $24, 2					*/
1063   0x2718fffe,	/* subu $24, $24, 2					*/
1064   0xf8190000	/* jalrc $25						*/
1065 };
1066 
1067 /* The format of the first PLT entry in an N32 executable.  Different
1068    because gp ($28) is not available; we use t2 ($14) instead.  */
1069 static const bfd_vma mips_n32_exec_plt0_entry[] =
1070 {
1071   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1072   0x8dd90000,	/* lw $25, %lo(&GOTPLT[0])($14)				*/
1073   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1074   0x030ec023,	/* subu $24, $24, $14					*/
1075   0x03e07825,	/* or t7, ra, zero					*/
1076   0x0018c082,	/* srl $24, $24, 2					*/
1077   0x0320f809,	/* jalr $25						*/
1078   0x2718fffe	/* subu $24, $24, 2					*/
1079 };
1080 
1081 /* The format of the first PLT entry in an N32 executable using compact
1082    jumps.  Different because gp ($28) is not available; we use t2 ($14)
1083    instead.  */
1084 static const bfd_vma mipsr6_n32_exec_plt0_entry_compact[] =
1085 {
1086   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1087   0x8dd90000,	/* lw $25, %lo(&GOTPLT[0])($14)				*/
1088   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1089   0x030ec023,	/* subu $24, $24, $14					*/
1090   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
1091   0x0018c082,	/* srl $24, $24, 2					*/
1092   0x2718fffe,	/* subu $24, $24, 2					*/
1093   0xf8190000	/* jalrc $25						*/
1094 };
1095 
1096 /* The format of the first PLT entry in an N64 executable.  Different
1097    from N32 because of the increased size of GOT entries.  */
1098 static const bfd_vma mips_n64_exec_plt0_entry[] =
1099 {
1100   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1101   0xddd90000,	/* ld $25, %lo(&GOTPLT[0])($14)				*/
1102   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1103   0x030ec023,	/* subu $24, $24, $14					*/
1104   0x03e07825,	/* or t7, ra, zero					*/
1105   0x0018c0c2,	/* srl $24, $24, 3					*/
1106   0x0320f809,	/* jalr $25						*/
1107   0x2718fffe	/* subu $24, $24, 2					*/
1108 };
1109 
1110 /* The format of the first PLT entry in an N64 executable using compact
1111    jumps.  Different from N32 because of the increased size of GOT
1112    entries.  */
1113 static const bfd_vma mipsr6_n64_exec_plt0_entry_compact[] =
1114 {
1115   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1116   0xddd90000,	/* ld $25, %lo(&GOTPLT[0])($14)				*/
1117   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1118   0x030ec023,	/* subu $24, $24, $14					*/
1119   0x03e0782d,	/* move $15, $31	# 64-bit move (daddu)		*/
1120   0x0018c0c2,	/* srl $24, $24, 3					*/
1121   0x2718fffe,	/* subu $24, $24, 2					*/
1122   0xf8190000	/* jalrc $25						*/
1123 };
1124 
1125 
1126 /* The format of the microMIPS first PLT entry in an O32 executable.
1127    We rely on v0 ($2) rather than t8 ($24) to contain the address
1128    of the GOTPLT entry handled, so this stub may only be used when
1129    all the subsequent PLT entries are microMIPS code too.
1130 
1131    The trailing NOP is for alignment and correct disassembly only.  */
1132 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1133 {
1134   0x7980, 0x0000,	/* addiupc $3, (&GOTPLT[0]) - .			*/
1135   0xff23, 0x0000,	/* lw $25, 0($3)				*/
1136   0x0535,		/* subu $2, $2, $3				*/
1137   0x2525,		/* srl $2, $2, 2				*/
1138   0x3302, 0xfffe,	/* subu $24, $2, 2				*/
1139   0x0dff,		/* move $15, $31				*/
1140   0x45f9,		/* jalrs $25					*/
1141   0x0f83,		/* move $28, $3					*/
1142   0x0c00		/* nop						*/
1143 };
1144 
1145 /* The format of the microMIPS first PLT entry in an O32 executable
1146    in the insn32 mode.  */
1147 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1148 {
1149   0x41bc, 0x0000,	/* lui $28, %hi(&GOTPLT[0])			*/
1150   0xff3c, 0x0000,	/* lw $25, %lo(&GOTPLT[0])($28)			*/
1151   0x339c, 0x0000,	/* addiu $28, $28, %lo(&GOTPLT[0])		*/
1152   0x0398, 0xc1d0,	/* subu $24, $24, $28				*/
1153   0x001f, 0x7a90,	/* or $15, $31, zero				*/
1154   0x0318, 0x1040,	/* srl $24, $24, 2				*/
1155   0x03f9, 0x0f3c,	/* jalr $25					*/
1156   0x3318, 0xfffe	/* subu $24, $24, 2				*/
1157 };
1158 
1159 /* The format of subsequent standard PLT entries.  */
1160 static const bfd_vma mips_exec_plt_entry[] =
1161 {
1162   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1163   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1164   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1165   0x03200008	/* jr $25					*/
1166 };
1167 
1168 static const bfd_vma mipsr6_exec_plt_entry[] =
1169 {
1170   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1171   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1172   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1173   0x03200009	/* jr $25					*/
1174 };
1175 
1176 static const bfd_vma mipsr6_exec_plt_entry_compact[] =
1177 {
1178   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1179   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1180   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1181   0xd8190000	/* jic $25, 0					*/
1182 };
1183 
1184 /* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1185    and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1186    directly addressable.  */
1187 static const bfd_vma mips16_o32_exec_plt_entry[] =
1188 {
1189   0xb203,		/* lw $2, 12($pc)			*/
1190   0x9a60,		/* lw $3, 0($2)				*/
1191   0x651a,		/* move $24, $2				*/
1192   0xeb00,		/* jr $3				*/
1193   0x653b,		/* move $25, $3				*/
1194   0x6500,		/* nop					*/
1195   0x0000, 0x0000	/* .word (.got.plt entry)		*/
1196 };
1197 
1198 /* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1199    as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1200 static const bfd_vma micromips_o32_exec_plt_entry[] =
1201 {
1202   0x7900, 0x0000,	/* addiupc $2, (.got.plt entry) - .	*/
1203   0xff22, 0x0000,	/* lw $25, 0($2)			*/
1204   0x4599,		/* jr $25				*/
1205   0x0f02		/* move $24, $2				*/
1206 };
1207 
1208 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1209 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1210 {
1211   0x41af, 0x0000,	/* lui $15, %hi(.got.plt entry)		*/
1212   0xff2f, 0x0000,	/* lw $25, %lo(.got.plt entry)($15)	*/
1213   0x0019, 0x0f3c,	/* jr $25				*/
1214   0x330f, 0x0000	/* addiu $24, $15, %lo(.got.plt entry)	*/
1215 };
1216 
1217 /* The format of the first PLT entry in a VxWorks executable.  */
1218 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1219 {
1220   0x3c190000,	/* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)		*/
1221   0x27390000,	/* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)	*/
1222   0x8f390008,	/* lw t9, 8(t9)					*/
1223   0x00000000,	/* nop						*/
1224   0x03200008,	/* jr t9					*/
1225   0x00000000	/* nop						*/
1226 };
1227 
1228 /* The format of subsequent PLT entries.  */
1229 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1230 {
1231   0x10000000,	/* b .PLT_resolver			*/
1232   0x24180000,	/* li t8, <pltindex>			*/
1233   0x3c190000,	/* lui t9, %hi(<.got.plt slot>)		*/
1234   0x27390000,	/* addiu t9, t9, %lo(<.got.plt slot>)	*/
1235   0x8f390000,	/* lw t9, 0(t9)				*/
1236   0x00000000,	/* nop					*/
1237   0x03200008,	/* jr t9				*/
1238   0x00000000	/* nop					*/
1239 };
1240 
1241 /* The format of the first PLT entry in a VxWorks shared object.  */
1242 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1243 {
1244   0x8f990008,	/* lw t9, 8(gp)		*/
1245   0x00000000,	/* nop			*/
1246   0x03200008,	/* jr t9		*/
1247   0x00000000,	/* nop			*/
1248   0x00000000,	/* nop			*/
1249   0x00000000	/* nop			*/
1250 };
1251 
1252 /* The format of subsequent PLT entries.  */
1253 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1254 {
1255   0x10000000,	/* b .PLT_resolver	*/
1256   0x24180000	/* li t8, <pltindex>	*/
1257 };
1258 
1259 /* microMIPS 32-bit opcode helper installer.  */
1260 
1261 static void
1262 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1263 {
1264   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1265   bfd_put_16 (abfd,  opcode	   & 0xffff, ptr + 2);
1266 }
1267 
1268 /* microMIPS 32-bit opcode helper retriever.  */
1269 
1270 static bfd_vma
1271 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1272 {
1273   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1274 }
1275 
1276 /* Look up an entry in a MIPS ELF linker hash table.  */
1277 
1278 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)	\
1279   ((struct mips_elf_link_hash_entry *)					\
1280    elf_link_hash_lookup (&(table)->root, (string), (create),		\
1281 			 (copy), (follow)))
1282 
1283 /* Traverse a MIPS ELF linker hash table.  */
1284 
1285 #define mips_elf_link_hash_traverse(table, func, info)			\
1286   (elf_link_hash_traverse						\
1287    (&(table)->root,							\
1288     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
1289     (info)))
1290 
1291 /* Find the base offsets for thread-local storage in this object,
1292    for GD/LD and IE/LE respectively.  */
1293 
1294 #define TP_OFFSET 0x7000
1295 #define DTP_OFFSET 0x8000
1296 
1297 static bfd_vma
1298 dtprel_base (struct bfd_link_info *info)
1299 {
1300   /* If tls_sec is NULL, we should have signalled an error already.  */
1301   if (elf_hash_table (info)->tls_sec == NULL)
1302     return 0;
1303   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1304 }
1305 
1306 static bfd_vma
1307 tprel_base (struct bfd_link_info *info)
1308 {
1309   /* If tls_sec is NULL, we should have signalled an error already.  */
1310   if (elf_hash_table (info)->tls_sec == NULL)
1311     return 0;
1312   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1313 }
1314 
1315 /* Create an entry in a MIPS ELF linker hash table.  */
1316 
1317 static struct bfd_hash_entry *
1318 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1319 			    struct bfd_hash_table *table, const char *string)
1320 {
1321   struct mips_elf_link_hash_entry *ret =
1322     (struct mips_elf_link_hash_entry *) entry;
1323 
1324   /* Allocate the structure if it has not already been allocated by a
1325      subclass.  */
1326   if (ret == NULL)
1327     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1328   if (ret == NULL)
1329     return (struct bfd_hash_entry *) ret;
1330 
1331   /* Call the allocation method of the superclass.  */
1332   ret = ((struct mips_elf_link_hash_entry *)
1333 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1334 				     table, string));
1335   if (ret != NULL)
1336     {
1337       /* Set local fields.  */
1338       memset (&ret->esym, 0, sizeof (EXTR));
1339       /* We use -2 as a marker to indicate that the information has
1340 	 not been set.  -1 means there is no associated ifd.  */
1341       ret->esym.ifd = -2;
1342       ret->la25_stub = 0;
1343       ret->possibly_dynamic_relocs = 0;
1344       ret->fn_stub = NULL;
1345       ret->call_stub = NULL;
1346       ret->call_fp_stub = NULL;
1347       ret->mipsxhash_loc = 0;
1348       ret->global_got_area = GGA_NONE;
1349       ret->got_only_for_calls = TRUE;
1350       ret->readonly_reloc = FALSE;
1351       ret->has_static_relocs = FALSE;
1352       ret->no_fn_stub = FALSE;
1353       ret->need_fn_stub = FALSE;
1354       ret->has_nonpic_branches = FALSE;
1355       ret->needs_lazy_stub = FALSE;
1356       ret->use_plt_entry = FALSE;
1357     }
1358 
1359   return (struct bfd_hash_entry *) ret;
1360 }
1361 
1362 /* Allocate MIPS ELF private object data.  */
1363 
1364 bfd_boolean
1365 _bfd_mips_elf_mkobject (bfd *abfd)
1366 {
1367   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1368 				  MIPS_ELF_DATA);
1369 }
1370 
1371 bfd_boolean
1372 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1373 {
1374   if (!sec->used_by_bfd)
1375     {
1376       struct _mips_elf_section_data *sdata;
1377       bfd_size_type amt = sizeof (*sdata);
1378 
1379       sdata = bfd_zalloc (abfd, amt);
1380       if (sdata == NULL)
1381 	return FALSE;
1382       sec->used_by_bfd = sdata;
1383     }
1384 
1385   return _bfd_elf_new_section_hook (abfd, sec);
1386 }
1387 
1388 /* Read ECOFF debugging information from a .mdebug section into a
1389    ecoff_debug_info structure.  */
1390 
1391 bfd_boolean
1392 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1393 			       struct ecoff_debug_info *debug)
1394 {
1395   HDRR *symhdr;
1396   const struct ecoff_debug_swap *swap;
1397   char *ext_hdr;
1398 
1399   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1400   memset (debug, 0, sizeof (*debug));
1401 
1402   ext_hdr = bfd_malloc (swap->external_hdr_size);
1403   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1404     goto error_return;
1405 
1406   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1407 				  swap->external_hdr_size))
1408     goto error_return;
1409 
1410   symhdr = &debug->symbolic_header;
1411   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1412 
1413   /* The symbolic header contains absolute file offsets and sizes to
1414      read.  */
1415 #define READ(ptr, offset, count, size, type)				\
1416   if (symhdr->count == 0)						\
1417     debug->ptr = NULL;							\
1418   else									\
1419     {									\
1420       bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
1421       debug->ptr = bfd_malloc (amt);					\
1422       if (debug->ptr == NULL)						\
1423 	goto error_return;						\
1424       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0		\
1425 	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
1426 	goto error_return;						\
1427     }
1428 
1429   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1430   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1431   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1432   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1433   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1434   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1435 	union aux_ext *);
1436   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1437   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1438   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1439   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1440   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1441 #undef READ
1442 
1443   debug->fdr = NULL;
1444 
1445   return TRUE;
1446 
1447  error_return:
1448   if (ext_hdr != NULL)
1449     free (ext_hdr);
1450   if (debug->line != NULL)
1451     free (debug->line);
1452   if (debug->external_dnr != NULL)
1453     free (debug->external_dnr);
1454   if (debug->external_pdr != NULL)
1455     free (debug->external_pdr);
1456   if (debug->external_sym != NULL)
1457     free (debug->external_sym);
1458   if (debug->external_opt != NULL)
1459     free (debug->external_opt);
1460   if (debug->external_aux != NULL)
1461     free (debug->external_aux);
1462   if (debug->ss != NULL)
1463     free (debug->ss);
1464   if (debug->ssext != NULL)
1465     free (debug->ssext);
1466   if (debug->external_fdr != NULL)
1467     free (debug->external_fdr);
1468   if (debug->external_rfd != NULL)
1469     free (debug->external_rfd);
1470   if (debug->external_ext != NULL)
1471     free (debug->external_ext);
1472   return FALSE;
1473 }
1474 
1475 /* Swap RPDR (runtime procedure table entry) for output.  */
1476 
1477 static void
1478 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1479 {
1480   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1481   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1482   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1483   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1484   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1485   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1486 
1487   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1488   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1489 
1490   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1491 }
1492 
1493 /* Create a runtime procedure table from the .mdebug section.  */
1494 
1495 static bfd_boolean
1496 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1497 				 struct bfd_link_info *info, asection *s,
1498 				 struct ecoff_debug_info *debug)
1499 {
1500   const struct ecoff_debug_swap *swap;
1501   HDRR *hdr = &debug->symbolic_header;
1502   RPDR *rpdr, *rp;
1503   struct rpdr_ext *erp;
1504   void *rtproc;
1505   struct pdr_ext *epdr;
1506   struct sym_ext *esym;
1507   char *ss, **sv;
1508   char *str;
1509   bfd_size_type size;
1510   bfd_size_type count;
1511   unsigned long sindex;
1512   unsigned long i;
1513   PDR pdr;
1514   SYMR sym;
1515   const char *no_name_func = _("static procedure (no name)");
1516 
1517   epdr = NULL;
1518   rpdr = NULL;
1519   esym = NULL;
1520   ss = NULL;
1521   sv = NULL;
1522 
1523   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1524 
1525   sindex = strlen (no_name_func) + 1;
1526   count = hdr->ipdMax;
1527   if (count > 0)
1528     {
1529       size = swap->external_pdr_size;
1530 
1531       epdr = bfd_malloc (size * count);
1532       if (epdr == NULL)
1533 	goto error_return;
1534 
1535       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1536 	goto error_return;
1537 
1538       size = sizeof (RPDR);
1539       rp = rpdr = bfd_malloc (size * count);
1540       if (rpdr == NULL)
1541 	goto error_return;
1542 
1543       size = sizeof (char *);
1544       sv = bfd_malloc (size * count);
1545       if (sv == NULL)
1546 	goto error_return;
1547 
1548       count = hdr->isymMax;
1549       size = swap->external_sym_size;
1550       esym = bfd_malloc (size * count);
1551       if (esym == NULL)
1552 	goto error_return;
1553 
1554       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1555 	goto error_return;
1556 
1557       count = hdr->issMax;
1558       ss = bfd_malloc (count);
1559       if (ss == NULL)
1560 	goto error_return;
1561       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1562 	goto error_return;
1563 
1564       count = hdr->ipdMax;
1565       for (i = 0; i < (unsigned long) count; i++, rp++)
1566 	{
1567 	  (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1568 	  (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1569 	  rp->adr = sym.value;
1570 	  rp->regmask = pdr.regmask;
1571 	  rp->regoffset = pdr.regoffset;
1572 	  rp->fregmask = pdr.fregmask;
1573 	  rp->fregoffset = pdr.fregoffset;
1574 	  rp->frameoffset = pdr.frameoffset;
1575 	  rp->framereg = pdr.framereg;
1576 	  rp->pcreg = pdr.pcreg;
1577 	  rp->irpss = sindex;
1578 	  sv[i] = ss + sym.iss;
1579 	  sindex += strlen (sv[i]) + 1;
1580 	}
1581     }
1582 
1583   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1584   size = BFD_ALIGN (size, 16);
1585   rtproc = bfd_alloc (abfd, size);
1586   if (rtproc == NULL)
1587     {
1588       mips_elf_hash_table (info)->procedure_count = 0;
1589       goto error_return;
1590     }
1591 
1592   mips_elf_hash_table (info)->procedure_count = count + 2;
1593 
1594   erp = rtproc;
1595   memset (erp, 0, sizeof (struct rpdr_ext));
1596   erp++;
1597   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1598   strcpy (str, no_name_func);
1599   str += strlen (no_name_func) + 1;
1600   for (i = 0; i < count; i++)
1601     {
1602       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1603       strcpy (str, sv[i]);
1604       str += strlen (sv[i]) + 1;
1605     }
1606   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1607 
1608   /* Set the size and contents of .rtproc section.  */
1609   s->size = size;
1610   s->contents = rtproc;
1611 
1612   /* Skip this section later on (I don't think this currently
1613      matters, but someday it might).  */
1614   s->map_head.link_order = NULL;
1615 
1616   if (epdr != NULL)
1617     free (epdr);
1618   if (rpdr != NULL)
1619     free (rpdr);
1620   if (esym != NULL)
1621     free (esym);
1622   if (ss != NULL)
1623     free (ss);
1624   if (sv != NULL)
1625     free (sv);
1626 
1627   return TRUE;
1628 
1629  error_return:
1630   if (epdr != NULL)
1631     free (epdr);
1632   if (rpdr != NULL)
1633     free (rpdr);
1634   if (esym != NULL)
1635     free (esym);
1636   if (ss != NULL)
1637     free (ss);
1638   if (sv != NULL)
1639     free (sv);
1640   return FALSE;
1641 }
1642 
1643 /* We're going to create a stub for H.  Create a symbol for the stub's
1644    value and size, to help make the disassembly easier to read.  */
1645 
1646 static bfd_boolean
1647 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1648 			     struct mips_elf_link_hash_entry *h,
1649 			     const char *prefix, asection *s, bfd_vma value,
1650 			     bfd_vma size)
1651 {
1652   bfd_boolean micromips_p = ELF_ST_IS_MICROMIPS (h->root.other);
1653   struct bfd_link_hash_entry *bh;
1654   struct elf_link_hash_entry *elfh;
1655   char *name;
1656   bfd_boolean res;
1657 
1658   if (micromips_p)
1659     value |= 1;
1660 
1661   /* Create a new symbol.  */
1662   name = concat (prefix, h->root.root.root.string, NULL);
1663   bh = NULL;
1664   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1665 					  BSF_LOCAL, s, value, NULL,
1666 					  TRUE, FALSE, &bh);
1667   free (name);
1668   if (! res)
1669     return FALSE;
1670 
1671   /* Make it a local function.  */
1672   elfh = (struct elf_link_hash_entry *) bh;
1673   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1674   elfh->size = size;
1675   elfh->forced_local = 1;
1676   if (micromips_p)
1677     elfh->other = ELF_ST_SET_MICROMIPS (elfh->other);
1678   return TRUE;
1679 }
1680 
1681 /* We're about to redefine H.  Create a symbol to represent H's
1682    current value and size, to help make the disassembly easier
1683    to read.  */
1684 
1685 static bfd_boolean
1686 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1687 			       struct mips_elf_link_hash_entry *h,
1688 			       const char *prefix)
1689 {
1690   struct bfd_link_hash_entry *bh;
1691   struct elf_link_hash_entry *elfh;
1692   char *name;
1693   asection *s;
1694   bfd_vma value;
1695   bfd_boolean res;
1696 
1697   /* Read the symbol's value.  */
1698   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1699 	      || h->root.root.type == bfd_link_hash_defweak);
1700   s = h->root.root.u.def.section;
1701   value = h->root.root.u.def.value;
1702 
1703   /* Create a new symbol.  */
1704   name = concat (prefix, h->root.root.root.string, NULL);
1705   bh = NULL;
1706   res = _bfd_generic_link_add_one_symbol (info, s->owner, name,
1707 					  BSF_LOCAL, s, value, NULL,
1708 					  TRUE, FALSE, &bh);
1709   free (name);
1710   if (! res)
1711     return FALSE;
1712 
1713   /* Make it local and copy the other attributes from H.  */
1714   elfh = (struct elf_link_hash_entry *) bh;
1715   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1716   elfh->other = h->root.other;
1717   elfh->size = h->root.size;
1718   elfh->forced_local = 1;
1719   return TRUE;
1720 }
1721 
1722 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1723    function rather than to a hard-float stub.  */
1724 
1725 static bfd_boolean
1726 section_allows_mips16_refs_p (asection *section)
1727 {
1728   const char *name;
1729 
1730   name = bfd_section_name (section);
1731   return (FN_STUB_P (name)
1732 	  || CALL_STUB_P (name)
1733 	  || CALL_FP_STUB_P (name)
1734 	  || strcmp (name, ".pdr") == 0);
1735 }
1736 
1737 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1738    stub section of some kind.  Return the R_SYMNDX of the target
1739    function, or 0 if we can't decide which function that is.  */
1740 
1741 static unsigned long
1742 mips16_stub_symndx (const struct elf_backend_data *bed,
1743 		    asection *sec ATTRIBUTE_UNUSED,
1744 		    const Elf_Internal_Rela *relocs,
1745 		    const Elf_Internal_Rela *relend)
1746 {
1747   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1748   const Elf_Internal_Rela *rel;
1749 
1750   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1751      one in a compound relocation.  */
1752   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1753     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1754       return ELF_R_SYM (sec->owner, rel->r_info);
1755 
1756   /* Otherwise trust the first relocation, whatever its kind.  This is
1757      the traditional behavior.  */
1758   if (relocs < relend)
1759     return ELF_R_SYM (sec->owner, relocs->r_info);
1760 
1761   return 0;
1762 }
1763 
1764 /* Check the mips16 stubs for a particular symbol, and see if we can
1765    discard them.  */
1766 
1767 static void
1768 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1769 			     struct mips_elf_link_hash_entry *h)
1770 {
1771   /* Dynamic symbols must use the standard call interface, in case other
1772      objects try to call them.  */
1773   if (h->fn_stub != NULL
1774       && h->root.dynindx != -1)
1775     {
1776       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1777       h->need_fn_stub = TRUE;
1778     }
1779 
1780   if (h->fn_stub != NULL
1781       && ! h->need_fn_stub)
1782     {
1783       /* We don't need the fn_stub; the only references to this symbol
1784 	 are 16 bit calls.  Clobber the size to 0 to prevent it from
1785 	 being included in the link.  */
1786       h->fn_stub->size = 0;
1787       h->fn_stub->flags &= ~SEC_RELOC;
1788       h->fn_stub->reloc_count = 0;
1789       h->fn_stub->flags |= SEC_EXCLUDE;
1790       h->fn_stub->output_section = bfd_abs_section_ptr;
1791     }
1792 
1793   if (h->call_stub != NULL
1794       && ELF_ST_IS_MIPS16 (h->root.other))
1795     {
1796       /* We don't need the call_stub; this is a 16 bit function, so
1797 	 calls from other 16 bit functions are OK.  Clobber the size
1798 	 to 0 to prevent it from being included in the link.  */
1799       h->call_stub->size = 0;
1800       h->call_stub->flags &= ~SEC_RELOC;
1801       h->call_stub->reloc_count = 0;
1802       h->call_stub->flags |= SEC_EXCLUDE;
1803       h->call_stub->output_section = bfd_abs_section_ptr;
1804     }
1805 
1806   if (h->call_fp_stub != NULL
1807       && ELF_ST_IS_MIPS16 (h->root.other))
1808     {
1809       /* We don't need the call_stub; this is a 16 bit function, so
1810 	 calls from other 16 bit functions are OK.  Clobber the size
1811 	 to 0 to prevent it from being included in the link.  */
1812       h->call_fp_stub->size = 0;
1813       h->call_fp_stub->flags &= ~SEC_RELOC;
1814       h->call_fp_stub->reloc_count = 0;
1815       h->call_fp_stub->flags |= SEC_EXCLUDE;
1816       h->call_fp_stub->output_section = bfd_abs_section_ptr;
1817     }
1818 }
1819 
1820 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1821 
1822 static hashval_t
1823 mips_elf_la25_stub_hash (const void *entry_)
1824 {
1825   const struct mips_elf_la25_stub *entry;
1826 
1827   entry = (struct mips_elf_la25_stub *) entry_;
1828   return entry->h->root.root.u.def.section->id
1829     + entry->h->root.root.u.def.value;
1830 }
1831 
1832 static int
1833 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1834 {
1835   const struct mips_elf_la25_stub *entry1, *entry2;
1836 
1837   entry1 = (struct mips_elf_la25_stub *) entry1_;
1838   entry2 = (struct mips_elf_la25_stub *) entry2_;
1839   return ((entry1->h->root.root.u.def.section
1840 	   == entry2->h->root.root.u.def.section)
1841 	  && (entry1->h->root.root.u.def.value
1842 	      == entry2->h->root.root.u.def.value));
1843 }
1844 
1845 /* Called by the linker to set up the la25 stub-creation code.  FN is
1846    the linker's implementation of add_stub_function.  Return true on
1847    success.  */
1848 
1849 bfd_boolean
1850 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1851 			  asection *(*fn) (const char *, asection *,
1852 					   asection *))
1853 {
1854   struct mips_elf_link_hash_table *htab;
1855 
1856   htab = mips_elf_hash_table (info);
1857   if (htab == NULL)
1858     return FALSE;
1859 
1860   htab->add_stub_section = fn;
1861   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1862 				      mips_elf_la25_stub_eq, NULL);
1863   if (htab->la25_stubs == NULL)
1864     return FALSE;
1865 
1866   return TRUE;
1867 }
1868 
1869 /* Return true if H is a locally-defined PIC function, in the sense
1870    that it or its fn_stub might need $25 to be valid on entry.
1871    Note that MIPS16 functions set up $gp using PC-relative instructions,
1872    so they themselves never need $25 to be valid.  Only non-MIPS16
1873    entry points are of interest here.  */
1874 
1875 static bfd_boolean
1876 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1877 {
1878   return ((h->root.root.type == bfd_link_hash_defined
1879 	   || h->root.root.type == bfd_link_hash_defweak)
1880 	  && h->root.def_regular
1881 	  && !bfd_is_abs_section (h->root.root.u.def.section)
1882 	  && !bfd_is_und_section (h->root.root.u.def.section)
1883 	  && (!ELF_ST_IS_MIPS16 (h->root.other)
1884 	      || (h->fn_stub && h->need_fn_stub))
1885 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1886 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
1887 }
1888 
1889 /* Set *SEC to the input section that contains the target of STUB.
1890    Return the offset of the target from the start of that section.  */
1891 
1892 static bfd_vma
1893 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1894 			  asection **sec)
1895 {
1896   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1897     {
1898       BFD_ASSERT (stub->h->need_fn_stub);
1899       *sec = stub->h->fn_stub;
1900       return 0;
1901     }
1902   else
1903     {
1904       *sec = stub->h->root.root.u.def.section;
1905       return stub->h->root.root.u.def.value;
1906     }
1907 }
1908 
1909 /* STUB describes an la25 stub that we have decided to implement
1910    by inserting an LUI/ADDIU pair before the target function.
1911    Create the section and redirect the function symbol to it.  */
1912 
1913 static bfd_boolean
1914 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1915 			 struct bfd_link_info *info)
1916 {
1917   struct mips_elf_link_hash_table *htab;
1918   char *name;
1919   asection *s, *input_section;
1920   unsigned int align;
1921 
1922   htab = mips_elf_hash_table (info);
1923   if (htab == NULL)
1924     return FALSE;
1925 
1926   /* Create a unique name for the new section.  */
1927   name = bfd_malloc (11 + sizeof (".text.stub."));
1928   if (name == NULL)
1929     return FALSE;
1930   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1931 
1932   /* Create the section.  */
1933   mips_elf_get_la25_target (stub, &input_section);
1934   s = htab->add_stub_section (name, input_section,
1935 			      input_section->output_section);
1936   if (s == NULL)
1937     return FALSE;
1938 
1939   /* Make sure that any padding goes before the stub.  */
1940   align = input_section->alignment_power;
1941   if (!bfd_set_section_alignment (s, align))
1942     return FALSE;
1943   if (align > 3)
1944     s->size = (1 << align) - 8;
1945 
1946   /* Create a symbol for the stub.  */
1947   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1948   stub->stub_section = s;
1949   stub->offset = s->size;
1950 
1951   /* Allocate room for it.  */
1952   s->size += 8;
1953   return TRUE;
1954 }
1955 
1956 /* STUB describes an la25 stub that we have decided to implement
1957    with a separate trampoline.  Allocate room for it and redirect
1958    the function symbol to it.  */
1959 
1960 static bfd_boolean
1961 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1962 			      struct bfd_link_info *info)
1963 {
1964   struct mips_elf_link_hash_table *htab;
1965   asection *s;
1966 
1967   htab = mips_elf_hash_table (info);
1968   if (htab == NULL)
1969     return FALSE;
1970 
1971   /* Create a trampoline section, if we haven't already.  */
1972   s = htab->strampoline;
1973   if (s == NULL)
1974     {
1975       asection *input_section = stub->h->root.root.u.def.section;
1976       s = htab->add_stub_section (".text", NULL,
1977 				  input_section->output_section);
1978       if (s == NULL || !bfd_set_section_alignment (s, 4))
1979 	return FALSE;
1980       htab->strampoline = s;
1981     }
1982 
1983   /* Create a symbol for the stub.  */
1984   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1985   stub->stub_section = s;
1986   stub->offset = s->size;
1987 
1988   /* Allocate room for it.  */
1989   s->size += 16;
1990   return TRUE;
1991 }
1992 
1993 /* H describes a symbol that needs an la25 stub.  Make sure that an
1994    appropriate stub exists and point H at it.  */
1995 
1996 static bfd_boolean
1997 mips_elf_add_la25_stub (struct bfd_link_info *info,
1998 			struct mips_elf_link_hash_entry *h)
1999 {
2000   struct mips_elf_link_hash_table *htab;
2001   struct mips_elf_la25_stub search, *stub;
2002   bfd_boolean use_trampoline_p;
2003   asection *s;
2004   bfd_vma value;
2005   void **slot;
2006 
2007   /* Describe the stub we want.  */
2008   search.stub_section = NULL;
2009   search.offset = 0;
2010   search.h = h;
2011 
2012   /* See if we've already created an equivalent stub.  */
2013   htab = mips_elf_hash_table (info);
2014   if (htab == NULL)
2015     return FALSE;
2016 
2017   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
2018   if (slot == NULL)
2019     return FALSE;
2020 
2021   stub = (struct mips_elf_la25_stub *) *slot;
2022   if (stub != NULL)
2023     {
2024       /* We can reuse the existing stub.  */
2025       h->la25_stub = stub;
2026       return TRUE;
2027     }
2028 
2029   /* Create a permanent copy of ENTRY and add it to the hash table.  */
2030   stub = bfd_malloc (sizeof (search));
2031   if (stub == NULL)
2032     return FALSE;
2033   *stub = search;
2034   *slot = stub;
2035 
2036   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
2037      of the section and if we would need no more than 2 nops.  */
2038   value = mips_elf_get_la25_target (stub, &s);
2039   if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
2040     value &= ~1;
2041   use_trampoline_p = (value != 0 || s->alignment_power > 4);
2042 
2043   h->la25_stub = stub;
2044   return (use_trampoline_p
2045 	  ? mips_elf_add_la25_trampoline (stub, info)
2046 	  : mips_elf_add_la25_intro (stub, info));
2047 }
2048 
2049 /* A mips_elf_link_hash_traverse callback that is called before sizing
2050    sections.  DATA points to a mips_htab_traverse_info structure.  */
2051 
2052 static bfd_boolean
2053 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
2054 {
2055   struct mips_htab_traverse_info *hti;
2056 
2057   hti = (struct mips_htab_traverse_info *) data;
2058   if (!bfd_link_relocatable (hti->info))
2059     mips_elf_check_mips16_stubs (hti->info, h);
2060 
2061   if (mips_elf_local_pic_function_p (h))
2062     {
2063       /* PR 12845: If H is in a section that has been garbage
2064 	 collected it will have its output section set to *ABS*.  */
2065       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
2066 	return TRUE;
2067 
2068       /* H is a function that might need $25 to be valid on entry.
2069 	 If we're creating a non-PIC relocatable object, mark H as
2070 	 being PIC.  If we're creating a non-relocatable object with
2071 	 non-PIC branches and jumps to H, make sure that H has an la25
2072 	 stub.  */
2073       if (bfd_link_relocatable (hti->info))
2074 	{
2075 	  if (!PIC_OBJECT_P (hti->output_bfd))
2076 	    h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
2077 	}
2078       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
2079 	{
2080 	  hti->error = TRUE;
2081 	  return FALSE;
2082 	}
2083     }
2084   return TRUE;
2085 }
2086 
2087 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2088    Most mips16 instructions are 16 bits, but these instructions
2089    are 32 bits.
2090 
2091    The format of these instructions is:
2092 
2093    +--------------+--------------------------------+
2094    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2095    +--------------+--------------------------------+
2096    |		    Immediate  15:0		   |
2097    +-----------------------------------------------+
2098 
2099    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2100    Note that the immediate value in the first word is swapped.
2101 
2102    When producing a relocatable object file, R_MIPS16_26 is
2103    handled mostly like R_MIPS_26.  In particular, the addend is
2104    stored as a straight 26-bit value in a 32-bit instruction.
2105    (gas makes life simpler for itself by never adjusting a
2106    R_MIPS16_26 reloc to be against a section, so the addend is
2107    always zero).  However, the 32 bit instruction is stored as 2
2108    16-bit values, rather than a single 32-bit value.  In a
2109    big-endian file, the result is the same; in a little-endian
2110    file, the two 16-bit halves of the 32 bit value are swapped.
2111    This is so that a disassembler can recognize the jal
2112    instruction.
2113 
2114    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2115    instruction stored as two 16-bit values.  The addend A is the
2116    contents of the targ26 field.  The calculation is the same as
2117    R_MIPS_26.  When storing the calculated value, reorder the
2118    immediate value as shown above, and don't forget to store the
2119    value as two 16-bit values.
2120 
2121    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2122    defined as
2123 
2124    big-endian:
2125    +--------+----------------------+
2126    |	    |			   |
2127    |	    |	 targ26-16	   |
2128    |31	  26|25			  0|
2129    +--------+----------------------+
2130 
2131    little-endian:
2132    +----------+------+-------------+
2133    |	      |	     |		   |
2134    |  sub1    |	     |	   sub2	   |
2135    |0	     9|10  15|16	 31|
2136    +----------+--------------------+
2137    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2138    ((sub1 << 16) | sub2)).
2139 
2140    When producing a relocatable object file, the calculation is
2141    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2142    When producing a fully linked file, the calculation is
2143    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2144    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2145 
2146    The table below lists the other MIPS16 instruction relocations.
2147    Each one is calculated in the same way as the non-MIPS16 relocation
2148    given on the right, but using the extended MIPS16 layout of 16-bit
2149    immediate fields:
2150 
2151 	R_MIPS16_GPREL		R_MIPS_GPREL16
2152 	R_MIPS16_GOT16		R_MIPS_GOT16
2153 	R_MIPS16_CALL16		R_MIPS_CALL16
2154 	R_MIPS16_HI16		R_MIPS_HI16
2155 	R_MIPS16_LO16		R_MIPS_LO16
2156 
2157    A typical instruction will have a format like this:
2158 
2159    +--------------+--------------------------------+
2160    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2161    +--------------+--------------------------------+
2162    |    Major     |   rx   |   ry   |   Imm  4:0   |
2163    +--------------+--------------------------------+
2164 
2165    EXTEND is the five bit value 11110.  Major is the instruction
2166    opcode.
2167 
2168    All we need to do here is shuffle the bits appropriately.
2169    As above, the two 16-bit halves must be swapped on a
2170    little-endian system.
2171 
2172    Finally R_MIPS16_PC16_S1 corresponds to R_MIPS_PC16, however the
2173    relocatable field is shifted by 1 rather than 2 and the same bit
2174    shuffling is done as with the relocations above.  */
2175 
2176 static inline bfd_boolean
2177 mips16_reloc_p (int r_type)
2178 {
2179   switch (r_type)
2180     {
2181     case R_MIPS16_26:
2182     case R_MIPS16_GPREL:
2183     case R_MIPS16_GOT16:
2184     case R_MIPS16_CALL16:
2185     case R_MIPS16_HI16:
2186     case R_MIPS16_LO16:
2187     case R_MIPS16_TLS_GD:
2188     case R_MIPS16_TLS_LDM:
2189     case R_MIPS16_TLS_DTPREL_HI16:
2190     case R_MIPS16_TLS_DTPREL_LO16:
2191     case R_MIPS16_TLS_GOTTPREL:
2192     case R_MIPS16_TLS_TPREL_HI16:
2193     case R_MIPS16_TLS_TPREL_LO16:
2194     case R_MIPS16_PC16_S1:
2195       return TRUE;
2196 
2197     default:
2198       return FALSE;
2199     }
2200 }
2201 
2202 /* Check if a microMIPS reloc.  */
2203 
2204 static inline bfd_boolean
2205 micromips_reloc_p (unsigned int r_type)
2206 {
2207   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2208 }
2209 
2210 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2211    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2212    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2213 
2214 static inline bfd_boolean
2215 micromips_reloc_shuffle_p (unsigned int r_type)
2216 {
2217   return (micromips_reloc_p (r_type)
2218 	  && r_type != R_MICROMIPS_PC7_S1
2219 	  && r_type != R_MICROMIPS_PC10_S1);
2220 }
2221 
2222 static inline bfd_boolean
2223 got16_reloc_p (int r_type)
2224 {
2225   return (r_type == R_MIPS_GOT16
2226 	  || r_type == R_MIPS16_GOT16
2227 	  || r_type == R_MICROMIPS_GOT16);
2228 }
2229 
2230 static inline bfd_boolean
2231 call16_reloc_p (int r_type)
2232 {
2233   return (r_type == R_MIPS_CALL16
2234 	  || r_type == R_MIPS16_CALL16
2235 	  || r_type == R_MICROMIPS_CALL16);
2236 }
2237 
2238 static inline bfd_boolean
2239 got_disp_reloc_p (unsigned int r_type)
2240 {
2241   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2242 }
2243 
2244 static inline bfd_boolean
2245 got_page_reloc_p (unsigned int r_type)
2246 {
2247   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2248 }
2249 
2250 static inline bfd_boolean
2251 got_lo16_reloc_p (unsigned int r_type)
2252 {
2253   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2254 }
2255 
2256 static inline bfd_boolean
2257 call_hi16_reloc_p (unsigned int r_type)
2258 {
2259   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2260 }
2261 
2262 static inline bfd_boolean
2263 call_lo16_reloc_p (unsigned int r_type)
2264 {
2265   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2266 }
2267 
2268 static inline bfd_boolean
2269 hi16_reloc_p (int r_type)
2270 {
2271   return (r_type == R_MIPS_HI16
2272 	  || r_type == R_MIPS16_HI16
2273 	  || r_type == R_MICROMIPS_HI16
2274 	  || r_type == R_MIPS_PCHI16);
2275 }
2276 
2277 static inline bfd_boolean
2278 lo16_reloc_p (int r_type)
2279 {
2280   return (r_type == R_MIPS_LO16
2281 	  || r_type == R_MIPS16_LO16
2282 	  || r_type == R_MICROMIPS_LO16
2283 	  || r_type == R_MIPS_PCLO16);
2284 }
2285 
2286 static inline bfd_boolean
2287 mips16_call_reloc_p (int r_type)
2288 {
2289   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2290 }
2291 
2292 static inline bfd_boolean
2293 jal_reloc_p (int r_type)
2294 {
2295   return (r_type == R_MIPS_26
2296 	  || r_type == R_MIPS16_26
2297 	  || r_type == R_MICROMIPS_26_S1);
2298 }
2299 
2300 static inline bfd_boolean
2301 b_reloc_p (int r_type)
2302 {
2303   return (r_type == R_MIPS_PC26_S2
2304 	  || r_type == R_MIPS_PC21_S2
2305 	  || r_type == R_MIPS_PC16
2306 	  || r_type == R_MIPS_GNU_REL16_S2
2307 	  || r_type == R_MIPS16_PC16_S1
2308 	  || r_type == R_MICROMIPS_PC16_S1
2309 	  || r_type == R_MICROMIPS_PC10_S1
2310 	  || r_type == R_MICROMIPS_PC7_S1);
2311 }
2312 
2313 static inline bfd_boolean
2314 aligned_pcrel_reloc_p (int r_type)
2315 {
2316   return (r_type == R_MIPS_PC18_S3
2317 	  || r_type == R_MIPS_PC19_S2);
2318 }
2319 
2320 static inline bfd_boolean
2321 branch_reloc_p (int r_type)
2322 {
2323   return (r_type == R_MIPS_26
2324 	  || r_type == R_MIPS_PC26_S2
2325 	  || r_type == R_MIPS_PC21_S2
2326 	  || r_type == R_MIPS_PC16
2327 	  || r_type == R_MIPS_GNU_REL16_S2);
2328 }
2329 
2330 static inline bfd_boolean
2331 mips16_branch_reloc_p (int r_type)
2332 {
2333   return (r_type == R_MIPS16_26
2334 	  || r_type == R_MIPS16_PC16_S1);
2335 }
2336 
2337 static inline bfd_boolean
2338 micromips_branch_reloc_p (int r_type)
2339 {
2340   return (r_type == R_MICROMIPS_26_S1
2341 	  || r_type == R_MICROMIPS_PC16_S1
2342 	  || r_type == R_MICROMIPS_PC10_S1
2343 	  || r_type == R_MICROMIPS_PC7_S1);
2344 }
2345 
2346 static inline bfd_boolean
2347 tls_gd_reloc_p (unsigned int r_type)
2348 {
2349   return (r_type == R_MIPS_TLS_GD
2350 	  || r_type == R_MIPS16_TLS_GD
2351 	  || r_type == R_MICROMIPS_TLS_GD);
2352 }
2353 
2354 static inline bfd_boolean
2355 tls_ldm_reloc_p (unsigned int r_type)
2356 {
2357   return (r_type == R_MIPS_TLS_LDM
2358 	  || r_type == R_MIPS16_TLS_LDM
2359 	  || r_type == R_MICROMIPS_TLS_LDM);
2360 }
2361 
2362 static inline bfd_boolean
2363 tls_gottprel_reloc_p (unsigned int r_type)
2364 {
2365   return (r_type == R_MIPS_TLS_GOTTPREL
2366 	  || r_type == R_MIPS16_TLS_GOTTPREL
2367 	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
2368 }
2369 
2370 void
2371 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2372 			       bfd_boolean jal_shuffle, bfd_byte *data)
2373 {
2374   bfd_vma first, second, val;
2375 
2376   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2377     return;
2378 
2379   /* Pick up the first and second halfwords of the instruction.  */
2380   first = bfd_get_16 (abfd, data);
2381   second = bfd_get_16 (abfd, data + 2);
2382   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2383     val = first << 16 | second;
2384   else if (r_type != R_MIPS16_26)
2385     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2386 	   | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2387   else
2388     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2389 	   | ((first & 0x1f) << 21) | second);
2390   bfd_put_32 (abfd, val, data);
2391 }
2392 
2393 void
2394 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2395 			     bfd_boolean jal_shuffle, bfd_byte *data)
2396 {
2397   bfd_vma first, second, val;
2398 
2399   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2400     return;
2401 
2402   val = bfd_get_32 (abfd, data);
2403   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2404     {
2405       second = val & 0xffff;
2406       first = val >> 16;
2407     }
2408   else if (r_type != R_MIPS16_26)
2409     {
2410       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2411       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2412     }
2413   else
2414     {
2415       second = val & 0xffff;
2416       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2417 	       | ((val >> 21) & 0x1f);
2418     }
2419   bfd_put_16 (abfd, second, data + 2);
2420   bfd_put_16 (abfd, first, data);
2421 }
2422 
2423 bfd_reloc_status_type
2424 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2425 			       arelent *reloc_entry, asection *input_section,
2426 			       bfd_boolean relocatable, void *data, bfd_vma gp)
2427 {
2428   bfd_vma relocation;
2429   bfd_signed_vma val;
2430   bfd_reloc_status_type status;
2431 
2432   if (bfd_is_com_section (symbol->section))
2433     relocation = 0;
2434   else
2435     relocation = symbol->value;
2436 
2437   relocation += symbol->section->output_section->vma;
2438   relocation += symbol->section->output_offset;
2439 
2440   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2441     return bfd_reloc_outofrange;
2442 
2443   /* Set val to the offset into the section or symbol.  */
2444   val = reloc_entry->addend;
2445 
2446   _bfd_mips_elf_sign_extend (val, 16);
2447 
2448   /* Adjust val for the final section location and GP value.  If we
2449      are producing relocatable output, we don't want to do this for
2450      an external symbol.  */
2451   if (! relocatable
2452       || (symbol->flags & BSF_SECTION_SYM) != 0)
2453     val += relocation - gp;
2454 
2455   if (reloc_entry->howto->partial_inplace)
2456     {
2457       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2458 				       (bfd_byte *) data
2459 				       + reloc_entry->address);
2460       if (status != bfd_reloc_ok)
2461 	return status;
2462     }
2463   else
2464     reloc_entry->addend = val;
2465 
2466   if (relocatable)
2467     reloc_entry->address += input_section->output_offset;
2468 
2469   return bfd_reloc_ok;
2470 }
2471 
2472 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2473    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2474    that contains the relocation field and DATA points to the start of
2475    INPUT_SECTION.  */
2476 
2477 struct mips_hi16
2478 {
2479   struct mips_hi16 *next;
2480   bfd_byte *data;
2481   asection *input_section;
2482   arelent rel;
2483 };
2484 
2485 /* FIXME: This should not be a static variable.  */
2486 
2487 static struct mips_hi16 *mips_hi16_list;
2488 
2489 /* A howto special_function for REL *HI16 relocations.  We can only
2490    calculate the correct value once we've seen the partnering
2491    *LO16 relocation, so just save the information for later.
2492 
2493    The ABI requires that the *LO16 immediately follow the *HI16.
2494    However, as a GNU extension, we permit an arbitrary number of
2495    *HI16s to be associated with a single *LO16.  This significantly
2496    simplies the relocation handling in gcc.  */
2497 
2498 bfd_reloc_status_type
2499 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2500 			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2501 			  asection *input_section, bfd *output_bfd,
2502 			  char **error_message ATTRIBUTE_UNUSED)
2503 {
2504   struct mips_hi16 *n;
2505 
2506   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2507     return bfd_reloc_outofrange;
2508 
2509   n = bfd_malloc (sizeof *n);
2510   if (n == NULL)
2511     return bfd_reloc_outofrange;
2512 
2513   n->next = mips_hi16_list;
2514   n->data = data;
2515   n->input_section = input_section;
2516   n->rel = *reloc_entry;
2517   mips_hi16_list = n;
2518 
2519   if (output_bfd != NULL)
2520     reloc_entry->address += input_section->output_offset;
2521 
2522   return bfd_reloc_ok;
2523 }
2524 
2525 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2526    like any other 16-bit relocation when applied to global symbols, but is
2527    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2528 
2529 bfd_reloc_status_type
2530 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2531 			   void *data, asection *input_section,
2532 			   bfd *output_bfd, char **error_message)
2533 {
2534   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2535       || bfd_is_und_section (bfd_asymbol_section (symbol))
2536       || bfd_is_com_section (bfd_asymbol_section (symbol)))
2537     /* The relocation is against a global symbol.  */
2538     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2539 					input_section, output_bfd,
2540 					error_message);
2541 
2542   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2543 				   input_section, output_bfd, error_message);
2544 }
2545 
2546 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2547    is a straightforward 16 bit inplace relocation, but we must deal with
2548    any partnering high-part relocations as well.  */
2549 
2550 bfd_reloc_status_type
2551 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2552 			  void *data, asection *input_section,
2553 			  bfd *output_bfd, char **error_message)
2554 {
2555   bfd_vma vallo;
2556   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2557 
2558   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2559     return bfd_reloc_outofrange;
2560 
2561   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2562 				 location);
2563   vallo = bfd_get_32 (abfd, location);
2564   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2565 			       location);
2566 
2567   while (mips_hi16_list != NULL)
2568     {
2569       bfd_reloc_status_type ret;
2570       struct mips_hi16 *hi;
2571 
2572       hi = mips_hi16_list;
2573 
2574       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2575 	 want to install the addend in the same way as for a R_MIPS*_HI16
2576 	 relocation (with a rightshift of 16).  However, since GOT16
2577 	 relocations can also be used with global symbols, their howto
2578 	 has a rightshift of 0.  */
2579       if (hi->rel.howto->type == R_MIPS_GOT16)
2580 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2581       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2582 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2583       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2584 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2585 
2586       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2587 	 carry or borrow will induce a change of +1 or -1 in the high part.  */
2588       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2589 
2590       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2591 					 hi->input_section, output_bfd,
2592 					 error_message);
2593       if (ret != bfd_reloc_ok)
2594 	return ret;
2595 
2596       mips_hi16_list = hi->next;
2597       free (hi);
2598     }
2599 
2600   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2601 				      input_section, output_bfd,
2602 				      error_message);
2603 }
2604 
2605 /* A generic howto special_function.  This calculates and installs the
2606    relocation itself, thus avoiding the oft-discussed problems in
2607    bfd_perform_relocation and bfd_install_relocation.  */
2608 
2609 bfd_reloc_status_type
2610 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2611 			     asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2612 			     asection *input_section, bfd *output_bfd,
2613 			     char **error_message ATTRIBUTE_UNUSED)
2614 {
2615   bfd_signed_vma val;
2616   bfd_reloc_status_type status;
2617   bfd_boolean relocatable;
2618 
2619   relocatable = (output_bfd != NULL);
2620 
2621   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2622     return bfd_reloc_outofrange;
2623 
2624   /* Build up the field adjustment in VAL.  */
2625   val = 0;
2626   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2627     {
2628       /* Either we're calculating the final field value or we have a
2629 	 relocation against a section symbol.  Add in the section's
2630 	 offset or address.  */
2631       val += symbol->section->output_section->vma;
2632       val += symbol->section->output_offset;
2633     }
2634 
2635   if (!relocatable)
2636     {
2637       /* We're calculating the final field value.  Add in the symbol's value
2638 	 and, if pc-relative, subtract the address of the field itself.  */
2639       val += symbol->value;
2640       if (reloc_entry->howto->pc_relative)
2641 	{
2642 	  val -= input_section->output_section->vma;
2643 	  val -= input_section->output_offset;
2644 	  val -= reloc_entry->address;
2645 	}
2646     }
2647 
2648   /* VAL is now the final adjustment.  If we're keeping this relocation
2649      in the output file, and if the relocation uses a separate addend,
2650      we just need to add VAL to that addend.  Otherwise we need to add
2651      VAL to the relocation field itself.  */
2652   if (relocatable && !reloc_entry->howto->partial_inplace)
2653     reloc_entry->addend += val;
2654   else
2655     {
2656       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2657 
2658       /* Add in the separate addend, if any.  */
2659       val += reloc_entry->addend;
2660 
2661       /* Add VAL to the relocation field.  */
2662       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2663 				     location);
2664       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2665 				       location);
2666       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2667 				   location);
2668 
2669       if (status != bfd_reloc_ok)
2670 	return status;
2671     }
2672 
2673   if (relocatable)
2674     reloc_entry->address += input_section->output_offset;
2675 
2676   return bfd_reloc_ok;
2677 }
2678 
2679 /* Swap an entry in a .gptab section.  Note that these routines rely
2680    on the equivalence of the two elements of the union.  */
2681 
2682 static void
2683 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2684 			      Elf32_gptab *in)
2685 {
2686   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2687   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2688 }
2689 
2690 static void
2691 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2692 			       Elf32_External_gptab *ex)
2693 {
2694   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2695   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2696 }
2697 
2698 static void
2699 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2700 				Elf32_External_compact_rel *ex)
2701 {
2702   H_PUT_32 (abfd, in->id1, ex->id1);
2703   H_PUT_32 (abfd, in->num, ex->num);
2704   H_PUT_32 (abfd, in->id2, ex->id2);
2705   H_PUT_32 (abfd, in->offset, ex->offset);
2706   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2707   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2708 }
2709 
2710 static void
2711 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2712 			   Elf32_External_crinfo *ex)
2713 {
2714   unsigned long l;
2715 
2716   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2717        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2718        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2719        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2720   H_PUT_32 (abfd, l, ex->info);
2721   H_PUT_32 (abfd, in->konst, ex->konst);
2722   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2723 }
2724 
2725 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2726    routines swap this structure in and out.  They are used outside of
2727    BFD, so they are globally visible.  */
2728 
2729 void
2730 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2731 				Elf32_RegInfo *in)
2732 {
2733   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2734   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2735   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2736   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2737   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2738   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2739 }
2740 
2741 void
2742 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2743 				 Elf32_External_RegInfo *ex)
2744 {
2745   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2746   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2747   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2748   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2749   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2750   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2751 }
2752 
2753 /* In the 64 bit ABI, the .MIPS.options section holds register
2754    information in an Elf64_Reginfo structure.  These routines swap
2755    them in and out.  They are globally visible because they are used
2756    outside of BFD.  These routines are here so that gas can call them
2757    without worrying about whether the 64 bit ABI has been included.  */
2758 
2759 void
2760 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2761 				Elf64_Internal_RegInfo *in)
2762 {
2763   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2764   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2765   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2766   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2767   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2768   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2769   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2770 }
2771 
2772 void
2773 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2774 				 Elf64_External_RegInfo *ex)
2775 {
2776   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2777   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2778   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2779   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2780   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2781   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2782   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2783 }
2784 
2785 /* Swap in an options header.  */
2786 
2787 void
2788 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2789 			      Elf_Internal_Options *in)
2790 {
2791   in->kind = H_GET_8 (abfd, ex->kind);
2792   in->size = H_GET_8 (abfd, ex->size);
2793   in->section = H_GET_16 (abfd, ex->section);
2794   in->info = H_GET_32 (abfd, ex->info);
2795 }
2796 
2797 /* Swap out an options header.  */
2798 
2799 void
2800 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2801 			       Elf_External_Options *ex)
2802 {
2803   H_PUT_8 (abfd, in->kind, ex->kind);
2804   H_PUT_8 (abfd, in->size, ex->size);
2805   H_PUT_16 (abfd, in->section, ex->section);
2806   H_PUT_32 (abfd, in->info, ex->info);
2807 }
2808 
2809 /* Swap in an abiflags structure.  */
2810 
2811 void
2812 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2813 				  const Elf_External_ABIFlags_v0 *ex,
2814 				  Elf_Internal_ABIFlags_v0 *in)
2815 {
2816   in->version = H_GET_16 (abfd, ex->version);
2817   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2818   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2819   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2820   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2821   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2822   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2823   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2824   in->ases = H_GET_32 (abfd, ex->ases);
2825   in->flags1 = H_GET_32 (abfd, ex->flags1);
2826   in->flags2 = H_GET_32 (abfd, ex->flags2);
2827 }
2828 
2829 /* Swap out an abiflags structure.  */
2830 
2831 void
2832 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2833 				   const Elf_Internal_ABIFlags_v0 *in,
2834 				   Elf_External_ABIFlags_v0 *ex)
2835 {
2836   H_PUT_16 (abfd, in->version, ex->version);
2837   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2838   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2839   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2840   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2841   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2842   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2843   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2844   H_PUT_32 (abfd, in->ases, ex->ases);
2845   H_PUT_32 (abfd, in->flags1, ex->flags1);
2846   H_PUT_32 (abfd, in->flags2, ex->flags2);
2847 }
2848 
2849 /* This function is called via qsort() to sort the dynamic relocation
2850    entries by increasing r_symndx value.  */
2851 
2852 static int
2853 sort_dynamic_relocs (const void *arg1, const void *arg2)
2854 {
2855   Elf_Internal_Rela int_reloc1;
2856   Elf_Internal_Rela int_reloc2;
2857   int diff;
2858 
2859   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2860   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2861 
2862   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2863   if (diff != 0)
2864     return diff;
2865 
2866   if (int_reloc1.r_offset < int_reloc2.r_offset)
2867     return -1;
2868   if (int_reloc1.r_offset > int_reloc2.r_offset)
2869     return 1;
2870   return 0;
2871 }
2872 
2873 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2874 
2875 static int
2876 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2877 			const void *arg2 ATTRIBUTE_UNUSED)
2878 {
2879 #ifdef BFD64
2880   Elf_Internal_Rela int_reloc1[3];
2881   Elf_Internal_Rela int_reloc2[3];
2882 
2883   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2884     (reldyn_sorting_bfd, arg1, int_reloc1);
2885   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2886     (reldyn_sorting_bfd, arg2, int_reloc2);
2887 
2888   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2889     return -1;
2890   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2891     return 1;
2892 
2893   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2894     return -1;
2895   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2896     return 1;
2897   return 0;
2898 #else
2899   abort ();
2900 #endif
2901 }
2902 
2903 
2904 /* This routine is used to write out ECOFF debugging external symbol
2905    information.  It is called via mips_elf_link_hash_traverse.  The
2906    ECOFF external symbol information must match the ELF external
2907    symbol information.  Unfortunately, at this point we don't know
2908    whether a symbol is required by reloc information, so the two
2909    tables may wind up being different.  We must sort out the external
2910    symbol information before we can set the final size of the .mdebug
2911    section, and we must set the size of the .mdebug section before we
2912    can relocate any sections, and we can't know which symbols are
2913    required by relocation until we relocate the sections.
2914    Fortunately, it is relatively unlikely that any symbol will be
2915    stripped but required by a reloc.  In particular, it can not happen
2916    when generating a final executable.  */
2917 
2918 static bfd_boolean
2919 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2920 {
2921   struct extsym_info *einfo = data;
2922   bfd_boolean strip;
2923   asection *sec, *output_section;
2924 
2925   if (h->root.indx == -2)
2926     strip = FALSE;
2927   else if ((h->root.def_dynamic
2928 	    || h->root.ref_dynamic
2929 	    || h->root.type == bfd_link_hash_new)
2930 	   && !h->root.def_regular
2931 	   && !h->root.ref_regular)
2932     strip = TRUE;
2933   else if (einfo->info->strip == strip_all
2934 	   || (einfo->info->strip == strip_some
2935 	       && bfd_hash_lookup (einfo->info->keep_hash,
2936 				   h->root.root.root.string,
2937 				   FALSE, FALSE) == NULL))
2938     strip = TRUE;
2939   else
2940     strip = FALSE;
2941 
2942   if (strip)
2943     return TRUE;
2944 
2945   if (h->esym.ifd == -2)
2946     {
2947       h->esym.jmptbl = 0;
2948       h->esym.cobol_main = 0;
2949       h->esym.weakext = 0;
2950       h->esym.reserved = 0;
2951       h->esym.ifd = ifdNil;
2952       h->esym.asym.value = 0;
2953       h->esym.asym.st = stGlobal;
2954 
2955       if (h->root.root.type == bfd_link_hash_undefined
2956 	  || h->root.root.type == bfd_link_hash_undefweak)
2957 	{
2958 	  const char *name;
2959 
2960 	  /* Use undefined class.  Also, set class and type for some
2961 	     special symbols.  */
2962 	  name = h->root.root.root.string;
2963 	  if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2964 	      || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2965 	    {
2966 	      h->esym.asym.sc = scData;
2967 	      h->esym.asym.st = stLabel;
2968 	      h->esym.asym.value = 0;
2969 	    }
2970 	  else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2971 	    {
2972 	      h->esym.asym.sc = scAbs;
2973 	      h->esym.asym.st = stLabel;
2974 	      h->esym.asym.value =
2975 		mips_elf_hash_table (einfo->info)->procedure_count;
2976 	    }
2977 	  else
2978 	    h->esym.asym.sc = scUndefined;
2979 	}
2980       else if (h->root.root.type != bfd_link_hash_defined
2981 	  && h->root.root.type != bfd_link_hash_defweak)
2982 	h->esym.asym.sc = scAbs;
2983       else
2984 	{
2985 	  const char *name;
2986 
2987 	  sec = h->root.root.u.def.section;
2988 	  output_section = sec->output_section;
2989 
2990 	  /* When making a shared library and symbol h is the one from
2991 	     the another shared library, OUTPUT_SECTION may be null.  */
2992 	  if (output_section == NULL)
2993 	    h->esym.asym.sc = scUndefined;
2994 	  else
2995 	    {
2996 	      name = bfd_section_name (output_section);
2997 
2998 	      if (strcmp (name, ".text") == 0)
2999 		h->esym.asym.sc = scText;
3000 	      else if (strcmp (name, ".data") == 0)
3001 		h->esym.asym.sc = scData;
3002 	      else if (strcmp (name, ".sdata") == 0)
3003 		h->esym.asym.sc = scSData;
3004 	      else if (strcmp (name, ".rodata") == 0
3005 		       || strcmp (name, ".rdata") == 0)
3006 		h->esym.asym.sc = scRData;
3007 	      else if (strcmp (name, ".bss") == 0)
3008 		h->esym.asym.sc = scBss;
3009 	      else if (strcmp (name, ".sbss") == 0)
3010 		h->esym.asym.sc = scSBss;
3011 	      else if (strcmp (name, ".init") == 0)
3012 		h->esym.asym.sc = scInit;
3013 	      else if (strcmp (name, ".fini") == 0)
3014 		h->esym.asym.sc = scFini;
3015 	      else
3016 		h->esym.asym.sc = scAbs;
3017 	    }
3018 	}
3019 
3020       h->esym.asym.reserved = 0;
3021       h->esym.asym.index = indexNil;
3022     }
3023 
3024   if (h->root.root.type == bfd_link_hash_common)
3025     h->esym.asym.value = h->root.root.u.c.size;
3026   else if (h->root.root.type == bfd_link_hash_defined
3027 	   || h->root.root.type == bfd_link_hash_defweak)
3028     {
3029       if (h->esym.asym.sc == scCommon)
3030 	h->esym.asym.sc = scBss;
3031       else if (h->esym.asym.sc == scSCommon)
3032 	h->esym.asym.sc = scSBss;
3033 
3034       sec = h->root.root.u.def.section;
3035       output_section = sec->output_section;
3036       if (output_section != NULL)
3037 	h->esym.asym.value = (h->root.root.u.def.value
3038 			      + sec->output_offset
3039 			      + output_section->vma);
3040       else
3041 	h->esym.asym.value = 0;
3042     }
3043   else
3044     {
3045       struct mips_elf_link_hash_entry *hd = h;
3046 
3047       while (hd->root.root.type == bfd_link_hash_indirect)
3048 	hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
3049 
3050       if (hd->needs_lazy_stub)
3051 	{
3052 	  BFD_ASSERT (hd->root.plt.plist != NULL);
3053 	  BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
3054 	  /* Set type and value for a symbol with a function stub.  */
3055 	  h->esym.asym.st = stProc;
3056 	  sec = hd->root.root.u.def.section;
3057 	  if (sec == NULL)
3058 	    h->esym.asym.value = 0;
3059 	  else
3060 	    {
3061 	      output_section = sec->output_section;
3062 	      if (output_section != NULL)
3063 		h->esym.asym.value = (hd->root.plt.plist->stub_offset
3064 				      + sec->output_offset
3065 				      + output_section->vma);
3066 	      else
3067 		h->esym.asym.value = 0;
3068 	    }
3069 	}
3070     }
3071 
3072   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
3073 				      h->root.root.root.string,
3074 				      &h->esym))
3075     {
3076       einfo->failed = TRUE;
3077       return FALSE;
3078     }
3079 
3080   return TRUE;
3081 }
3082 
3083 /* A comparison routine used to sort .gptab entries.  */
3084 
3085 static int
3086 gptab_compare (const void *p1, const void *p2)
3087 {
3088   const Elf32_gptab *a1 = p1;
3089   const Elf32_gptab *a2 = p2;
3090 
3091   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
3092 }
3093 
3094 /* Functions to manage the got entry hash table.  */
3095 
3096 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
3097    hash number.  */
3098 
3099 static INLINE hashval_t
3100 mips_elf_hash_bfd_vma (bfd_vma addr)
3101 {
3102 #ifdef BFD64
3103   return addr + (addr >> 32);
3104 #else
3105   return addr;
3106 #endif
3107 }
3108 
3109 static hashval_t
3110 mips_elf_got_entry_hash (const void *entry_)
3111 {
3112   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3113 
3114   return (entry->symndx
3115 	  + ((entry->tls_type == GOT_TLS_LDM) << 18)
3116 	  + (entry->tls_type == GOT_TLS_LDM ? 0
3117 	     : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3118 	     : entry->symndx >= 0 ? (entry->abfd->id
3119 				     + mips_elf_hash_bfd_vma (entry->d.addend))
3120 	     : entry->d.h->root.root.root.hash));
3121 }
3122 
3123 static int
3124 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3125 {
3126   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3127   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3128 
3129   return (e1->symndx == e2->symndx
3130 	  && e1->tls_type == e2->tls_type
3131 	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
3132 	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3133 	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3134 				   && e1->d.addend == e2->d.addend)
3135 	      : e2->abfd && e1->d.h == e2->d.h));
3136 }
3137 
3138 static hashval_t
3139 mips_got_page_ref_hash (const void *ref_)
3140 {
3141   const struct mips_got_page_ref *ref;
3142 
3143   ref = (const struct mips_got_page_ref *) ref_;
3144   return ((ref->symndx >= 0
3145 	   ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3146 	   : ref->u.h->root.root.root.hash)
3147 	  + mips_elf_hash_bfd_vma (ref->addend));
3148 }
3149 
3150 static int
3151 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3152 {
3153   const struct mips_got_page_ref *ref1, *ref2;
3154 
3155   ref1 = (const struct mips_got_page_ref *) ref1_;
3156   ref2 = (const struct mips_got_page_ref *) ref2_;
3157   return (ref1->symndx == ref2->symndx
3158 	  && (ref1->symndx < 0
3159 	      ? ref1->u.h == ref2->u.h
3160 	      : ref1->u.abfd == ref2->u.abfd)
3161 	  && ref1->addend == ref2->addend);
3162 }
3163 
3164 static hashval_t
3165 mips_got_page_entry_hash (const void *entry_)
3166 {
3167   const struct mips_got_page_entry *entry;
3168 
3169   entry = (const struct mips_got_page_entry *) entry_;
3170   return entry->sec->id;
3171 }
3172 
3173 static int
3174 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3175 {
3176   const struct mips_got_page_entry *entry1, *entry2;
3177 
3178   entry1 = (const struct mips_got_page_entry *) entry1_;
3179   entry2 = (const struct mips_got_page_entry *) entry2_;
3180   return entry1->sec == entry2->sec;
3181 }
3182 
3183 /* Create and return a new mips_got_info structure.  */
3184 
3185 static struct mips_got_info *
3186 mips_elf_create_got_info (bfd *abfd)
3187 {
3188   struct mips_got_info *g;
3189 
3190   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3191   if (g == NULL)
3192     return NULL;
3193 
3194   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3195 				    mips_elf_got_entry_eq, NULL);
3196   if (g->got_entries == NULL)
3197     return NULL;
3198 
3199   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3200 				      mips_got_page_ref_eq, NULL);
3201   if (g->got_page_refs == NULL)
3202     return NULL;
3203 
3204   return g;
3205 }
3206 
3207 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3208    CREATE_P and if ABFD doesn't already have a GOT.  */
3209 
3210 static struct mips_got_info *
3211 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3212 {
3213   struct mips_elf_obj_tdata *tdata;
3214 
3215   if (!is_mips_elf (abfd))
3216     return NULL;
3217 
3218   tdata = mips_elf_tdata (abfd);
3219   if (!tdata->got && create_p)
3220     tdata->got = mips_elf_create_got_info (abfd);
3221   return tdata->got;
3222 }
3223 
3224 /* Record that ABFD should use output GOT G.  */
3225 
3226 static void
3227 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3228 {
3229   struct mips_elf_obj_tdata *tdata;
3230 
3231   BFD_ASSERT (is_mips_elf (abfd));
3232   tdata = mips_elf_tdata (abfd);
3233   if (tdata->got)
3234     {
3235       /* The GOT structure itself and the hash table entries are
3236 	 allocated to a bfd, but the hash tables aren't.  */
3237       htab_delete (tdata->got->got_entries);
3238       htab_delete (tdata->got->got_page_refs);
3239       if (tdata->got->got_page_entries)
3240 	htab_delete (tdata->got->got_page_entries);
3241     }
3242   tdata->got = g;
3243 }
3244 
3245 /* Return the dynamic relocation section.  If it doesn't exist, try to
3246    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3247    if creation fails.  */
3248 
3249 static asection *
3250 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3251 {
3252   const char *dname;
3253   asection *sreloc;
3254   bfd *dynobj;
3255 
3256   dname = MIPS_ELF_REL_DYN_NAME (info);
3257   dynobj = elf_hash_table (info)->dynobj;
3258   sreloc = bfd_get_linker_section (dynobj, dname);
3259   if (sreloc == NULL && create_p)
3260     {
3261       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3262 						   (SEC_ALLOC
3263 						    | SEC_LOAD
3264 						    | SEC_HAS_CONTENTS
3265 						    | SEC_IN_MEMORY
3266 						    | SEC_LINKER_CREATED
3267 						    | SEC_READONLY));
3268       if (sreloc == NULL
3269 	  || !bfd_set_section_alignment (sreloc,
3270 					 MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3271 	return NULL;
3272     }
3273   return sreloc;
3274 }
3275 
3276 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3277 
3278 static int
3279 mips_elf_reloc_tls_type (unsigned int r_type)
3280 {
3281   if (tls_gd_reloc_p (r_type))
3282     return GOT_TLS_GD;
3283 
3284   if (tls_ldm_reloc_p (r_type))
3285     return GOT_TLS_LDM;
3286 
3287   if (tls_gottprel_reloc_p (r_type))
3288     return GOT_TLS_IE;
3289 
3290   return GOT_TLS_NONE;
3291 }
3292 
3293 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3294 
3295 static int
3296 mips_tls_got_entries (unsigned int type)
3297 {
3298   switch (type)
3299     {
3300     case GOT_TLS_GD:
3301     case GOT_TLS_LDM:
3302       return 2;
3303 
3304     case GOT_TLS_IE:
3305       return 1;
3306 
3307     case GOT_TLS_NONE:
3308       return 0;
3309     }
3310   abort ();
3311 }
3312 
3313 /* Count the number of relocations needed for a TLS GOT entry, with
3314    access types from TLS_TYPE, and symbol H (or a local symbol if H
3315    is NULL).  */
3316 
3317 static int
3318 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3319 		     struct elf_link_hash_entry *h)
3320 {
3321   int indx = 0;
3322   bfd_boolean need_relocs = FALSE;
3323   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3324 
3325   if (h != NULL
3326       && h->dynindx != -1
3327       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), h)
3328       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, h)))
3329     indx = h->dynindx;
3330 
3331   if ((bfd_link_dll (info) || indx != 0)
3332       && (h == NULL
3333 	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3334 	  || h->root.type != bfd_link_hash_undefweak))
3335     need_relocs = TRUE;
3336 
3337   if (!need_relocs)
3338     return 0;
3339 
3340   switch (tls_type)
3341     {
3342     case GOT_TLS_GD:
3343       return indx != 0 ? 2 : 1;
3344 
3345     case GOT_TLS_IE:
3346       return 1;
3347 
3348     case GOT_TLS_LDM:
3349       return bfd_link_dll (info) ? 1 : 0;
3350 
3351     default:
3352       return 0;
3353     }
3354 }
3355 
3356 /* Add the number of GOT entries and TLS relocations required by ENTRY
3357    to G.  */
3358 
3359 static void
3360 mips_elf_count_got_entry (struct bfd_link_info *info,
3361 			  struct mips_got_info *g,
3362 			  struct mips_got_entry *entry)
3363 {
3364   if (entry->tls_type)
3365     {
3366       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3367       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3368 					entry->symndx < 0
3369 					? &entry->d.h->root : NULL);
3370     }
3371   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3372     g->local_gotno += 1;
3373   else
3374     g->global_gotno += 1;
3375 }
3376 
3377 /* Output a simple dynamic relocation into SRELOC.  */
3378 
3379 static void
3380 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3381 				    asection *sreloc,
3382 				    unsigned long reloc_index,
3383 				    unsigned long indx,
3384 				    int r_type,
3385 				    bfd_vma offset)
3386 {
3387   Elf_Internal_Rela rel[3];
3388 
3389   memset (rel, 0, sizeof (rel));
3390 
3391   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3392   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3393 
3394   if (ABI_64_P (output_bfd))
3395     {
3396       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3397 	(output_bfd, &rel[0],
3398 	 (sreloc->contents
3399 	  + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3400     }
3401   else
3402     bfd_elf32_swap_reloc_out
3403       (output_bfd, &rel[0],
3404        (sreloc->contents
3405 	+ reloc_index * sizeof (Elf32_External_Rel)));
3406 }
3407 
3408 /* Initialize a set of TLS GOT entries for one symbol.  */
3409 
3410 static void
3411 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3412 			       struct mips_got_entry *entry,
3413 			       struct mips_elf_link_hash_entry *h,
3414 			       bfd_vma value)
3415 {
3416   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3417   struct mips_elf_link_hash_table *htab;
3418   int indx;
3419   asection *sreloc, *sgot;
3420   bfd_vma got_offset, got_offset2;
3421   bfd_boolean need_relocs = FALSE;
3422 
3423   htab = mips_elf_hash_table (info);
3424   if (htab == NULL)
3425     return;
3426 
3427   sgot = htab->root.sgot;
3428 
3429   indx = 0;
3430   if (h != NULL
3431       && h->root.dynindx != -1
3432       && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, bfd_link_pic (info), &h->root)
3433       && (bfd_link_dll (info) || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3434     indx = h->root.dynindx;
3435 
3436   if (entry->tls_initialized)
3437     return;
3438 
3439   if ((bfd_link_dll (info) || indx != 0)
3440       && (h == NULL
3441 	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3442 	  || h->root.type != bfd_link_hash_undefweak))
3443     need_relocs = TRUE;
3444 
3445   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3446      be defined at all; assume that the value doesn't matter in that
3447      case.  Otherwise complain if we would use the value.  */
3448   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3449 	      || h->root.root.type == bfd_link_hash_undefweak);
3450 
3451   /* Emit necessary relocations.  */
3452   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3453   got_offset = entry->gotidx;
3454 
3455   switch (entry->tls_type)
3456     {
3457     case GOT_TLS_GD:
3458       /* General Dynamic.  */
3459       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3460 
3461       if (need_relocs)
3462 	{
3463 	  mips_elf_output_dynamic_relocation
3464 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3465 	     ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3466 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3467 
3468 	  if (indx)
3469 	    mips_elf_output_dynamic_relocation
3470 	      (abfd, sreloc, sreloc->reloc_count++, indx,
3471 	       ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3472 	       sgot->output_offset + sgot->output_section->vma + got_offset2);
3473 	  else
3474 	    MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3475 			       sgot->contents + got_offset2);
3476 	}
3477       else
3478 	{
3479 	  MIPS_ELF_PUT_WORD (abfd, 1,
3480 			     sgot->contents + got_offset);
3481 	  MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3482 			     sgot->contents + got_offset2);
3483 	}
3484       break;
3485 
3486     case GOT_TLS_IE:
3487       /* Initial Exec model.  */
3488       if (need_relocs)
3489 	{
3490 	  if (indx == 0)
3491 	    MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3492 			       sgot->contents + got_offset);
3493 	  else
3494 	    MIPS_ELF_PUT_WORD (abfd, 0,
3495 			       sgot->contents + got_offset);
3496 
3497 	  mips_elf_output_dynamic_relocation
3498 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3499 	     ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3500 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3501 	}
3502       else
3503 	MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3504 			   sgot->contents + got_offset);
3505       break;
3506 
3507     case GOT_TLS_LDM:
3508       /* The initial offset is zero, and the LD offsets will include the
3509 	 bias by DTP_OFFSET.  */
3510       MIPS_ELF_PUT_WORD (abfd, 0,
3511 			 sgot->contents + got_offset
3512 			 + MIPS_ELF_GOT_SIZE (abfd));
3513 
3514       if (!bfd_link_dll (info))
3515 	MIPS_ELF_PUT_WORD (abfd, 1,
3516 			   sgot->contents + got_offset);
3517       else
3518 	mips_elf_output_dynamic_relocation
3519 	  (abfd, sreloc, sreloc->reloc_count++, indx,
3520 	   ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3521 	   sgot->output_offset + sgot->output_section->vma + got_offset);
3522       break;
3523 
3524     default:
3525       abort ();
3526     }
3527 
3528   entry->tls_initialized = TRUE;
3529 }
3530 
3531 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3532    for global symbol H.  .got.plt comes before the GOT, so the offset
3533    will be negative.  */
3534 
3535 static bfd_vma
3536 mips_elf_gotplt_index (struct bfd_link_info *info,
3537 		       struct elf_link_hash_entry *h)
3538 {
3539   bfd_vma got_address, got_value;
3540   struct mips_elf_link_hash_table *htab;
3541 
3542   htab = mips_elf_hash_table (info);
3543   BFD_ASSERT (htab != NULL);
3544 
3545   BFD_ASSERT (h->plt.plist != NULL);
3546   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3547 
3548   /* Calculate the address of the associated .got.plt entry.  */
3549   got_address = (htab->root.sgotplt->output_section->vma
3550 		 + htab->root.sgotplt->output_offset
3551 		 + (h->plt.plist->gotplt_index
3552 		    * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3553 
3554   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3555   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3556 	       + htab->root.hgot->root.u.def.section->output_offset
3557 	       + htab->root.hgot->root.u.def.value);
3558 
3559   return got_address - got_value;
3560 }
3561 
3562 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3563    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3564    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3565    offset can be found.  */
3566 
3567 static bfd_vma
3568 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3569 			  bfd_vma value, unsigned long r_symndx,
3570 			  struct mips_elf_link_hash_entry *h, int r_type)
3571 {
3572   struct mips_elf_link_hash_table *htab;
3573   struct mips_got_entry *entry;
3574 
3575   htab = mips_elf_hash_table (info);
3576   BFD_ASSERT (htab != NULL);
3577 
3578   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3579 					   r_symndx, h, r_type);
3580   if (!entry)
3581     return MINUS_ONE;
3582 
3583   if (entry->tls_type)
3584     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3585   return entry->gotidx;
3586 }
3587 
3588 /* Return the GOT index of global symbol H in the primary GOT.  */
3589 
3590 static bfd_vma
3591 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3592 				   struct elf_link_hash_entry *h)
3593 {
3594   struct mips_elf_link_hash_table *htab;
3595   long global_got_dynindx;
3596   struct mips_got_info *g;
3597   bfd_vma got_index;
3598 
3599   htab = mips_elf_hash_table (info);
3600   BFD_ASSERT (htab != NULL);
3601 
3602   global_got_dynindx = 0;
3603   if (htab->global_gotsym != NULL)
3604     global_got_dynindx = htab->global_gotsym->dynindx;
3605 
3606   /* Once we determine the global GOT entry with the lowest dynamic
3607      symbol table index, we must put all dynamic symbols with greater
3608      indices into the primary GOT.  That makes it easy to calculate the
3609      GOT offset.  */
3610   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3611   g = mips_elf_bfd_got (obfd, FALSE);
3612   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3613 	       * MIPS_ELF_GOT_SIZE (obfd));
3614   BFD_ASSERT (got_index < htab->root.sgot->size);
3615 
3616   return got_index;
3617 }
3618 
3619 /* Return the GOT index for the global symbol indicated by H, which is
3620    referenced by a relocation of type R_TYPE in IBFD.  */
3621 
3622 static bfd_vma
3623 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3624 			   struct elf_link_hash_entry *h, int r_type)
3625 {
3626   struct mips_elf_link_hash_table *htab;
3627   struct mips_got_info *g;
3628   struct mips_got_entry lookup, *entry;
3629   bfd_vma gotidx;
3630 
3631   htab = mips_elf_hash_table (info);
3632   BFD_ASSERT (htab != NULL);
3633 
3634   g = mips_elf_bfd_got (ibfd, FALSE);
3635   BFD_ASSERT (g);
3636 
3637   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3638   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3639     return mips_elf_primary_global_got_index (obfd, info, h);
3640 
3641   lookup.abfd = ibfd;
3642   lookup.symndx = -1;
3643   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3644   entry = htab_find (g->got_entries, &lookup);
3645   BFD_ASSERT (entry);
3646 
3647   gotidx = entry->gotidx;
3648   BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3649 
3650   if (lookup.tls_type)
3651     {
3652       bfd_vma value = MINUS_ONE;
3653 
3654       if ((h->root.type == bfd_link_hash_defined
3655 	   || h->root.type == bfd_link_hash_defweak)
3656 	  && h->root.u.def.section->output_section)
3657 	value = (h->root.u.def.value
3658 		 + h->root.u.def.section->output_offset
3659 		 + h->root.u.def.section->output_section->vma);
3660 
3661       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3662     }
3663   return gotidx;
3664 }
3665 
3666 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3667    entries are supposed to be placed at small offsets in the GOT, i.e.,
3668    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3669    entry could be created.  If OFFSETP is nonnull, use it to return the
3670    offset of the GOT entry from VALUE.  */
3671 
3672 static bfd_vma
3673 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3674 		   bfd_vma value, bfd_vma *offsetp)
3675 {
3676   bfd_vma page, got_index;
3677   struct mips_got_entry *entry;
3678 
3679   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3680   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3681 					   NULL, R_MIPS_GOT_PAGE);
3682 
3683   if (!entry)
3684     return MINUS_ONE;
3685 
3686   got_index = entry->gotidx;
3687 
3688   if (offsetp)
3689     *offsetp = value - entry->d.address;
3690 
3691   return got_index;
3692 }
3693 
3694 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3695    EXTERNAL is true if the relocation was originally against a global
3696    symbol that binds locally.  */
3697 
3698 static bfd_vma
3699 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3700 		      bfd_vma value, bfd_boolean external)
3701 {
3702   struct mips_got_entry *entry;
3703 
3704   /* GOT16 relocations against local symbols are followed by a LO16
3705      relocation; those against global symbols are not.  Thus if the
3706      symbol was originally local, the GOT16 relocation should load the
3707      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3708   if (! external)
3709     value = mips_elf_high (value) << 16;
3710 
3711   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3712      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3713      same in all cases.  */
3714   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3715 					   NULL, R_MIPS_GOT16);
3716   if (entry)
3717     return entry->gotidx;
3718   else
3719     return MINUS_ONE;
3720 }
3721 
3722 /* Returns the offset for the entry at the INDEXth position
3723    in the GOT.  */
3724 
3725 static bfd_vma
3726 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3727 				bfd *input_bfd, bfd_vma got_index)
3728 {
3729   struct mips_elf_link_hash_table *htab;
3730   asection *sgot;
3731   bfd_vma gp;
3732 
3733   htab = mips_elf_hash_table (info);
3734   BFD_ASSERT (htab != NULL);
3735 
3736   sgot = htab->root.sgot;
3737   gp = _bfd_get_gp_value (output_bfd)
3738     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3739 
3740   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3741 }
3742 
3743 /* Create and return a local GOT entry for VALUE, which was calculated
3744    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3745    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3746    instead.  */
3747 
3748 static struct mips_got_entry *
3749 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3750 				 bfd *ibfd, bfd_vma value,
3751 				 unsigned long r_symndx,
3752 				 struct mips_elf_link_hash_entry *h,
3753 				 int r_type)
3754 {
3755   struct mips_got_entry lookup, *entry;
3756   void **loc;
3757   struct mips_got_info *g;
3758   struct mips_elf_link_hash_table *htab;
3759   bfd_vma gotidx;
3760 
3761   htab = mips_elf_hash_table (info);
3762   BFD_ASSERT (htab != NULL);
3763 
3764   g = mips_elf_bfd_got (ibfd, FALSE);
3765   if (g == NULL)
3766     {
3767       g = mips_elf_bfd_got (abfd, FALSE);
3768       BFD_ASSERT (g != NULL);
3769     }
3770 
3771   /* This function shouldn't be called for symbols that live in the global
3772      area of the GOT.  */
3773   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3774 
3775   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3776   if (lookup.tls_type)
3777     {
3778       lookup.abfd = ibfd;
3779       if (tls_ldm_reloc_p (r_type))
3780 	{
3781 	  lookup.symndx = 0;
3782 	  lookup.d.addend = 0;
3783 	}
3784       else if (h == NULL)
3785 	{
3786 	  lookup.symndx = r_symndx;
3787 	  lookup.d.addend = 0;
3788 	}
3789       else
3790 	{
3791 	  lookup.symndx = -1;
3792 	  lookup.d.h = h;
3793 	}
3794 
3795       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3796       BFD_ASSERT (entry);
3797 
3798       gotidx = entry->gotidx;
3799       BFD_ASSERT (gotidx > 0 && gotidx < htab->root.sgot->size);
3800 
3801       return entry;
3802     }
3803 
3804   lookup.abfd = NULL;
3805   lookup.symndx = -1;
3806   lookup.d.address = value;
3807   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3808   if (!loc)
3809     return NULL;
3810 
3811   entry = (struct mips_got_entry *) *loc;
3812   if (entry)
3813     return entry;
3814 
3815   if (g->assigned_low_gotno > g->assigned_high_gotno)
3816     {
3817       /* We didn't allocate enough space in the GOT.  */
3818       _bfd_error_handler
3819 	(_("not enough GOT space for local GOT entries"));
3820       bfd_set_error (bfd_error_bad_value);
3821       return NULL;
3822     }
3823 
3824   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3825   if (!entry)
3826     return NULL;
3827 
3828   if (got16_reloc_p (r_type)
3829       || call16_reloc_p (r_type)
3830       || got_page_reloc_p (r_type)
3831       || got_disp_reloc_p (r_type))
3832     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3833   else
3834     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3835 
3836   *entry = lookup;
3837   *loc = entry;
3838 
3839   MIPS_ELF_PUT_WORD (abfd, value, htab->root.sgot->contents + entry->gotidx);
3840 
3841   /* These GOT entries need a dynamic relocation on VxWorks.  */
3842   if (htab->is_vxworks)
3843     {
3844       Elf_Internal_Rela outrel;
3845       asection *s;
3846       bfd_byte *rloc;
3847       bfd_vma got_address;
3848 
3849       s = mips_elf_rel_dyn_section (info, FALSE);
3850       got_address = (htab->root.sgot->output_section->vma
3851 		     + htab->root.sgot->output_offset
3852 		     + entry->gotidx);
3853 
3854       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3855       outrel.r_offset = got_address;
3856       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3857       outrel.r_addend = value;
3858       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3859     }
3860 
3861   return entry;
3862 }
3863 
3864 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3865    The number might be exact or a worst-case estimate, depending on how
3866    much information is available to elf_backend_omit_section_dynsym at
3867    the current linking stage.  */
3868 
3869 static bfd_size_type
3870 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3871 {
3872   bfd_size_type count;
3873 
3874   count = 0;
3875   if (bfd_link_pic (info)
3876       || elf_hash_table (info)->is_relocatable_executable)
3877     {
3878       asection *p;
3879       const struct elf_backend_data *bed;
3880 
3881       bed = get_elf_backend_data (output_bfd);
3882       for (p = output_bfd->sections; p ; p = p->next)
3883 	if ((p->flags & SEC_EXCLUDE) == 0
3884 	    && (p->flags & SEC_ALLOC) != 0
3885 	    && elf_hash_table (info)->dynamic_relocs
3886 	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3887 	  ++count;
3888     }
3889   return count;
3890 }
3891 
3892 /* Sort the dynamic symbol table so that symbols that need GOT entries
3893    appear towards the end.  */
3894 
3895 static bfd_boolean
3896 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3897 {
3898   struct mips_elf_link_hash_table *htab;
3899   struct mips_elf_hash_sort_data hsd;
3900   struct mips_got_info *g;
3901 
3902   htab = mips_elf_hash_table (info);
3903   BFD_ASSERT (htab != NULL);
3904 
3905   if (htab->root.dynsymcount == 0)
3906     return TRUE;
3907 
3908   g = htab->got_info;
3909   if (g == NULL)
3910     return TRUE;
3911 
3912   hsd.low = NULL;
3913   hsd.max_unref_got_dynindx
3914     = hsd.min_got_dynindx
3915     = (htab->root.dynsymcount - g->reloc_only_gotno);
3916   /* Add 1 to local symbol indices to account for the mandatory NULL entry
3917      at the head of the table; see `_bfd_elf_link_renumber_dynsyms'.  */
3918   hsd.max_local_dynindx = count_section_dynsyms (abfd, info) + 1;
3919   hsd.max_non_got_dynindx = htab->root.local_dynsymcount + 1;
3920   hsd.output_bfd = abfd;
3921   if (htab->root.dynobj != NULL
3922       && htab->root.dynamic_sections_created
3923       && info->emit_gnu_hash)
3924     {
3925       asection *s = bfd_get_linker_section (htab->root.dynobj, ".MIPS.xhash");
3926       BFD_ASSERT (s != NULL);
3927       hsd.mipsxhash = s->contents;
3928       BFD_ASSERT (hsd.mipsxhash != NULL);
3929     }
3930   else
3931     hsd.mipsxhash = NULL;
3932   mips_elf_link_hash_traverse (htab, mips_elf_sort_hash_table_f, &hsd);
3933 
3934   /* There should have been enough room in the symbol table to
3935      accommodate both the GOT and non-GOT symbols.  */
3936   BFD_ASSERT (hsd.max_local_dynindx <= htab->root.local_dynsymcount + 1);
3937   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3938   BFD_ASSERT (hsd.max_unref_got_dynindx == htab->root.dynsymcount);
3939   BFD_ASSERT (htab->root.dynsymcount - hsd.min_got_dynindx == g->global_gotno);
3940 
3941   /* Now we know which dynamic symbol has the lowest dynamic symbol
3942      table index in the GOT.  */
3943   htab->global_gotsym = hsd.low;
3944 
3945   return TRUE;
3946 }
3947 
3948 /* If H needs a GOT entry, assign it the highest available dynamic
3949    index.  Otherwise, assign it the lowest available dynamic
3950    index.  */
3951 
3952 static bfd_boolean
3953 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3954 {
3955   struct mips_elf_hash_sort_data *hsd = data;
3956 
3957   /* Symbols without dynamic symbol table entries aren't interesting
3958      at all.  */
3959   if (h->root.dynindx == -1)
3960     return TRUE;
3961 
3962   switch (h->global_got_area)
3963     {
3964     case GGA_NONE:
3965       if (h->root.forced_local)
3966 	h->root.dynindx = hsd->max_local_dynindx++;
3967       else
3968 	h->root.dynindx = hsd->max_non_got_dynindx++;
3969       break;
3970 
3971     case GGA_NORMAL:
3972       h->root.dynindx = --hsd->min_got_dynindx;
3973       hsd->low = (struct elf_link_hash_entry *) h;
3974       break;
3975 
3976     case GGA_RELOC_ONLY:
3977       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3978 	hsd->low = (struct elf_link_hash_entry *) h;
3979       h->root.dynindx = hsd->max_unref_got_dynindx++;
3980       break;
3981     }
3982 
3983   /* Populate the .MIPS.xhash translation table entry with
3984      the symbol dynindx.  */
3985   if (h->mipsxhash_loc != 0 && hsd->mipsxhash != NULL)
3986     bfd_put_32 (hsd->output_bfd, h->root.dynindx,
3987 		hsd->mipsxhash + h->mipsxhash_loc);
3988 
3989   return TRUE;
3990 }
3991 
3992 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3993    (which is owned by the caller and shouldn't be added to the
3994    hash table directly).  */
3995 
3996 static bfd_boolean
3997 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3998 			   struct mips_got_entry *lookup)
3999 {
4000   struct mips_elf_link_hash_table *htab;
4001   struct mips_got_entry *entry;
4002   struct mips_got_info *g;
4003   void **loc, **bfd_loc;
4004 
4005   /* Make sure there's a slot for this entry in the master GOT.  */
4006   htab = mips_elf_hash_table (info);
4007   g = htab->got_info;
4008   loc = htab_find_slot (g->got_entries, lookup, INSERT);
4009   if (!loc)
4010     return FALSE;
4011 
4012   /* Populate the entry if it isn't already.  */
4013   entry = (struct mips_got_entry *) *loc;
4014   if (!entry)
4015     {
4016       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
4017       if (!entry)
4018 	return FALSE;
4019 
4020       lookup->tls_initialized = FALSE;
4021       lookup->gotidx = -1;
4022       *entry = *lookup;
4023       *loc = entry;
4024     }
4025 
4026   /* Reuse the same GOT entry for the BFD's GOT.  */
4027   g = mips_elf_bfd_got (abfd, TRUE);
4028   if (!g)
4029     return FALSE;
4030 
4031   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
4032   if (!bfd_loc)
4033     return FALSE;
4034 
4035   if (!*bfd_loc)
4036     *bfd_loc = entry;
4037   return TRUE;
4038 }
4039 
4040 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
4041    entry for it.  FOR_CALL is true if the caller is only interested in
4042    using the GOT entry for calls.  */
4043 
4044 static bfd_boolean
4045 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
4046 				   bfd *abfd, struct bfd_link_info *info,
4047 				   bfd_boolean for_call, int r_type)
4048 {
4049   struct mips_elf_link_hash_table *htab;
4050   struct mips_elf_link_hash_entry *hmips;
4051   struct mips_got_entry entry;
4052   unsigned char tls_type;
4053 
4054   htab = mips_elf_hash_table (info);
4055   BFD_ASSERT (htab != NULL);
4056 
4057   hmips = (struct mips_elf_link_hash_entry *) h;
4058   if (!for_call)
4059     hmips->got_only_for_calls = FALSE;
4060 
4061   /* A global symbol in the GOT must also be in the dynamic symbol
4062      table.  */
4063   if (h->dynindx == -1)
4064     {
4065       switch (ELF_ST_VISIBILITY (h->other))
4066 	{
4067 	case STV_INTERNAL:
4068 	case STV_HIDDEN:
4069 	  _bfd_mips_elf_hide_symbol (info, h, TRUE);
4070 	  break;
4071 	}
4072       if (!bfd_elf_link_record_dynamic_symbol (info, h))
4073 	return FALSE;
4074     }
4075 
4076   tls_type = mips_elf_reloc_tls_type (r_type);
4077   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
4078     hmips->global_got_area = GGA_NORMAL;
4079 
4080   entry.abfd = abfd;
4081   entry.symndx = -1;
4082   entry.d.h = (struct mips_elf_link_hash_entry *) h;
4083   entry.tls_type = tls_type;
4084   return mips_elf_record_got_entry (info, abfd, &entry);
4085 }
4086 
4087 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
4088    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
4089 
4090 static bfd_boolean
4091 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
4092 				  struct bfd_link_info *info, int r_type)
4093 {
4094   struct mips_elf_link_hash_table *htab;
4095   struct mips_got_info *g;
4096   struct mips_got_entry entry;
4097 
4098   htab = mips_elf_hash_table (info);
4099   BFD_ASSERT (htab != NULL);
4100 
4101   g = htab->got_info;
4102   BFD_ASSERT (g != NULL);
4103 
4104   entry.abfd = abfd;
4105   entry.symndx = symndx;
4106   entry.d.addend = addend;
4107   entry.tls_type = mips_elf_reloc_tls_type (r_type);
4108   return mips_elf_record_got_entry (info, abfd, &entry);
4109 }
4110 
4111 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
4112    H is the symbol's hash table entry, or null if SYMNDX is local
4113    to ABFD.  */
4114 
4115 static bfd_boolean
4116 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
4117 			      long symndx, struct elf_link_hash_entry *h,
4118 			      bfd_signed_vma addend)
4119 {
4120   struct mips_elf_link_hash_table *htab;
4121   struct mips_got_info *g1, *g2;
4122   struct mips_got_page_ref lookup, *entry;
4123   void **loc, **bfd_loc;
4124 
4125   htab = mips_elf_hash_table (info);
4126   BFD_ASSERT (htab != NULL);
4127 
4128   g1 = htab->got_info;
4129   BFD_ASSERT (g1 != NULL);
4130 
4131   if (h)
4132     {
4133       lookup.symndx = -1;
4134       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4135     }
4136   else
4137     {
4138       lookup.symndx = symndx;
4139       lookup.u.abfd = abfd;
4140     }
4141   lookup.addend = addend;
4142   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4143   if (loc == NULL)
4144     return FALSE;
4145 
4146   entry = (struct mips_got_page_ref *) *loc;
4147   if (!entry)
4148     {
4149       entry = bfd_alloc (abfd, sizeof (*entry));
4150       if (!entry)
4151 	return FALSE;
4152 
4153       *entry = lookup;
4154       *loc = entry;
4155     }
4156 
4157   /* Add the same entry to the BFD's GOT.  */
4158   g2 = mips_elf_bfd_got (abfd, TRUE);
4159   if (!g2)
4160     return FALSE;
4161 
4162   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4163   if (!bfd_loc)
4164     return FALSE;
4165 
4166   if (!*bfd_loc)
4167     *bfd_loc = entry;
4168 
4169   return TRUE;
4170 }
4171 
4172 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4173 
4174 static void
4175 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4176 				       unsigned int n)
4177 {
4178   asection *s;
4179   struct mips_elf_link_hash_table *htab;
4180 
4181   htab = mips_elf_hash_table (info);
4182   BFD_ASSERT (htab != NULL);
4183 
4184   s = mips_elf_rel_dyn_section (info, FALSE);
4185   BFD_ASSERT (s != NULL);
4186 
4187   if (htab->is_vxworks)
4188     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4189   else
4190     {
4191       if (s->size == 0)
4192 	{
4193 	  /* Make room for a null element.  */
4194 	  s->size += MIPS_ELF_REL_SIZE (abfd);
4195 	  ++s->reloc_count;
4196 	}
4197       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4198     }
4199 }
4200 
4201 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4202    mips_elf_traverse_got_arg structure.  Count the number of GOT
4203    entries and TLS relocs.  Set DATA->value to true if we need
4204    to resolve indirect or warning symbols and then recreate the GOT.  */
4205 
4206 static int
4207 mips_elf_check_recreate_got (void **entryp, void *data)
4208 {
4209   struct mips_got_entry *entry;
4210   struct mips_elf_traverse_got_arg *arg;
4211 
4212   entry = (struct mips_got_entry *) *entryp;
4213   arg = (struct mips_elf_traverse_got_arg *) data;
4214   if (entry->abfd != NULL && entry->symndx == -1)
4215     {
4216       struct mips_elf_link_hash_entry *h;
4217 
4218       h = entry->d.h;
4219       if (h->root.root.type == bfd_link_hash_indirect
4220 	  || h->root.root.type == bfd_link_hash_warning)
4221 	{
4222 	  arg->value = TRUE;
4223 	  return 0;
4224 	}
4225     }
4226   mips_elf_count_got_entry (arg->info, arg->g, entry);
4227   return 1;
4228 }
4229 
4230 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4231    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4232    converting entries for indirect and warning symbols into entries
4233    for the target symbol.  Set DATA->g to null on error.  */
4234 
4235 static int
4236 mips_elf_recreate_got (void **entryp, void *data)
4237 {
4238   struct mips_got_entry new_entry, *entry;
4239   struct mips_elf_traverse_got_arg *arg;
4240   void **slot;
4241 
4242   entry = (struct mips_got_entry *) *entryp;
4243   arg = (struct mips_elf_traverse_got_arg *) data;
4244   if (entry->abfd != NULL
4245       && entry->symndx == -1
4246       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4247 	  || entry->d.h->root.root.type == bfd_link_hash_warning))
4248     {
4249       struct mips_elf_link_hash_entry *h;
4250 
4251       new_entry = *entry;
4252       entry = &new_entry;
4253       h = entry->d.h;
4254       do
4255 	{
4256 	  BFD_ASSERT (h->global_got_area == GGA_NONE);
4257 	  h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4258 	}
4259       while (h->root.root.type == bfd_link_hash_indirect
4260 	     || h->root.root.type == bfd_link_hash_warning);
4261       entry->d.h = h;
4262     }
4263   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4264   if (slot == NULL)
4265     {
4266       arg->g = NULL;
4267       return 0;
4268     }
4269   if (*slot == NULL)
4270     {
4271       if (entry == &new_entry)
4272 	{
4273 	  entry = bfd_alloc (entry->abfd, sizeof (*entry));
4274 	  if (!entry)
4275 	    {
4276 	      arg->g = NULL;
4277 	      return 0;
4278 	    }
4279 	  *entry = new_entry;
4280 	}
4281       *slot = entry;
4282       mips_elf_count_got_entry (arg->info, arg->g, entry);
4283     }
4284   return 1;
4285 }
4286 
4287 /* Return the maximum number of GOT page entries required for RANGE.  */
4288 
4289 static bfd_vma
4290 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4291 {
4292   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4293 }
4294 
4295 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4296 
4297 static bfd_boolean
4298 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4299 				asection *sec, bfd_signed_vma addend)
4300 {
4301   struct mips_got_info *g = arg->g;
4302   struct mips_got_page_entry lookup, *entry;
4303   struct mips_got_page_range **range_ptr, *range;
4304   bfd_vma old_pages, new_pages;
4305   void **loc;
4306 
4307   /* Find the mips_got_page_entry hash table entry for this section.  */
4308   lookup.sec = sec;
4309   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4310   if (loc == NULL)
4311     return FALSE;
4312 
4313   /* Create a mips_got_page_entry if this is the first time we've
4314      seen the section.  */
4315   entry = (struct mips_got_page_entry *) *loc;
4316   if (!entry)
4317     {
4318       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4319       if (!entry)
4320 	return FALSE;
4321 
4322       entry->sec = sec;
4323       *loc = entry;
4324     }
4325 
4326   /* Skip over ranges whose maximum extent cannot share a page entry
4327      with ADDEND.  */
4328   range_ptr = &entry->ranges;
4329   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4330     range_ptr = &(*range_ptr)->next;
4331 
4332   /* If we scanned to the end of the list, or found a range whose
4333      minimum extent cannot share a page entry with ADDEND, create
4334      a new singleton range.  */
4335   range = *range_ptr;
4336   if (!range || addend < range->min_addend - 0xffff)
4337     {
4338       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4339       if (!range)
4340 	return FALSE;
4341 
4342       range->next = *range_ptr;
4343       range->min_addend = addend;
4344       range->max_addend = addend;
4345 
4346       *range_ptr = range;
4347       entry->num_pages++;
4348       g->page_gotno++;
4349       return TRUE;
4350     }
4351 
4352   /* Remember how many pages the old range contributed.  */
4353   old_pages = mips_elf_pages_for_range (range);
4354 
4355   /* Update the ranges.  */
4356   if (addend < range->min_addend)
4357     range->min_addend = addend;
4358   else if (addend > range->max_addend)
4359     {
4360       if (range->next && addend >= range->next->min_addend - 0xffff)
4361 	{
4362 	  old_pages += mips_elf_pages_for_range (range->next);
4363 	  range->max_addend = range->next->max_addend;
4364 	  range->next = range->next->next;
4365 	}
4366       else
4367 	range->max_addend = addend;
4368     }
4369 
4370   /* Record any change in the total estimate.  */
4371   new_pages = mips_elf_pages_for_range (range);
4372   if (old_pages != new_pages)
4373     {
4374       entry->num_pages += new_pages - old_pages;
4375       g->page_gotno += new_pages - old_pages;
4376     }
4377 
4378   return TRUE;
4379 }
4380 
4381 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4382    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4383    whether the page reference described by *REFP needs a GOT page entry,
4384    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4385 
4386 static bfd_boolean
4387 mips_elf_resolve_got_page_ref (void **refp, void *data)
4388 {
4389   struct mips_got_page_ref *ref;
4390   struct mips_elf_traverse_got_arg *arg;
4391   struct mips_elf_link_hash_table *htab;
4392   asection *sec;
4393   bfd_vma addend;
4394 
4395   ref = (struct mips_got_page_ref *) *refp;
4396   arg = (struct mips_elf_traverse_got_arg *) data;
4397   htab = mips_elf_hash_table (arg->info);
4398 
4399   if (ref->symndx < 0)
4400     {
4401       struct mips_elf_link_hash_entry *h;
4402 
4403       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4404       h = ref->u.h;
4405       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4406 	return 1;
4407 
4408       /* Ignore undefined symbols; we'll issue an error later if
4409 	 appropriate.  */
4410       if (!((h->root.root.type == bfd_link_hash_defined
4411 	     || h->root.root.type == bfd_link_hash_defweak)
4412 	    && h->root.root.u.def.section))
4413 	return 1;
4414 
4415       sec = h->root.root.u.def.section;
4416       addend = h->root.root.u.def.value + ref->addend;
4417     }
4418   else
4419     {
4420       Elf_Internal_Sym *isym;
4421 
4422       /* Read in the symbol.  */
4423       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4424 				    ref->symndx);
4425       if (isym == NULL)
4426 	{
4427 	  arg->g = NULL;
4428 	  return 0;
4429 	}
4430 
4431       /* Get the associated input section.  */
4432       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4433       if (sec == NULL)
4434 	{
4435 	  arg->g = NULL;
4436 	  return 0;
4437 	}
4438 
4439       /* If this is a mergable section, work out the section and offset
4440 	 of the merged data.  For section symbols, the addend specifies
4441 	 of the offset _of_ the first byte in the data, otherwise it
4442 	 specifies the offset _from_ the first byte.  */
4443       if (sec->flags & SEC_MERGE)
4444 	{
4445 	  void *secinfo;
4446 
4447 	  secinfo = elf_section_data (sec)->sec_info;
4448 	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4449 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4450 						 isym->st_value + ref->addend);
4451 	  else
4452 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4453 						 isym->st_value) + ref->addend;
4454 	}
4455       else
4456 	addend = isym->st_value + ref->addend;
4457     }
4458   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4459     {
4460       arg->g = NULL;
4461       return 0;
4462     }
4463   return 1;
4464 }
4465 
4466 /* If any entries in G->got_entries are for indirect or warning symbols,
4467    replace them with entries for the target symbol.  Convert g->got_page_refs
4468    into got_page_entry structures and estimate the number of page entries
4469    that they require.  */
4470 
4471 static bfd_boolean
4472 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4473 				    struct mips_got_info *g)
4474 {
4475   struct mips_elf_traverse_got_arg tga;
4476   struct mips_got_info oldg;
4477 
4478   oldg = *g;
4479 
4480   tga.info = info;
4481   tga.g = g;
4482   tga.value = FALSE;
4483   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4484   if (tga.value)
4485     {
4486       *g = oldg;
4487       g->got_entries = htab_create (htab_size (oldg.got_entries),
4488 				    mips_elf_got_entry_hash,
4489 				    mips_elf_got_entry_eq, NULL);
4490       if (!g->got_entries)
4491 	return FALSE;
4492 
4493       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4494       if (!tga.g)
4495 	return FALSE;
4496 
4497       htab_delete (oldg.got_entries);
4498     }
4499 
4500   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4501 					 mips_got_page_entry_eq, NULL);
4502   if (g->got_page_entries == NULL)
4503     return FALSE;
4504 
4505   tga.info = info;
4506   tga.g = g;
4507   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4508 
4509   return TRUE;
4510 }
4511 
4512 /* Return true if a GOT entry for H should live in the local rather than
4513    global GOT area.  */
4514 
4515 static bfd_boolean
4516 mips_use_local_got_p (struct bfd_link_info *info,
4517 		      struct mips_elf_link_hash_entry *h)
4518 {
4519   /* Symbols that aren't in the dynamic symbol table must live in the
4520      local GOT.  This includes symbols that are completely undefined
4521      and which therefore don't bind locally.  We'll report undefined
4522      symbols later if appropriate.  */
4523   if (h->root.dynindx == -1)
4524     return TRUE;
4525 
4526   /* Absolute symbols, if ever they need a GOT entry, cannot ever go
4527      to the local GOT, as they would be implicitly relocated by the
4528      base address by the dynamic loader.  */
4529   if (bfd_is_abs_symbol (&h->root.root))
4530     return FALSE;
4531 
4532   /* Symbols that bind locally can (and in the case of forced-local
4533      symbols, must) live in the local GOT.  */
4534   if (h->got_only_for_calls
4535       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4536       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4537     return TRUE;
4538 
4539   /* If this is an executable that must provide a definition of the symbol,
4540      either though PLTs or copy relocations, then that address should go in
4541      the local rather than global GOT.  */
4542   if (bfd_link_executable (info) && h->has_static_relocs)
4543     return TRUE;
4544 
4545   return FALSE;
4546 }
4547 
4548 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4549    link_info structure.  Decide whether the hash entry needs an entry in
4550    the global part of the primary GOT, setting global_got_area accordingly.
4551    Count the number of global symbols that are in the primary GOT only
4552    because they have relocations against them (reloc_only_gotno).  */
4553 
4554 static int
4555 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4556 {
4557   struct bfd_link_info *info;
4558   struct mips_elf_link_hash_table *htab;
4559   struct mips_got_info *g;
4560 
4561   info = (struct bfd_link_info *) data;
4562   htab = mips_elf_hash_table (info);
4563   g = htab->got_info;
4564   if (h->global_got_area != GGA_NONE)
4565     {
4566       /* Make a final decision about whether the symbol belongs in the
4567 	 local or global GOT.  */
4568       if (mips_use_local_got_p (info, h))
4569 	/* The symbol belongs in the local GOT.  We no longer need this
4570 	   entry if it was only used for relocations; those relocations
4571 	   will be against the null or section symbol instead of H.  */
4572 	h->global_got_area = GGA_NONE;
4573       else if (htab->is_vxworks
4574 	       && h->got_only_for_calls
4575 	       && h->root.plt.plist->mips_offset != MINUS_ONE)
4576 	/* On VxWorks, calls can refer directly to the .got.plt entry;
4577 	   they don't need entries in the regular GOT.  .got.plt entries
4578 	   will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4579 	h->global_got_area = GGA_NONE;
4580       else if (h->global_got_area == GGA_RELOC_ONLY)
4581 	{
4582 	  g->reloc_only_gotno++;
4583 	  g->global_gotno++;
4584 	}
4585     }
4586   return 1;
4587 }
4588 
4589 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4590    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4591 
4592 static int
4593 mips_elf_add_got_entry (void **entryp, void *data)
4594 {
4595   struct mips_got_entry *entry;
4596   struct mips_elf_traverse_got_arg *arg;
4597   void **slot;
4598 
4599   entry = (struct mips_got_entry *) *entryp;
4600   arg = (struct mips_elf_traverse_got_arg *) data;
4601   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4602   if (!slot)
4603     {
4604       arg->g = NULL;
4605       return 0;
4606     }
4607   if (!*slot)
4608     {
4609       *slot = entry;
4610       mips_elf_count_got_entry (arg->info, arg->g, entry);
4611     }
4612   return 1;
4613 }
4614 
4615 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4616    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4617 
4618 static int
4619 mips_elf_add_got_page_entry (void **entryp, void *data)
4620 {
4621   struct mips_got_page_entry *entry;
4622   struct mips_elf_traverse_got_arg *arg;
4623   void **slot;
4624 
4625   entry = (struct mips_got_page_entry *) *entryp;
4626   arg = (struct mips_elf_traverse_got_arg *) data;
4627   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4628   if (!slot)
4629     {
4630       arg->g = NULL;
4631       return 0;
4632     }
4633   if (!*slot)
4634     {
4635       *slot = entry;
4636       arg->g->page_gotno += entry->num_pages;
4637     }
4638   return 1;
4639 }
4640 
4641 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4642    this would lead to overflow, 1 if they were merged successfully,
4643    and 0 if a merge failed due to lack of memory.  (These values are chosen
4644    so that nonnegative return values can be returned by a htab_traverse
4645    callback.)  */
4646 
4647 static int
4648 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4649 			 struct mips_got_info *to,
4650 			 struct mips_elf_got_per_bfd_arg *arg)
4651 {
4652   struct mips_elf_traverse_got_arg tga;
4653   unsigned int estimate;
4654 
4655   /* Work out how many page entries we would need for the combined GOT.  */
4656   estimate = arg->max_pages;
4657   if (estimate >= from->page_gotno + to->page_gotno)
4658     estimate = from->page_gotno + to->page_gotno;
4659 
4660   /* And conservatively estimate how many local and TLS entries
4661      would be needed.  */
4662   estimate += from->local_gotno + to->local_gotno;
4663   estimate += from->tls_gotno + to->tls_gotno;
4664 
4665   /* If we're merging with the primary got, any TLS relocations will
4666      come after the full set of global entries.  Otherwise estimate those
4667      conservatively as well.  */
4668   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4669     estimate += arg->global_count;
4670   else
4671     estimate += from->global_gotno + to->global_gotno;
4672 
4673   /* Bail out if the combined GOT might be too big.  */
4674   if (estimate > arg->max_count)
4675     return -1;
4676 
4677   /* Transfer the bfd's got information from FROM to TO.  */
4678   tga.info = arg->info;
4679   tga.g = to;
4680   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4681   if (!tga.g)
4682     return 0;
4683 
4684   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4685   if (!tga.g)
4686     return 0;
4687 
4688   mips_elf_replace_bfd_got (abfd, to);
4689   return 1;
4690 }
4691 
4692 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4693    as possible of the primary got, since it doesn't require explicit
4694    dynamic relocations, but don't use bfds that would reference global
4695    symbols out of the addressable range.  Failing the primary got,
4696    attempt to merge with the current got, or finish the current got
4697    and then make make the new got current.  */
4698 
4699 static bfd_boolean
4700 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4701 		    struct mips_elf_got_per_bfd_arg *arg)
4702 {
4703   unsigned int estimate;
4704   int result;
4705 
4706   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4707     return FALSE;
4708 
4709   /* Work out the number of page, local and TLS entries.  */
4710   estimate = arg->max_pages;
4711   if (estimate > g->page_gotno)
4712     estimate = g->page_gotno;
4713   estimate += g->local_gotno + g->tls_gotno;
4714 
4715   /* We place TLS GOT entries after both locals and globals.  The globals
4716      for the primary GOT may overflow the normal GOT size limit, so be
4717      sure not to merge a GOT which requires TLS with the primary GOT in that
4718      case.  This doesn't affect non-primary GOTs.  */
4719   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4720 
4721   if (estimate <= arg->max_count)
4722     {
4723       /* If we don't have a primary GOT, use it as
4724 	 a starting point for the primary GOT.  */
4725       if (!arg->primary)
4726 	{
4727 	  arg->primary = g;
4728 	  return TRUE;
4729 	}
4730 
4731       /* Try merging with the primary GOT.  */
4732       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4733       if (result >= 0)
4734 	return result;
4735     }
4736 
4737   /* If we can merge with the last-created got, do it.  */
4738   if (arg->current)
4739     {
4740       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4741       if (result >= 0)
4742 	return result;
4743     }
4744 
4745   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4746      fits; if it turns out that it doesn't, we'll get relocation
4747      overflows anyway.  */
4748   g->next = arg->current;
4749   arg->current = g;
4750 
4751   return TRUE;
4752 }
4753 
4754 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4755    to GOTIDX, duplicating the entry if it has already been assigned
4756    an index in a different GOT.  */
4757 
4758 static bfd_boolean
4759 mips_elf_set_gotidx (void **entryp, long gotidx)
4760 {
4761   struct mips_got_entry *entry;
4762 
4763   entry = (struct mips_got_entry *) *entryp;
4764   if (entry->gotidx > 0)
4765     {
4766       struct mips_got_entry *new_entry;
4767 
4768       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4769       if (!new_entry)
4770 	return FALSE;
4771 
4772       *new_entry = *entry;
4773       *entryp = new_entry;
4774       entry = new_entry;
4775     }
4776   entry->gotidx = gotidx;
4777   return TRUE;
4778 }
4779 
4780 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4781    mips_elf_traverse_got_arg in which DATA->value is the size of one
4782    GOT entry.  Set DATA->g to null on failure.  */
4783 
4784 static int
4785 mips_elf_initialize_tls_index (void **entryp, void *data)
4786 {
4787   struct mips_got_entry *entry;
4788   struct mips_elf_traverse_got_arg *arg;
4789 
4790   /* We're only interested in TLS symbols.  */
4791   entry = (struct mips_got_entry *) *entryp;
4792   if (entry->tls_type == GOT_TLS_NONE)
4793     return 1;
4794 
4795   arg = (struct mips_elf_traverse_got_arg *) data;
4796   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4797     {
4798       arg->g = NULL;
4799       return 0;
4800     }
4801 
4802   /* Account for the entries we've just allocated.  */
4803   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4804   return 1;
4805 }
4806 
4807 /* A htab_traverse callback for GOT entries, where DATA points to a
4808    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4809    symbol to DATA->value.  */
4810 
4811 static int
4812 mips_elf_set_global_got_area (void **entryp, void *data)
4813 {
4814   struct mips_got_entry *entry;
4815   struct mips_elf_traverse_got_arg *arg;
4816 
4817   entry = (struct mips_got_entry *) *entryp;
4818   arg = (struct mips_elf_traverse_got_arg *) data;
4819   if (entry->abfd != NULL
4820       && entry->symndx == -1
4821       && entry->d.h->global_got_area != GGA_NONE)
4822     entry->d.h->global_got_area = arg->value;
4823   return 1;
4824 }
4825 
4826 /* A htab_traverse callback for secondary GOT entries, where DATA points
4827    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4828    and record the number of relocations they require.  DATA->value is
4829    the size of one GOT entry.  Set DATA->g to null on failure.  */
4830 
4831 static int
4832 mips_elf_set_global_gotidx (void **entryp, void *data)
4833 {
4834   struct mips_got_entry *entry;
4835   struct mips_elf_traverse_got_arg *arg;
4836 
4837   entry = (struct mips_got_entry *) *entryp;
4838   arg = (struct mips_elf_traverse_got_arg *) data;
4839   if (entry->abfd != NULL
4840       && entry->symndx == -1
4841       && entry->d.h->global_got_area != GGA_NONE)
4842     {
4843       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4844 	{
4845 	  arg->g = NULL;
4846 	  return 0;
4847 	}
4848       arg->g->assigned_low_gotno += 1;
4849 
4850       if (bfd_link_pic (arg->info)
4851 	  || (elf_hash_table (arg->info)->dynamic_sections_created
4852 	      && entry->d.h->root.def_dynamic
4853 	      && !entry->d.h->root.def_regular))
4854 	arg->g->relocs += 1;
4855     }
4856 
4857   return 1;
4858 }
4859 
4860 /* A htab_traverse callback for GOT entries for which DATA is the
4861    bfd_link_info.  Forbid any global symbols from having traditional
4862    lazy-binding stubs.  */
4863 
4864 static int
4865 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4866 {
4867   struct bfd_link_info *info;
4868   struct mips_elf_link_hash_table *htab;
4869   struct mips_got_entry *entry;
4870 
4871   entry = (struct mips_got_entry *) *entryp;
4872   info = (struct bfd_link_info *) data;
4873   htab = mips_elf_hash_table (info);
4874   BFD_ASSERT (htab != NULL);
4875 
4876   if (entry->abfd != NULL
4877       && entry->symndx == -1
4878       && entry->d.h->needs_lazy_stub)
4879     {
4880       entry->d.h->needs_lazy_stub = FALSE;
4881       htab->lazy_stub_count--;
4882     }
4883 
4884   return 1;
4885 }
4886 
4887 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4888    the primary GOT.  */
4889 static bfd_vma
4890 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4891 {
4892   if (!g->next)
4893     return 0;
4894 
4895   g = mips_elf_bfd_got (ibfd, FALSE);
4896   if (! g)
4897     return 0;
4898 
4899   BFD_ASSERT (g->next);
4900 
4901   g = g->next;
4902 
4903   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4904     * MIPS_ELF_GOT_SIZE (abfd);
4905 }
4906 
4907 /* Turn a single GOT that is too big for 16-bit addressing into
4908    a sequence of GOTs, each one 16-bit addressable.  */
4909 
4910 static bfd_boolean
4911 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4912 		    asection *got, bfd_size_type pages)
4913 {
4914   struct mips_elf_link_hash_table *htab;
4915   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4916   struct mips_elf_traverse_got_arg tga;
4917   struct mips_got_info *g, *gg;
4918   unsigned int assign, needed_relocs;
4919   bfd *dynobj, *ibfd;
4920 
4921   dynobj = elf_hash_table (info)->dynobj;
4922   htab = mips_elf_hash_table (info);
4923   BFD_ASSERT (htab != NULL);
4924 
4925   g = htab->got_info;
4926 
4927   got_per_bfd_arg.obfd = abfd;
4928   got_per_bfd_arg.info = info;
4929   got_per_bfd_arg.current = NULL;
4930   got_per_bfd_arg.primary = NULL;
4931   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4932 				/ MIPS_ELF_GOT_SIZE (abfd))
4933 			       - htab->reserved_gotno);
4934   got_per_bfd_arg.max_pages = pages;
4935   /* The number of globals that will be included in the primary GOT.
4936      See the calls to mips_elf_set_global_got_area below for more
4937      information.  */
4938   got_per_bfd_arg.global_count = g->global_gotno;
4939 
4940   /* Try to merge the GOTs of input bfds together, as long as they
4941      don't seem to exceed the maximum GOT size, choosing one of them
4942      to be the primary GOT.  */
4943   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4944     {
4945       gg = mips_elf_bfd_got (ibfd, FALSE);
4946       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4947 	return FALSE;
4948     }
4949 
4950   /* If we do not find any suitable primary GOT, create an empty one.  */
4951   if (got_per_bfd_arg.primary == NULL)
4952     g->next = mips_elf_create_got_info (abfd);
4953   else
4954     g->next = got_per_bfd_arg.primary;
4955   g->next->next = got_per_bfd_arg.current;
4956 
4957   /* GG is now the master GOT, and G is the primary GOT.  */
4958   gg = g;
4959   g = g->next;
4960 
4961   /* Map the output bfd to the primary got.  That's what we're going
4962      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4963      didn't mark in check_relocs, and we want a quick way to find it.
4964      We can't just use gg->next because we're going to reverse the
4965      list.  */
4966   mips_elf_replace_bfd_got (abfd, g);
4967 
4968   /* Every symbol that is referenced in a dynamic relocation must be
4969      present in the primary GOT, so arrange for them to appear after
4970      those that are actually referenced.  */
4971   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4972   g->global_gotno = gg->global_gotno;
4973 
4974   tga.info = info;
4975   tga.value = GGA_RELOC_ONLY;
4976   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4977   tga.value = GGA_NORMAL;
4978   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4979 
4980   /* Now go through the GOTs assigning them offset ranges.
4981      [assigned_low_gotno, local_gotno[ will be set to the range of local
4982      entries in each GOT.  We can then compute the end of a GOT by
4983      adding local_gotno to global_gotno.  We reverse the list and make
4984      it circular since then we'll be able to quickly compute the
4985      beginning of a GOT, by computing the end of its predecessor.  To
4986      avoid special cases for the primary GOT, while still preserving
4987      assertions that are valid for both single- and multi-got links,
4988      we arrange for the main got struct to have the right number of
4989      global entries, but set its local_gotno such that the initial
4990      offset of the primary GOT is zero.  Remember that the primary GOT
4991      will become the last item in the circular linked list, so it
4992      points back to the master GOT.  */
4993   gg->local_gotno = -g->global_gotno;
4994   gg->global_gotno = g->global_gotno;
4995   gg->tls_gotno = 0;
4996   assign = 0;
4997   gg->next = gg;
4998 
4999   do
5000     {
5001       struct mips_got_info *gn;
5002 
5003       assign += htab->reserved_gotno;
5004       g->assigned_low_gotno = assign;
5005       g->local_gotno += assign;
5006       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
5007       g->assigned_high_gotno = g->local_gotno - 1;
5008       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
5009 
5010       /* Take g out of the direct list, and push it onto the reversed
5011 	 list that gg points to.  g->next is guaranteed to be nonnull after
5012 	 this operation, as required by mips_elf_initialize_tls_index. */
5013       gn = g->next;
5014       g->next = gg->next;
5015       gg->next = g;
5016 
5017       /* Set up any TLS entries.  We always place the TLS entries after
5018 	 all non-TLS entries.  */
5019       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
5020       tga.g = g;
5021       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5022       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
5023       if (!tga.g)
5024 	return FALSE;
5025       BFD_ASSERT (g->tls_assigned_gotno == assign);
5026 
5027       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
5028       g = gn;
5029 
5030       /* Forbid global symbols in every non-primary GOT from having
5031 	 lazy-binding stubs.  */
5032       if (g)
5033 	htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
5034     }
5035   while (g);
5036 
5037   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
5038 
5039   needed_relocs = 0;
5040   for (g = gg->next; g && g->next != gg; g = g->next)
5041     {
5042       unsigned int save_assign;
5043 
5044       /* Assign offsets to global GOT entries and count how many
5045 	 relocations they need.  */
5046       save_assign = g->assigned_low_gotno;
5047       g->assigned_low_gotno = g->local_gotno;
5048       tga.info = info;
5049       tga.value = MIPS_ELF_GOT_SIZE (abfd);
5050       tga.g = g;
5051       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
5052       if (!tga.g)
5053 	return FALSE;
5054       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
5055       g->assigned_low_gotno = save_assign;
5056 
5057       if (bfd_link_pic (info))
5058 	{
5059 	  g->relocs += g->local_gotno - g->assigned_low_gotno;
5060 	  BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
5061 		      + g->next->global_gotno
5062 		      + g->next->tls_gotno
5063 		      + htab->reserved_gotno);
5064 	}
5065       needed_relocs += g->relocs;
5066     }
5067   needed_relocs += g->relocs;
5068 
5069   if (needed_relocs)
5070     mips_elf_allocate_dynamic_relocations (dynobj, info,
5071 					   needed_relocs);
5072 
5073   return TRUE;
5074 }
5075 
5076 
5077 /* Returns the first relocation of type r_type found, beginning with
5078    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
5079 
5080 static const Elf_Internal_Rela *
5081 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
5082 			  const Elf_Internal_Rela *relocation,
5083 			  const Elf_Internal_Rela *relend)
5084 {
5085   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
5086 
5087   while (relocation < relend)
5088     {
5089       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
5090 	  && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
5091 	return relocation;
5092 
5093       ++relocation;
5094     }
5095 
5096   /* We didn't find it.  */
5097   return NULL;
5098 }
5099 
5100 /* Return whether an input relocation is against a local symbol.  */
5101 
5102 static bfd_boolean
5103 mips_elf_local_relocation_p (bfd *input_bfd,
5104 			     const Elf_Internal_Rela *relocation,
5105 			     asection **local_sections)
5106 {
5107   unsigned long r_symndx;
5108   Elf_Internal_Shdr *symtab_hdr;
5109   size_t extsymoff;
5110 
5111   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5112   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5113   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
5114 
5115   if (r_symndx < extsymoff)
5116     return TRUE;
5117   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
5118     return TRUE;
5119 
5120   return FALSE;
5121 }
5122 
5123 /* Sign-extend VALUE, which has the indicated number of BITS.  */
5124 
5125 bfd_vma
5126 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5127 {
5128   if (value & ((bfd_vma) 1 << (bits - 1)))
5129     /* VALUE is negative.  */
5130     value |= ((bfd_vma) - 1) << bits;
5131 
5132   return value;
5133 }
5134 
5135 /* Return non-zero if the indicated VALUE has overflowed the maximum
5136    range expressible by a signed number with the indicated number of
5137    BITS.  */
5138 
5139 static bfd_boolean
5140 mips_elf_overflow_p (bfd_vma value, int bits)
5141 {
5142   bfd_signed_vma svalue = (bfd_signed_vma) value;
5143 
5144   if (svalue > (1 << (bits - 1)) - 1)
5145     /* The value is too big.  */
5146     return TRUE;
5147   else if (svalue < -(1 << (bits - 1)))
5148     /* The value is too small.  */
5149     return TRUE;
5150 
5151   /* All is well.  */
5152   return FALSE;
5153 }
5154 
5155 /* Calculate the %high function.  */
5156 
5157 static bfd_vma
5158 mips_elf_high (bfd_vma value)
5159 {
5160   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5161 }
5162 
5163 /* Calculate the %higher function.  */
5164 
5165 static bfd_vma
5166 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5167 {
5168 #ifdef BFD64
5169   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5170 #else
5171   abort ();
5172   return MINUS_ONE;
5173 #endif
5174 }
5175 
5176 /* Calculate the %highest function.  */
5177 
5178 static bfd_vma
5179 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5180 {
5181 #ifdef BFD64
5182   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5183 #else
5184   abort ();
5185   return MINUS_ONE;
5186 #endif
5187 }
5188 
5189 /* Create the .compact_rel section.  */
5190 
5191 static bfd_boolean
5192 mips_elf_create_compact_rel_section
5193   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5194 {
5195   flagword flags;
5196   register asection *s;
5197 
5198   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5199     {
5200       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5201 	       | SEC_READONLY);
5202 
5203       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5204       if (s == NULL
5205 	  || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5206 	return FALSE;
5207 
5208       s->size = sizeof (Elf32_External_compact_rel);
5209     }
5210 
5211   return TRUE;
5212 }
5213 
5214 /* Create the .got section to hold the global offset table.  */
5215 
5216 static bfd_boolean
5217 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5218 {
5219   flagword flags;
5220   register asection *s;
5221   struct elf_link_hash_entry *h;
5222   struct bfd_link_hash_entry *bh;
5223   struct mips_elf_link_hash_table *htab;
5224 
5225   htab = mips_elf_hash_table (info);
5226   BFD_ASSERT (htab != NULL);
5227 
5228   /* This function may be called more than once.  */
5229   if (htab->root.sgot)
5230     return TRUE;
5231 
5232   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5233 	   | SEC_LINKER_CREATED);
5234 
5235   /* We have to use an alignment of 2**4 here because this is hardcoded
5236      in the function stub generation and in the linker script.  */
5237   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5238   if (s == NULL
5239       || !bfd_set_section_alignment (s, 4))
5240     return FALSE;
5241   htab->root.sgot = s;
5242 
5243   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5244      linker script because we don't want to define the symbol if we
5245      are not creating a global offset table.  */
5246   bh = NULL;
5247   if (! (_bfd_generic_link_add_one_symbol
5248 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5249 	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5250     return FALSE;
5251 
5252   h = (struct elf_link_hash_entry *) bh;
5253   h->non_elf = 0;
5254   h->def_regular = 1;
5255   h->type = STT_OBJECT;
5256   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5257   elf_hash_table (info)->hgot = h;
5258 
5259   if (bfd_link_pic (info)
5260       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5261     return FALSE;
5262 
5263   htab->got_info = mips_elf_create_got_info (abfd);
5264   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5265     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5266 
5267   /* We also need a .got.plt section when generating PLTs.  */
5268   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5269 					  SEC_ALLOC | SEC_LOAD
5270 					  | SEC_HAS_CONTENTS
5271 					  | SEC_IN_MEMORY
5272 					  | SEC_LINKER_CREATED);
5273   if (s == NULL)
5274     return FALSE;
5275   htab->root.sgotplt = s;
5276 
5277   return TRUE;
5278 }
5279 
5280 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5281    __GOTT_INDEX__ symbols.  These symbols are only special for
5282    shared objects; they are not used in executables.  */
5283 
5284 static bfd_boolean
5285 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5286 {
5287   return (mips_elf_hash_table (info)->is_vxworks
5288 	  && bfd_link_pic (info)
5289 	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5290 	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5291 }
5292 
5293 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5294    require an la25 stub.  See also mips_elf_local_pic_function_p,
5295    which determines whether the destination function ever requires a
5296    stub.  */
5297 
5298 static bfd_boolean
5299 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5300 				     bfd_boolean target_is_16_bit_code_p)
5301 {
5302   /* We specifically ignore branches and jumps from EF_PIC objects,
5303      where the onus is on the compiler or programmer to perform any
5304      necessary initialization of $25.  Sometimes such initialization
5305      is unnecessary; for example, -mno-shared functions do not use
5306      the incoming value of $25, and may therefore be called directly.  */
5307   if (PIC_OBJECT_P (input_bfd))
5308     return FALSE;
5309 
5310   switch (r_type)
5311     {
5312     case R_MIPS_26:
5313     case R_MIPS_PC16:
5314     case R_MIPS_PC21_S2:
5315     case R_MIPS_PC26_S2:
5316     case R_MICROMIPS_26_S1:
5317     case R_MICROMIPS_PC7_S1:
5318     case R_MICROMIPS_PC10_S1:
5319     case R_MICROMIPS_PC16_S1:
5320     case R_MICROMIPS_PC23_S2:
5321       return TRUE;
5322 
5323     case R_MIPS16_26:
5324       return !target_is_16_bit_code_p;
5325 
5326     default:
5327       return FALSE;
5328     }
5329 }
5330 
5331 /* Obtain the field relocated by RELOCATION.  */
5332 
5333 static bfd_vma
5334 mips_elf_obtain_contents (reloc_howto_type *howto,
5335 			  const Elf_Internal_Rela *relocation,
5336 			  bfd *input_bfd, bfd_byte *contents)
5337 {
5338   bfd_vma x = 0;
5339   bfd_byte *location = contents + relocation->r_offset;
5340   unsigned int size = bfd_get_reloc_size (howto);
5341 
5342   /* Obtain the bytes.  */
5343   if (size != 0)
5344     x = bfd_get (8 * size, input_bfd, location);
5345 
5346   return x;
5347 }
5348 
5349 /* Store the field relocated by RELOCATION.  */
5350 
5351 static void
5352 mips_elf_store_contents (reloc_howto_type *howto,
5353 			 const Elf_Internal_Rela *relocation,
5354 			 bfd *input_bfd, bfd_byte *contents, bfd_vma x)
5355 {
5356   bfd_byte *location = contents + relocation->r_offset;
5357   unsigned int size = bfd_get_reloc_size (howto);
5358 
5359   /* Put the value into the output.  */
5360   if (size != 0)
5361     bfd_put (8 * size, input_bfd, x, location);
5362 }
5363 
5364 /* Try to patch a load from GOT instruction in CONTENTS pointed to by
5365    RELOCATION described by HOWTO, with a move of 0 to the load target
5366    register, returning TRUE if that is successful and FALSE otherwise.
5367    If DOIT is FALSE, then only determine it patching is possible and
5368    return status without actually changing CONTENTS.
5369 */
5370 
5371 static bfd_boolean
5372 mips_elf_nullify_got_load (bfd *input_bfd, bfd_byte *contents,
5373 			   const Elf_Internal_Rela *relocation,
5374 			   reloc_howto_type *howto, bfd_boolean doit)
5375 {
5376   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5377   bfd_byte *location = contents + relocation->r_offset;
5378   bfd_boolean nullified = TRUE;
5379   bfd_vma x;
5380 
5381   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
5382 
5383   /* Obtain the current value.  */
5384   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
5385 
5386   /* Note that in the unshuffled MIPS16 encoding RX is at bits [21:19]
5387      while RY is at bits [18:16] of the combined 32-bit instruction word.  */
5388   if (mips16_reloc_p (r_type)
5389       && (((x >> 22) & 0x3ff) == 0x3d3				/* LW */
5390 	  || ((x >> 22) & 0x3ff) == 0x3c7))			/* LD */
5391     x = (0x3cd << 22) | (x & (7 << 16)) << 3;			/* LI */
5392   else if (micromips_reloc_p (r_type)
5393 	   && ((x >> 26) & 0x37) == 0x37)			/* LW/LD */
5394     x = (0xc << 26) | (x & (0x1f << 21));			/* ADDIU */
5395   else if (((x >> 26) & 0x3f) == 0x23				/* LW */
5396 	   || ((x >> 26) & 0x3f) == 0x37)			/* LD */
5397     x = (0x9 << 26) | (x & (0x1f << 16));			/* ADDIU */
5398   else
5399     nullified = FALSE;
5400 
5401   /* Put the value into the output.  */
5402   if (doit && nullified)
5403     mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
5404 
5405   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, FALSE, location);
5406 
5407   return nullified;
5408 }
5409 
5410 /* Calculate the value produced by the RELOCATION (which comes from
5411    the INPUT_BFD).  The ADDEND is the addend to use for this
5412    RELOCATION; RELOCATION->R_ADDEND is ignored.
5413 
5414    The result of the relocation calculation is stored in VALUEP.
5415    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5416    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5417 
5418    This function returns bfd_reloc_continue if the caller need take no
5419    further action regarding this relocation, bfd_reloc_notsupported if
5420    something goes dramatically wrong, bfd_reloc_overflow if an
5421    overflow occurs, and bfd_reloc_ok to indicate success.  */
5422 
5423 static bfd_reloc_status_type
5424 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5425 			       asection *input_section, bfd_byte *contents,
5426 			       struct bfd_link_info *info,
5427 			       const Elf_Internal_Rela *relocation,
5428 			       bfd_vma addend, reloc_howto_type *howto,
5429 			       Elf_Internal_Sym *local_syms,
5430 			       asection **local_sections, bfd_vma *valuep,
5431 			       const char **namep,
5432 			       bfd_boolean *cross_mode_jump_p,
5433 			       bfd_boolean save_addend)
5434 {
5435   /* The eventual value we will return.  */
5436   bfd_vma value;
5437   /* The address of the symbol against which the relocation is
5438      occurring.  */
5439   bfd_vma symbol = 0;
5440   /* The final GP value to be used for the relocatable, executable, or
5441      shared object file being produced.  */
5442   bfd_vma gp;
5443   /* The place (section offset or address) of the storage unit being
5444      relocated.  */
5445   bfd_vma p;
5446   /* The value of GP used to create the relocatable object.  */
5447   bfd_vma gp0;
5448   /* The offset into the global offset table at which the address of
5449      the relocation entry symbol, adjusted by the addend, resides
5450      during execution.  */
5451   bfd_vma g = MINUS_ONE;
5452   /* The section in which the symbol referenced by the relocation is
5453      located.  */
5454   asection *sec = NULL;
5455   struct mips_elf_link_hash_entry *h = NULL;
5456   /* TRUE if the symbol referred to by this relocation is a local
5457      symbol.  */
5458   bfd_boolean local_p, was_local_p;
5459   /* TRUE if the symbol referred to by this relocation is a section
5460      symbol.  */
5461   bfd_boolean section_p = FALSE;
5462   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5463   bfd_boolean gp_disp_p = FALSE;
5464   /* TRUE if the symbol referred to by this relocation is
5465      "__gnu_local_gp".  */
5466   bfd_boolean gnu_local_gp_p = FALSE;
5467   Elf_Internal_Shdr *symtab_hdr;
5468   size_t extsymoff;
5469   unsigned long r_symndx;
5470   int r_type;
5471   /* TRUE if overflow occurred during the calculation of the
5472      relocation value.  */
5473   bfd_boolean overflowed_p;
5474   /* TRUE if this relocation refers to a MIPS16 function.  */
5475   bfd_boolean target_is_16_bit_code_p = FALSE;
5476   bfd_boolean target_is_micromips_code_p = FALSE;
5477   struct mips_elf_link_hash_table *htab;
5478   bfd *dynobj;
5479   bfd_boolean resolved_to_zero;
5480 
5481   dynobj = elf_hash_table (info)->dynobj;
5482   htab = mips_elf_hash_table (info);
5483   BFD_ASSERT (htab != NULL);
5484 
5485   /* Parse the relocation.  */
5486   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5487   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5488   p = (input_section->output_section->vma
5489        + input_section->output_offset
5490        + relocation->r_offset);
5491 
5492   /* Assume that there will be no overflow.  */
5493   overflowed_p = FALSE;
5494 
5495   /* Figure out whether or not the symbol is local, and get the offset
5496      used in the array of hash table entries.  */
5497   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5498   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5499 					 local_sections);
5500   was_local_p = local_p;
5501   if (! elf_bad_symtab (input_bfd))
5502     extsymoff = symtab_hdr->sh_info;
5503   else
5504     {
5505       /* The symbol table does not follow the rule that local symbols
5506 	 must come before globals.  */
5507       extsymoff = 0;
5508     }
5509 
5510   /* Figure out the value of the symbol.  */
5511   if (local_p)
5512     {
5513       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5514       Elf_Internal_Sym *sym;
5515 
5516       sym = local_syms + r_symndx;
5517       sec = local_sections[r_symndx];
5518 
5519       section_p = ELF_ST_TYPE (sym->st_info) == STT_SECTION;
5520 
5521       symbol = sec->output_section->vma + sec->output_offset;
5522       if (!section_p || (sec->flags & SEC_MERGE))
5523 	symbol += sym->st_value;
5524       if ((sec->flags & SEC_MERGE) && section_p)
5525 	{
5526 	  addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5527 	  addend -= symbol;
5528 	  addend += sec->output_section->vma + sec->output_offset;
5529 	}
5530 
5531       /* MIPS16/microMIPS text labels should be treated as odd.  */
5532       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5533 	++symbol;
5534 
5535       /* Record the name of this symbol, for our caller.  */
5536       *namep = bfd_elf_string_from_elf_section (input_bfd,
5537 						symtab_hdr->sh_link,
5538 						sym->st_name);
5539       if (*namep == NULL || **namep == '\0')
5540 	*namep = bfd_section_name (sec);
5541 
5542       /* For relocations against a section symbol and ones against no
5543 	 symbol (absolute relocations) infer the ISA mode from the addend.  */
5544       if (section_p || r_symndx == STN_UNDEF)
5545 	{
5546 	  target_is_16_bit_code_p = (addend & 1) && !micromips_p;
5547 	  target_is_micromips_code_p = (addend & 1) && micromips_p;
5548 	}
5549       /* For relocations against an absolute symbol infer the ISA mode
5550 	 from the value of the symbol plus addend.  */
5551       else if (bfd_is_abs_section (sec))
5552 	{
5553 	  target_is_16_bit_code_p = ((symbol + addend) & 1) && !micromips_p;
5554 	  target_is_micromips_code_p = ((symbol + addend) & 1) && micromips_p;
5555 	}
5556       /* Otherwise just use the regular symbol annotation available.  */
5557       else
5558 	{
5559 	  target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5560 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5561 	}
5562     }
5563   else
5564     {
5565       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5566 
5567       /* For global symbols we look up the symbol in the hash-table.  */
5568       h = ((struct mips_elf_link_hash_entry *)
5569 	   elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5570       /* Find the real hash-table entry for this symbol.  */
5571       while (h->root.root.type == bfd_link_hash_indirect
5572 	     || h->root.root.type == bfd_link_hash_warning)
5573 	h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5574 
5575       /* Record the name of this symbol, for our caller.  */
5576       *namep = h->root.root.root.string;
5577 
5578       /* See if this is the special _gp_disp symbol.  Note that such a
5579 	 symbol must always be a global symbol.  */
5580       if (strcmp (*namep, "_gp_disp") == 0
5581 	  && ! NEWABI_P (input_bfd))
5582 	{
5583 	  /* Relocations against _gp_disp are permitted only with
5584 	     R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5585 	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5586 	    return bfd_reloc_notsupported;
5587 
5588 	  gp_disp_p = TRUE;
5589 	}
5590       /* See if this is the special _gp symbol.  Note that such a
5591 	 symbol must always be a global symbol.  */
5592       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5593 	gnu_local_gp_p = TRUE;
5594 
5595 
5596       /* If this symbol is defined, calculate its address.  Note that
5597 	 _gp_disp is a magic symbol, always implicitly defined by the
5598 	 linker, so it's inappropriate to check to see whether or not
5599 	 its defined.  */
5600       else if ((h->root.root.type == bfd_link_hash_defined
5601 		|| h->root.root.type == bfd_link_hash_defweak)
5602 	       && h->root.root.u.def.section)
5603 	{
5604 	  sec = h->root.root.u.def.section;
5605 	  if (sec->output_section)
5606 	    symbol = (h->root.root.u.def.value
5607 		      + sec->output_section->vma
5608 		      + sec->output_offset);
5609 	  else
5610 	    symbol = h->root.root.u.def.value;
5611 	}
5612       else if (h->root.root.type == bfd_link_hash_undefweak)
5613 	/* We allow relocations against undefined weak symbols, giving
5614 	   it the value zero, so that you can undefined weak functions
5615 	   and check to see if they exist by looking at their
5616 	   addresses.  */
5617 	symbol = 0;
5618       else if (info->unresolved_syms_in_objects == RM_IGNORE
5619 	       && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5620 	symbol = 0;
5621       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5622 		       ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5623 	{
5624 	  /* If this is a dynamic link, we should have created a
5625 	     _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5626 	     in _bfd_mips_elf_create_dynamic_sections.
5627 	     Otherwise, we should define the symbol with a value of 0.
5628 	     FIXME: It should probably get into the symbol table
5629 	     somehow as well.  */
5630 	  BFD_ASSERT (! bfd_link_pic (info));
5631 	  BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5632 	  symbol = 0;
5633 	}
5634       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5635 	{
5636 	  /* This is an optional symbol - an Irix specific extension to the
5637 	     ELF spec.  Ignore it for now.
5638 	     XXX - FIXME - there is more to the spec for OPTIONAL symbols
5639 	     than simply ignoring them, but we do not handle this for now.
5640 	     For information see the "64-bit ELF Object File Specification"
5641 	     which is available from here:
5642 	     http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5643 	  symbol = 0;
5644 	}
5645       else
5646 	{
5647 	  bfd_boolean reject_undefined
5648 	    = (info->unresolved_syms_in_objects == RM_GENERATE_ERROR
5649 	       || ELF_ST_VISIBILITY (h->root.other) != STV_DEFAULT);
5650 
5651 	  (*info->callbacks->undefined_symbol)
5652 	    (info, h->root.root.root.string, input_bfd,
5653 	     input_section, relocation->r_offset, reject_undefined);
5654 
5655 	  if (reject_undefined)
5656 	    return bfd_reloc_undefined;
5657 
5658 	  symbol = 0;
5659 	}
5660 
5661       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5662       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5663     }
5664 
5665   /* If this is a reference to a 16-bit function with a stub, we need
5666      to redirect the relocation to the stub unless:
5667 
5668      (a) the relocation is for a MIPS16 JAL;
5669 
5670      (b) the relocation is for a MIPS16 PIC call, and there are no
5671 	 non-MIPS16 uses of the GOT slot; or
5672 
5673      (c) the section allows direct references to MIPS16 functions.  */
5674   if (r_type != R_MIPS16_26
5675       && !bfd_link_relocatable (info)
5676       && ((h != NULL
5677 	   && h->fn_stub != NULL
5678 	   && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5679 	  || (local_p
5680 	      && mips_elf_tdata (input_bfd)->local_stubs != NULL
5681 	      && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5682       && !section_allows_mips16_refs_p (input_section))
5683     {
5684       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5685 	 have already noticed that we were going to need the
5686 	 stub.  */
5687       if (local_p)
5688 	{
5689 	  sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5690 	  value = 0;
5691 	}
5692       else
5693 	{
5694 	  BFD_ASSERT (h->need_fn_stub);
5695 	  if (h->la25_stub)
5696 	    {
5697 	      /* If a LA25 header for the stub itself exists, point to the
5698 		 prepended LUI/ADDIU sequence.  */
5699 	      sec = h->la25_stub->stub_section;
5700 	      value = h->la25_stub->offset;
5701 	    }
5702 	  else
5703 	    {
5704 	      sec = h->fn_stub;
5705 	      value = 0;
5706 	    }
5707 	}
5708 
5709       symbol = sec->output_section->vma + sec->output_offset + value;
5710       /* The target is 16-bit, but the stub isn't.  */
5711       target_is_16_bit_code_p = FALSE;
5712     }
5713   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5714      to a standard MIPS function, we need to redirect the call to the stub.
5715      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5716      indirect calls should use an indirect stub instead.  */
5717   else if (r_type == R_MIPS16_26 && !bfd_link_relocatable (info)
5718 	   && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5719 	       || (local_p
5720 		   && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5721 		   && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5722 	   && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5723     {
5724       if (local_p)
5725 	sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5726       else
5727 	{
5728 	  /* If both call_stub and call_fp_stub are defined, we can figure
5729 	     out which one to use by checking which one appears in the input
5730 	     file.  */
5731 	  if (h->call_stub != NULL && h->call_fp_stub != NULL)
5732 	    {
5733 	      asection *o;
5734 
5735 	      sec = NULL;
5736 	      for (o = input_bfd->sections; o != NULL; o = o->next)
5737 		{
5738 		  if (CALL_FP_STUB_P (bfd_section_name (o)))
5739 		    {
5740 		      sec = h->call_fp_stub;
5741 		      break;
5742 		    }
5743 		}
5744 	      if (sec == NULL)
5745 		sec = h->call_stub;
5746 	    }
5747 	  else if (h->call_stub != NULL)
5748 	    sec = h->call_stub;
5749 	  else
5750 	    sec = h->call_fp_stub;
5751 	}
5752 
5753       BFD_ASSERT (sec->size > 0);
5754       symbol = sec->output_section->vma + sec->output_offset;
5755     }
5756   /* If this is a direct call to a PIC function, redirect to the
5757      non-PIC stub.  */
5758   else if (h != NULL && h->la25_stub
5759 	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5760 						   target_is_16_bit_code_p))
5761     {
5762 	symbol = (h->la25_stub->stub_section->output_section->vma
5763 		  + h->la25_stub->stub_section->output_offset
5764 		  + h->la25_stub->offset);
5765 	if (ELF_ST_IS_MICROMIPS (h->root.other))
5766 	  symbol |= 1;
5767     }
5768   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5769      entry is used if a standard PLT entry has also been made.  In this
5770      case the symbol will have been set by mips_elf_set_plt_sym_value
5771      to point to the standard PLT entry, so redirect to the compressed
5772      one.  */
5773   else if ((mips16_branch_reloc_p (r_type)
5774 	    || micromips_branch_reloc_p (r_type))
5775 	   && !bfd_link_relocatable (info)
5776 	   && h != NULL
5777 	   && h->use_plt_entry
5778 	   && h->root.plt.plist->comp_offset != MINUS_ONE
5779 	   && h->root.plt.plist->mips_offset != MINUS_ONE)
5780     {
5781       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5782 
5783       sec = htab->root.splt;
5784       symbol = (sec->output_section->vma
5785 		+ sec->output_offset
5786 		+ htab->plt_header_size
5787 		+ htab->plt_mips_offset
5788 		+ h->root.plt.plist->comp_offset
5789 		+ 1);
5790 
5791       target_is_16_bit_code_p = !micromips_p;
5792       target_is_micromips_code_p = micromips_p;
5793     }
5794 
5795   /* Make sure MIPS16 and microMIPS are not used together.  */
5796   if ((mips16_branch_reloc_p (r_type) && target_is_micromips_code_p)
5797       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5798    {
5799       _bfd_error_handler
5800 	(_("MIPS16 and microMIPS functions cannot call each other"));
5801       return bfd_reloc_notsupported;
5802    }
5803 
5804   /* Calls from 16-bit code to 32-bit code and vice versa require the
5805      mode change.  However, we can ignore calls to undefined weak symbols,
5806      which should never be executed at runtime.  This exception is important
5807      because the assembly writer may have "known" that any definition of the
5808      symbol would be 16-bit code, and that direct jumps were therefore
5809      acceptable.  */
5810   *cross_mode_jump_p = (!bfd_link_relocatable (info)
5811 			&& !(h && h->root.root.type == bfd_link_hash_undefweak)
5812 			&& ((mips16_branch_reloc_p (r_type)
5813 			     && !target_is_16_bit_code_p)
5814 			    || (micromips_branch_reloc_p (r_type)
5815 				&& !target_is_micromips_code_p)
5816 			    || ((branch_reloc_p (r_type)
5817 				 || r_type == R_MIPS_JALR)
5818 				&& (target_is_16_bit_code_p
5819 				    || target_is_micromips_code_p))));
5820 
5821   resolved_to_zero = (h != NULL
5822 		      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, &h->root));
5823 
5824   switch (r_type)
5825     {
5826     case R_MIPS16_CALL16:
5827     case R_MIPS16_GOT16:
5828     case R_MIPS_CALL16:
5829     case R_MIPS_GOT16:
5830     case R_MIPS_GOT_PAGE:
5831     case R_MIPS_GOT_DISP:
5832     case R_MIPS_GOT_LO16:
5833     case R_MIPS_CALL_LO16:
5834     case R_MICROMIPS_CALL16:
5835     case R_MICROMIPS_GOT16:
5836     case R_MICROMIPS_GOT_PAGE:
5837     case R_MICROMIPS_GOT_DISP:
5838     case R_MICROMIPS_GOT_LO16:
5839     case R_MICROMIPS_CALL_LO16:
5840       if (resolved_to_zero
5841 	  && !bfd_link_relocatable (info)
5842 	  && mips_elf_nullify_got_load (input_bfd, contents,
5843 					relocation, howto, TRUE))
5844 	return bfd_reloc_continue;
5845 
5846       /* Fall through.  */
5847     case R_MIPS_GOT_HI16:
5848     case R_MIPS_CALL_HI16:
5849     case R_MICROMIPS_GOT_HI16:
5850     case R_MICROMIPS_CALL_HI16:
5851       if (resolved_to_zero
5852 	  && htab->use_absolute_zero
5853 	  && bfd_link_pic (info))
5854 	{
5855 	  /* Redirect to the special `__gnu_absolute_zero' symbol.  */
5856 	  h = mips_elf_link_hash_lookup (htab, "__gnu_absolute_zero",
5857 					 FALSE, FALSE, FALSE);
5858 	  BFD_ASSERT (h != NULL);
5859 	}
5860       break;
5861     }
5862 
5863   local_p = (h == NULL || mips_use_local_got_p (info, h));
5864 
5865   gp0 = _bfd_get_gp_value (input_bfd);
5866   gp = _bfd_get_gp_value (abfd);
5867   if (htab->got_info)
5868     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5869 
5870   if (gnu_local_gp_p)
5871     symbol = gp;
5872 
5873   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5874      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5875      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5876   if (got_page_reloc_p (r_type) && !local_p)
5877     {
5878       r_type = (micromips_reloc_p (r_type)
5879 		? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5880       addend = 0;
5881     }
5882 
5883   /* If we haven't already determined the GOT offset, and we're going
5884      to need it, get it now.  */
5885   switch (r_type)
5886     {
5887     case R_MIPS16_CALL16:
5888     case R_MIPS16_GOT16:
5889     case R_MIPS_CALL16:
5890     case R_MIPS_GOT16:
5891     case R_MIPS_GOT_DISP:
5892     case R_MIPS_GOT_HI16:
5893     case R_MIPS_CALL_HI16:
5894     case R_MIPS_GOT_LO16:
5895     case R_MIPS_CALL_LO16:
5896     case R_MICROMIPS_CALL16:
5897     case R_MICROMIPS_GOT16:
5898     case R_MICROMIPS_GOT_DISP:
5899     case R_MICROMIPS_GOT_HI16:
5900     case R_MICROMIPS_CALL_HI16:
5901     case R_MICROMIPS_GOT_LO16:
5902     case R_MICROMIPS_CALL_LO16:
5903     case R_MIPS_TLS_GD:
5904     case R_MIPS_TLS_GOTTPREL:
5905     case R_MIPS_TLS_LDM:
5906     case R_MIPS16_TLS_GD:
5907     case R_MIPS16_TLS_GOTTPREL:
5908     case R_MIPS16_TLS_LDM:
5909     case R_MICROMIPS_TLS_GD:
5910     case R_MICROMIPS_TLS_GOTTPREL:
5911     case R_MICROMIPS_TLS_LDM:
5912       /* Find the index into the GOT where this value is located.  */
5913       if (tls_ldm_reloc_p (r_type))
5914 	{
5915 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5916 					0, 0, NULL, r_type);
5917 	  if (g == MINUS_ONE)
5918 	    return bfd_reloc_outofrange;
5919 	}
5920       else if (!local_p)
5921 	{
5922 	  /* On VxWorks, CALL relocations should refer to the .got.plt
5923 	     entry, which is initialized to point at the PLT stub.  */
5924 	  if (htab->is_vxworks
5925 	      && (call_hi16_reloc_p (r_type)
5926 		  || call_lo16_reloc_p (r_type)
5927 		  || call16_reloc_p (r_type)))
5928 	    {
5929 	      BFD_ASSERT (addend == 0);
5930 	      BFD_ASSERT (h->root.needs_plt);
5931 	      g = mips_elf_gotplt_index (info, &h->root);
5932 	    }
5933 	  else
5934 	    {
5935 	      BFD_ASSERT (addend == 0);
5936 	      g = mips_elf_global_got_index (abfd, info, input_bfd,
5937 					     &h->root, r_type);
5938 	      if (!TLS_RELOC_P (r_type)
5939 		  && !elf_hash_table (info)->dynamic_sections_created)
5940 		/* This is a static link.  We must initialize the GOT entry.  */
5941 		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->root.sgot->contents + g);
5942 	    }
5943 	}
5944       else if (!htab->is_vxworks
5945 	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5946 	/* The calculation below does not involve "g".  */
5947 	break;
5948       else
5949 	{
5950 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5951 					symbol + addend, r_symndx, h, r_type);
5952 	  if (g == MINUS_ONE)
5953 	    return bfd_reloc_outofrange;
5954 	}
5955 
5956       /* Convert GOT indices to actual offsets.  */
5957       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5958       break;
5959     }
5960 
5961   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5962      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5963   if (h != NULL && is_gott_symbol (info, &h->root))
5964     {
5965       Elf_Internal_Rela outrel;
5966       bfd_byte *loc;
5967       asection *s;
5968 
5969       s = mips_elf_rel_dyn_section (info, FALSE);
5970       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5971 
5972       outrel.r_offset = (input_section->output_section->vma
5973 			 + input_section->output_offset
5974 			 + relocation->r_offset);
5975       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5976       outrel.r_addend = addend;
5977       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5978 
5979       /* If we've written this relocation for a readonly section,
5980 	 we need to set DF_TEXTREL again, so that we do not delete the
5981 	 DT_TEXTREL tag.  */
5982       if (MIPS_ELF_READONLY_SECTION (input_section))
5983 	info->flags |= DF_TEXTREL;
5984 
5985       *valuep = 0;
5986       return bfd_reloc_ok;
5987     }
5988 
5989   /* Figure out what kind of relocation is being performed.  */
5990   switch (r_type)
5991     {
5992     case R_MIPS_NONE:
5993       return bfd_reloc_continue;
5994 
5995     case R_MIPS_16:
5996       if (howto->partial_inplace)
5997 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5998       value = symbol + addend;
5999       overflowed_p = mips_elf_overflow_p (value, 16);
6000       break;
6001 
6002     case R_MIPS_32:
6003     case R_MIPS_REL32:
6004     case R_MIPS_64:
6005       if ((bfd_link_pic (info)
6006 	   || (htab->root.dynamic_sections_created
6007 	       && h != NULL
6008 	       && h->root.def_dynamic
6009 	       && !h->root.def_regular
6010 	       && !h->has_static_relocs))
6011 	  && r_symndx != STN_UNDEF
6012 	  && (h == NULL
6013 	      || h->root.root.type != bfd_link_hash_undefweak
6014 	      || (ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
6015 		  && !resolved_to_zero))
6016 	  && (input_section->flags & SEC_ALLOC) != 0)
6017 	{
6018 	  /* If we're creating a shared library, then we can't know
6019 	     where the symbol will end up.  So, we create a relocation
6020 	     record in the output, and leave the job up to the dynamic
6021 	     linker.  We must do the same for executable references to
6022 	     shared library symbols, unless we've decided to use copy
6023 	     relocs or PLTs instead.  */
6024 	  value = addend;
6025 	  if (!mips_elf_create_dynamic_relocation (abfd,
6026 						   info,
6027 						   relocation,
6028 						   h,
6029 						   sec,
6030 						   symbol,
6031 						   &value,
6032 						   input_section))
6033 	    return bfd_reloc_undefined;
6034 	}
6035       else
6036 	{
6037 	  if (r_type != R_MIPS_REL32)
6038 	    value = symbol + addend;
6039 	  else
6040 	    value = addend;
6041 	}
6042       value &= howto->dst_mask;
6043       break;
6044 
6045     case R_MIPS_PC32:
6046       value = symbol + addend - p;
6047       value &= howto->dst_mask;
6048       break;
6049 
6050     case R_MIPS16_26:
6051       /* The calculation for R_MIPS16_26 is just the same as for an
6052 	 R_MIPS_26.  It's only the storage of the relocated field into
6053 	 the output file that's different.  That's handled in
6054 	 mips_elf_perform_relocation.  So, we just fall through to the
6055 	 R_MIPS_26 case here.  */
6056     case R_MIPS_26:
6057     case R_MICROMIPS_26_S1:
6058       {
6059 	unsigned int shift;
6060 
6061 	/* Shift is 2, unusually, for microMIPS JALX.  */
6062 	shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
6063 
6064 	if (howto->partial_inplace && !section_p)
6065 	  value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
6066 	else
6067 	  value = addend;
6068 	value += symbol;
6069 
6070 	/* Make sure the target of a jump is suitably aligned.  Bit 0 must
6071 	   be the correct ISA mode selector except for weak undefined
6072 	   symbols.  */
6073 	if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6074 	    && (*cross_mode_jump_p
6075 		? (value & 3) != (r_type == R_MIPS_26)
6076 		: (value & ((1 << shift) - 1)) != (r_type != R_MIPS_26)))
6077 	  return bfd_reloc_outofrange;
6078 
6079 	value >>= shift;
6080 	if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6081 	  overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
6082 	value &= howto->dst_mask;
6083       }
6084       break;
6085 
6086     case R_MIPS_TLS_DTPREL_HI16:
6087     case R_MIPS16_TLS_DTPREL_HI16:
6088     case R_MICROMIPS_TLS_DTPREL_HI16:
6089       value = (mips_elf_high (addend + symbol - dtprel_base (info))
6090 	       & howto->dst_mask);
6091       break;
6092 
6093     case R_MIPS_TLS_DTPREL_LO16:
6094     case R_MIPS_TLS_DTPREL32:
6095     case R_MIPS_TLS_DTPREL64:
6096     case R_MIPS16_TLS_DTPREL_LO16:
6097     case R_MICROMIPS_TLS_DTPREL_LO16:
6098       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
6099       break;
6100 
6101     case R_MIPS_TLS_TPREL_HI16:
6102     case R_MIPS16_TLS_TPREL_HI16:
6103     case R_MICROMIPS_TLS_TPREL_HI16:
6104       value = (mips_elf_high (addend + symbol - tprel_base (info))
6105 	       & howto->dst_mask);
6106       break;
6107 
6108     case R_MIPS_TLS_TPREL_LO16:
6109     case R_MIPS_TLS_TPREL32:
6110     case R_MIPS_TLS_TPREL64:
6111     case R_MIPS16_TLS_TPREL_LO16:
6112     case R_MICROMIPS_TLS_TPREL_LO16:
6113       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
6114       break;
6115 
6116     case R_MIPS_HI16:
6117     case R_MIPS16_HI16:
6118     case R_MICROMIPS_HI16:
6119       if (!gp_disp_p)
6120 	{
6121 	  value = mips_elf_high (addend + symbol);
6122 	  value &= howto->dst_mask;
6123 	}
6124       else
6125 	{
6126 	  /* For MIPS16 ABI code we generate this sequence
6127 		0: li      $v0,%hi(_gp_disp)
6128 		4: addiupc $v1,%lo(_gp_disp)
6129 		8: sll     $v0,16
6130 	       12: addu    $v0,$v1
6131 	       14: move    $gp,$v0
6132 	     So the offsets of hi and lo relocs are the same, but the
6133 	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
6134 	     ADDIUPC clears the low two bits of the instruction address,
6135 	     so the base is ($t9 + 4) & ~3.  */
6136 	  if (r_type == R_MIPS16_HI16)
6137 	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
6138 	  /* The microMIPS .cpload sequence uses the same assembly
6139 	     instructions as the traditional psABI version, but the
6140 	     incoming $t9 has the low bit set.  */
6141 	  else if (r_type == R_MICROMIPS_HI16)
6142 	    value = mips_elf_high (addend + gp - p - 1);
6143 	  else
6144 	    value = mips_elf_high (addend + gp - p);
6145 	}
6146       break;
6147 
6148     case R_MIPS_LO16:
6149     case R_MIPS16_LO16:
6150     case R_MICROMIPS_LO16:
6151     case R_MICROMIPS_HI0_LO16:
6152       if (!gp_disp_p)
6153 	value = (symbol + addend) & howto->dst_mask;
6154       else
6155 	{
6156 	  /* See the comment for R_MIPS16_HI16 above for the reason
6157 	     for this conditional.  */
6158 	  if (r_type == R_MIPS16_LO16)
6159 	    value = addend + gp - (p & ~(bfd_vma) 0x3);
6160 	  else if (r_type == R_MICROMIPS_LO16
6161 		   || r_type == R_MICROMIPS_HI0_LO16)
6162 	    value = addend + gp - p + 3;
6163 	  else
6164 	    value = addend + gp - p + 4;
6165 	  /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
6166 	     for overflow.  But, on, say, IRIX5, relocations against
6167 	     _gp_disp are normally generated from the .cpload
6168 	     pseudo-op.  It generates code that normally looks like
6169 	     this:
6170 
6171 	       lui    $gp,%hi(_gp_disp)
6172 	       addiu  $gp,$gp,%lo(_gp_disp)
6173 	       addu   $gp,$gp,$t9
6174 
6175 	     Here $t9 holds the address of the function being called,
6176 	     as required by the MIPS ELF ABI.  The R_MIPS_LO16
6177 	     relocation can easily overflow in this situation, but the
6178 	     R_MIPS_HI16 relocation will handle the overflow.
6179 	     Therefore, we consider this a bug in the MIPS ABI, and do
6180 	     not check for overflow here.  */
6181 	}
6182       break;
6183 
6184     case R_MIPS_LITERAL:
6185     case R_MICROMIPS_LITERAL:
6186       /* Because we don't merge literal sections, we can handle this
6187 	 just like R_MIPS_GPREL16.  In the long run, we should merge
6188 	 shared literals, and then we will need to additional work
6189 	 here.  */
6190 
6191       /* Fall through.  */
6192 
6193     case R_MIPS16_GPREL:
6194       /* The R_MIPS16_GPREL performs the same calculation as
6195 	 R_MIPS_GPREL16, but stores the relocated bits in a different
6196 	 order.  We don't need to do anything special here; the
6197 	 differences are handled in mips_elf_perform_relocation.  */
6198     case R_MIPS_GPREL16:
6199     case R_MICROMIPS_GPREL7_S2:
6200     case R_MICROMIPS_GPREL16:
6201       /* Only sign-extend the addend if it was extracted from the
6202 	 instruction.  If the addend was separate, leave it alone,
6203 	 otherwise we may lose significant bits.  */
6204       if (howto->partial_inplace)
6205 	addend = _bfd_mips_elf_sign_extend (addend, 16);
6206       value = symbol + addend - gp;
6207       /* If the symbol was local, any earlier relocatable links will
6208 	 have adjusted its addend with the gp offset, so compensate
6209 	 for that now.  Don't do it for symbols forced local in this
6210 	 link, though, since they won't have had the gp offset applied
6211 	 to them before.  */
6212       if (was_local_p)
6213 	value += gp0;
6214       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6215 	overflowed_p = mips_elf_overflow_p (value, 16);
6216       break;
6217 
6218     case R_MIPS16_GOT16:
6219     case R_MIPS16_CALL16:
6220     case R_MIPS_GOT16:
6221     case R_MIPS_CALL16:
6222     case R_MICROMIPS_GOT16:
6223     case R_MICROMIPS_CALL16:
6224       /* VxWorks does not have separate local and global semantics for
6225 	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
6226       if (!htab->is_vxworks && local_p)
6227 	{
6228 	  value = mips_elf_got16_entry (abfd, input_bfd, info,
6229 					symbol + addend, !was_local_p);
6230 	  if (value == MINUS_ONE)
6231 	    return bfd_reloc_outofrange;
6232 	  value
6233 	    = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6234 	  overflowed_p = mips_elf_overflow_p (value, 16);
6235 	  break;
6236 	}
6237 
6238       /* Fall through.  */
6239 
6240     case R_MIPS_TLS_GD:
6241     case R_MIPS_TLS_GOTTPREL:
6242     case R_MIPS_TLS_LDM:
6243     case R_MIPS_GOT_DISP:
6244     case R_MIPS16_TLS_GD:
6245     case R_MIPS16_TLS_GOTTPREL:
6246     case R_MIPS16_TLS_LDM:
6247     case R_MICROMIPS_TLS_GD:
6248     case R_MICROMIPS_TLS_GOTTPREL:
6249     case R_MICROMIPS_TLS_LDM:
6250     case R_MICROMIPS_GOT_DISP:
6251       value = g;
6252       overflowed_p = mips_elf_overflow_p (value, 16);
6253       break;
6254 
6255     case R_MIPS_GPREL32:
6256       value = (addend + symbol + gp0 - gp);
6257       if (!save_addend)
6258 	value &= howto->dst_mask;
6259       break;
6260 
6261     case R_MIPS_PC16:
6262     case R_MIPS_GNU_REL16_S2:
6263       if (howto->partial_inplace)
6264 	addend = _bfd_mips_elf_sign_extend (addend, 18);
6265 
6266       /* No need to exclude weak undefined symbols here as they resolve
6267 	 to 0 and never set `*cross_mode_jump_p', so this alignment check
6268 	 will never trigger for them.  */
6269       if (*cross_mode_jump_p
6270 	  ? ((symbol + addend) & 3) != 1
6271 	  : ((symbol + addend) & 3) != 0)
6272 	return bfd_reloc_outofrange;
6273 
6274       value = symbol + addend - p;
6275       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6276 	overflowed_p = mips_elf_overflow_p (value, 18);
6277       value >>= howto->rightshift;
6278       value &= howto->dst_mask;
6279       break;
6280 
6281     case R_MIPS16_PC16_S1:
6282       if (howto->partial_inplace)
6283 	addend = _bfd_mips_elf_sign_extend (addend, 17);
6284 
6285       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6286 	  && (*cross_mode_jump_p
6287 	      ? ((symbol + addend) & 3) != 0
6288 	      : ((symbol + addend) & 1) == 0))
6289 	return bfd_reloc_outofrange;
6290 
6291       value = symbol + addend - p;
6292       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6293 	overflowed_p = mips_elf_overflow_p (value, 17);
6294       value >>= howto->rightshift;
6295       value &= howto->dst_mask;
6296       break;
6297 
6298     case R_MIPS_PC21_S2:
6299       if (howto->partial_inplace)
6300 	addend = _bfd_mips_elf_sign_extend (addend, 23);
6301 
6302       if ((symbol + addend) & 3)
6303 	return bfd_reloc_outofrange;
6304 
6305       value = symbol + addend - p;
6306       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6307 	overflowed_p = mips_elf_overflow_p (value, 23);
6308       value >>= howto->rightshift;
6309       value &= howto->dst_mask;
6310       break;
6311 
6312     case R_MIPS_PC26_S2:
6313       if (howto->partial_inplace)
6314 	addend = _bfd_mips_elf_sign_extend (addend, 28);
6315 
6316       if ((symbol + addend) & 3)
6317 	return bfd_reloc_outofrange;
6318 
6319       value = symbol + addend - p;
6320       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6321 	overflowed_p = mips_elf_overflow_p (value, 28);
6322       value >>= howto->rightshift;
6323       value &= howto->dst_mask;
6324       break;
6325 
6326     case R_MIPS_PC18_S3:
6327       if (howto->partial_inplace)
6328 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6329 
6330       if ((symbol + addend) & 7)
6331 	return bfd_reloc_outofrange;
6332 
6333       value = symbol + addend - ((p | 7) ^ 7);
6334       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6335 	overflowed_p = mips_elf_overflow_p (value, 21);
6336       value >>= howto->rightshift;
6337       value &= howto->dst_mask;
6338       break;
6339 
6340     case R_MIPS_PC19_S2:
6341       if (howto->partial_inplace)
6342 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6343 
6344       if ((symbol + addend) & 3)
6345 	return bfd_reloc_outofrange;
6346 
6347       value = symbol + addend - p;
6348       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6349 	overflowed_p = mips_elf_overflow_p (value, 21);
6350       value >>= howto->rightshift;
6351       value &= howto->dst_mask;
6352       break;
6353 
6354     case R_MIPS_PCHI16:
6355       value = mips_elf_high (symbol + addend - p);
6356       value &= howto->dst_mask;
6357       break;
6358 
6359     case R_MIPS_PCLO16:
6360       if (howto->partial_inplace)
6361 	addend = _bfd_mips_elf_sign_extend (addend, 16);
6362       value = symbol + addend - p;
6363       value &= howto->dst_mask;
6364       break;
6365 
6366     case R_MICROMIPS_PC7_S1:
6367       if (howto->partial_inplace)
6368 	addend = _bfd_mips_elf_sign_extend (addend, 8);
6369 
6370       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6371 	  && (*cross_mode_jump_p
6372 	      ? ((symbol + addend + 2) & 3) != 0
6373 	      : ((symbol + addend + 2) & 1) == 0))
6374 	return bfd_reloc_outofrange;
6375 
6376       value = symbol + addend - p;
6377       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6378 	overflowed_p = mips_elf_overflow_p (value, 8);
6379       value >>= howto->rightshift;
6380       value &= howto->dst_mask;
6381       break;
6382 
6383     case R_MICROMIPS_PC10_S1:
6384       if (howto->partial_inplace)
6385 	addend = _bfd_mips_elf_sign_extend (addend, 11);
6386 
6387       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6388 	  && (*cross_mode_jump_p
6389 	      ? ((symbol + addend + 2) & 3) != 0
6390 	      : ((symbol + addend + 2) & 1) == 0))
6391 	return bfd_reloc_outofrange;
6392 
6393       value = symbol + addend - p;
6394       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6395 	overflowed_p = mips_elf_overflow_p (value, 11);
6396       value >>= howto->rightshift;
6397       value &= howto->dst_mask;
6398       break;
6399 
6400     case R_MICROMIPS_PC16_S1:
6401       if (howto->partial_inplace)
6402 	addend = _bfd_mips_elf_sign_extend (addend, 17);
6403 
6404       if ((was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6405 	  && (*cross_mode_jump_p
6406 	      ? ((symbol + addend) & 3) != 0
6407 	      : ((symbol + addend) & 1) == 0))
6408 	return bfd_reloc_outofrange;
6409 
6410       value = symbol + addend - p;
6411       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6412 	overflowed_p = mips_elf_overflow_p (value, 17);
6413       value >>= howto->rightshift;
6414       value &= howto->dst_mask;
6415       break;
6416 
6417     case R_MICROMIPS_PC23_S2:
6418       if (howto->partial_inplace)
6419 	addend = _bfd_mips_elf_sign_extend (addend, 25);
6420       value = symbol + addend - ((p | 3) ^ 3);
6421       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6422 	overflowed_p = mips_elf_overflow_p (value, 25);
6423       value >>= howto->rightshift;
6424       value &= howto->dst_mask;
6425       break;
6426 
6427     case R_MIPS_GOT_HI16:
6428     case R_MIPS_CALL_HI16:
6429     case R_MICROMIPS_GOT_HI16:
6430     case R_MICROMIPS_CALL_HI16:
6431       /* We're allowed to handle these two relocations identically.
6432 	 The dynamic linker is allowed to handle the CALL relocations
6433 	 differently by creating a lazy evaluation stub.  */
6434       value = g;
6435       value = mips_elf_high (value);
6436       value &= howto->dst_mask;
6437       break;
6438 
6439     case R_MIPS_GOT_LO16:
6440     case R_MIPS_CALL_LO16:
6441     case R_MICROMIPS_GOT_LO16:
6442     case R_MICROMIPS_CALL_LO16:
6443       value = g & howto->dst_mask;
6444       break;
6445 
6446     case R_MIPS_GOT_PAGE:
6447     case R_MICROMIPS_GOT_PAGE:
6448       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6449       if (value == MINUS_ONE)
6450 	return bfd_reloc_outofrange;
6451       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6452       overflowed_p = mips_elf_overflow_p (value, 16);
6453       break;
6454 
6455     case R_MIPS_GOT_OFST:
6456     case R_MICROMIPS_GOT_OFST:
6457       if (local_p)
6458 	mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6459       else
6460 	value = addend;
6461       overflowed_p = mips_elf_overflow_p (value, 16);
6462       break;
6463 
6464     case R_MIPS_SUB:
6465     case R_MICROMIPS_SUB:
6466       value = symbol - addend;
6467       value &= howto->dst_mask;
6468       break;
6469 
6470     case R_MIPS_HIGHER:
6471     case R_MICROMIPS_HIGHER:
6472       value = mips_elf_higher (addend + symbol);
6473       value &= howto->dst_mask;
6474       break;
6475 
6476     case R_MIPS_HIGHEST:
6477     case R_MICROMIPS_HIGHEST:
6478       value = mips_elf_highest (addend + symbol);
6479       value &= howto->dst_mask;
6480       break;
6481 
6482     case R_MIPS_SCN_DISP:
6483     case R_MICROMIPS_SCN_DISP:
6484       value = symbol + addend - sec->output_offset;
6485       value &= howto->dst_mask;
6486       break;
6487 
6488     case R_MIPS_JALR:
6489     case R_MICROMIPS_JALR:
6490       /* This relocation is only a hint.  In some cases, we optimize
6491 	 it into a bal instruction.  But we don't try to optimize
6492 	 when the symbol does not resolve locally.  */
6493       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6494 	return bfd_reloc_continue;
6495       /* We can't optimize cross-mode jumps either.  */
6496       if (*cross_mode_jump_p)
6497 	return bfd_reloc_continue;
6498       value = symbol + addend;
6499       /* Neither we can non-instruction-aligned targets.  */
6500       if (r_type == R_MIPS_JALR ? (value & 3) != 0 : (value & 1) == 0)
6501 	return bfd_reloc_continue;
6502       break;
6503 
6504     case R_MIPS_PJUMP:
6505     case R_MIPS_GNU_VTINHERIT:
6506     case R_MIPS_GNU_VTENTRY:
6507       /* We don't do anything with these at present.  */
6508       return bfd_reloc_continue;
6509 
6510     default:
6511       /* An unrecognized relocation type.  */
6512       return bfd_reloc_notsupported;
6513     }
6514 
6515   /* Store the VALUE for our caller.  */
6516   *valuep = value;
6517   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6518 }
6519 
6520 /* It has been determined that the result of the RELOCATION is the
6521    VALUE.  Use HOWTO to place VALUE into the output file at the
6522    appropriate position.  The SECTION is the section to which the
6523    relocation applies.
6524    CROSS_MODE_JUMP_P is true if the relocation field
6525    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6526 
6527    Returns FALSE if anything goes wrong.  */
6528 
6529 static bfd_boolean
6530 mips_elf_perform_relocation (struct bfd_link_info *info,
6531 			     reloc_howto_type *howto,
6532 			     const Elf_Internal_Rela *relocation,
6533 			     bfd_vma value, bfd *input_bfd,
6534 			     asection *input_section, bfd_byte *contents,
6535 			     bfd_boolean cross_mode_jump_p)
6536 {
6537   bfd_vma x;
6538   bfd_byte *location;
6539   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6540 
6541   /* Figure out where the relocation is occurring.  */
6542   location = contents + relocation->r_offset;
6543 
6544   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6545 
6546   /* Obtain the current value.  */
6547   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6548 
6549   /* Clear the field we are setting.  */
6550   x &= ~howto->dst_mask;
6551 
6552   /* Set the field.  */
6553   x |= (value & howto->dst_mask);
6554 
6555   /* Detect incorrect JALX usage.  If required, turn JAL or BAL into JALX.  */
6556   if (!cross_mode_jump_p && jal_reloc_p (r_type))
6557     {
6558       bfd_vma opcode = x >> 26;
6559 
6560       if (r_type == R_MIPS16_26 ? opcode == 0x7
6561 	  : r_type == R_MICROMIPS_26_S1 ? opcode == 0x3c
6562 	  : opcode == 0x1d)
6563 	{
6564 	  info->callbacks->einfo
6565 	    (_("%X%H: unsupported JALX to the same ISA mode\n"),
6566 	     input_bfd, input_section, relocation->r_offset);
6567 	  return TRUE;
6568 	}
6569     }
6570   if (cross_mode_jump_p && jal_reloc_p (r_type))
6571     {
6572       bfd_boolean ok;
6573       bfd_vma opcode = x >> 26;
6574       bfd_vma jalx_opcode;
6575 
6576       /* Check to see if the opcode is already JAL or JALX.  */
6577       if (r_type == R_MIPS16_26)
6578 	{
6579 	  ok = ((opcode == 0x6) || (opcode == 0x7));
6580 	  jalx_opcode = 0x7;
6581 	}
6582       else if (r_type == R_MICROMIPS_26_S1)
6583 	{
6584 	  ok = ((opcode == 0x3d) || (opcode == 0x3c));
6585 	  jalx_opcode = 0x3c;
6586 	}
6587       else
6588 	{
6589 	  ok = ((opcode == 0x3) || (opcode == 0x1d));
6590 	  jalx_opcode = 0x1d;
6591 	}
6592 
6593       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6594 	 convert J or JALS to JALX.  */
6595       if (!ok)
6596 	{
6597 	  info->callbacks->einfo
6598 	    (_("%X%H: unsupported jump between ISA modes; "
6599 	       "consider recompiling with interlinking enabled\n"),
6600 	     input_bfd, input_section, relocation->r_offset);
6601 	  return TRUE;
6602 	}
6603 
6604       /* Make this the JALX opcode.  */
6605       x = (x & ~(0x3fu << 26)) | (jalx_opcode << 26);
6606     }
6607   else if (cross_mode_jump_p && b_reloc_p (r_type))
6608     {
6609       bfd_boolean ok = FALSE;
6610       bfd_vma opcode = x >> 16;
6611       bfd_vma jalx_opcode = 0;
6612       bfd_vma sign_bit = 0;
6613       bfd_vma addr;
6614       bfd_vma dest;
6615 
6616       if (r_type == R_MICROMIPS_PC16_S1)
6617 	{
6618 	  ok = opcode == 0x4060;
6619 	  jalx_opcode = 0x3c;
6620 	  sign_bit = 0x10000;
6621 	  value <<= 1;
6622 	}
6623       else if (r_type == R_MIPS_PC16 || r_type == R_MIPS_GNU_REL16_S2)
6624 	{
6625 	  ok = opcode == 0x411;
6626 	  jalx_opcode = 0x1d;
6627 	  sign_bit = 0x20000;
6628 	  value <<= 2;
6629 	}
6630 
6631       if (ok && !bfd_link_pic (info))
6632 	{
6633 	  addr = (input_section->output_section->vma
6634 		  + input_section->output_offset
6635 		  + relocation->r_offset
6636 		  + 4);
6637 	  dest = (addr
6638 		  + (((value & ((sign_bit << 1) - 1)) ^ sign_bit) - sign_bit));
6639 
6640 	  if ((addr >> 28) << 28 != (dest >> 28) << 28)
6641 	    {
6642 	      info->callbacks->einfo
6643 		(_("%X%H: cannot convert branch between ISA modes "
6644 		   "to JALX: relocation out of range\n"),
6645 		 input_bfd, input_section, relocation->r_offset);
6646 	      return TRUE;
6647 	    }
6648 
6649 	  /* Make this the JALX opcode.  */
6650 	  x = ((dest >> 2) & 0x3ffffff) | jalx_opcode << 26;
6651 	}
6652       else if (!mips_elf_hash_table (info)->ignore_branch_isa)
6653 	{
6654 	  info->callbacks->einfo
6655 	    (_("%X%H: unsupported branch between ISA modes\n"),
6656 	     input_bfd, input_section, relocation->r_offset);
6657 	  return TRUE;
6658 	}
6659     }
6660 
6661   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6662      range.  */
6663   if (!bfd_link_relocatable (info)
6664       && !cross_mode_jump_p
6665       && ((JAL_TO_BAL_P (input_bfd)
6666 	   && r_type == R_MIPS_26
6667 	   && (x >> 26) == 0x3)			/* jal addr */
6668 	  || (JALR_TO_BAL_P (input_bfd)
6669 	      && r_type == R_MIPS_JALR
6670 	      && x == 0x0320f809)		/* jalr t9 */
6671 	  || (JR_TO_B_P (input_bfd)
6672 	      && r_type == R_MIPS_JALR
6673 	      && (x & ~1) == 0x03200008)))	/* jr t9 / jalr zero, t9 */
6674     {
6675       bfd_vma addr;
6676       bfd_vma dest;
6677       bfd_signed_vma off;
6678 
6679       addr = (input_section->output_section->vma
6680 	      + input_section->output_offset
6681 	      + relocation->r_offset
6682 	      + 4);
6683       if (r_type == R_MIPS_26)
6684 	dest = (value << 2) | ((addr >> 28) << 28);
6685       else
6686 	dest = value;
6687       off = dest - addr;
6688       if (off <= 0x1ffff && off >= -0x20000)
6689 	{
6690 	  if ((x & ~1) == 0x03200008)		/* jr t9 / jalr zero, t9 */
6691 	    x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6692 	  else
6693 	    x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6694 	}
6695     }
6696 
6697   /* Put the value into the output.  */
6698   mips_elf_store_contents (howto, relocation, input_bfd, contents, x);
6699 
6700   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !bfd_link_relocatable (info),
6701 			       location);
6702 
6703   return TRUE;
6704 }
6705 
6706 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6707    is the original relocation, which is now being transformed into a
6708    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6709    caller should store the result in place of the original addend.  */
6710 
6711 static bfd_boolean
6712 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6713 				    struct bfd_link_info *info,
6714 				    const Elf_Internal_Rela *rel,
6715 				    struct mips_elf_link_hash_entry *h,
6716 				    asection *sec, bfd_vma symbol,
6717 				    bfd_vma *addendp, asection *input_section)
6718 {
6719   Elf_Internal_Rela outrel[3];
6720   asection *sreloc;
6721   bfd *dynobj;
6722   int r_type;
6723   long indx;
6724   bfd_boolean defined_p;
6725   struct mips_elf_link_hash_table *htab;
6726 
6727   htab = mips_elf_hash_table (info);
6728   BFD_ASSERT (htab != NULL);
6729 
6730   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6731   dynobj = elf_hash_table (info)->dynobj;
6732   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6733   BFD_ASSERT (sreloc != NULL);
6734   BFD_ASSERT (sreloc->contents != NULL);
6735   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6736 	      < sreloc->size);
6737 
6738   outrel[0].r_offset =
6739     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6740   if (ABI_64_P (output_bfd))
6741     {
6742       outrel[1].r_offset =
6743 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6744       outrel[2].r_offset =
6745 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6746     }
6747 
6748   if (outrel[0].r_offset == MINUS_ONE)
6749     /* The relocation field has been deleted.  */
6750     return TRUE;
6751 
6752   if (outrel[0].r_offset == MINUS_TWO)
6753     {
6754       /* The relocation field has been converted into a relative value of
6755 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6756 	 the field to be fully relocated, so add in the symbol's value.  */
6757       *addendp += symbol;
6758       return TRUE;
6759     }
6760 
6761   /* We must now calculate the dynamic symbol table index to use
6762      in the relocation.  */
6763   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6764     {
6765       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6766       indx = h->root.dynindx;
6767       if (SGI_COMPAT (output_bfd))
6768 	defined_p = h->root.def_regular;
6769       else
6770 	/* ??? glibc's ld.so just adds the final GOT entry to the
6771 	   relocation field.  It therefore treats relocs against
6772 	   defined symbols in the same way as relocs against
6773 	   undefined symbols.  */
6774 	defined_p = FALSE;
6775     }
6776   else
6777     {
6778       if (sec != NULL && bfd_is_abs_section (sec))
6779 	indx = 0;
6780       else if (sec == NULL || sec->owner == NULL)
6781 	{
6782 	  bfd_set_error (bfd_error_bad_value);
6783 	  return FALSE;
6784 	}
6785       else
6786 	{
6787 	  indx = elf_section_data (sec->output_section)->dynindx;
6788 	  if (indx == 0)
6789 	    {
6790 	      asection *osec = htab->root.text_index_section;
6791 	      indx = elf_section_data (osec)->dynindx;
6792 	    }
6793 	  if (indx == 0)
6794 	    abort ();
6795 	}
6796 
6797       /* Instead of generating a relocation using the section
6798 	 symbol, we may as well make it a fully relative
6799 	 relocation.  We want to avoid generating relocations to
6800 	 local symbols because we used to generate them
6801 	 incorrectly, without adding the original symbol value,
6802 	 which is mandated by the ABI for section symbols.  In
6803 	 order to give dynamic loaders and applications time to
6804 	 phase out the incorrect use, we refrain from emitting
6805 	 section-relative relocations.  It's not like they're
6806 	 useful, after all.  This should be a bit more efficient
6807 	 as well.  */
6808       /* ??? Although this behavior is compatible with glibc's ld.so,
6809 	 the ABI says that relocations against STN_UNDEF should have
6810 	 a symbol value of 0.  Irix rld honors this, so relocations
6811 	 against STN_UNDEF have no effect.  */
6812       if (!SGI_COMPAT (output_bfd))
6813 	indx = 0;
6814       defined_p = TRUE;
6815     }
6816 
6817   /* If the relocation was previously an absolute relocation and
6818      this symbol will not be referred to by the relocation, we must
6819      adjust it by the value we give it in the dynamic symbol table.
6820      Otherwise leave the job up to the dynamic linker.  */
6821   if (defined_p && r_type != R_MIPS_REL32)
6822     *addendp += symbol;
6823 
6824   if (htab->is_vxworks)
6825     /* VxWorks uses non-relative relocations for this.  */
6826     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6827   else
6828     /* The relocation is always an REL32 relocation because we don't
6829        know where the shared library will wind up at load-time.  */
6830     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6831 				   R_MIPS_REL32);
6832 
6833   /* For strict adherence to the ABI specification, we should
6834      generate a R_MIPS_64 relocation record by itself before the
6835      _REL32/_64 record as well, such that the addend is read in as
6836      a 64-bit value (REL32 is a 32-bit relocation, after all).
6837      However, since none of the existing ELF64 MIPS dynamic
6838      loaders seems to care, we don't waste space with these
6839      artificial relocations.  If this turns out to not be true,
6840      mips_elf_allocate_dynamic_relocation() should be tweaked so
6841      as to make room for a pair of dynamic relocations per
6842      invocation if ABI_64_P, and here we should generate an
6843      additional relocation record with R_MIPS_64 by itself for a
6844      NULL symbol before this relocation record.  */
6845   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6846 				 ABI_64_P (output_bfd)
6847 				 ? R_MIPS_64
6848 				 : R_MIPS_NONE);
6849   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6850 
6851   /* Adjust the output offset of the relocation to reference the
6852      correct location in the output file.  */
6853   outrel[0].r_offset += (input_section->output_section->vma
6854 			 + input_section->output_offset);
6855   outrel[1].r_offset += (input_section->output_section->vma
6856 			 + input_section->output_offset);
6857   outrel[2].r_offset += (input_section->output_section->vma
6858 			 + input_section->output_offset);
6859 
6860   /* Put the relocation back out.  We have to use the special
6861      relocation outputter in the 64-bit case since the 64-bit
6862      relocation format is non-standard.  */
6863   if (ABI_64_P (output_bfd))
6864     {
6865       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6866 	(output_bfd, &outrel[0],
6867 	 (sreloc->contents
6868 	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6869     }
6870   else if (htab->is_vxworks)
6871     {
6872       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6873       outrel[0].r_addend = *addendp;
6874       bfd_elf32_swap_reloca_out
6875 	(output_bfd, &outrel[0],
6876 	 (sreloc->contents
6877 	  + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6878     }
6879   else
6880     bfd_elf32_swap_reloc_out
6881       (output_bfd, &outrel[0],
6882        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6883 
6884   /* We've now added another relocation.  */
6885   ++sreloc->reloc_count;
6886 
6887   /* Make sure the output section is writable.  The dynamic linker
6888      will be writing to it.  */
6889   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6890     |= SHF_WRITE;
6891 
6892   /* On IRIX5, make an entry of compact relocation info.  */
6893   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6894     {
6895       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6896       bfd_byte *cr;
6897 
6898       if (scpt)
6899 	{
6900 	  Elf32_crinfo cptrel;
6901 
6902 	  mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6903 	  cptrel.vaddr = (rel->r_offset
6904 			  + input_section->output_section->vma
6905 			  + input_section->output_offset);
6906 	  if (r_type == R_MIPS_REL32)
6907 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6908 	  else
6909 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6910 	  mips_elf_set_cr_dist2to (cptrel, 0);
6911 	  cptrel.konst = *addendp;
6912 
6913 	  cr = (scpt->contents
6914 		+ sizeof (Elf32_External_compact_rel));
6915 	  mips_elf_set_cr_relvaddr (cptrel, 0);
6916 	  bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6917 				     ((Elf32_External_crinfo *) cr
6918 				      + scpt->reloc_count));
6919 	  ++scpt->reloc_count;
6920 	}
6921     }
6922 
6923   /* If we've written this relocation for a readonly section,
6924      we need to set DF_TEXTREL again, so that we do not delete the
6925      DT_TEXTREL tag.  */
6926   if (MIPS_ELF_READONLY_SECTION (input_section))
6927     info->flags |= DF_TEXTREL;
6928 
6929   return TRUE;
6930 }
6931 
6932 /* Return the MACH for a MIPS e_flags value.  */
6933 
6934 unsigned long
6935 _bfd_elf_mips_mach (flagword flags)
6936 {
6937   switch (flags & EF_MIPS_MACH)
6938     {
6939     case E_MIPS_MACH_3900:
6940       return bfd_mach_mips3900;
6941 
6942     case E_MIPS_MACH_4010:
6943       return bfd_mach_mips4010;
6944 
6945     case E_MIPS_MACH_4100:
6946       return bfd_mach_mips4100;
6947 
6948     case E_MIPS_MACH_4111:
6949       return bfd_mach_mips4111;
6950 
6951     case E_MIPS_MACH_4120:
6952       return bfd_mach_mips4120;
6953 
6954     case E_MIPS_MACH_4650:
6955       return bfd_mach_mips4650;
6956 
6957     case E_MIPS_MACH_5400:
6958       return bfd_mach_mips5400;
6959 
6960     case E_MIPS_MACH_5500:
6961       return bfd_mach_mips5500;
6962 
6963     case E_MIPS_MACH_5900:
6964       return bfd_mach_mips5900;
6965 
6966     case E_MIPS_MACH_9000:
6967       return bfd_mach_mips9000;
6968 
6969     case E_MIPS_MACH_SB1:
6970       return bfd_mach_mips_sb1;
6971 
6972     case E_MIPS_MACH_LS2E:
6973       return bfd_mach_mips_loongson_2e;
6974 
6975     case E_MIPS_MACH_LS2F:
6976       return bfd_mach_mips_loongson_2f;
6977 
6978     case E_MIPS_MACH_GS464:
6979       return bfd_mach_mips_gs464;
6980 
6981     case E_MIPS_MACH_GS464E:
6982       return bfd_mach_mips_gs464e;
6983 
6984     case E_MIPS_MACH_GS264E:
6985       return bfd_mach_mips_gs264e;
6986 
6987     case E_MIPS_MACH_OCTEON3:
6988       return bfd_mach_mips_octeon3;
6989 
6990     case E_MIPS_MACH_OCTEON2:
6991       return bfd_mach_mips_octeon2;
6992 
6993     case E_MIPS_MACH_OCTEON:
6994       return bfd_mach_mips_octeon;
6995 
6996     case E_MIPS_MACH_XLR:
6997       return bfd_mach_mips_xlr;
6998 
6999     case E_MIPS_MACH_IAMR2:
7000       return bfd_mach_mips_interaptiv_mr2;
7001 
7002     default:
7003       switch (flags & EF_MIPS_ARCH)
7004 	{
7005 	default:
7006 	case E_MIPS_ARCH_1:
7007 	  return bfd_mach_mips3000;
7008 
7009 	case E_MIPS_ARCH_2:
7010 	  return bfd_mach_mips6000;
7011 
7012 	case E_MIPS_ARCH_3:
7013 	  return bfd_mach_mips4000;
7014 
7015 	case E_MIPS_ARCH_4:
7016 	  return bfd_mach_mips8000;
7017 
7018 	case E_MIPS_ARCH_5:
7019 	  return bfd_mach_mips5;
7020 
7021 	case E_MIPS_ARCH_32:
7022 	  return bfd_mach_mipsisa32;
7023 
7024 	case E_MIPS_ARCH_64:
7025 	  return bfd_mach_mipsisa64;
7026 
7027 	case E_MIPS_ARCH_32R2:
7028 	  return bfd_mach_mipsisa32r2;
7029 
7030 	case E_MIPS_ARCH_64R2:
7031 	  return bfd_mach_mipsisa64r2;
7032 
7033 	case E_MIPS_ARCH_32R6:
7034 	  return bfd_mach_mipsisa32r6;
7035 
7036 	case E_MIPS_ARCH_64R6:
7037 	  return bfd_mach_mipsisa64r6;
7038 	}
7039     }
7040 
7041   return 0;
7042 }
7043 
7044 /* Return printable name for ABI.  */
7045 
7046 static INLINE char *
7047 elf_mips_abi_name (bfd *abfd)
7048 {
7049   flagword flags;
7050 
7051   flags = elf_elfheader (abfd)->e_flags;
7052   switch (flags & EF_MIPS_ABI)
7053     {
7054     case 0:
7055       if (ABI_N32_P (abfd))
7056 	return "N32";
7057       else if (ABI_64_P (abfd))
7058 	return "64";
7059       else
7060 	return "none";
7061     case E_MIPS_ABI_O32:
7062       return "O32";
7063     case E_MIPS_ABI_O64:
7064       return "O64";
7065     case E_MIPS_ABI_EABI32:
7066       return "EABI32";
7067     case E_MIPS_ABI_EABI64:
7068       return "EABI64";
7069     default:
7070       return "unknown abi";
7071     }
7072 }
7073 
7074 /* MIPS ELF uses two common sections.  One is the usual one, and the
7075    other is for small objects.  All the small objects are kept
7076    together, and then referenced via the gp pointer, which yields
7077    faster assembler code.  This is what we use for the small common
7078    section.  This approach is copied from ecoff.c.  */
7079 static asection mips_elf_scom_section;
7080 static asymbol mips_elf_scom_symbol;
7081 static asymbol *mips_elf_scom_symbol_ptr;
7082 
7083 /* MIPS ELF also uses an acommon section, which represents an
7084    allocated common symbol which may be overridden by a
7085    definition in a shared library.  */
7086 static asection mips_elf_acom_section;
7087 static asymbol mips_elf_acom_symbol;
7088 static asymbol *mips_elf_acom_symbol_ptr;
7089 
7090 /* This is used for both the 32-bit and the 64-bit ABI.  */
7091 
7092 void
7093 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
7094 {
7095   elf_symbol_type *elfsym;
7096 
7097   /* Handle the special MIPS section numbers that a symbol may use.  */
7098   elfsym = (elf_symbol_type *) asym;
7099   switch (elfsym->internal_elf_sym.st_shndx)
7100     {
7101     case SHN_MIPS_ACOMMON:
7102       /* This section is used in a dynamically linked executable file.
7103 	 It is an allocated common section.  The dynamic linker can
7104 	 either resolve these symbols to something in a shared
7105 	 library, or it can just leave them here.  For our purposes,
7106 	 we can consider these symbols to be in a new section.  */
7107       if (mips_elf_acom_section.name == NULL)
7108 	{
7109 	  /* Initialize the acommon section.  */
7110 	  mips_elf_acom_section.name = ".acommon";
7111 	  mips_elf_acom_section.flags = SEC_ALLOC;
7112 	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
7113 	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
7114 	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
7115 	  mips_elf_acom_symbol.name = ".acommon";
7116 	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
7117 	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
7118 	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
7119 	}
7120       asym->section = &mips_elf_acom_section;
7121       break;
7122 
7123     case SHN_COMMON:
7124       /* Common symbols less than the GP size are automatically
7125 	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
7126       if (asym->value > elf_gp_size (abfd)
7127 	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
7128 	  || IRIX_COMPAT (abfd) == ict_irix6)
7129 	break;
7130       /* Fall through.  */
7131     case SHN_MIPS_SCOMMON:
7132       if (mips_elf_scom_section.name == NULL)
7133 	{
7134 	  /* Initialize the small common section.  */
7135 	  mips_elf_scom_section.name = ".scommon";
7136 	  mips_elf_scom_section.flags = SEC_IS_COMMON;
7137 	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
7138 	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
7139 	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
7140 	  mips_elf_scom_symbol.name = ".scommon";
7141 	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
7142 	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
7143 	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
7144 	}
7145       asym->section = &mips_elf_scom_section;
7146       asym->value = elfsym->internal_elf_sym.st_size;
7147       break;
7148 
7149     case SHN_MIPS_SUNDEFINED:
7150       asym->section = bfd_und_section_ptr;
7151       break;
7152 
7153     case SHN_MIPS_TEXT:
7154       {
7155 	asection *section = bfd_get_section_by_name (abfd, ".text");
7156 
7157 	if (section != NULL)
7158 	  {
7159 	    asym->section = section;
7160 	    /* MIPS_TEXT is a bit special, the address is not an offset
7161 	       to the base of the .text section.  So subtract the section
7162 	       base address to make it an offset.  */
7163 	    asym->value -= section->vma;
7164 	  }
7165       }
7166       break;
7167 
7168     case SHN_MIPS_DATA:
7169       {
7170 	asection *section = bfd_get_section_by_name (abfd, ".data");
7171 
7172 	if (section != NULL)
7173 	  {
7174 	    asym->section = section;
7175 	    /* MIPS_DATA is a bit special, the address is not an offset
7176 	       to the base of the .data section.  So subtract the section
7177 	       base address to make it an offset.  */
7178 	    asym->value -= section->vma;
7179 	  }
7180       }
7181       break;
7182     }
7183 
7184   /* If this is an odd-valued function symbol, assume it's a MIPS16
7185      or microMIPS one.  */
7186   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
7187       && (asym->value & 1) != 0)
7188     {
7189       asym->value--;
7190       if (MICROMIPS_P (abfd))
7191 	elfsym->internal_elf_sym.st_other
7192 	  = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
7193       else
7194 	elfsym->internal_elf_sym.st_other
7195 	  = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
7196     }
7197 }
7198 
7199 /* Implement elf_backend_eh_frame_address_size.  This differs from
7200    the default in the way it handles EABI64.
7201 
7202    EABI64 was originally specified as an LP64 ABI, and that is what
7203    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
7204    historically accepted the combination of -mabi=eabi and -mlong32,
7205    and this ILP32 variation has become semi-official over time.
7206    Both forms use elf32 and have pointer-sized FDE addresses.
7207 
7208    If an EABI object was generated by GCC 4.0 or above, it will have
7209    an empty .gcc_compiled_longXX section, where XX is the size of longs
7210    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
7211    have no special marking to distinguish them from LP64 objects.
7212 
7213    We don't want users of the official LP64 ABI to be punished for the
7214    existence of the ILP32 variant, but at the same time, we don't want
7215    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
7216    We therefore take the following approach:
7217 
7218       - If ABFD contains a .gcc_compiled_longXX section, use it to
7219 	determine the pointer size.
7220 
7221       - Otherwise check the type of the first relocation.  Assume that
7222 	the LP64 ABI is being used if the relocation is of type R_MIPS_64.
7223 
7224       - Otherwise punt.
7225 
7226    The second check is enough to detect LP64 objects generated by pre-4.0
7227    compilers because, in the kind of output generated by those compilers,
7228    the first relocation will be associated with either a CIE personality
7229    routine or an FDE start address.  Furthermore, the compilers never
7230    used a special (non-pointer) encoding for this ABI.
7231 
7232    Checking the relocation type should also be safe because there is no
7233    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
7234    did so.  */
7235 
7236 unsigned int
7237 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, const asection *sec)
7238 {
7239   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
7240     return 8;
7241   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
7242     {
7243       bfd_boolean long32_p, long64_p;
7244 
7245       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
7246       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
7247       if (long32_p && long64_p)
7248 	return 0;
7249       if (long32_p)
7250 	return 4;
7251       if (long64_p)
7252 	return 8;
7253 
7254       if (sec->reloc_count > 0
7255 	  && elf_section_data (sec)->relocs != NULL
7256 	  && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
7257 	      == R_MIPS_64))
7258 	return 8;
7259 
7260       return 0;
7261     }
7262   return 4;
7263 }
7264 
7265 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
7266    relocations against two unnamed section symbols to resolve to the
7267    same address.  For example, if we have code like:
7268 
7269 	lw	$4,%got_disp(.data)($gp)
7270 	lw	$25,%got_disp(.text)($gp)
7271 	jalr	$25
7272 
7273    then the linker will resolve both relocations to .data and the program
7274    will jump there rather than to .text.
7275 
7276    We can work around this problem by giving names to local section symbols.
7277    This is also what the MIPSpro tools do.  */
7278 
7279 bfd_boolean
7280 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
7281 {
7282   return SGI_COMPAT (abfd);
7283 }
7284 
7285 /* Work over a section just before writing it out.  This routine is
7286    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
7287    sections that need the SHF_MIPS_GPREL flag by name; there has to be
7288    a better way.  */
7289 
7290 bfd_boolean
7291 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
7292 {
7293   if (hdr->sh_type == SHT_MIPS_REGINFO
7294       && hdr->sh_size > 0)
7295     {
7296       bfd_byte buf[4];
7297 
7298       BFD_ASSERT (hdr->contents == NULL);
7299 
7300       if (hdr->sh_size != sizeof (Elf32_External_RegInfo))
7301 	{
7302 	  _bfd_error_handler
7303 	    (_("%pB: incorrect `.reginfo' section size; "
7304 	       "expected %" PRIu64 ", got %" PRIu64),
7305 	     abfd, (uint64_t) sizeof (Elf32_External_RegInfo),
7306 	     (uint64_t) hdr->sh_size);
7307 	  bfd_set_error (bfd_error_bad_value);
7308 	  return FALSE;
7309 	}
7310 
7311       if (bfd_seek (abfd,
7312 		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
7313 		    SEEK_SET) != 0)
7314 	return FALSE;
7315       H_PUT_32 (abfd, elf_gp (abfd), buf);
7316       if (bfd_bwrite (buf, 4, abfd) != 4)
7317 	return FALSE;
7318     }
7319 
7320   if (hdr->sh_type == SHT_MIPS_OPTIONS
7321       && hdr->bfd_section != NULL
7322       && mips_elf_section_data (hdr->bfd_section) != NULL
7323       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
7324     {
7325       bfd_byte *contents, *l, *lend;
7326 
7327       /* We stored the section contents in the tdata field in the
7328 	 set_section_contents routine.  We save the section contents
7329 	 so that we don't have to read them again.
7330 	 At this point we know that elf_gp is set, so we can look
7331 	 through the section contents to see if there is an
7332 	 ODK_REGINFO structure.  */
7333 
7334       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
7335       l = contents;
7336       lend = contents + hdr->sh_size;
7337       while (l + sizeof (Elf_External_Options) <= lend)
7338 	{
7339 	  Elf_Internal_Options intopt;
7340 
7341 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7342 					&intopt);
7343 	  if (intopt.size < sizeof (Elf_External_Options))
7344 	    {
7345 	      _bfd_error_handler
7346 		/* xgettext:c-format */
7347 		(_("%pB: warning: bad `%s' option size %u smaller than"
7348 		   " its header"),
7349 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7350 	      break;
7351 	    }
7352 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7353 	    {
7354 	      bfd_byte buf[8];
7355 
7356 	      if (bfd_seek (abfd,
7357 			    (hdr->sh_offset
7358 			     + (l - contents)
7359 			     + sizeof (Elf_External_Options)
7360 			     + (sizeof (Elf64_External_RegInfo) - 8)),
7361 			     SEEK_SET) != 0)
7362 		return FALSE;
7363 	      H_PUT_64 (abfd, elf_gp (abfd), buf);
7364 	      if (bfd_bwrite (buf, 8, abfd) != 8)
7365 		return FALSE;
7366 	    }
7367 	  else if (intopt.kind == ODK_REGINFO)
7368 	    {
7369 	      bfd_byte buf[4];
7370 
7371 	      if (bfd_seek (abfd,
7372 			    (hdr->sh_offset
7373 			     + (l - contents)
7374 			     + sizeof (Elf_External_Options)
7375 			     + (sizeof (Elf32_External_RegInfo) - 4)),
7376 			    SEEK_SET) != 0)
7377 		return FALSE;
7378 	      H_PUT_32 (abfd, elf_gp (abfd), buf);
7379 	      if (bfd_bwrite (buf, 4, abfd) != 4)
7380 		return FALSE;
7381 	    }
7382 	  l += intopt.size;
7383 	}
7384     }
7385 
7386   if (hdr->bfd_section != NULL)
7387     {
7388       const char *name = bfd_section_name (hdr->bfd_section);
7389 
7390       /* .sbss is not handled specially here because the GNU/Linux
7391 	 prelinker can convert .sbss from NOBITS to PROGBITS and
7392 	 changing it back to NOBITS breaks the binary.  The entry in
7393 	 _bfd_mips_elf_special_sections will ensure the correct flags
7394 	 are set on .sbss if BFD creates it without reading it from an
7395 	 input file, and without special handling here the flags set
7396 	 on it in an input file will be followed.  */
7397       if (strcmp (name, ".sdata") == 0
7398 	  || strcmp (name, ".lit8") == 0
7399 	  || strcmp (name, ".lit4") == 0)
7400 	hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7401       else if (strcmp (name, ".srdata") == 0)
7402 	hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7403       else if (strcmp (name, ".compact_rel") == 0)
7404 	hdr->sh_flags = 0;
7405       else if (strcmp (name, ".rtproc") == 0)
7406 	{
7407 	  if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7408 	    {
7409 	      unsigned int adjust;
7410 
7411 	      adjust = hdr->sh_size % hdr->sh_addralign;
7412 	      if (adjust != 0)
7413 		hdr->sh_size += hdr->sh_addralign - adjust;
7414 	    }
7415 	}
7416     }
7417 
7418   return TRUE;
7419 }
7420 
7421 /* Handle a MIPS specific section when reading an object file.  This
7422    is called when elfcode.h finds a section with an unknown type.
7423    This routine supports both the 32-bit and 64-bit ELF ABI.
7424 
7425    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7426    how to.  */
7427 
7428 bfd_boolean
7429 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7430 				 Elf_Internal_Shdr *hdr,
7431 				 const char *name,
7432 				 int shindex)
7433 {
7434   flagword flags = 0;
7435 
7436   /* There ought to be a place to keep ELF backend specific flags, but
7437      at the moment there isn't one.  We just keep track of the
7438      sections by their name, instead.  Fortunately, the ABI gives
7439      suggested names for all the MIPS specific sections, so we will
7440      probably get away with this.  */
7441   switch (hdr->sh_type)
7442     {
7443     case SHT_MIPS_LIBLIST:
7444       if (strcmp (name, ".liblist") != 0)
7445 	return FALSE;
7446       break;
7447     case SHT_MIPS_MSYM:
7448       if (strcmp (name, ".msym") != 0)
7449 	return FALSE;
7450       break;
7451     case SHT_MIPS_CONFLICT:
7452       if (strcmp (name, ".conflict") != 0)
7453 	return FALSE;
7454       break;
7455     case SHT_MIPS_GPTAB:
7456       if (! CONST_STRNEQ (name, ".gptab."))
7457 	return FALSE;
7458       break;
7459     case SHT_MIPS_UCODE:
7460       if (strcmp (name, ".ucode") != 0)
7461 	return FALSE;
7462       break;
7463     case SHT_MIPS_DEBUG:
7464       if (strcmp (name, ".mdebug") != 0)
7465 	return FALSE;
7466       flags = SEC_DEBUGGING;
7467       break;
7468     case SHT_MIPS_REGINFO:
7469       if (strcmp (name, ".reginfo") != 0
7470 	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7471 	return FALSE;
7472       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7473       break;
7474     case SHT_MIPS_IFACE:
7475       if (strcmp (name, ".MIPS.interfaces") != 0)
7476 	return FALSE;
7477       break;
7478     case SHT_MIPS_CONTENT:
7479       if (! CONST_STRNEQ (name, ".MIPS.content"))
7480 	return FALSE;
7481       break;
7482     case SHT_MIPS_OPTIONS:
7483       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7484 	return FALSE;
7485       break;
7486     case SHT_MIPS_ABIFLAGS:
7487       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7488 	return FALSE;
7489       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7490       break;
7491     case SHT_MIPS_DWARF:
7492       if (! CONST_STRNEQ (name, ".debug_")
7493 	  && ! CONST_STRNEQ (name, ".zdebug_"))
7494 	return FALSE;
7495       break;
7496     case SHT_MIPS_SYMBOL_LIB:
7497       if (strcmp (name, ".MIPS.symlib") != 0)
7498 	return FALSE;
7499       break;
7500     case SHT_MIPS_EVENTS:
7501       if (! CONST_STRNEQ (name, ".MIPS.events")
7502 	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7503 	return FALSE;
7504       break;
7505     case SHT_MIPS_XHASH:
7506       if (strcmp (name, ".MIPS.xhash") != 0)
7507 	return FALSE;
7508     default:
7509       break;
7510     }
7511 
7512   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7513     return FALSE;
7514 
7515   if (flags)
7516     {
7517       if (!bfd_set_section_flags (hdr->bfd_section,
7518 				  (bfd_section_flags (hdr->bfd_section)
7519 				   | flags)))
7520 	return FALSE;
7521     }
7522 
7523   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7524     {
7525       Elf_External_ABIFlags_v0 ext;
7526 
7527       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7528 				      &ext, 0, sizeof ext))
7529 	return FALSE;
7530       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7531 					&mips_elf_tdata (abfd)->abiflags);
7532       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7533 	return FALSE;
7534       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7535     }
7536 
7537   /* FIXME: We should record sh_info for a .gptab section.  */
7538 
7539   /* For a .reginfo section, set the gp value in the tdata information
7540      from the contents of this section.  We need the gp value while
7541      processing relocs, so we just get it now.  The .reginfo section
7542      is not used in the 64-bit MIPS ELF ABI.  */
7543   if (hdr->sh_type == SHT_MIPS_REGINFO)
7544     {
7545       Elf32_External_RegInfo ext;
7546       Elf32_RegInfo s;
7547 
7548       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7549 				      &ext, 0, sizeof ext))
7550 	return FALSE;
7551       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7552       elf_gp (abfd) = s.ri_gp_value;
7553     }
7554 
7555   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7556      set the gp value based on what we find.  We may see both
7557      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7558      they should agree.  */
7559   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7560     {
7561       bfd_byte *contents, *l, *lend;
7562 
7563       contents = bfd_malloc (hdr->sh_size);
7564       if (contents == NULL)
7565 	return FALSE;
7566       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7567 				      0, hdr->sh_size))
7568 	{
7569 	  free (contents);
7570 	  return FALSE;
7571 	}
7572       l = contents;
7573       lend = contents + hdr->sh_size;
7574       while (l + sizeof (Elf_External_Options) <= lend)
7575 	{
7576 	  Elf_Internal_Options intopt;
7577 
7578 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7579 					&intopt);
7580 	  if (intopt.size < sizeof (Elf_External_Options))
7581 	    {
7582 	      _bfd_error_handler
7583 		/* xgettext:c-format */
7584 		(_("%pB: warning: bad `%s' option size %u smaller than"
7585 		   " its header"),
7586 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7587 	      break;
7588 	    }
7589 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7590 	    {
7591 	      Elf64_Internal_RegInfo intreg;
7592 
7593 	      bfd_mips_elf64_swap_reginfo_in
7594 		(abfd,
7595 		 ((Elf64_External_RegInfo *)
7596 		  (l + sizeof (Elf_External_Options))),
7597 		 &intreg);
7598 	      elf_gp (abfd) = intreg.ri_gp_value;
7599 	    }
7600 	  else if (intopt.kind == ODK_REGINFO)
7601 	    {
7602 	      Elf32_RegInfo intreg;
7603 
7604 	      bfd_mips_elf32_swap_reginfo_in
7605 		(abfd,
7606 		 ((Elf32_External_RegInfo *)
7607 		  (l + sizeof (Elf_External_Options))),
7608 		 &intreg);
7609 	      elf_gp (abfd) = intreg.ri_gp_value;
7610 	    }
7611 	  l += intopt.size;
7612 	}
7613       free (contents);
7614     }
7615 
7616   return TRUE;
7617 }
7618 
7619 /* Set the correct type for a MIPS ELF section.  We do this by the
7620    section name, which is a hack, but ought to work.  This routine is
7621    used by both the 32-bit and the 64-bit ABI.  */
7622 
7623 bfd_boolean
7624 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7625 {
7626   const char *name = bfd_section_name (sec);
7627 
7628   if (strcmp (name, ".liblist") == 0)
7629     {
7630       hdr->sh_type = SHT_MIPS_LIBLIST;
7631       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7632       /* The sh_link field is set in final_write_processing.  */
7633     }
7634   else if (strcmp (name, ".conflict") == 0)
7635     hdr->sh_type = SHT_MIPS_CONFLICT;
7636   else if (CONST_STRNEQ (name, ".gptab."))
7637     {
7638       hdr->sh_type = SHT_MIPS_GPTAB;
7639       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7640       /* The sh_info field is set in final_write_processing.  */
7641     }
7642   else if (strcmp (name, ".ucode") == 0)
7643     hdr->sh_type = SHT_MIPS_UCODE;
7644   else if (strcmp (name, ".mdebug") == 0)
7645     {
7646       hdr->sh_type = SHT_MIPS_DEBUG;
7647       /* In a shared object on IRIX 5.3, the .mdebug section has an
7648 	 entsize of 0.  FIXME: Does this matter?  */
7649       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7650 	hdr->sh_entsize = 0;
7651       else
7652 	hdr->sh_entsize = 1;
7653     }
7654   else if (strcmp (name, ".reginfo") == 0)
7655     {
7656       hdr->sh_type = SHT_MIPS_REGINFO;
7657       /* In a shared object on IRIX 5.3, the .reginfo section has an
7658 	 entsize of 0x18.  FIXME: Does this matter?  */
7659       if (SGI_COMPAT (abfd))
7660 	{
7661 	  if ((abfd->flags & DYNAMIC) != 0)
7662 	    hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7663 	  else
7664 	    hdr->sh_entsize = 1;
7665 	}
7666       else
7667 	hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7668     }
7669   else if (SGI_COMPAT (abfd)
7670 	   && (strcmp (name, ".hash") == 0
7671 	       || strcmp (name, ".dynamic") == 0
7672 	       || strcmp (name, ".dynstr") == 0))
7673     {
7674       if (SGI_COMPAT (abfd))
7675 	hdr->sh_entsize = 0;
7676 #if 0
7677       /* This isn't how the IRIX6 linker behaves.  */
7678       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7679 #endif
7680     }
7681   else if (strcmp (name, ".got") == 0
7682 	   || strcmp (name, ".srdata") == 0
7683 	   || strcmp (name, ".sdata") == 0
7684 	   || strcmp (name, ".sbss") == 0
7685 	   || strcmp (name, ".lit4") == 0
7686 	   || strcmp (name, ".lit8") == 0)
7687     hdr->sh_flags |= SHF_MIPS_GPREL;
7688   else if (strcmp (name, ".MIPS.interfaces") == 0)
7689     {
7690       hdr->sh_type = SHT_MIPS_IFACE;
7691       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7692     }
7693   else if (CONST_STRNEQ (name, ".MIPS.content"))
7694     {
7695       hdr->sh_type = SHT_MIPS_CONTENT;
7696       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7697       /* The sh_info field is set in final_write_processing.  */
7698     }
7699   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7700     {
7701       hdr->sh_type = SHT_MIPS_OPTIONS;
7702       hdr->sh_entsize = 1;
7703       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7704     }
7705   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7706     {
7707       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7708       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7709     }
7710   else if (CONST_STRNEQ (name, ".debug_")
7711 	   || CONST_STRNEQ (name, ".zdebug_"))
7712     {
7713       hdr->sh_type = SHT_MIPS_DWARF;
7714 
7715       /* Irix facilities such as libexc expect a single .debug_frame
7716 	 per executable, the system ones have NOSTRIP set and the linker
7717 	 doesn't merge sections with different flags so ...  */
7718       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7719 	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7720     }
7721   else if (strcmp (name, ".MIPS.symlib") == 0)
7722     {
7723       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7724       /* The sh_link and sh_info fields are set in
7725 	 final_write_processing.  */
7726     }
7727   else if (CONST_STRNEQ (name, ".MIPS.events")
7728 	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
7729     {
7730       hdr->sh_type = SHT_MIPS_EVENTS;
7731       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7732       /* The sh_link field is set in final_write_processing.  */
7733     }
7734   else if (strcmp (name, ".msym") == 0)
7735     {
7736       hdr->sh_type = SHT_MIPS_MSYM;
7737       hdr->sh_flags |= SHF_ALLOC;
7738       hdr->sh_entsize = 8;
7739     }
7740   else if (strcmp (name, ".MIPS.xhash") == 0)
7741     {
7742       hdr->sh_type = SHT_MIPS_XHASH;
7743       hdr->sh_flags |= SHF_ALLOC;
7744       hdr->sh_entsize = get_elf_backend_data(abfd)->s->arch_size == 64 ? 0 : 4;
7745     }
7746 
7747   /* The generic elf_fake_sections will set up REL_HDR using the default
7748    kind of relocations.  We used to set up a second header for the
7749    non-default kind of relocations here, but only NewABI would use
7750    these, and the IRIX ld doesn't like resulting empty RELA sections.
7751    Thus we create those header only on demand now.  */
7752 
7753   return TRUE;
7754 }
7755 
7756 /* Given a BFD section, try to locate the corresponding ELF section
7757    index.  This is used by both the 32-bit and the 64-bit ABI.
7758    Actually, it's not clear to me that the 64-bit ABI supports these,
7759    but for non-PIC objects we will certainly want support for at least
7760    the .scommon section.  */
7761 
7762 bfd_boolean
7763 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7764 					asection *sec, int *retval)
7765 {
7766   if (strcmp (bfd_section_name (sec), ".scommon") == 0)
7767     {
7768       *retval = SHN_MIPS_SCOMMON;
7769       return TRUE;
7770     }
7771   if (strcmp (bfd_section_name (sec), ".acommon") == 0)
7772     {
7773       *retval = SHN_MIPS_ACOMMON;
7774       return TRUE;
7775     }
7776   return FALSE;
7777 }
7778 
7779 /* Hook called by the linker routine which adds symbols from an object
7780    file.  We must handle the special MIPS section numbers here.  */
7781 
7782 bfd_boolean
7783 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7784 			       Elf_Internal_Sym *sym, const char **namep,
7785 			       flagword *flagsp ATTRIBUTE_UNUSED,
7786 			       asection **secp, bfd_vma *valp)
7787 {
7788   if (SGI_COMPAT (abfd)
7789       && (abfd->flags & DYNAMIC) != 0
7790       && strcmp (*namep, "_rld_new_interface") == 0)
7791     {
7792       /* Skip IRIX5 rld entry name.  */
7793       *namep = NULL;
7794       return TRUE;
7795     }
7796 
7797   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7798      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7799      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7800      a magic symbol resolved by the linker, we ignore this bogus definition
7801      of _gp_disp.  New ABI objects do not suffer from this problem so this
7802      is not done for them. */
7803   if (!NEWABI_P(abfd)
7804       && (sym->st_shndx == SHN_ABS)
7805       && (strcmp (*namep, "_gp_disp") == 0))
7806     {
7807       *namep = NULL;
7808       return TRUE;
7809     }
7810 
7811   switch (sym->st_shndx)
7812     {
7813     case SHN_COMMON:
7814       /* Common symbols less than the GP size are automatically
7815 	 treated as SHN_MIPS_SCOMMON symbols.  */
7816       if (sym->st_size > elf_gp_size (abfd)
7817 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
7818 	  || IRIX_COMPAT (abfd) == ict_irix6)
7819 	break;
7820       /* Fall through.  */
7821     case SHN_MIPS_SCOMMON:
7822       *secp = bfd_make_section_old_way (abfd, ".scommon");
7823       (*secp)->flags |= SEC_IS_COMMON;
7824       *valp = sym->st_size;
7825       break;
7826 
7827     case SHN_MIPS_TEXT:
7828       /* This section is used in a shared object.  */
7829       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7830 	{
7831 	  asymbol *elf_text_symbol;
7832 	  asection *elf_text_section;
7833 	  bfd_size_type amt = sizeof (asection);
7834 
7835 	  elf_text_section = bfd_zalloc (abfd, amt);
7836 	  if (elf_text_section == NULL)
7837 	    return FALSE;
7838 
7839 	  amt = sizeof (asymbol);
7840 	  elf_text_symbol = bfd_zalloc (abfd, amt);
7841 	  if (elf_text_symbol == NULL)
7842 	    return FALSE;
7843 
7844 	  /* Initialize the section.  */
7845 
7846 	  mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7847 	  mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7848 
7849 	  elf_text_section->symbol = elf_text_symbol;
7850 	  elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7851 
7852 	  elf_text_section->name = ".text";
7853 	  elf_text_section->flags = SEC_NO_FLAGS;
7854 	  elf_text_section->output_section = NULL;
7855 	  elf_text_section->owner = abfd;
7856 	  elf_text_symbol->name = ".text";
7857 	  elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7858 	  elf_text_symbol->section = elf_text_section;
7859 	}
7860       /* This code used to do *secp = bfd_und_section_ptr if
7861 	 bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7862 	 so I took it out.  */
7863       *secp = mips_elf_tdata (abfd)->elf_text_section;
7864       break;
7865 
7866     case SHN_MIPS_ACOMMON:
7867       /* Fall through. XXX Can we treat this as allocated data?  */
7868     case SHN_MIPS_DATA:
7869       /* This section is used in a shared object.  */
7870       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7871 	{
7872 	  asymbol *elf_data_symbol;
7873 	  asection *elf_data_section;
7874 	  bfd_size_type amt = sizeof (asection);
7875 
7876 	  elf_data_section = bfd_zalloc (abfd, amt);
7877 	  if (elf_data_section == NULL)
7878 	    return FALSE;
7879 
7880 	  amt = sizeof (asymbol);
7881 	  elf_data_symbol = bfd_zalloc (abfd, amt);
7882 	  if (elf_data_symbol == NULL)
7883 	    return FALSE;
7884 
7885 	  /* Initialize the section.  */
7886 
7887 	  mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7888 	  mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7889 
7890 	  elf_data_section->symbol = elf_data_symbol;
7891 	  elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7892 
7893 	  elf_data_section->name = ".data";
7894 	  elf_data_section->flags = SEC_NO_FLAGS;
7895 	  elf_data_section->output_section = NULL;
7896 	  elf_data_section->owner = abfd;
7897 	  elf_data_symbol->name = ".data";
7898 	  elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7899 	  elf_data_symbol->section = elf_data_section;
7900 	}
7901       /* This code used to do *secp = bfd_und_section_ptr if
7902 	 bfd_link_pic (info).  I don't know why, and that doesn't make sense,
7903 	 so I took it out.  */
7904       *secp = mips_elf_tdata (abfd)->elf_data_section;
7905       break;
7906 
7907     case SHN_MIPS_SUNDEFINED:
7908       *secp = bfd_und_section_ptr;
7909       break;
7910     }
7911 
7912   if (SGI_COMPAT (abfd)
7913       && ! bfd_link_pic (info)
7914       && info->output_bfd->xvec == abfd->xvec
7915       && strcmp (*namep, "__rld_obj_head") == 0)
7916     {
7917       struct elf_link_hash_entry *h;
7918       struct bfd_link_hash_entry *bh;
7919 
7920       /* Mark __rld_obj_head as dynamic.  */
7921       bh = NULL;
7922       if (! (_bfd_generic_link_add_one_symbol
7923 	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7924 	      get_elf_backend_data (abfd)->collect, &bh)))
7925 	return FALSE;
7926 
7927       h = (struct elf_link_hash_entry *) bh;
7928       h->non_elf = 0;
7929       h->def_regular = 1;
7930       h->type = STT_OBJECT;
7931 
7932       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7933 	return FALSE;
7934 
7935       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7936       mips_elf_hash_table (info)->rld_symbol = h;
7937     }
7938 
7939   /* If this is a mips16 text symbol, add 1 to the value to make it
7940      odd.  This will cause something like .word SYM to come up with
7941      the right value when it is loaded into the PC.  */
7942   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7943     ++*valp;
7944 
7945   return TRUE;
7946 }
7947 
7948 /* This hook function is called before the linker writes out a global
7949    symbol.  We mark symbols as small common if appropriate.  This is
7950    also where we undo the increment of the value for a mips16 symbol.  */
7951 
7952 int
7953 _bfd_mips_elf_link_output_symbol_hook
7954   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7955    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7956    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7957 {
7958   /* If we see a common symbol, which implies a relocatable link, then
7959      if a symbol was small common in an input file, mark it as small
7960      common in the output file.  */
7961   if (sym->st_shndx == SHN_COMMON
7962       && strcmp (input_sec->name, ".scommon") == 0)
7963     sym->st_shndx = SHN_MIPS_SCOMMON;
7964 
7965   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7966     sym->st_value &= ~1;
7967 
7968   return 1;
7969 }
7970 
7971 /* Functions for the dynamic linker.  */
7972 
7973 /* Create dynamic sections when linking against a dynamic object.  */
7974 
7975 bfd_boolean
7976 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7977 {
7978   struct elf_link_hash_entry *h;
7979   struct bfd_link_hash_entry *bh;
7980   flagword flags;
7981   register asection *s;
7982   const char * const *namep;
7983   struct mips_elf_link_hash_table *htab;
7984 
7985   htab = mips_elf_hash_table (info);
7986   BFD_ASSERT (htab != NULL);
7987 
7988   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7989 	   | SEC_LINKER_CREATED | SEC_READONLY);
7990 
7991   /* The psABI requires a read-only .dynamic section, but the VxWorks
7992      EABI doesn't.  */
7993   if (!htab->is_vxworks)
7994     {
7995       s = bfd_get_linker_section (abfd, ".dynamic");
7996       if (s != NULL)
7997 	{
7998 	  if (!bfd_set_section_flags (s, flags))
7999 	    return FALSE;
8000 	}
8001     }
8002 
8003   /* We need to create .got section.  */
8004   if (!mips_elf_create_got_section (abfd, info))
8005     return FALSE;
8006 
8007   if (! mips_elf_rel_dyn_section (info, TRUE))
8008     return FALSE;
8009 
8010   /* Create .stub section.  */
8011   s = bfd_make_section_anyway_with_flags (abfd,
8012 					  MIPS_ELF_STUB_SECTION_NAME (abfd),
8013 					  flags | SEC_CODE);
8014   if (s == NULL
8015       || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8016     return FALSE;
8017   htab->sstubs = s;
8018 
8019   if (!mips_elf_hash_table (info)->use_rld_obj_head
8020       && bfd_link_executable (info)
8021       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
8022     {
8023       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
8024 					      flags &~ (flagword) SEC_READONLY);
8025       if (s == NULL
8026 	  || !bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd)))
8027 	return FALSE;
8028     }
8029 
8030   /* Create .MIPS.xhash section.  */
8031   if (info->emit_gnu_hash)
8032     s = bfd_make_section_anyway_with_flags (abfd, ".MIPS.xhash",
8033 					    flags | SEC_READONLY);
8034 
8035   /* On IRIX5, we adjust add some additional symbols and change the
8036      alignments of several sections.  There is no ABI documentation
8037      indicating that this is necessary on IRIX6, nor any evidence that
8038      the linker takes such action.  */
8039   if (IRIX_COMPAT (abfd) == ict_irix5)
8040     {
8041       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
8042 	{
8043 	  bh = NULL;
8044 	  if (! (_bfd_generic_link_add_one_symbol
8045 		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
8046 		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8047 	    return FALSE;
8048 
8049 	  h = (struct elf_link_hash_entry *) bh;
8050 	  h->mark = 1;
8051 	  h->non_elf = 0;
8052 	  h->def_regular = 1;
8053 	  h->type = STT_SECTION;
8054 
8055 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
8056 	    return FALSE;
8057 	}
8058 
8059       /* We need to create a .compact_rel section.  */
8060       if (SGI_COMPAT (abfd))
8061 	{
8062 	  if (!mips_elf_create_compact_rel_section (abfd, info))
8063 	    return FALSE;
8064 	}
8065 
8066       /* Change alignments of some sections.  */
8067       s = bfd_get_linker_section (abfd, ".hash");
8068       if (s != NULL)
8069 	bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8070 
8071       s = bfd_get_linker_section (abfd, ".dynsym");
8072       if (s != NULL)
8073 	bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8074 
8075       s = bfd_get_linker_section (abfd, ".dynstr");
8076       if (s != NULL)
8077 	bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8078 
8079       /* ??? */
8080       s = bfd_get_section_by_name (abfd, ".reginfo");
8081       if (s != NULL)
8082 	bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8083 
8084       s = bfd_get_linker_section (abfd, ".dynamic");
8085       if (s != NULL)
8086 	bfd_set_section_alignment (s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
8087     }
8088 
8089   if (bfd_link_executable (info))
8090     {
8091       const char *name;
8092 
8093       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
8094       bh = NULL;
8095       if (!(_bfd_generic_link_add_one_symbol
8096 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
8097 	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
8098 	return FALSE;
8099 
8100       h = (struct elf_link_hash_entry *) bh;
8101       h->non_elf = 0;
8102       h->def_regular = 1;
8103       h->type = STT_SECTION;
8104 
8105       if (! bfd_elf_link_record_dynamic_symbol (info, h))
8106 	return FALSE;
8107 
8108       if (! mips_elf_hash_table (info)->use_rld_obj_head)
8109 	{
8110 	  /* __rld_map is a four byte word located in the .data section
8111 	     and is filled in by the rtld to contain a pointer to
8112 	     the _r_debug structure. Its symbol value will be set in
8113 	     _bfd_mips_elf_finish_dynamic_symbol.  */
8114 	  s = bfd_get_linker_section (abfd, ".rld_map");
8115 	  BFD_ASSERT (s != NULL);
8116 
8117 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
8118 	  bh = NULL;
8119 	  if (!(_bfd_generic_link_add_one_symbol
8120 		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
8121 		 get_elf_backend_data (abfd)->collect, &bh)))
8122 	    return FALSE;
8123 
8124 	  h = (struct elf_link_hash_entry *) bh;
8125 	  h->non_elf = 0;
8126 	  h->def_regular = 1;
8127 	  h->type = STT_OBJECT;
8128 
8129 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
8130 	    return FALSE;
8131 	  mips_elf_hash_table (info)->rld_symbol = h;
8132 	}
8133     }
8134 
8135   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
8136      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
8137   if (!_bfd_elf_create_dynamic_sections (abfd, info))
8138     return FALSE;
8139 
8140   /* Do the usual VxWorks handling.  */
8141   if (htab->is_vxworks
8142       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
8143     return FALSE;
8144 
8145   return TRUE;
8146 }
8147 
8148 /* Return true if relocation REL against section SEC is a REL rather than
8149    RELA relocation.  RELOCS is the first relocation in the section and
8150    ABFD is the bfd that contains SEC.  */
8151 
8152 static bfd_boolean
8153 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
8154 			   const Elf_Internal_Rela *relocs,
8155 			   const Elf_Internal_Rela *rel)
8156 {
8157   Elf_Internal_Shdr *rel_hdr;
8158   const struct elf_backend_data *bed;
8159 
8160   /* To determine which flavor of relocation this is, we depend on the
8161      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
8162   rel_hdr = elf_section_data (sec)->rel.hdr;
8163   if (rel_hdr == NULL)
8164     return FALSE;
8165   bed = get_elf_backend_data (abfd);
8166   return ((size_t) (rel - relocs)
8167 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
8168 }
8169 
8170 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
8171    HOWTO is the relocation's howto and CONTENTS points to the contents
8172    of the section that REL is against.  */
8173 
8174 static bfd_vma
8175 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
8176 			  reloc_howto_type *howto, bfd_byte *contents)
8177 {
8178   bfd_byte *location;
8179   unsigned int r_type;
8180   bfd_vma addend;
8181   bfd_vma bytes;
8182 
8183   r_type = ELF_R_TYPE (abfd, rel->r_info);
8184   location = contents + rel->r_offset;
8185 
8186   /* Get the addend, which is stored in the input file.  */
8187   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
8188   bytes = mips_elf_obtain_contents (howto, rel, abfd, contents);
8189   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
8190 
8191   addend = bytes & howto->src_mask;
8192 
8193   /* Shift is 2, unusually, for microMIPS JALX.  Adjust the addend
8194      accordingly.  */
8195   if (r_type == R_MICROMIPS_26_S1 && (bytes >> 26) == 0x3c)
8196     addend <<= 1;
8197 
8198   return addend;
8199 }
8200 
8201 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
8202    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
8203    and update *ADDEND with the final addend.  Return true on success
8204    or false if the LO16 could not be found.  RELEND is the exclusive
8205    upper bound on the relocations for REL's section.  */
8206 
8207 static bfd_boolean
8208 mips_elf_add_lo16_rel_addend (bfd *abfd,
8209 			      const Elf_Internal_Rela *rel,
8210 			      const Elf_Internal_Rela *relend,
8211 			      bfd_byte *contents, bfd_vma *addend)
8212 {
8213   unsigned int r_type, lo16_type;
8214   const Elf_Internal_Rela *lo16_relocation;
8215   reloc_howto_type *lo16_howto;
8216   bfd_vma l;
8217 
8218   r_type = ELF_R_TYPE (abfd, rel->r_info);
8219   if (mips16_reloc_p (r_type))
8220     lo16_type = R_MIPS16_LO16;
8221   else if (micromips_reloc_p (r_type))
8222     lo16_type = R_MICROMIPS_LO16;
8223   else if (r_type == R_MIPS_PCHI16)
8224     lo16_type = R_MIPS_PCLO16;
8225   else
8226     lo16_type = R_MIPS_LO16;
8227 
8228   /* The combined value is the sum of the HI16 addend, left-shifted by
8229      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
8230      code does a `lui' of the HI16 value, and then an `addiu' of the
8231      LO16 value.)
8232 
8233      Scan ahead to find a matching LO16 relocation.
8234 
8235      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
8236      be immediately following.  However, for the IRIX6 ABI, the next
8237      relocation may be a composed relocation consisting of several
8238      relocations for the same address.  In that case, the R_MIPS_LO16
8239      relocation may occur as one of these.  We permit a similar
8240      extension in general, as that is useful for GCC.
8241 
8242      In some cases GCC dead code elimination removes the LO16 but keeps
8243      the corresponding HI16.  This is strictly speaking a violation of
8244      the ABI but not immediately harmful.  */
8245   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
8246   if (lo16_relocation == NULL)
8247     return FALSE;
8248 
8249   /* Obtain the addend kept there.  */
8250   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
8251   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
8252 
8253   l <<= lo16_howto->rightshift;
8254   l = _bfd_mips_elf_sign_extend (l, 16);
8255 
8256   *addend <<= 16;
8257   *addend += l;
8258   return TRUE;
8259 }
8260 
8261 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
8262    store the contents in *CONTENTS on success.  Assume that *CONTENTS
8263    already holds the contents if it is nonull on entry.  */
8264 
8265 static bfd_boolean
8266 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
8267 {
8268   if (*contents)
8269     return TRUE;
8270 
8271   /* Get cached copy if it exists.  */
8272   if (elf_section_data (sec)->this_hdr.contents != NULL)
8273     {
8274       *contents = elf_section_data (sec)->this_hdr.contents;
8275       return TRUE;
8276     }
8277 
8278   return bfd_malloc_and_get_section (abfd, sec, contents);
8279 }
8280 
8281 /* Make a new PLT record to keep internal data.  */
8282 
8283 static struct plt_entry *
8284 mips_elf_make_plt_record (bfd *abfd)
8285 {
8286   struct plt_entry *entry;
8287 
8288   entry = bfd_zalloc (abfd, sizeof (*entry));
8289   if (entry == NULL)
8290     return NULL;
8291 
8292   entry->stub_offset = MINUS_ONE;
8293   entry->mips_offset = MINUS_ONE;
8294   entry->comp_offset = MINUS_ONE;
8295   entry->gotplt_index = MINUS_ONE;
8296   return entry;
8297 }
8298 
8299 /* Define the special `__gnu_absolute_zero' symbol.  We only need this
8300    for PIC code, as otherwise there is no load-time relocation involved
8301    and local GOT entries whose value is zero at static link time will
8302    retain their value at load time.  */
8303 
8304 static bfd_boolean
8305 mips_elf_define_absolute_zero (bfd *abfd, struct bfd_link_info *info,
8306 			       struct mips_elf_link_hash_table *htab,
8307 			       unsigned int r_type)
8308 {
8309   union
8310     {
8311       struct elf_link_hash_entry *eh;
8312       struct bfd_link_hash_entry *bh;
8313     }
8314   hzero;
8315 
8316   BFD_ASSERT (!htab->use_absolute_zero);
8317   BFD_ASSERT (bfd_link_pic (info));
8318 
8319   hzero.bh = NULL;
8320   if (!_bfd_generic_link_add_one_symbol (info, abfd, "__gnu_absolute_zero",
8321 					 BSF_GLOBAL, bfd_abs_section_ptr, 0,
8322 					 NULL, FALSE, FALSE, &hzero.bh))
8323     return FALSE;
8324 
8325   BFD_ASSERT (hzero.bh != NULL);
8326   hzero.eh->size = 0;
8327   hzero.eh->type = STT_NOTYPE;
8328   hzero.eh->other = STV_PROTECTED;
8329   hzero.eh->def_regular = 1;
8330   hzero.eh->non_elf = 0;
8331 
8332   if (!mips_elf_record_global_got_symbol (hzero.eh, abfd, info, TRUE, r_type))
8333     return FALSE;
8334 
8335   htab->use_absolute_zero = TRUE;
8336 
8337   return TRUE;
8338 }
8339 
8340 /* Look through the relocs for a section during the first phase, and
8341    allocate space in the global offset table and record the need for
8342    standard MIPS and compressed procedure linkage table entries.  */
8343 
8344 bfd_boolean
8345 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
8346 			    asection *sec, const Elf_Internal_Rela *relocs)
8347 {
8348   const char *name;
8349   bfd *dynobj;
8350   Elf_Internal_Shdr *symtab_hdr;
8351   struct elf_link_hash_entry **sym_hashes;
8352   size_t extsymoff;
8353   const Elf_Internal_Rela *rel;
8354   const Elf_Internal_Rela *rel_end;
8355   asection *sreloc;
8356   const struct elf_backend_data *bed;
8357   struct mips_elf_link_hash_table *htab;
8358   bfd_byte *contents;
8359   bfd_vma addend;
8360   reloc_howto_type *howto;
8361 
8362   if (bfd_link_relocatable (info))
8363     return TRUE;
8364 
8365   htab = mips_elf_hash_table (info);
8366   BFD_ASSERT (htab != NULL);
8367 
8368   dynobj = elf_hash_table (info)->dynobj;
8369   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8370   sym_hashes = elf_sym_hashes (abfd);
8371   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8372 
8373   bed = get_elf_backend_data (abfd);
8374   rel_end = relocs + sec->reloc_count;
8375 
8376   /* Check for the mips16 stub sections.  */
8377 
8378   name = bfd_section_name (sec);
8379   if (FN_STUB_P (name))
8380     {
8381       unsigned long r_symndx;
8382 
8383       /* Look at the relocation information to figure out which symbol
8384 	 this is for.  */
8385 
8386       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8387       if (r_symndx == 0)
8388 	{
8389 	  _bfd_error_handler
8390 	    /* xgettext:c-format */
8391 	    (_("%pB: warning: cannot determine the target function for"
8392 	       " stub section `%s'"),
8393 	     abfd, name);
8394 	  bfd_set_error (bfd_error_bad_value);
8395 	  return FALSE;
8396 	}
8397 
8398       if (r_symndx < extsymoff
8399 	  || sym_hashes[r_symndx - extsymoff] == NULL)
8400 	{
8401 	  asection *o;
8402 
8403 	  /* This stub is for a local symbol.  This stub will only be
8404 	     needed if there is some relocation in this BFD, other
8405 	     than a 16 bit function call, which refers to this symbol.  */
8406 	  for (o = abfd->sections; o != NULL; o = o->next)
8407 	    {
8408 	      Elf_Internal_Rela *sec_relocs;
8409 	      const Elf_Internal_Rela *r, *rend;
8410 
8411 	      /* We can ignore stub sections when looking for relocs.  */
8412 	      if ((o->flags & SEC_RELOC) == 0
8413 		  || o->reloc_count == 0
8414 		  || section_allows_mips16_refs_p (o))
8415 		continue;
8416 
8417 	      sec_relocs
8418 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8419 					     info->keep_memory);
8420 	      if (sec_relocs == NULL)
8421 		return FALSE;
8422 
8423 	      rend = sec_relocs + o->reloc_count;
8424 	      for (r = sec_relocs; r < rend; r++)
8425 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8426 		    && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
8427 		  break;
8428 
8429 	      if (elf_section_data (o)->relocs != sec_relocs)
8430 		free (sec_relocs);
8431 
8432 	      if (r < rend)
8433 		break;
8434 	    }
8435 
8436 	  if (o == NULL)
8437 	    {
8438 	      /* There is no non-call reloc for this stub, so we do
8439 		 not need it.  Since this function is called before
8440 		 the linker maps input sections to output sections, we
8441 		 can easily discard it by setting the SEC_EXCLUDE
8442 		 flag.  */
8443 	      sec->flags |= SEC_EXCLUDE;
8444 	      return TRUE;
8445 	    }
8446 
8447 	  /* Record this stub in an array of local symbol stubs for
8448 	     this BFD.  */
8449 	  if (mips_elf_tdata (abfd)->local_stubs == NULL)
8450 	    {
8451 	      unsigned long symcount;
8452 	      asection **n;
8453 	      bfd_size_type amt;
8454 
8455 	      if (elf_bad_symtab (abfd))
8456 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8457 	      else
8458 		symcount = symtab_hdr->sh_info;
8459 	      amt = symcount * sizeof (asection *);
8460 	      n = bfd_zalloc (abfd, amt);
8461 	      if (n == NULL)
8462 		return FALSE;
8463 	      mips_elf_tdata (abfd)->local_stubs = n;
8464 	    }
8465 
8466 	  sec->flags |= SEC_KEEP;
8467 	  mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8468 
8469 	  /* We don't need to set mips16_stubs_seen in this case.
8470 	     That flag is used to see whether we need to look through
8471 	     the global symbol table for stubs.  We don't need to set
8472 	     it here, because we just have a local stub.  */
8473 	}
8474       else
8475 	{
8476 	  struct mips_elf_link_hash_entry *h;
8477 
8478 	  h = ((struct mips_elf_link_hash_entry *)
8479 	       sym_hashes[r_symndx - extsymoff]);
8480 
8481 	  while (h->root.root.type == bfd_link_hash_indirect
8482 		 || h->root.root.type == bfd_link_hash_warning)
8483 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8484 
8485 	  /* H is the symbol this stub is for.  */
8486 
8487 	  /* If we already have an appropriate stub for this function, we
8488 	     don't need another one, so we can discard this one.  Since
8489 	     this function is called before the linker maps input sections
8490 	     to output sections, we can easily discard it by setting the
8491 	     SEC_EXCLUDE flag.  */
8492 	  if (h->fn_stub != NULL)
8493 	    {
8494 	      sec->flags |= SEC_EXCLUDE;
8495 	      return TRUE;
8496 	    }
8497 
8498 	  sec->flags |= SEC_KEEP;
8499 	  h->fn_stub = sec;
8500 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8501 	}
8502     }
8503   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8504     {
8505       unsigned long r_symndx;
8506       struct mips_elf_link_hash_entry *h;
8507       asection **loc;
8508 
8509       /* Look at the relocation information to figure out which symbol
8510 	 this is for.  */
8511 
8512       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8513       if (r_symndx == 0)
8514 	{
8515 	  _bfd_error_handler
8516 	    /* xgettext:c-format */
8517 	    (_("%pB: warning: cannot determine the target function for"
8518 	       " stub section `%s'"),
8519 	     abfd, name);
8520 	  bfd_set_error (bfd_error_bad_value);
8521 	  return FALSE;
8522 	}
8523 
8524       if (r_symndx < extsymoff
8525 	  || sym_hashes[r_symndx - extsymoff] == NULL)
8526 	{
8527 	  asection *o;
8528 
8529 	  /* This stub is for a local symbol.  This stub will only be
8530 	     needed if there is some relocation (R_MIPS16_26) in this BFD
8531 	     that refers to this symbol.  */
8532 	  for (o = abfd->sections; o != NULL; o = o->next)
8533 	    {
8534 	      Elf_Internal_Rela *sec_relocs;
8535 	      const Elf_Internal_Rela *r, *rend;
8536 
8537 	      /* We can ignore stub sections when looking for relocs.  */
8538 	      if ((o->flags & SEC_RELOC) == 0
8539 		  || o->reloc_count == 0
8540 		  || section_allows_mips16_refs_p (o))
8541 		continue;
8542 
8543 	      sec_relocs
8544 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8545 					     info->keep_memory);
8546 	      if (sec_relocs == NULL)
8547 		return FALSE;
8548 
8549 	      rend = sec_relocs + o->reloc_count;
8550 	      for (r = sec_relocs; r < rend; r++)
8551 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8552 		    && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8553 		    break;
8554 
8555 	      if (elf_section_data (o)->relocs != sec_relocs)
8556 		free (sec_relocs);
8557 
8558 	      if (r < rend)
8559 		break;
8560 	    }
8561 
8562 	  if (o == NULL)
8563 	    {
8564 	      /* There is no non-call reloc for this stub, so we do
8565 		 not need it.  Since this function is called before
8566 		 the linker maps input sections to output sections, we
8567 		 can easily discard it by setting the SEC_EXCLUDE
8568 		 flag.  */
8569 	      sec->flags |= SEC_EXCLUDE;
8570 	      return TRUE;
8571 	    }
8572 
8573 	  /* Record this stub in an array of local symbol call_stubs for
8574 	     this BFD.  */
8575 	  if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8576 	    {
8577 	      unsigned long symcount;
8578 	      asection **n;
8579 	      bfd_size_type amt;
8580 
8581 	      if (elf_bad_symtab (abfd))
8582 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8583 	      else
8584 		symcount = symtab_hdr->sh_info;
8585 	      amt = symcount * sizeof (asection *);
8586 	      n = bfd_zalloc (abfd, amt);
8587 	      if (n == NULL)
8588 		return FALSE;
8589 	      mips_elf_tdata (abfd)->local_call_stubs = n;
8590 	    }
8591 
8592 	  sec->flags |= SEC_KEEP;
8593 	  mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8594 
8595 	  /* We don't need to set mips16_stubs_seen in this case.
8596 	     That flag is used to see whether we need to look through
8597 	     the global symbol table for stubs.  We don't need to set
8598 	     it here, because we just have a local stub.  */
8599 	}
8600       else
8601 	{
8602 	  h = ((struct mips_elf_link_hash_entry *)
8603 	       sym_hashes[r_symndx - extsymoff]);
8604 
8605 	  /* H is the symbol this stub is for.  */
8606 
8607 	  if (CALL_FP_STUB_P (name))
8608 	    loc = &h->call_fp_stub;
8609 	  else
8610 	    loc = &h->call_stub;
8611 
8612 	  /* If we already have an appropriate stub for this function, we
8613 	     don't need another one, so we can discard this one.  Since
8614 	     this function is called before the linker maps input sections
8615 	     to output sections, we can easily discard it by setting the
8616 	     SEC_EXCLUDE flag.  */
8617 	  if (*loc != NULL)
8618 	    {
8619 	      sec->flags |= SEC_EXCLUDE;
8620 	      return TRUE;
8621 	    }
8622 
8623 	  sec->flags |= SEC_KEEP;
8624 	  *loc = sec;
8625 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8626 	}
8627     }
8628 
8629   sreloc = NULL;
8630   contents = NULL;
8631   for (rel = relocs; rel < rel_end; ++rel)
8632     {
8633       unsigned long r_symndx;
8634       unsigned int r_type;
8635       struct elf_link_hash_entry *h;
8636       bfd_boolean can_make_dynamic_p;
8637       bfd_boolean call_reloc_p;
8638       bfd_boolean constrain_symbol_p;
8639 
8640       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8641       r_type = ELF_R_TYPE (abfd, rel->r_info);
8642 
8643       if (r_symndx < extsymoff)
8644 	h = NULL;
8645       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8646 	{
8647 	  _bfd_error_handler
8648 	    /* xgettext:c-format */
8649 	    (_("%pB: malformed reloc detected for section %s"),
8650 	     abfd, name);
8651 	  bfd_set_error (bfd_error_bad_value);
8652 	  return FALSE;
8653 	}
8654       else
8655 	{
8656 	  h = sym_hashes[r_symndx - extsymoff];
8657 	  if (h != NULL)
8658 	    {
8659 	      while (h->root.type == bfd_link_hash_indirect
8660 		     || h->root.type == bfd_link_hash_warning)
8661 		h = (struct elf_link_hash_entry *) h->root.u.i.link;
8662 	    }
8663 	}
8664 
8665       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8666 	 relocation into a dynamic one.  */
8667       can_make_dynamic_p = FALSE;
8668 
8669       /* Set CALL_RELOC_P to true if the relocation is for a call,
8670 	 and if pointer equality therefore doesn't matter.  */
8671       call_reloc_p = FALSE;
8672 
8673       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8674 	 into account when deciding how to define the symbol.
8675 	 Relocations in nonallocatable sections such as .pdr and
8676 	 .debug* should have no effect.  */
8677       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8678 
8679       switch (r_type)
8680 	{
8681 	case R_MIPS_CALL16:
8682 	case R_MIPS_CALL_HI16:
8683 	case R_MIPS_CALL_LO16:
8684 	case R_MIPS16_CALL16:
8685 	case R_MICROMIPS_CALL16:
8686 	case R_MICROMIPS_CALL_HI16:
8687 	case R_MICROMIPS_CALL_LO16:
8688 	  call_reloc_p = TRUE;
8689 	  /* Fall through.  */
8690 
8691 	case R_MIPS_GOT16:
8692 	case R_MIPS_GOT_LO16:
8693 	case R_MIPS_GOT_PAGE:
8694 	case R_MIPS_GOT_DISP:
8695 	case R_MIPS16_GOT16:
8696 	case R_MICROMIPS_GOT16:
8697 	case R_MICROMIPS_GOT_LO16:
8698 	case R_MICROMIPS_GOT_PAGE:
8699 	case R_MICROMIPS_GOT_DISP:
8700 	  /* If we have a symbol that will resolve to zero at static link
8701 	     time and it is used by a GOT relocation applied to code we
8702 	     cannot relax to an immediate zero load, then we will be using
8703 	     the special `__gnu_absolute_zero' symbol whose value is zero
8704 	     at dynamic load time.  We ignore HI16-type GOT relocations at
8705 	     this stage, because their handling will depend entirely on
8706 	     the corresponding LO16-type GOT relocation.  */
8707 	  if (!call_hi16_reloc_p (r_type)
8708 	      && h != NULL
8709 	      && bfd_link_pic (info)
8710 	      && !htab->use_absolute_zero
8711 	      && UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
8712 	    {
8713 	      bfd_boolean rel_reloc;
8714 
8715 	      if (!mips_elf_get_section_contents (abfd, sec, &contents))
8716 		return FALSE;
8717 
8718 	      rel_reloc = mips_elf_rel_relocation_p (abfd, sec, relocs, rel);
8719 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, !rel_reloc);
8720 
8721 	      if (!mips_elf_nullify_got_load (abfd, contents, rel, howto,
8722 					      FALSE))
8723 		if (!mips_elf_define_absolute_zero (abfd, info, htab, r_type))
8724 		  return FALSE;
8725 	    }
8726 
8727 	  /* Fall through.  */
8728 	case R_MIPS_GOT_HI16:
8729 	case R_MIPS_GOT_OFST:
8730 	case R_MIPS_TLS_GOTTPREL:
8731 	case R_MIPS_TLS_GD:
8732 	case R_MIPS_TLS_LDM:
8733 	case R_MIPS16_TLS_GOTTPREL:
8734 	case R_MIPS16_TLS_GD:
8735 	case R_MIPS16_TLS_LDM:
8736 	case R_MICROMIPS_GOT_HI16:
8737 	case R_MICROMIPS_GOT_OFST:
8738 	case R_MICROMIPS_TLS_GOTTPREL:
8739 	case R_MICROMIPS_TLS_GD:
8740 	case R_MICROMIPS_TLS_LDM:
8741 	  if (dynobj == NULL)
8742 	    elf_hash_table (info)->dynobj = dynobj = abfd;
8743 	  if (!mips_elf_create_got_section (dynobj, info))
8744 	    return FALSE;
8745 	  if (htab->is_vxworks && !bfd_link_pic (info))
8746 	    {
8747 	      _bfd_error_handler
8748 		/* xgettext:c-format */
8749 		(_("%pB: GOT reloc at %#" PRIx64 " not expected in executables"),
8750 		 abfd, (uint64_t) rel->r_offset);
8751 	      bfd_set_error (bfd_error_bad_value);
8752 	      return FALSE;
8753 	    }
8754 	  can_make_dynamic_p = TRUE;
8755 	  break;
8756 
8757 	case R_MIPS_NONE:
8758 	case R_MIPS_JALR:
8759 	case R_MICROMIPS_JALR:
8760 	  /* These relocations have empty fields and are purely there to
8761 	     provide link information.  The symbol value doesn't matter.  */
8762 	  constrain_symbol_p = FALSE;
8763 	  break;
8764 
8765 	case R_MIPS_GPREL16:
8766 	case R_MIPS_GPREL32:
8767 	case R_MIPS16_GPREL:
8768 	case R_MICROMIPS_GPREL16:
8769 	  /* GP-relative relocations always resolve to a definition in a
8770 	     regular input file, ignoring the one-definition rule.  This is
8771 	     important for the GP setup sequence in NewABI code, which
8772 	     always resolves to a local function even if other relocations
8773 	     against the symbol wouldn't.  */
8774 	  constrain_symbol_p = FALSE;
8775 	  break;
8776 
8777 	case R_MIPS_32:
8778 	case R_MIPS_REL32:
8779 	case R_MIPS_64:
8780 	  /* In VxWorks executables, references to external symbols
8781 	     must be handled using copy relocs or PLT entries; it is not
8782 	     possible to convert this relocation into a dynamic one.
8783 
8784 	     For executables that use PLTs and copy-relocs, we have a
8785 	     choice between converting the relocation into a dynamic
8786 	     one or using copy relocations or PLT entries.  It is
8787 	     usually better to do the former, unless the relocation is
8788 	     against a read-only section.  */
8789 	  if ((bfd_link_pic (info)
8790 	       || (h != NULL
8791 		   && !htab->is_vxworks
8792 		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8793 		   && !(!info->nocopyreloc
8794 			&& !PIC_OBJECT_P (abfd)
8795 			&& MIPS_ELF_READONLY_SECTION (sec))))
8796 	      && (sec->flags & SEC_ALLOC) != 0)
8797 	    {
8798 	      can_make_dynamic_p = TRUE;
8799 	      if (dynobj == NULL)
8800 		elf_hash_table (info)->dynobj = dynobj = abfd;
8801 	    }
8802 	  break;
8803 
8804 	case R_MIPS_26:
8805 	case R_MIPS_PC16:
8806 	case R_MIPS_PC21_S2:
8807 	case R_MIPS_PC26_S2:
8808 	case R_MIPS16_26:
8809 	case R_MIPS16_PC16_S1:
8810 	case R_MICROMIPS_26_S1:
8811 	case R_MICROMIPS_PC7_S1:
8812 	case R_MICROMIPS_PC10_S1:
8813 	case R_MICROMIPS_PC16_S1:
8814 	case R_MICROMIPS_PC23_S2:
8815 	  call_reloc_p = TRUE;
8816 	  break;
8817 	}
8818 
8819       if (h)
8820 	{
8821 	  if (constrain_symbol_p)
8822 	    {
8823 	      if (!can_make_dynamic_p)
8824 		((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8825 
8826 	      if (!call_reloc_p)
8827 		h->pointer_equality_needed = 1;
8828 
8829 	      /* We must not create a stub for a symbol that has
8830 		 relocations related to taking the function's address.
8831 		 This doesn't apply to VxWorks, where CALL relocs refer
8832 		 to a .got.plt entry instead of a normal .got entry.  */
8833 	      if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8834 		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8835 	    }
8836 
8837 	  /* Relocations against the special VxWorks __GOTT_BASE__ and
8838 	     __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8839 	     room for them in .rela.dyn.  */
8840 	  if (is_gott_symbol (info, h))
8841 	    {
8842 	      if (sreloc == NULL)
8843 		{
8844 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8845 		  if (sreloc == NULL)
8846 		    return FALSE;
8847 		}
8848 	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8849 	      if (MIPS_ELF_READONLY_SECTION (sec))
8850 		/* We tell the dynamic linker that there are
8851 		   relocations against the text segment.  */
8852 		info->flags |= DF_TEXTREL;
8853 	    }
8854 	}
8855       else if (call_lo16_reloc_p (r_type)
8856 	       || got_lo16_reloc_p (r_type)
8857 	       || got_disp_reloc_p (r_type)
8858 	       || (got16_reloc_p (r_type) && htab->is_vxworks))
8859 	{
8860 	  /* We may need a local GOT entry for this relocation.  We
8861 	     don't count R_MIPS_GOT_PAGE because we can estimate the
8862 	     maximum number of pages needed by looking at the size of
8863 	     the segment.  Similar comments apply to R_MIPS*_GOT16 and
8864 	     R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8865 	     always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8866 	     R_MIPS_CALL_HI16 because these are always followed by an
8867 	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8868 	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8869 						 rel->r_addend, info, r_type))
8870 	    return FALSE;
8871 	}
8872 
8873       if (h != NULL
8874 	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8875 						  ELF_ST_IS_MIPS16 (h->other)))
8876 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8877 
8878       switch (r_type)
8879 	{
8880 	case R_MIPS_CALL16:
8881 	case R_MIPS16_CALL16:
8882 	case R_MICROMIPS_CALL16:
8883 	  if (h == NULL)
8884 	    {
8885 	      _bfd_error_handler
8886 		/* xgettext:c-format */
8887 		(_("%pB: CALL16 reloc at %#" PRIx64 " not against global symbol"),
8888 		 abfd, (uint64_t) rel->r_offset);
8889 	      bfd_set_error (bfd_error_bad_value);
8890 	      return FALSE;
8891 	    }
8892 	  /* Fall through.  */
8893 
8894 	case R_MIPS_CALL_HI16:
8895 	case R_MIPS_CALL_LO16:
8896 	case R_MICROMIPS_CALL_HI16:
8897 	case R_MICROMIPS_CALL_LO16:
8898 	  if (h != NULL)
8899 	    {
8900 	      /* Make sure there is room in the regular GOT to hold the
8901 		 function's address.  We may eliminate it in favour of
8902 		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
8903 	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8904 						      r_type))
8905 		return FALSE;
8906 
8907 	      /* We need a stub, not a plt entry for the undefined
8908 		 function.  But we record it as if it needs plt.  See
8909 		 _bfd_elf_adjust_dynamic_symbol.  */
8910 	      h->needs_plt = 1;
8911 	      h->type = STT_FUNC;
8912 	    }
8913 	  break;
8914 
8915 	case R_MIPS_GOT_PAGE:
8916 	case R_MICROMIPS_GOT_PAGE:
8917 	case R_MIPS16_GOT16:
8918 	case R_MIPS_GOT16:
8919 	case R_MIPS_GOT_HI16:
8920 	case R_MIPS_GOT_LO16:
8921 	case R_MICROMIPS_GOT16:
8922 	case R_MICROMIPS_GOT_HI16:
8923 	case R_MICROMIPS_GOT_LO16:
8924 	  if (!h || got_page_reloc_p (r_type))
8925 	    {
8926 	      /* This relocation needs (or may need, if h != NULL) a
8927 		 page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8928 		 know for sure until we know whether the symbol is
8929 		 preemptible.  */
8930 	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8931 		{
8932 		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
8933 		    return FALSE;
8934 		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8935 		  addend = mips_elf_read_rel_addend (abfd, rel,
8936 						     howto, contents);
8937 		  if (got16_reloc_p (r_type))
8938 		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8939 						  contents, &addend);
8940 		  else
8941 		    addend <<= howto->rightshift;
8942 		}
8943 	      else
8944 		addend = rel->r_addend;
8945 	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8946 						 h, addend))
8947 		return FALSE;
8948 
8949 	      if (h)
8950 		{
8951 		  struct mips_elf_link_hash_entry *hmips =
8952 		    (struct mips_elf_link_hash_entry *) h;
8953 
8954 		  /* This symbol is definitely not overridable.  */
8955 		  if (hmips->root.def_regular
8956 		      && ! (bfd_link_pic (info) && ! info->symbolic
8957 			    && ! hmips->root.forced_local))
8958 		    h = NULL;
8959 		}
8960 	    }
8961 	  /* If this is a global, overridable symbol, GOT_PAGE will
8962 	     decay to GOT_DISP, so we'll need a GOT entry for it.  */
8963 	  /* Fall through.  */
8964 
8965 	case R_MIPS_GOT_DISP:
8966 	case R_MICROMIPS_GOT_DISP:
8967 	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8968 						       FALSE, r_type))
8969 	    return FALSE;
8970 	  break;
8971 
8972 	case R_MIPS_TLS_GOTTPREL:
8973 	case R_MIPS16_TLS_GOTTPREL:
8974 	case R_MICROMIPS_TLS_GOTTPREL:
8975 	  if (bfd_link_pic (info))
8976 	    info->flags |= DF_STATIC_TLS;
8977 	  /* Fall through */
8978 
8979 	case R_MIPS_TLS_LDM:
8980 	case R_MIPS16_TLS_LDM:
8981 	case R_MICROMIPS_TLS_LDM:
8982 	  if (tls_ldm_reloc_p (r_type))
8983 	    {
8984 	      r_symndx = STN_UNDEF;
8985 	      h = NULL;
8986 	    }
8987 	  /* Fall through */
8988 
8989 	case R_MIPS_TLS_GD:
8990 	case R_MIPS16_TLS_GD:
8991 	case R_MICROMIPS_TLS_GD:
8992 	  /* This symbol requires a global offset table entry, or two
8993 	     for TLS GD relocations.  */
8994 	  if (h != NULL)
8995 	    {
8996 	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
8997 						      FALSE, r_type))
8998 		return FALSE;
8999 	    }
9000 	  else
9001 	    {
9002 	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
9003 						     rel->r_addend,
9004 						     info, r_type))
9005 		return FALSE;
9006 	    }
9007 	  break;
9008 
9009 	case R_MIPS_32:
9010 	case R_MIPS_REL32:
9011 	case R_MIPS_64:
9012 	  /* In VxWorks executables, references to external symbols
9013 	     are handled using copy relocs or PLT stubs, so there's
9014 	     no need to add a .rela.dyn entry for this relocation.  */
9015 	  if (can_make_dynamic_p)
9016 	    {
9017 	      if (sreloc == NULL)
9018 		{
9019 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
9020 		  if (sreloc == NULL)
9021 		    return FALSE;
9022 		}
9023 	      if (bfd_link_pic (info) && h == NULL)
9024 		{
9025 		  /* When creating a shared object, we must copy these
9026 		     reloc types into the output file as R_MIPS_REL32
9027 		     relocs.  Make room for this reloc in .rel(a).dyn.  */
9028 		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9029 		  /* In the N32 and 64-bit ABIs there may be multiple
9030 		     consecutive relocations for the same offset.  If we have
9031 		     a R_MIPS_GPREL32 followed by a R_MIPS_64 then that
9032 		     relocation is complete and needs no futher adjustment.
9033 
9034 		     Silently ignore absolute relocations in the .eh_frame
9035 		     section, they will be dropped latter.
9036 		   */
9037 		  if ((rel == relocs
9038 		      || rel[-1].r_offset != rel->r_offset
9039 		      || r_type != R_MIPS_64
9040 		      || ELF_R_TYPE(abfd, rel[-1].r_info) != R_MIPS_GPREL32)
9041 		      && MIPS_ELF_READONLY_SECTION (sec)
9042 		      && !((r_type == R_MIPS_32 || r_type == R_MIPS_64)
9043 		           && strcmp(sec->name, ".eh_frame") == 0))
9044 		    {
9045 		      /* We tell the dynamic linker that there are
9046 		         relocations against the text segment.  */
9047 		      info->flags |= DF_TEXTREL;
9048 		      info->callbacks->warning
9049 			(info,
9050 			 _("relocation emitted against readonly section"),
9051 			 NULL, abfd, sec, rel->r_offset);
9052 		    }
9053 		}
9054 	      else
9055 		{
9056 		  struct mips_elf_link_hash_entry *hmips;
9057 
9058 		  /* For a shared object, we must copy this relocation
9059 		     unless the symbol turns out to be undefined and
9060 		     weak with non-default visibility, in which case
9061 		     it will be left as zero.
9062 
9063 		     We could elide R_MIPS_REL32 for locally binding symbols
9064 		     in shared libraries, but do not yet do so.
9065 
9066 		     For an executable, we only need to copy this
9067 		     reloc if the symbol is defined in a dynamic
9068 		     object.  */
9069 		  hmips = (struct mips_elf_link_hash_entry *) h;
9070 		  ++hmips->possibly_dynamic_relocs;
9071 		  if (MIPS_ELF_READONLY_SECTION (sec))
9072 		    /* We need it to tell the dynamic linker if there
9073 		       are relocations against the text segment.  */
9074 		    hmips->readonly_reloc = TRUE;
9075 		}
9076 	    }
9077 
9078 	  if (SGI_COMPAT (abfd))
9079 	    mips_elf_hash_table (info)->compact_rel_size +=
9080 	      sizeof (Elf32_External_crinfo);
9081 	  break;
9082 
9083 	case R_MIPS_26:
9084 	case R_MIPS_GPREL16:
9085 	case R_MIPS_LITERAL:
9086 	case R_MIPS_GPREL32:
9087 	case R_MICROMIPS_26_S1:
9088 	case R_MICROMIPS_GPREL16:
9089 	case R_MICROMIPS_LITERAL:
9090 	case R_MICROMIPS_GPREL7_S2:
9091 	  if (SGI_COMPAT (abfd))
9092 	    mips_elf_hash_table (info)->compact_rel_size +=
9093 	      sizeof (Elf32_External_crinfo);
9094 	  break;
9095 
9096 	  /* This relocation describes the C++ object vtable hierarchy.
9097 	     Reconstruct it for later use during GC.  */
9098 	case R_MIPS_GNU_VTINHERIT:
9099 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
9100 	    return FALSE;
9101 	  break;
9102 
9103 	  /* This relocation describes which C++ vtable entries are actually
9104 	     used.  Record for later use during GC.  */
9105 	case R_MIPS_GNU_VTENTRY:
9106 	  if (!bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
9107 	    return FALSE;
9108 	  break;
9109 
9110 	default:
9111 	  break;
9112 	}
9113 
9114       /* Record the need for a PLT entry.  At this point we don't know
9115 	 yet if we are going to create a PLT in the first place, but
9116 	 we only record whether the relocation requires a standard MIPS
9117 	 or a compressed code entry anyway.  If we don't make a PLT after
9118 	 all, then we'll just ignore these arrangements.  Likewise if
9119 	 a PLT entry is not created because the symbol is satisfied
9120 	 locally.  */
9121       if (h != NULL
9122 	  && (branch_reloc_p (r_type)
9123 	      || mips16_branch_reloc_p (r_type)
9124 	      || micromips_branch_reloc_p (r_type))
9125 	  && !SYMBOL_CALLS_LOCAL (info, h))
9126 	{
9127 	  if (h->plt.plist == NULL)
9128 	    h->plt.plist = mips_elf_make_plt_record (abfd);
9129 	  if (h->plt.plist == NULL)
9130 	    return FALSE;
9131 
9132 	  if (branch_reloc_p (r_type))
9133 	    h->plt.plist->need_mips = TRUE;
9134 	  else
9135 	    h->plt.plist->need_comp = TRUE;
9136 	}
9137 
9138       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
9139 	 if there is one.  We only need to handle global symbols here;
9140 	 we decide whether to keep or delete stubs for local symbols
9141 	 when processing the stub's relocations.  */
9142       if (h != NULL
9143 	  && !mips16_call_reloc_p (r_type)
9144 	  && !section_allows_mips16_refs_p (sec))
9145 	{
9146 	  struct mips_elf_link_hash_entry *mh;
9147 
9148 	  mh = (struct mips_elf_link_hash_entry *) h;
9149 	  mh->need_fn_stub = TRUE;
9150 	}
9151 
9152       /* Refuse some position-dependent relocations when creating a
9153 	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
9154 	 not PIC, but we can create dynamic relocations and the result
9155 	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
9156 	 combined with R_MIPS_GOT16.  */
9157       if (bfd_link_pic (info))
9158 	{
9159 	  switch (r_type)
9160 	    {
9161 	    case R_MIPS_TLS_TPREL_HI16:
9162 	    case R_MIPS16_TLS_TPREL_HI16:
9163 	    case R_MICROMIPS_TLS_TPREL_HI16:
9164 	    case R_MIPS_TLS_TPREL_LO16:
9165 	    case R_MIPS16_TLS_TPREL_LO16:
9166 	    case R_MICROMIPS_TLS_TPREL_LO16:
9167 	      /* These are okay in PIE, but not in a shared library.  */
9168 	      if (bfd_link_executable (info))
9169 		break;
9170 
9171 	      /* FALLTHROUGH */
9172 
9173 	    case R_MIPS16_HI16:
9174 	    case R_MIPS_HI16:
9175 	    case R_MIPS_HIGHER:
9176 	    case R_MIPS_HIGHEST:
9177 	    case R_MICROMIPS_HI16:
9178 	    case R_MICROMIPS_HIGHER:
9179 	    case R_MICROMIPS_HIGHEST:
9180 	      /* Don't refuse a high part relocation if it's against
9181 		 no symbol (e.g. part of a compound relocation).  */
9182 	      if (r_symndx == STN_UNDEF)
9183 		break;
9184 
9185 	      /* Likewise an absolute symbol.  */
9186 	      if (h != NULL && bfd_is_abs_symbol (&h->root))
9187 		break;
9188 
9189 	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
9190 		 and has a special meaning.  */
9191 	      if (!NEWABI_P (abfd) && h != NULL
9192 		  && strcmp (h->root.root.string, "_gp_disp") == 0)
9193 		break;
9194 
9195 	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
9196 	      if (is_gott_symbol (info, h))
9197 		break;
9198 
9199 	      /* FALLTHROUGH */
9200 
9201 	    case R_MIPS16_26:
9202 	    case R_MIPS_26:
9203 	    case R_MICROMIPS_26_S1:
9204 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, NEWABI_P (abfd));
9205 	      /* An error for unsupported relocations is raised as part
9206 		 of the above search, so we can skip the following.  */
9207 	      if (howto != NULL)
9208 		info->callbacks->einfo
9209 		  /* xgettext:c-format */
9210 		  (_("%X%H: relocation %s against `%s' cannot be used"
9211 		     " when making a shared object; recompile with -fPIC\n"),
9212 		   abfd, sec, rel->r_offset, howto->name,
9213 		   (h) ? h->root.root.string : "a local symbol");
9214 	      break;
9215 	    default:
9216 	      break;
9217 	    }
9218 	}
9219     }
9220 
9221   return TRUE;
9222 }
9223 
9224 /* Allocate space for global sym dynamic relocs.  */
9225 
9226 static bfd_boolean
9227 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
9228 {
9229   struct bfd_link_info *info = inf;
9230   bfd *dynobj;
9231   struct mips_elf_link_hash_entry *hmips;
9232   struct mips_elf_link_hash_table *htab;
9233 
9234   htab = mips_elf_hash_table (info);
9235   BFD_ASSERT (htab != NULL);
9236 
9237   dynobj = elf_hash_table (info)->dynobj;
9238   hmips = (struct mips_elf_link_hash_entry *) h;
9239 
9240   /* VxWorks executables are handled elsewhere; we only need to
9241      allocate relocations in shared objects.  */
9242   if (htab->is_vxworks && !bfd_link_pic (info))
9243     return TRUE;
9244 
9245   /* Ignore indirect symbols.  All relocations against such symbols
9246      will be redirected to the target symbol.  */
9247   if (h->root.type == bfd_link_hash_indirect)
9248     return TRUE;
9249 
9250   /* If this symbol is defined in a dynamic object, or we are creating
9251      a shared library, we will need to copy any R_MIPS_32 or
9252      R_MIPS_REL32 relocs against it into the output file.  */
9253   if (! bfd_link_relocatable (info)
9254       && hmips->possibly_dynamic_relocs != 0
9255       && (h->root.type == bfd_link_hash_defweak
9256 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
9257 	  || bfd_link_pic (info)))
9258     {
9259       bfd_boolean do_copy = TRUE;
9260 
9261       if (h->root.type == bfd_link_hash_undefweak)
9262 	{
9263 	  /* Do not copy relocations for undefined weak symbols that
9264 	     we are not going to export.  */
9265 	  if (UNDEFWEAK_NO_DYNAMIC_RELOC (info, h))
9266 	    do_copy = FALSE;
9267 
9268 	  /* Make sure undefined weak symbols are output as a dynamic
9269 	     symbol in PIEs.  */
9270 	  else if (h->dynindx == -1 && !h->forced_local)
9271 	    {
9272 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
9273 		return FALSE;
9274 	    }
9275 	}
9276 
9277       if (do_copy)
9278 	{
9279 	  /* Even though we don't directly need a GOT entry for this symbol,
9280 	     the SVR4 psABI requires it to have a dynamic symbol table
9281 	     index greater that DT_MIPS_GOTSYM if there are dynamic
9282 	     relocations against it.
9283 
9284 	     VxWorks does not enforce the same mapping between the GOT
9285 	     and the symbol table, so the same requirement does not
9286 	     apply there.  */
9287 	  if (!htab->is_vxworks)
9288 	    {
9289 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
9290 		hmips->global_got_area = GGA_RELOC_ONLY;
9291 	      hmips->got_only_for_calls = FALSE;
9292 	    }
9293 
9294 	  mips_elf_allocate_dynamic_relocations
9295 	    (dynobj, info, hmips->possibly_dynamic_relocs);
9296 	  if (hmips->readonly_reloc)
9297 	    /* We tell the dynamic linker that there are relocations
9298 	       against the text segment.  */
9299 	    info->flags |= DF_TEXTREL;
9300 	}
9301     }
9302 
9303   return TRUE;
9304 }
9305 
9306 /* Adjust a symbol defined by a dynamic object and referenced by a
9307    regular object.  The current definition is in some section of the
9308    dynamic object, but we're not including those sections.  We have to
9309    change the definition to something the rest of the link can
9310    understand.  */
9311 
9312 bfd_boolean
9313 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
9314 				     struct elf_link_hash_entry *h)
9315 {
9316   bfd *dynobj;
9317   struct mips_elf_link_hash_entry *hmips;
9318   struct mips_elf_link_hash_table *htab;
9319   asection *s, *srel;
9320 
9321   htab = mips_elf_hash_table (info);
9322   BFD_ASSERT (htab != NULL);
9323 
9324   dynobj = elf_hash_table (info)->dynobj;
9325   hmips = (struct mips_elf_link_hash_entry *) h;
9326 
9327   /* Make sure we know what is going on here.  */
9328   BFD_ASSERT (dynobj != NULL
9329 	      && (h->needs_plt
9330 		  || h->type == STT_GNU_IFUNC
9331 		  || h->is_weakalias
9332 		  || (h->def_dynamic
9333 		      && h->ref_regular
9334 		      && !h->def_regular)));
9335 
9336   hmips = (struct mips_elf_link_hash_entry *) h;
9337 
9338   /* If there are call relocations against an externally-defined symbol,
9339      see whether we can create a MIPS lazy-binding stub for it.  We can
9340      only do this if all references to the function are through call
9341      relocations, and in that case, the traditional lazy-binding stubs
9342      are much more efficient than PLT entries.
9343 
9344      Traditional stubs are only available on SVR4 psABI-based systems;
9345      VxWorks always uses PLTs instead.  */
9346   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
9347     {
9348       if (! elf_hash_table (info)->dynamic_sections_created)
9349 	return TRUE;
9350 
9351       /* If this symbol is not defined in a regular file, then set
9352 	 the symbol to the stub location.  This is required to make
9353 	 function pointers compare as equal between the normal
9354 	 executable and the shared library.  */
9355       if (!h->def_regular
9356 	  && !bfd_is_abs_section (htab->sstubs->output_section))
9357 	{
9358 	  hmips->needs_lazy_stub = TRUE;
9359 	  htab->lazy_stub_count++;
9360 	  return TRUE;
9361 	}
9362     }
9363   /* As above, VxWorks requires PLT entries for externally-defined
9364      functions that are only accessed through call relocations.
9365 
9366      Both VxWorks and non-VxWorks targets also need PLT entries if there
9367      are static-only relocations against an externally-defined function.
9368      This can technically occur for shared libraries if there are
9369      branches to the symbol, although it is unlikely that this will be
9370      used in practice due to the short ranges involved.  It can occur
9371      for any relative or absolute relocation in executables; in that
9372      case, the PLT entry becomes the function's canonical address.  */
9373   else if (((h->needs_plt && !hmips->no_fn_stub)
9374 	    || (h->type == STT_FUNC && hmips->has_static_relocs))
9375 	   && htab->use_plts_and_copy_relocs
9376 	   && !SYMBOL_CALLS_LOCAL (info, h)
9377 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9378 		&& h->root.type == bfd_link_hash_undefweak))
9379     {
9380       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9381       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9382 
9383       /* If this is the first symbol to need a PLT entry, then make some
9384 	 basic setup.  Also work out PLT entry sizes.  We'll need them
9385 	 for PLT offset calculations.  */
9386       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9387 	{
9388 	  BFD_ASSERT (htab->root.sgotplt->size == 0);
9389 	  BFD_ASSERT (htab->plt_got_index == 0);
9390 
9391 	  /* If we're using the PLT additions to the psABI, each PLT
9392 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
9393 	     Encourage better cache usage by aligning.  We do this
9394 	     lazily to avoid pessimizing traditional objects.  */
9395 	  if (!htab->is_vxworks
9396 	      && !bfd_set_section_alignment (htab->root.splt, 5))
9397 	    return FALSE;
9398 
9399 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
9400 	     for the same reason as above.  */
9401 	  if (!bfd_set_section_alignment (htab->root.sgotplt,
9402 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9403 	    return FALSE;
9404 
9405 	  /* On non-VxWorks targets, the first two entries in .got.plt
9406 	     are reserved.  */
9407 	  if (!htab->is_vxworks)
9408 	    htab->plt_got_index
9409 	      += (get_elf_backend_data (dynobj)->got_header_size
9410 		  / MIPS_ELF_GOT_SIZE (dynobj));
9411 
9412 	  /* On VxWorks, also allocate room for the header's
9413 	     .rela.plt.unloaded entries.  */
9414 	  if (htab->is_vxworks && !bfd_link_pic (info))
9415 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9416 
9417 	  /* Now work out the sizes of individual PLT entries.  */
9418 	  if (htab->is_vxworks && bfd_link_pic (info))
9419 	    htab->plt_mips_entry_size
9420 	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9421 	  else if (htab->is_vxworks)
9422 	    htab->plt_mips_entry_size
9423 	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9424 	  else if (newabi_p)
9425 	    htab->plt_mips_entry_size
9426 	      = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9427 	  else if (!micromips_p)
9428 	    {
9429 	      htab->plt_mips_entry_size
9430 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9431 	      htab->plt_comp_entry_size
9432 		= 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9433 	    }
9434 	  else if (htab->insn32)
9435 	    {
9436 	      htab->plt_mips_entry_size
9437 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9438 	      htab->plt_comp_entry_size
9439 		= 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9440 	    }
9441 	  else
9442 	    {
9443 	      htab->plt_mips_entry_size
9444 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9445 	      htab->plt_comp_entry_size
9446 		= 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9447 	    }
9448 	}
9449 
9450       if (h->plt.plist == NULL)
9451 	h->plt.plist = mips_elf_make_plt_record (dynobj);
9452       if (h->plt.plist == NULL)
9453 	return FALSE;
9454 
9455       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9456 	 n32 or n64, so always use a standard entry there.
9457 
9458 	 If the symbol has a MIPS16 call stub and gets a PLT entry, then
9459 	 all MIPS16 calls will go via that stub, and there is no benefit
9460 	 to having a MIPS16 entry.  And in the case of call_stub a
9461 	 standard entry actually has to be used as the stub ends with a J
9462 	 instruction.  */
9463       if (newabi_p
9464 	  || htab->is_vxworks
9465 	  || hmips->call_stub
9466 	  || hmips->call_fp_stub)
9467 	{
9468 	  h->plt.plist->need_mips = TRUE;
9469 	  h->plt.plist->need_comp = FALSE;
9470 	}
9471 
9472       /* Otherwise, if there are no direct calls to the function, we
9473 	 have a free choice of whether to use standard or compressed
9474 	 entries.  Prefer microMIPS entries if the object is known to
9475 	 contain microMIPS code, so that it becomes possible to create
9476 	 pure microMIPS binaries.  Prefer standard entries otherwise,
9477 	 because MIPS16 ones are no smaller and are usually slower.  */
9478       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9479 	{
9480 	  if (micromips_p)
9481 	    h->plt.plist->need_comp = TRUE;
9482 	  else
9483 	    h->plt.plist->need_mips = TRUE;
9484 	}
9485 
9486       if (h->plt.plist->need_mips)
9487 	{
9488 	  h->plt.plist->mips_offset = htab->plt_mips_offset;
9489 	  htab->plt_mips_offset += htab->plt_mips_entry_size;
9490 	}
9491       if (h->plt.plist->need_comp)
9492 	{
9493 	  h->plt.plist->comp_offset = htab->plt_comp_offset;
9494 	  htab->plt_comp_offset += htab->plt_comp_entry_size;
9495 	}
9496 
9497       /* Reserve the corresponding .got.plt entry now too.  */
9498       h->plt.plist->gotplt_index = htab->plt_got_index++;
9499 
9500       /* If the output file has no definition of the symbol, set the
9501 	 symbol's value to the address of the stub.  */
9502       if (!bfd_link_pic (info) && !h->def_regular)
9503 	hmips->use_plt_entry = TRUE;
9504 
9505       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9506       htab->root.srelplt->size += (htab->is_vxworks
9507 				   ? MIPS_ELF_RELA_SIZE (dynobj)
9508 				   : MIPS_ELF_REL_SIZE (dynobj));
9509 
9510       /* Make room for the .rela.plt.unloaded relocations.  */
9511       if (htab->is_vxworks && !bfd_link_pic (info))
9512 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9513 
9514       /* All relocations against this symbol that could have been made
9515 	 dynamic will now refer to the PLT entry instead.  */
9516       hmips->possibly_dynamic_relocs = 0;
9517 
9518       return TRUE;
9519     }
9520 
9521   /* If this is a weak symbol, and there is a real definition, the
9522      processor independent code will have arranged for us to see the
9523      real definition first, and we can just use the same value.  */
9524   if (h->is_weakalias)
9525     {
9526       struct elf_link_hash_entry *def = weakdef (h);
9527       BFD_ASSERT (def->root.type == bfd_link_hash_defined);
9528       h->root.u.def.section = def->root.u.def.section;
9529       h->root.u.def.value = def->root.u.def.value;
9530       return TRUE;
9531     }
9532 
9533   /* Otherwise, there is nothing further to do for symbols defined
9534      in regular objects.  */
9535   if (h->def_regular)
9536     return TRUE;
9537 
9538   /* There's also nothing more to do if we'll convert all relocations
9539      against this symbol into dynamic relocations.  */
9540   if (!hmips->has_static_relocs)
9541     return TRUE;
9542 
9543   /* We're now relying on copy relocations.  Complain if we have
9544      some that we can't convert.  */
9545   if (!htab->use_plts_and_copy_relocs || bfd_link_pic (info))
9546     {
9547       _bfd_error_handler (_("non-dynamic relocations refer to "
9548 			    "dynamic symbol %s"),
9549 			  h->root.root.string);
9550       bfd_set_error (bfd_error_bad_value);
9551       return FALSE;
9552     }
9553 
9554   /* We must allocate the symbol in our .dynbss section, which will
9555      become part of the .bss section of the executable.  There will be
9556      an entry for this symbol in the .dynsym section.  The dynamic
9557      object will contain position independent code, so all references
9558      from the dynamic object to this symbol will go through the global
9559      offset table.  The dynamic linker will use the .dynsym entry to
9560      determine the address it must put in the global offset table, so
9561      both the dynamic object and the regular object will refer to the
9562      same memory location for the variable.  */
9563 
9564   if ((h->root.u.def.section->flags & SEC_READONLY) != 0)
9565     {
9566       s = htab->root.sdynrelro;
9567       srel = htab->root.sreldynrelro;
9568     }
9569   else
9570     {
9571       s = htab->root.sdynbss;
9572       srel = htab->root.srelbss;
9573     }
9574   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9575     {
9576       if (htab->is_vxworks)
9577 	srel->size += sizeof (Elf32_External_Rela);
9578       else
9579 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9580       h->needs_copy = 1;
9581     }
9582 
9583   /* All relocations against this symbol that could have been made
9584      dynamic will now refer to the local copy instead.  */
9585   hmips->possibly_dynamic_relocs = 0;
9586 
9587   return _bfd_elf_adjust_dynamic_copy (info, h, s);
9588 }
9589 
9590 /* This function is called after all the input files have been read,
9591    and the input sections have been assigned to output sections.  We
9592    check for any mips16 stub sections that we can discard.  */
9593 
9594 bfd_boolean
9595 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9596 				    struct bfd_link_info *info)
9597 {
9598   asection *sect;
9599   struct mips_elf_link_hash_table *htab;
9600   struct mips_htab_traverse_info hti;
9601 
9602   htab = mips_elf_hash_table (info);
9603   BFD_ASSERT (htab != NULL);
9604 
9605   /* The .reginfo section has a fixed size.  */
9606   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9607   if (sect != NULL)
9608     {
9609       bfd_set_section_size (sect, sizeof (Elf32_External_RegInfo));
9610       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9611     }
9612 
9613   /* The .MIPS.abiflags section has a fixed size.  */
9614   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9615   if (sect != NULL)
9616     {
9617       bfd_set_section_size (sect, sizeof (Elf_External_ABIFlags_v0));
9618       sect->flags |= SEC_FIXED_SIZE | SEC_HAS_CONTENTS;
9619     }
9620 
9621   hti.info = info;
9622   hti.output_bfd = output_bfd;
9623   hti.error = FALSE;
9624   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9625 			       mips_elf_check_symbols, &hti);
9626   if (hti.error)
9627     return FALSE;
9628 
9629   return TRUE;
9630 }
9631 
9632 /* If the link uses a GOT, lay it out and work out its size.  */
9633 
9634 static bfd_boolean
9635 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9636 {
9637   bfd *dynobj;
9638   asection *s;
9639   struct mips_got_info *g;
9640   bfd_size_type loadable_size = 0;
9641   bfd_size_type page_gotno;
9642   bfd *ibfd;
9643   struct mips_elf_traverse_got_arg tga;
9644   struct mips_elf_link_hash_table *htab;
9645 
9646   htab = mips_elf_hash_table (info);
9647   BFD_ASSERT (htab != NULL);
9648 
9649   s = htab->root.sgot;
9650   if (s == NULL)
9651     return TRUE;
9652 
9653   dynobj = elf_hash_table (info)->dynobj;
9654   g = htab->got_info;
9655 
9656   /* Allocate room for the reserved entries.  VxWorks always reserves
9657      3 entries; other objects only reserve 2 entries.  */
9658   BFD_ASSERT (g->assigned_low_gotno == 0);
9659   if (htab->is_vxworks)
9660     htab->reserved_gotno = 3;
9661   else
9662     htab->reserved_gotno = 2;
9663   g->local_gotno += htab->reserved_gotno;
9664   g->assigned_low_gotno = htab->reserved_gotno;
9665 
9666   /* Decide which symbols need to go in the global part of the GOT and
9667      count the number of reloc-only GOT symbols.  */
9668   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9669 
9670   if (!mips_elf_resolve_final_got_entries (info, g))
9671     return FALSE;
9672 
9673   /* Calculate the total loadable size of the output.  That
9674      will give us the maximum number of GOT_PAGE entries
9675      required.  */
9676   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9677     {
9678       asection *subsection;
9679 
9680       for (subsection = ibfd->sections;
9681 	   subsection;
9682 	   subsection = subsection->next)
9683 	{
9684 	  if ((subsection->flags & SEC_ALLOC) == 0)
9685 	    continue;
9686 	  loadable_size += ((subsection->size + 0xf)
9687 			    &~ (bfd_size_type) 0xf);
9688 	}
9689     }
9690 
9691   if (htab->is_vxworks)
9692     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9693        relocations against local symbols evaluate to "G", and the EABI does
9694        not include R_MIPS_GOT_PAGE.  */
9695     page_gotno = 0;
9696   else
9697     /* Assume there are two loadable segments consisting of contiguous
9698        sections.  Is 5 enough?  */
9699     page_gotno = (loadable_size >> 16) + 5;
9700 
9701   /* Choose the smaller of the two page estimates; both are intended to be
9702      conservative.  */
9703   if (page_gotno > g->page_gotno)
9704     page_gotno = g->page_gotno;
9705 
9706   g->local_gotno += page_gotno;
9707   g->assigned_high_gotno = g->local_gotno - 1;
9708 
9709   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9710   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9711   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9712 
9713   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9714      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9715      dynamic loader.  */
9716   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9717     {
9718       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9719 	return FALSE;
9720     }
9721   else
9722     {
9723       /* Record that all bfds use G.  This also has the effect of freeing
9724 	 the per-bfd GOTs, which we no longer need.  */
9725       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9726 	if (mips_elf_bfd_got (ibfd, FALSE))
9727 	  mips_elf_replace_bfd_got (ibfd, g);
9728       mips_elf_replace_bfd_got (output_bfd, g);
9729 
9730       /* Set up TLS entries.  */
9731       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9732       tga.info = info;
9733       tga.g = g;
9734       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9735       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9736       if (!tga.g)
9737 	return FALSE;
9738       BFD_ASSERT (g->tls_assigned_gotno
9739 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
9740 
9741       /* Each VxWorks GOT entry needs an explicit relocation.  */
9742       if (htab->is_vxworks && bfd_link_pic (info))
9743 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9744 
9745       /* Allocate room for the TLS relocations.  */
9746       if (g->relocs)
9747 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9748     }
9749 
9750   return TRUE;
9751 }
9752 
9753 /* Estimate the size of the .MIPS.stubs section.  */
9754 
9755 static void
9756 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9757 {
9758   struct mips_elf_link_hash_table *htab;
9759   bfd_size_type dynsymcount;
9760 
9761   htab = mips_elf_hash_table (info);
9762   BFD_ASSERT (htab != NULL);
9763 
9764   if (htab->lazy_stub_count == 0)
9765     return;
9766 
9767   /* IRIX rld assumes that a function stub isn't at the end of the .text
9768      section, so add a dummy entry to the end.  */
9769   htab->lazy_stub_count++;
9770 
9771   /* Get a worst-case estimate of the number of dynamic symbols needed.
9772      At this point, dynsymcount does not account for section symbols
9773      and count_section_dynsyms may overestimate the number that will
9774      be needed.  */
9775   dynsymcount = (elf_hash_table (info)->dynsymcount
9776 		 + count_section_dynsyms (output_bfd, info));
9777 
9778   /* Determine the size of one stub entry.  There's no disadvantage
9779      from using microMIPS code here, so for the sake of pure-microMIPS
9780      binaries we prefer it whenever there's any microMIPS code in
9781      output produced at all.  This has a benefit of stubs being
9782      shorter by 4 bytes each too, unless in the insn32 mode.  */
9783   if (!MICROMIPS_P (output_bfd))
9784     htab->function_stub_size = (dynsymcount > 0x10000
9785 				? MIPS_FUNCTION_STUB_BIG_SIZE
9786 				: MIPS_FUNCTION_STUB_NORMAL_SIZE);
9787   else if (htab->insn32)
9788     htab->function_stub_size = (dynsymcount > 0x10000
9789 				? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9790 				: MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9791   else
9792     htab->function_stub_size = (dynsymcount > 0x10000
9793 				? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9794 				: MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9795 
9796   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9797 }
9798 
9799 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9800    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9801    stub, allocate an entry in the stubs section.  */
9802 
9803 static bfd_boolean
9804 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9805 {
9806   struct mips_htab_traverse_info *hti = data;
9807   struct mips_elf_link_hash_table *htab;
9808   struct bfd_link_info *info;
9809   bfd *output_bfd;
9810 
9811   info = hti->info;
9812   output_bfd = hti->output_bfd;
9813   htab = mips_elf_hash_table (info);
9814   BFD_ASSERT (htab != NULL);
9815 
9816   if (h->needs_lazy_stub)
9817     {
9818       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9819       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9820       bfd_vma isa_bit = micromips_p;
9821 
9822       BFD_ASSERT (htab->root.dynobj != NULL);
9823       if (h->root.plt.plist == NULL)
9824 	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9825       if (h->root.plt.plist == NULL)
9826 	{
9827 	  hti->error = TRUE;
9828 	  return FALSE;
9829 	}
9830       h->root.root.u.def.section = htab->sstubs;
9831       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9832       h->root.plt.plist->stub_offset = htab->sstubs->size;
9833       h->root.other = other;
9834       htab->sstubs->size += htab->function_stub_size;
9835     }
9836   return TRUE;
9837 }
9838 
9839 /* Allocate offsets in the stubs section to each symbol that needs one.
9840    Set the final size of the .MIPS.stub section.  */
9841 
9842 static bfd_boolean
9843 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9844 {
9845   bfd *output_bfd = info->output_bfd;
9846   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9847   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9848   bfd_vma isa_bit = micromips_p;
9849   struct mips_elf_link_hash_table *htab;
9850   struct mips_htab_traverse_info hti;
9851   struct elf_link_hash_entry *h;
9852   bfd *dynobj;
9853 
9854   htab = mips_elf_hash_table (info);
9855   BFD_ASSERT (htab != NULL);
9856 
9857   if (htab->lazy_stub_count == 0)
9858     return TRUE;
9859 
9860   htab->sstubs->size = 0;
9861   hti.info = info;
9862   hti.output_bfd = output_bfd;
9863   hti.error = FALSE;
9864   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9865   if (hti.error)
9866     return FALSE;
9867   htab->sstubs->size += htab->function_stub_size;
9868   BFD_ASSERT (htab->sstubs->size
9869 	      == htab->lazy_stub_count * htab->function_stub_size);
9870 
9871   dynobj = elf_hash_table (info)->dynobj;
9872   BFD_ASSERT (dynobj != NULL);
9873   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9874   if (h == NULL)
9875     return FALSE;
9876   h->root.u.def.value = isa_bit;
9877   h->other = other;
9878   h->type = STT_FUNC;
9879 
9880   return TRUE;
9881 }
9882 
9883 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9884    bfd_link_info.  If H uses the address of a PLT entry as the value
9885    of the symbol, then set the entry in the symbol table now.  Prefer
9886    a standard MIPS PLT entry.  */
9887 
9888 static bfd_boolean
9889 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9890 {
9891   struct bfd_link_info *info = data;
9892   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9893   struct mips_elf_link_hash_table *htab;
9894   unsigned int other;
9895   bfd_vma isa_bit;
9896   bfd_vma val;
9897 
9898   htab = mips_elf_hash_table (info);
9899   BFD_ASSERT (htab != NULL);
9900 
9901   if (h->use_plt_entry)
9902     {
9903       BFD_ASSERT (h->root.plt.plist != NULL);
9904       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9905 		  || h->root.plt.plist->comp_offset != MINUS_ONE);
9906 
9907       val = htab->plt_header_size;
9908       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9909 	{
9910 	  isa_bit = 0;
9911 	  val += h->root.plt.plist->mips_offset;
9912 	  other = 0;
9913 	}
9914       else
9915 	{
9916 	  isa_bit = 1;
9917 	  val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9918 	  other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9919 	}
9920       val += isa_bit;
9921       /* For VxWorks, point at the PLT load stub rather than the lazy
9922 	 resolution stub; this stub will become the canonical function
9923 	 address.  */
9924       if (htab->is_vxworks)
9925 	val += 8;
9926 
9927       h->root.root.u.def.section = htab->root.splt;
9928       h->root.root.u.def.value = val;
9929       h->root.other = other;
9930     }
9931 
9932   return TRUE;
9933 }
9934 
9935 /* Set the sizes of the dynamic sections.  */
9936 
9937 bfd_boolean
9938 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9939 				     struct bfd_link_info *info)
9940 {
9941   bfd *dynobj;
9942   asection *s, *sreldyn;
9943   bfd_boolean reltext;
9944   struct mips_elf_link_hash_table *htab;
9945 
9946   htab = mips_elf_hash_table (info);
9947   BFD_ASSERT (htab != NULL);
9948   dynobj = elf_hash_table (info)->dynobj;
9949   BFD_ASSERT (dynobj != NULL);
9950 
9951   if (elf_hash_table (info)->dynamic_sections_created)
9952     {
9953       /* Set the contents of the .interp section to the interpreter.  */
9954       if (bfd_link_executable (info) && !info->nointerp)
9955 	{
9956 	  s = bfd_get_linker_section (dynobj, ".interp");
9957 	  BFD_ASSERT (s != NULL);
9958 	  s->size
9959 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9960 	  s->contents
9961 	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9962 	}
9963 
9964       /* Figure out the size of the PLT header if we know that we
9965 	 are using it.  For the sake of cache alignment always use
9966 	 a standard header whenever any standard entries are present
9967 	 even if microMIPS entries are present as well.  This also
9968 	 lets the microMIPS header rely on the value of $v0 only set
9969 	 by microMIPS entries, for a small size reduction.
9970 
9971 	 Set symbol table entry values for symbols that use the
9972 	 address of their PLT entry now that we can calculate it.
9973 
9974 	 Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9975 	 haven't already in _bfd_elf_create_dynamic_sections.  */
9976       if (htab->root.splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9977 	{
9978 	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9979 				     && !htab->plt_mips_offset);
9980 	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9981 	  bfd_vma isa_bit = micromips_p;
9982 	  struct elf_link_hash_entry *h;
9983 	  bfd_vma size;
9984 
9985 	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
9986 	  BFD_ASSERT (htab->root.sgotplt->size == 0);
9987 	  BFD_ASSERT (htab->root.splt->size == 0);
9988 
9989 	  if (htab->is_vxworks && bfd_link_pic (info))
9990 	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9991 	  else if (htab->is_vxworks)
9992 	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9993 	  else if (ABI_64_P (output_bfd))
9994 	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9995 	  else if (ABI_N32_P (output_bfd))
9996 	    size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9997 	  else if (!micromips_p)
9998 	    size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9999 	  else if (htab->insn32)
10000 	    size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
10001 	  else
10002 	    size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
10003 
10004 	  htab->plt_header_is_comp = micromips_p;
10005 	  htab->plt_header_size = size;
10006 	  htab->root.splt->size = (size
10007 				   + htab->plt_mips_offset
10008 				   + htab->plt_comp_offset);
10009 	  htab->root.sgotplt->size = (htab->plt_got_index
10010 				      * MIPS_ELF_GOT_SIZE (dynobj));
10011 
10012 	  mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
10013 
10014 	  if (htab->root.hplt == NULL)
10015 	    {
10016 	      h = _bfd_elf_define_linkage_sym (dynobj, info, htab->root.splt,
10017 					       "_PROCEDURE_LINKAGE_TABLE_");
10018 	      htab->root.hplt = h;
10019 	      if (h == NULL)
10020 		return FALSE;
10021 	    }
10022 
10023 	  h = htab->root.hplt;
10024 	  h->root.u.def.value = isa_bit;
10025 	  h->other = other;
10026 	  h->type = STT_FUNC;
10027 	}
10028     }
10029 
10030   /* Allocate space for global sym dynamic relocs.  */
10031   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
10032 
10033   mips_elf_estimate_stub_size (output_bfd, info);
10034 
10035   if (!mips_elf_lay_out_got (output_bfd, info))
10036     return FALSE;
10037 
10038   mips_elf_lay_out_lazy_stubs (info);
10039 
10040   /* The check_relocs and adjust_dynamic_symbol entry points have
10041      determined the sizes of the various dynamic sections.  Allocate
10042      memory for them.  */
10043   reltext = FALSE;
10044   for (s = dynobj->sections; s != NULL; s = s->next)
10045     {
10046       const char *name;
10047 
10048       /* It's OK to base decisions on the section name, because none
10049 	 of the dynobj section names depend upon the input files.  */
10050       name = bfd_section_name (s);
10051 
10052       if ((s->flags & SEC_LINKER_CREATED) == 0)
10053 	continue;
10054 
10055       if (CONST_STRNEQ (name, ".rel"))
10056 	{
10057 	  if (s->size != 0)
10058 	    {
10059 	      const char *outname;
10060 	      asection *target;
10061 
10062 	      /* If this relocation section applies to a read only
10063 		 section, then we probably need a DT_TEXTREL entry.
10064 		 If the relocation section is .rel(a).dyn, we always
10065 		 assert a DT_TEXTREL entry rather than testing whether
10066 		 there exists a relocation to a read only section or
10067 		 not.  */
10068 	      outname = bfd_section_name (s->output_section);
10069 	      target = bfd_get_section_by_name (output_bfd, outname + 4);
10070 	      if ((target != NULL
10071 		   && (target->flags & SEC_READONLY) != 0
10072 		   && (target->flags & SEC_ALLOC) != 0)
10073 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
10074 		reltext = TRUE;
10075 
10076 	      /* We use the reloc_count field as a counter if we need
10077 		 to copy relocs into the output file.  */
10078 	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
10079 		s->reloc_count = 0;
10080 
10081 	      /* If combreloc is enabled, elf_link_sort_relocs() will
10082 		 sort relocations, but in a different way than we do,
10083 		 and before we're done creating relocations.  Also, it
10084 		 will move them around between input sections'
10085 		 relocation's contents, so our sorting would be
10086 		 broken, so don't let it run.  */
10087 	      info->combreloc = 0;
10088 	    }
10089 	}
10090       else if (bfd_link_executable (info)
10091 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
10092 	       && CONST_STRNEQ (name, ".rld_map"))
10093 	{
10094 	  /* We add a room for __rld_map.  It will be filled in by the
10095 	     rtld to contain a pointer to the _r_debug structure.  */
10096 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
10097 	}
10098       else if (SGI_COMPAT (output_bfd)
10099 	       && CONST_STRNEQ (name, ".compact_rel"))
10100 	s->size += mips_elf_hash_table (info)->compact_rel_size;
10101       else if (s == htab->root.splt)
10102 	{
10103 	  /* If the last PLT entry has a branch delay slot, allocate
10104 	     room for an extra nop to fill the delay slot.  This is
10105 	     for CPUs without load interlocking.  */
10106 	  if (! LOAD_INTERLOCKS_P (output_bfd)
10107 	      && ! htab->is_vxworks && s->size > 0)
10108 	    s->size += 4;
10109 	}
10110       else if (! CONST_STRNEQ (name, ".init")
10111 	       && s != htab->root.sgot
10112 	       && s != htab->root.sgotplt
10113 	       && s != htab->sstubs
10114 	       && s != htab->root.sdynbss
10115 	       && s != htab->root.sdynrelro)
10116 	{
10117 	  /* It's not one of our sections, so don't allocate space.  */
10118 	  continue;
10119 	}
10120 
10121       if (s->size == 0)
10122 	{
10123 	  s->flags |= SEC_EXCLUDE;
10124 	  continue;
10125 	}
10126 
10127       if ((s->flags & SEC_HAS_CONTENTS) == 0)
10128 	continue;
10129 
10130       /* Allocate memory for the section contents.  */
10131       s->contents = bfd_zalloc (dynobj, s->size);
10132       if (s->contents == NULL)
10133 	{
10134 	  bfd_set_error (bfd_error_no_memory);
10135 	  return FALSE;
10136 	}
10137     }
10138 
10139   if (elf_hash_table (info)->dynamic_sections_created)
10140     {
10141       /* Add some entries to the .dynamic section.  We fill in the
10142 	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
10143 	 must add the entries now so that we get the correct size for
10144 	 the .dynamic section.  */
10145 
10146       /* SGI object has the equivalence of DT_DEBUG in the
10147 	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
10148 	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
10149 	 may only look at the first one they see.  */
10150       if (!bfd_link_pic (info)
10151 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
10152 	return FALSE;
10153 
10154       if (bfd_link_executable (info)
10155 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP_REL, 0))
10156 	return FALSE;
10157 
10158       /* The DT_DEBUG entry may be filled in by the dynamic linker and
10159 	 used by the debugger.  */
10160       if (bfd_link_executable (info)
10161 	  && !SGI_COMPAT (output_bfd)
10162 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
10163 	return FALSE;
10164 
10165       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
10166 	info->flags |= DF_TEXTREL;
10167 
10168       if ((info->flags & DF_TEXTREL) != 0)
10169 	{
10170 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
10171 	    return FALSE;
10172 
10173 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
10174 	     write out an actual text relocation; we may not, because
10175 	     at this point we do not know whether e.g. any .eh_frame
10176 	     absolute relocations have been converted to PC-relative.  */
10177 	  info->flags &= ~DF_TEXTREL;
10178 	}
10179 
10180       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
10181 	return FALSE;
10182 
10183       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
10184       if (htab->is_vxworks)
10185 	{
10186 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
10187 	     use any of the DT_MIPS_* tags.  */
10188 	  if (sreldyn && sreldyn->size > 0)
10189 	    {
10190 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
10191 		return FALSE;
10192 
10193 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
10194 		return FALSE;
10195 
10196 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
10197 		return FALSE;
10198 	    }
10199 	}
10200       else
10201 	{
10202 	  if (sreldyn && sreldyn->size > 0
10203 	      && !bfd_is_abs_section (sreldyn->output_section))
10204 	    {
10205 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
10206 		return FALSE;
10207 
10208 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
10209 		return FALSE;
10210 
10211 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
10212 		return FALSE;
10213 	    }
10214 
10215 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
10216 	    return FALSE;
10217 
10218 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
10219 	    return FALSE;
10220 
10221 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
10222 	    return FALSE;
10223 
10224 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
10225 	    return FALSE;
10226 
10227 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
10228 	    return FALSE;
10229 
10230 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
10231 	    return FALSE;
10232 
10233 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
10234 	    return FALSE;
10235 
10236 	  if (info->emit_gnu_hash
10237 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_XHASH, 0))
10238 	    return FALSE;
10239 
10240 	  if (IRIX_COMPAT (dynobj) == ict_irix5
10241 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
10242 	    return FALSE;
10243 
10244 	  if (IRIX_COMPAT (dynobj) == ict_irix6
10245 	      && (bfd_get_section_by_name
10246 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
10247 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
10248 	    return FALSE;
10249 	}
10250       if (htab->root.splt->size > 0)
10251 	{
10252 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
10253 	    return FALSE;
10254 
10255 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
10256 	    return FALSE;
10257 
10258 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
10259 	    return FALSE;
10260 
10261 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
10262 	    return FALSE;
10263 	}
10264       if (htab->is_vxworks
10265 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
10266 	return FALSE;
10267     }
10268 
10269   return TRUE;
10270 }
10271 
10272 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
10273    Adjust its R_ADDEND field so that it is correct for the output file.
10274    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
10275    and sections respectively; both use symbol indexes.  */
10276 
10277 static void
10278 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
10279 			bfd *input_bfd, Elf_Internal_Sym *local_syms,
10280 			asection **local_sections, Elf_Internal_Rela *rel)
10281 {
10282   unsigned int r_type, r_symndx;
10283   Elf_Internal_Sym *sym;
10284   asection *sec;
10285 
10286   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10287     {
10288       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10289       if (gprel16_reloc_p (r_type)
10290 	  || r_type == R_MIPS_GPREL32
10291 	  || literal_reloc_p (r_type))
10292 	{
10293 	  rel->r_addend += _bfd_get_gp_value (input_bfd);
10294 	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
10295 	}
10296 
10297       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
10298       sym = local_syms + r_symndx;
10299 
10300       /* Adjust REL's addend to account for section merging.  */
10301       if (!bfd_link_relocatable (info))
10302 	{
10303 	  sec = local_sections[r_symndx];
10304 	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
10305 	}
10306 
10307       /* This would normally be done by the rela_normal code in elflink.c.  */
10308       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
10309 	rel->r_addend += local_sections[r_symndx]->output_offset;
10310     }
10311 }
10312 
10313 /* Handle relocations against symbols from removed linkonce sections,
10314    or sections discarded by a linker script.  We use this wrapper around
10315    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
10316    on 64-bit ELF targets.  In this case for any relocation handled, which
10317    always be the first in a triplet, the remaining two have to be processed
10318    together with the first, even if they are R_MIPS_NONE.  It is the symbol
10319    index referred by the first reloc that applies to all the three and the
10320    remaining two never refer to an object symbol.  And it is the final
10321    relocation (the last non-null one) that determines the output field of
10322    the whole relocation so retrieve the corresponding howto structure for
10323    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
10324 
10325    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
10326    and therefore requires to be pasted in a loop.  It also defines a block
10327    and does not protect any of its arguments, hence the extra brackets.  */
10328 
10329 static void
10330 mips_reloc_against_discarded_section (bfd *output_bfd,
10331 				      struct bfd_link_info *info,
10332 				      bfd *input_bfd, asection *input_section,
10333 				      Elf_Internal_Rela **rel,
10334 				      const Elf_Internal_Rela **relend,
10335 				      bfd_boolean rel_reloc,
10336 				      reloc_howto_type *howto,
10337 				      bfd_byte *contents)
10338 {
10339   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
10340   int count = bed->s->int_rels_per_ext_rel;
10341   unsigned int r_type;
10342   int i;
10343 
10344   for (i = count - 1; i > 0; i--)
10345     {
10346       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
10347       if (r_type != R_MIPS_NONE)
10348 	{
10349 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10350 	  break;
10351 	}
10352     }
10353   do
10354     {
10355        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
10356 					(*rel), count, (*relend),
10357 					howto, i, contents);
10358     }
10359   while (0);
10360 }
10361 
10362 /* Relocate a MIPS ELF section.  */
10363 
10364 bfd_boolean
10365 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
10366 				bfd *input_bfd, asection *input_section,
10367 				bfd_byte *contents, Elf_Internal_Rela *relocs,
10368 				Elf_Internal_Sym *local_syms,
10369 				asection **local_sections)
10370 {
10371   Elf_Internal_Rela *rel;
10372   const Elf_Internal_Rela *relend;
10373   bfd_vma addend = 0;
10374   bfd_boolean use_saved_addend_p = FALSE;
10375 
10376   relend = relocs + input_section->reloc_count;
10377   for (rel = relocs; rel < relend; ++rel)
10378     {
10379       const char *name;
10380       bfd_vma value = 0;
10381       reloc_howto_type *howto;
10382       bfd_boolean cross_mode_jump_p = FALSE;
10383       /* TRUE if the relocation is a RELA relocation, rather than a
10384 	 REL relocation.  */
10385       bfd_boolean rela_relocation_p = TRUE;
10386       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10387       const char *msg;
10388       unsigned long r_symndx;
10389       asection *sec;
10390       Elf_Internal_Shdr *symtab_hdr;
10391       struct elf_link_hash_entry *h;
10392       bfd_boolean rel_reloc;
10393 
10394       rel_reloc = (NEWABI_P (input_bfd)
10395 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
10396 						 relocs, rel));
10397       /* Find the relocation howto for this relocation.  */
10398       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10399 
10400       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10401       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10402       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10403 	{
10404 	  sec = local_sections[r_symndx];
10405 	  h = NULL;
10406 	}
10407       else
10408 	{
10409 	  unsigned long extsymoff;
10410 
10411 	  extsymoff = 0;
10412 	  if (!elf_bad_symtab (input_bfd))
10413 	    extsymoff = symtab_hdr->sh_info;
10414 	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10415 	  while (h->root.type == bfd_link_hash_indirect
10416 		 || h->root.type == bfd_link_hash_warning)
10417 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
10418 
10419 	  sec = NULL;
10420 	  if (h->root.type == bfd_link_hash_defined
10421 	      || h->root.type == bfd_link_hash_defweak)
10422 	    sec = h->root.u.def.section;
10423 	}
10424 
10425       if (sec != NULL && discarded_section (sec))
10426 	{
10427 	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10428 						input_section, &rel, &relend,
10429 						rel_reloc, howto, contents);
10430 	  continue;
10431 	}
10432 
10433       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10434 	{
10435 	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10436 	     64-bit code, but make sure all their addresses are in the
10437 	     lowermost or uppermost 32-bit section of the 64-bit address
10438 	     space.  Thus, when they use an R_MIPS_64 they mean what is
10439 	     usually meant by R_MIPS_32, with the exception that the
10440 	     stored value is sign-extended to 64 bits.  */
10441 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10442 
10443 	  /* On big-endian systems, we need to lie about the position
10444 	     of the reloc.  */
10445 	  if (bfd_big_endian (input_bfd))
10446 	    rel->r_offset += 4;
10447 	}
10448 
10449       if (!use_saved_addend_p)
10450 	{
10451 	  /* If these relocations were originally of the REL variety,
10452 	     we must pull the addend out of the field that will be
10453 	     relocated.  Otherwise, we simply use the contents of the
10454 	     RELA relocation.  */
10455 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
10456 					 relocs, rel))
10457 	    {
10458 	      rela_relocation_p = FALSE;
10459 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
10460 						 howto, contents);
10461 	      if (hi16_reloc_p (r_type)
10462 		  || (got16_reloc_p (r_type)
10463 		      && mips_elf_local_relocation_p (input_bfd, rel,
10464 						      local_sections)))
10465 		{
10466 		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10467 						     contents, &addend))
10468 		    {
10469 		      if (h)
10470 			name = h->root.root.string;
10471 		      else
10472 			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10473 						 local_syms + r_symndx,
10474 						 sec);
10475 		      _bfd_error_handler
10476 			/* xgettext:c-format */
10477 			(_("%pB: can't find matching LO16 reloc against `%s'"
10478 			   " for %s at %#" PRIx64 " in section `%pA'"),
10479 			 input_bfd, name,
10480 			 howto->name, (uint64_t) rel->r_offset, input_section);
10481 		    }
10482 		}
10483 	      else
10484 		addend <<= howto->rightshift;
10485 	    }
10486 	  else
10487 	    addend = rel->r_addend;
10488 	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
10489 				  local_syms, local_sections, rel);
10490 	}
10491 
10492       if (bfd_link_relocatable (info))
10493 	{
10494 	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10495 	      && bfd_big_endian (input_bfd))
10496 	    rel->r_offset -= 4;
10497 
10498 	  if (!rela_relocation_p && rel->r_addend)
10499 	    {
10500 	      addend += rel->r_addend;
10501 	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10502 		addend = mips_elf_high (addend);
10503 	      else if (r_type == R_MIPS_HIGHER)
10504 		addend = mips_elf_higher (addend);
10505 	      else if (r_type == R_MIPS_HIGHEST)
10506 		addend = mips_elf_highest (addend);
10507 	      else
10508 		addend >>= howto->rightshift;
10509 
10510 	      /* We use the source mask, rather than the destination
10511 		 mask because the place to which we are writing will be
10512 		 source of the addend in the final link.  */
10513 	      addend &= howto->src_mask;
10514 
10515 	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10516 		/* See the comment above about using R_MIPS_64 in the 32-bit
10517 		   ABI.  Here, we need to update the addend.  It would be
10518 		   possible to get away with just using the R_MIPS_32 reloc
10519 		   but for endianness.  */
10520 		{
10521 		  bfd_vma sign_bits;
10522 		  bfd_vma low_bits;
10523 		  bfd_vma high_bits;
10524 
10525 		  if (addend & ((bfd_vma) 1 << 31))
10526 #ifdef BFD64
10527 		    sign_bits = ((bfd_vma) 1 << 32) - 1;
10528 #else
10529 		    sign_bits = -1;
10530 #endif
10531 		  else
10532 		    sign_bits = 0;
10533 
10534 		  /* If we don't know that we have a 64-bit type,
10535 		     do two separate stores.  */
10536 		  if (bfd_big_endian (input_bfd))
10537 		    {
10538 		      /* Store the sign-bits (which are most significant)
10539 			 first.  */
10540 		      low_bits = sign_bits;
10541 		      high_bits = addend;
10542 		    }
10543 		  else
10544 		    {
10545 		      low_bits = addend;
10546 		      high_bits = sign_bits;
10547 		    }
10548 		  bfd_put_32 (input_bfd, low_bits,
10549 			      contents + rel->r_offset);
10550 		  bfd_put_32 (input_bfd, high_bits,
10551 			      contents + rel->r_offset + 4);
10552 		  continue;
10553 		}
10554 
10555 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
10556 						 input_bfd, input_section,
10557 						 contents, FALSE))
10558 		return FALSE;
10559 	    }
10560 
10561 	  /* Go on to the next relocation.  */
10562 	  continue;
10563 	}
10564 
10565       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10566 	 relocations for the same offset.  In that case we are
10567 	 supposed to treat the output of each relocation as the addend
10568 	 for the next.  */
10569       if (rel + 1 < relend
10570 	  && rel->r_offset == rel[1].r_offset
10571 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10572 	use_saved_addend_p = TRUE;
10573       else
10574 	use_saved_addend_p = FALSE;
10575 
10576       /* Figure out what value we are supposed to relocate.  */
10577       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10578 					     input_section, contents,
10579 					     info, rel, addend, howto,
10580 					     local_syms, local_sections,
10581 					     &value, &name, &cross_mode_jump_p,
10582 					     use_saved_addend_p))
10583 	{
10584 	case bfd_reloc_continue:
10585 	  /* There's nothing to do.  */
10586 	  continue;
10587 
10588 	case bfd_reloc_undefined:
10589 	  /* mips_elf_calculate_relocation already called the
10590 	     undefined_symbol callback.  There's no real point in
10591 	     trying to perform the relocation at this point, so we
10592 	     just skip ahead to the next relocation.  */
10593 	  continue;
10594 
10595 	case bfd_reloc_notsupported:
10596 	  msg = _("internal error: unsupported relocation error");
10597 	  info->callbacks->warning
10598 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
10599 	  return FALSE;
10600 
10601 	case bfd_reloc_overflow:
10602 	  if (use_saved_addend_p)
10603 	    /* Ignore overflow until we reach the last relocation for
10604 	       a given location.  */
10605 	    ;
10606 	  else
10607 	    {
10608 	      struct mips_elf_link_hash_table *htab;
10609 
10610 	      htab = mips_elf_hash_table (info);
10611 	      BFD_ASSERT (htab != NULL);
10612 	      BFD_ASSERT (name != NULL);
10613 	      if (!htab->small_data_overflow_reported
10614 		  && (gprel16_reloc_p (howto->type)
10615 		      || literal_reloc_p (howto->type)))
10616 		{
10617 		  msg = _("small-data section exceeds 64KB;"
10618 			  " lower small-data size limit (see option -G)");
10619 
10620 		  htab->small_data_overflow_reported = TRUE;
10621 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
10622 		}
10623 	      (*info->callbacks->reloc_overflow)
10624 		(info, NULL, name, howto->name, (bfd_vma) 0,
10625 		 input_bfd, input_section, rel->r_offset);
10626 	    }
10627 	  break;
10628 
10629 	case bfd_reloc_ok:
10630 	  break;
10631 
10632 	case bfd_reloc_outofrange:
10633 	  msg = NULL;
10634 	  if (jal_reloc_p (howto->type))
10635 	    msg = (cross_mode_jump_p
10636 		   ? _("cannot convert a jump to JALX "
10637 		       "for a non-word-aligned address")
10638 		   : (howto->type == R_MIPS16_26
10639 		      ? _("jump to a non-word-aligned address")
10640 		      : _("jump to a non-instruction-aligned address")));
10641 	  else if (b_reloc_p (howto->type))
10642 	    msg = (cross_mode_jump_p
10643 		   ? _("cannot convert a branch to JALX "
10644 		       "for a non-word-aligned address")
10645 		   : _("branch to a non-instruction-aligned address"));
10646 	  else if (aligned_pcrel_reloc_p (howto->type))
10647 	    msg = _("PC-relative load from unaligned address");
10648 	  if (msg)
10649 	    {
10650 	      info->callbacks->einfo
10651 		("%X%H: %s\n", input_bfd, input_section, rel->r_offset, msg);
10652 	      break;
10653 	    }
10654 	  /* Fall through.  */
10655 
10656 	default:
10657 	  abort ();
10658 	  break;
10659 	}
10660 
10661       /* If we've got another relocation for the address, keep going
10662 	 until we reach the last one.  */
10663       if (use_saved_addend_p)
10664 	{
10665 	  addend = value;
10666 	  continue;
10667 	}
10668 
10669       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10670 	/* See the comment above about using R_MIPS_64 in the 32-bit
10671 	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10672 	   that calculated the right value.  Now, however, we
10673 	   sign-extend the 32-bit result to 64-bits, and store it as a
10674 	   64-bit value.  We are especially generous here in that we
10675 	   go to extreme lengths to support this usage on systems with
10676 	   only a 32-bit VMA.  */
10677 	{
10678 	  bfd_vma sign_bits;
10679 	  bfd_vma low_bits;
10680 	  bfd_vma high_bits;
10681 
10682 	  if (value & ((bfd_vma) 1 << 31))
10683 #ifdef BFD64
10684 	    sign_bits = ((bfd_vma) 1 << 32) - 1;
10685 #else
10686 	    sign_bits = -1;
10687 #endif
10688 	  else
10689 	    sign_bits = 0;
10690 
10691 	  /* If we don't know that we have a 64-bit type,
10692 	     do two separate stores.  */
10693 	  if (bfd_big_endian (input_bfd))
10694 	    {
10695 	      /* Undo what we did above.  */
10696 	      rel->r_offset -= 4;
10697 	      /* Store the sign-bits (which are most significant)
10698 		 first.  */
10699 	      low_bits = sign_bits;
10700 	      high_bits = value;
10701 	    }
10702 	  else
10703 	    {
10704 	      low_bits = value;
10705 	      high_bits = sign_bits;
10706 	    }
10707 	  bfd_put_32 (input_bfd, low_bits,
10708 		      contents + rel->r_offset);
10709 	  bfd_put_32 (input_bfd, high_bits,
10710 		      contents + rel->r_offset + 4);
10711 	  continue;
10712 	}
10713 
10714       /* Actually perform the relocation.  */
10715       if (! mips_elf_perform_relocation (info, howto, rel, value,
10716 					 input_bfd, input_section,
10717 					 contents, cross_mode_jump_p))
10718 	return FALSE;
10719     }
10720 
10721   return TRUE;
10722 }
10723 
10724 /* A function that iterates over each entry in la25_stubs and fills
10725    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10726 
10727 static int
10728 mips_elf_create_la25_stub (void **slot, void *data)
10729 {
10730   struct mips_htab_traverse_info *hti;
10731   struct mips_elf_link_hash_table *htab;
10732   struct mips_elf_la25_stub *stub;
10733   asection *s;
10734   bfd_byte *loc;
10735   bfd_vma offset, target, target_high, target_low;
10736   bfd_vma branch_pc;
10737   bfd_signed_vma pcrel_offset = 0;
10738 
10739   stub = (struct mips_elf_la25_stub *) *slot;
10740   hti = (struct mips_htab_traverse_info *) data;
10741   htab = mips_elf_hash_table (hti->info);
10742   BFD_ASSERT (htab != NULL);
10743 
10744   /* Create the section contents, if we haven't already.  */
10745   s = stub->stub_section;
10746   loc = s->contents;
10747   if (loc == NULL)
10748     {
10749       loc = bfd_malloc (s->size);
10750       if (loc == NULL)
10751 	{
10752 	  hti->error = TRUE;
10753 	  return FALSE;
10754 	}
10755       s->contents = loc;
10756     }
10757 
10758   /* Work out where in the section this stub should go.  */
10759   offset = stub->offset;
10760 
10761   /* We add 8 here to account for the LUI/ADDIU instructions
10762      before the branch instruction.  This cannot be moved down to
10763      where pcrel_offset is calculated as 's' is updated in
10764      mips_elf_get_la25_target.  */
10765   branch_pc = s->output_section->vma + s->output_offset + offset + 8;
10766 
10767   /* Work out the target address.  */
10768   target = mips_elf_get_la25_target (stub, &s);
10769   target += s->output_section->vma + s->output_offset;
10770 
10771   target_high = ((target + 0x8000) >> 16) & 0xffff;
10772   target_low = (target & 0xffff);
10773 
10774   /* Calculate the PC of the compact branch instruction (for the case where
10775      compact branches are used for either microMIPSR6 or MIPSR6 with
10776      compact branches.  Add 4-bytes to account for BC using the PC of the
10777      next instruction as the base.  */
10778   pcrel_offset = target - (branch_pc + 4);
10779 
10780   if (stub->stub_section != htab->strampoline)
10781     {
10782       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10783 	 of the section and write the two instructions at the end.  */
10784       memset (loc, 0, offset);
10785       loc += offset;
10786       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10787 	{
10788 	  bfd_put_micromips_32 (hti->output_bfd,
10789 				LA25_LUI_MICROMIPS (target_high),
10790 				loc);
10791 	  bfd_put_micromips_32 (hti->output_bfd,
10792 				LA25_ADDIU_MICROMIPS (target_low),
10793 				loc + 4);
10794 	}
10795       else
10796 	{
10797 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10798 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10799 	}
10800     }
10801   else
10802     {
10803       /* This is trampoline.  */
10804       loc += offset;
10805       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10806 	{
10807 	  bfd_put_micromips_32 (hti->output_bfd,
10808 				LA25_LUI_MICROMIPS (target_high), loc);
10809 	  bfd_put_micromips_32 (hti->output_bfd,
10810 				LA25_J_MICROMIPS (target), loc + 4);
10811 	  bfd_put_micromips_32 (hti->output_bfd,
10812 				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10813 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10814 	}
10815       else
10816 	{
10817 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10818 	  if (MIPSR6_P (hti->output_bfd) && htab->compact_branches)
10819 	    {
10820 	      bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10821 	      bfd_put_32 (hti->output_bfd, LA25_BC (pcrel_offset), loc + 8);
10822 	    }
10823 	  else
10824 	    {
10825 	      bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10826 	      bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10827 	    }
10828 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10829 	}
10830     }
10831   return TRUE;
10832 }
10833 
10834 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10835    adjust it appropriately now.  */
10836 
10837 static void
10838 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10839 				      const char *name, Elf_Internal_Sym *sym)
10840 {
10841   /* The linker script takes care of providing names and values for
10842      these, but we must place them into the right sections.  */
10843   static const char* const text_section_symbols[] = {
10844     "_ftext",
10845     "_etext",
10846     "__dso_displacement",
10847     "__elf_header",
10848     "__program_header_table",
10849     NULL
10850   };
10851 
10852   static const char* const data_section_symbols[] = {
10853     "_fdata",
10854     "_edata",
10855     "_end",
10856     "_fbss",
10857     NULL
10858   };
10859 
10860   const char* const *p;
10861   int i;
10862 
10863   for (i = 0; i < 2; ++i)
10864     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10865 	 *p;
10866 	 ++p)
10867       if (strcmp (*p, name) == 0)
10868 	{
10869 	  /* All of these symbols are given type STT_SECTION by the
10870 	     IRIX6 linker.  */
10871 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10872 	  sym->st_other = STO_PROTECTED;
10873 
10874 	  /* The IRIX linker puts these symbols in special sections.  */
10875 	  if (i == 0)
10876 	    sym->st_shndx = SHN_MIPS_TEXT;
10877 	  else
10878 	    sym->st_shndx = SHN_MIPS_DATA;
10879 
10880 	  break;
10881 	}
10882 }
10883 
10884 /* Finish up dynamic symbol handling.  We set the contents of various
10885    dynamic sections here.  */
10886 
10887 bfd_boolean
10888 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10889 				     struct bfd_link_info *info,
10890 				     struct elf_link_hash_entry *h,
10891 				     Elf_Internal_Sym *sym)
10892 {
10893   bfd *dynobj;
10894   asection *sgot;
10895   struct mips_got_info *g, *gg;
10896   const char *name;
10897   int idx;
10898   struct mips_elf_link_hash_table *htab;
10899   struct mips_elf_link_hash_entry *hmips;
10900 
10901   htab = mips_elf_hash_table (info);
10902   BFD_ASSERT (htab != NULL);
10903   dynobj = elf_hash_table (info)->dynobj;
10904   hmips = (struct mips_elf_link_hash_entry *) h;
10905 
10906   BFD_ASSERT (!htab->is_vxworks);
10907 
10908   if (h->plt.plist != NULL
10909       && (h->plt.plist->mips_offset != MINUS_ONE
10910 	  || h->plt.plist->comp_offset != MINUS_ONE))
10911     {
10912       /* We've decided to create a PLT entry for this symbol.  */
10913       bfd_byte *loc;
10914       bfd_vma header_address, got_address;
10915       bfd_vma got_address_high, got_address_low, load;
10916       bfd_vma got_index;
10917       bfd_vma isa_bit;
10918 
10919       got_index = h->plt.plist->gotplt_index;
10920 
10921       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10922       BFD_ASSERT (h->dynindx != -1);
10923       BFD_ASSERT (htab->root.splt != NULL);
10924       BFD_ASSERT (got_index != MINUS_ONE);
10925       BFD_ASSERT (!h->def_regular);
10926 
10927       /* Calculate the address of the PLT header.  */
10928       isa_bit = htab->plt_header_is_comp;
10929       header_address = (htab->root.splt->output_section->vma
10930 			+ htab->root.splt->output_offset + isa_bit);
10931 
10932       /* Calculate the address of the .got.plt entry.  */
10933       got_address = (htab->root.sgotplt->output_section->vma
10934 		     + htab->root.sgotplt->output_offset
10935 		     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10936 
10937       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10938       got_address_low = got_address & 0xffff;
10939 
10940       /* The PLT sequence is not safe for N64 if .got.plt entry's address
10941 	 cannot be loaded in two instructions.  */
10942       if (ABI_64_P (output_bfd)
10943 	  && ((got_address + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
10944 	{
10945 	  _bfd_error_handler
10946 	    /* xgettext:c-format */
10947 	    (_("%pB: `%pA' entry VMA of %#" PRIx64 " outside the 32-bit range "
10948 	       "supported; consider using `-Ttext-segment=...'"),
10949 	     output_bfd,
10950 	     htab->root.sgotplt->output_section,
10951 	     (int64_t) got_address);
10952 	  bfd_set_error (bfd_error_no_error);
10953 	  return FALSE;
10954 	}
10955 
10956       /* Initially point the .got.plt entry at the PLT header.  */
10957       loc = (htab->root.sgotplt->contents
10958 	     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10959       if (ABI_64_P (output_bfd))
10960 	bfd_put_64 (output_bfd, header_address, loc);
10961       else
10962 	bfd_put_32 (output_bfd, header_address, loc);
10963 
10964       /* Now handle the PLT itself.  First the standard entry (the order
10965 	 does not matter, we just have to pick one).  */
10966       if (h->plt.plist->mips_offset != MINUS_ONE)
10967 	{
10968 	  const bfd_vma *plt_entry;
10969 	  bfd_vma plt_offset;
10970 
10971 	  plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10972 
10973 	  BFD_ASSERT (plt_offset <= htab->root.splt->size);
10974 
10975 	  /* Find out where the .plt entry should go.  */
10976 	  loc = htab->root.splt->contents + plt_offset;
10977 
10978 	  /* Pick the load opcode.  */
10979 	  load = MIPS_ELF_LOAD_WORD (output_bfd);
10980 
10981 	  /* Fill in the PLT entry itself.  */
10982 
10983 	  if (MIPSR6_P (output_bfd))
10984 	    plt_entry = htab->compact_branches ? mipsr6_exec_plt_entry_compact
10985 					       : mipsr6_exec_plt_entry;
10986 	  else
10987 	    plt_entry = mips_exec_plt_entry;
10988 	  bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10989 	  bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10990 		      loc + 4);
10991 
10992 	  if (! LOAD_INTERLOCKS_P (output_bfd)
10993 	      || (MIPSR6_P (output_bfd) && htab->compact_branches))
10994 	    {
10995 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10996 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10997 	    }
10998 	  else
10999 	    {
11000 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
11001 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
11002 			  loc + 12);
11003 	    }
11004 	}
11005 
11006       /* Now the compressed entry.  They come after any standard ones.  */
11007       if (h->plt.plist->comp_offset != MINUS_ONE)
11008 	{
11009 	  bfd_vma plt_offset;
11010 
11011 	  plt_offset = (htab->plt_header_size + htab->plt_mips_offset
11012 			+ h->plt.plist->comp_offset);
11013 
11014 	  BFD_ASSERT (plt_offset <= htab->root.splt->size);
11015 
11016 	  /* Find out where the .plt entry should go.  */
11017 	  loc = htab->root.splt->contents + plt_offset;
11018 
11019 	  /* Fill in the PLT entry itself.  */
11020 	  if (!MICROMIPS_P (output_bfd))
11021 	    {
11022 	      const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
11023 
11024 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
11025 	      bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
11026 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11027 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11028 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11029 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11030 	      bfd_put_32 (output_bfd, got_address, loc + 12);
11031 	    }
11032 	  else if (htab->insn32)
11033 	    {
11034 	      const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
11035 
11036 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
11037 	      bfd_put_16 (output_bfd, got_address_high, loc + 2);
11038 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11039 	      bfd_put_16 (output_bfd, got_address_low, loc + 6);
11040 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11041 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11042 	      bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
11043 	      bfd_put_16 (output_bfd, got_address_low, loc + 14);
11044 	    }
11045 	  else
11046 	    {
11047 	      const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
11048 	      bfd_signed_vma gotpc_offset;
11049 	      bfd_vma loc_address;
11050 
11051 	      BFD_ASSERT (got_address % 4 == 0);
11052 
11053 	      loc_address = (htab->root.splt->output_section->vma
11054 			     + htab->root.splt->output_offset + plt_offset);
11055 	      gotpc_offset = got_address - ((loc_address | 3) ^ 3);
11056 
11057 	      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11058 	      if (gotpc_offset + 0x1000000 >= 0x2000000)
11059 		{
11060 		  _bfd_error_handler
11061 		    /* xgettext:c-format */
11062 		    (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11063 		       "beyond the range of ADDIUPC"),
11064 		     output_bfd,
11065 		     htab->root.sgotplt->output_section,
11066 		     (int64_t) gotpc_offset,
11067 		     htab->root.splt->output_section);
11068 		  bfd_set_error (bfd_error_no_error);
11069 		  return FALSE;
11070 		}
11071 	      bfd_put_16 (output_bfd,
11072 			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11073 	      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11074 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11075 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
11076 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11077 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
11078 	    }
11079 	}
11080 
11081       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11082       mips_elf_output_dynamic_relocation (output_bfd, htab->root.srelplt,
11083 					  got_index - 2, h->dynindx,
11084 					  R_MIPS_JUMP_SLOT, got_address);
11085 
11086       /* We distinguish between PLT entries and lazy-binding stubs by
11087 	 giving the former an st_other value of STO_MIPS_PLT.  Set the
11088 	 flag and leave the value if there are any relocations in the
11089 	 binary where pointer equality matters.  */
11090       sym->st_shndx = SHN_UNDEF;
11091       if (h->pointer_equality_needed)
11092 	sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
11093       else
11094 	{
11095 	  sym->st_value = 0;
11096 	  sym->st_other = 0;
11097 	}
11098     }
11099 
11100   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
11101     {
11102       /* We've decided to create a lazy-binding stub.  */
11103       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
11104       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
11105       bfd_vma stub_size = htab->function_stub_size;
11106       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
11107       bfd_vma isa_bit = micromips_p;
11108       bfd_vma stub_big_size;
11109 
11110       if (!micromips_p)
11111 	stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
11112       else if (htab->insn32)
11113 	stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
11114       else
11115 	stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
11116 
11117       /* This symbol has a stub.  Set it up.  */
11118 
11119       BFD_ASSERT (h->dynindx != -1);
11120 
11121       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
11122 
11123       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
11124 	 sign extension at runtime in the stub, resulting in a negative
11125 	 index value.  */
11126       if (h->dynindx & ~0x7fffffff)
11127 	return FALSE;
11128 
11129       /* Fill the stub.  */
11130       if (micromips_p)
11131 	{
11132 	  idx = 0;
11133 	  bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
11134 				stub + idx);
11135 	  idx += 4;
11136 	  if (htab->insn32)
11137 	    {
11138 	      bfd_put_micromips_32 (output_bfd,
11139 				    STUB_MOVE32_MICROMIPS, stub + idx);
11140 	      idx += 4;
11141 	    }
11142 	  else
11143 	    {
11144 	      bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
11145 	      idx += 2;
11146 	    }
11147 	  if (stub_size == stub_big_size)
11148 	    {
11149 	      long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
11150 
11151 	      bfd_put_micromips_32 (output_bfd,
11152 				    STUB_LUI_MICROMIPS (dynindx_hi),
11153 				    stub + idx);
11154 	      idx += 4;
11155 	    }
11156 	  if (htab->insn32)
11157 	    {
11158 	      bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
11159 				    stub + idx);
11160 	      idx += 4;
11161 	    }
11162 	  else
11163 	    {
11164 	      bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
11165 	      idx += 2;
11166 	    }
11167 
11168 	  /* If a large stub is not required and sign extension is not a
11169 	     problem, then use legacy code in the stub.  */
11170 	  if (stub_size == stub_big_size)
11171 	    bfd_put_micromips_32 (output_bfd,
11172 				  STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
11173 				  stub + idx);
11174 	  else if (h->dynindx & ~0x7fff)
11175 	    bfd_put_micromips_32 (output_bfd,
11176 				  STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
11177 				  stub + idx);
11178 	  else
11179 	    bfd_put_micromips_32 (output_bfd,
11180 				  STUB_LI16S_MICROMIPS (output_bfd,
11181 							h->dynindx),
11182 				  stub + idx);
11183 	}
11184       else
11185 	{
11186 	  idx = 0;
11187 	  bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
11188 	  idx += 4;
11189 	  bfd_put_32 (output_bfd, STUB_MOVE, stub + idx);
11190 	  idx += 4;
11191 	  if (stub_size == stub_big_size)
11192 	    {
11193 	      bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
11194 			  stub + idx);
11195 	      idx += 4;
11196 	    }
11197 
11198 	  if (!(MIPSR6_P (output_bfd) && htab->compact_branches))
11199 	    {
11200 	      bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
11201 	      idx += 4;
11202 	    }
11203 
11204 	  /* If a large stub is not required and sign extension is not a
11205 	     problem, then use legacy code in the stub.  */
11206 	  if (stub_size == stub_big_size)
11207 	    bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
11208 			stub + idx);
11209 	  else if (h->dynindx & ~0x7fff)
11210 	    bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
11211 			stub + idx);
11212 	  else
11213 	    bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
11214 			stub + idx);
11215 	  idx += 4;
11216 
11217 	  if (MIPSR6_P (output_bfd) && htab->compact_branches)
11218 	    bfd_put_32 (output_bfd, STUB_JALRC, stub + idx);
11219 	}
11220 
11221       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
11222       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
11223 	      stub, stub_size);
11224 
11225       /* Mark the symbol as undefined.  stub_offset != -1 occurs
11226 	 only for the referenced symbol.  */
11227       sym->st_shndx = SHN_UNDEF;
11228 
11229       /* The run-time linker uses the st_value field of the symbol
11230 	 to reset the global offset table entry for this external
11231 	 to its stub address when unlinking a shared object.  */
11232       sym->st_value = (htab->sstubs->output_section->vma
11233 		       + htab->sstubs->output_offset
11234 		       + h->plt.plist->stub_offset
11235 		       + isa_bit);
11236       sym->st_other = other;
11237     }
11238 
11239   /* If we have a MIPS16 function with a stub, the dynamic symbol must
11240      refer to the stub, since only the stub uses the standard calling
11241      conventions.  */
11242   if (h->dynindx != -1 && hmips->fn_stub != NULL)
11243     {
11244       BFD_ASSERT (hmips->need_fn_stub);
11245       sym->st_value = (hmips->fn_stub->output_section->vma
11246 		       + hmips->fn_stub->output_offset);
11247       sym->st_size = hmips->fn_stub->size;
11248       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
11249     }
11250 
11251   BFD_ASSERT (h->dynindx != -1
11252 	      || h->forced_local);
11253 
11254   sgot = htab->root.sgot;
11255   g = htab->got_info;
11256   BFD_ASSERT (g != NULL);
11257 
11258   /* Run through the global symbol table, creating GOT entries for all
11259      the symbols that need them.  */
11260   if (hmips->global_got_area != GGA_NONE)
11261     {
11262       bfd_vma offset;
11263       bfd_vma value;
11264 
11265       value = sym->st_value;
11266       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11267       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
11268     }
11269 
11270   if (hmips->global_got_area != GGA_NONE && g->next)
11271     {
11272       struct mips_got_entry e, *p;
11273       bfd_vma entry;
11274       bfd_vma offset;
11275 
11276       gg = g;
11277 
11278       e.abfd = output_bfd;
11279       e.symndx = -1;
11280       e.d.h = hmips;
11281       e.tls_type = GOT_TLS_NONE;
11282 
11283       for (g = g->next; g->next != gg; g = g->next)
11284 	{
11285 	  if (g->got_entries
11286 	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
11287 							   &e)))
11288 	    {
11289 	      offset = p->gotidx;
11290 	      BFD_ASSERT (offset > 0 && offset < htab->root.sgot->size);
11291 	      if (bfd_link_pic (info)
11292 		  || (elf_hash_table (info)->dynamic_sections_created
11293 		      && p->d.h != NULL
11294 		      && p->d.h->root.def_dynamic
11295 		      && !p->d.h->root.def_regular))
11296 		{
11297 		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
11298 		     the various compatibility problems, it's easier to mock
11299 		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
11300 		     mips_elf_create_dynamic_relocation to calculate the
11301 		     appropriate addend.  */
11302 		  Elf_Internal_Rela rel[3];
11303 
11304 		  memset (rel, 0, sizeof (rel));
11305 		  if (ABI_64_P (output_bfd))
11306 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
11307 		  else
11308 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
11309 		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
11310 
11311 		  entry = 0;
11312 		  if (! (mips_elf_create_dynamic_relocation
11313 			 (output_bfd, info, rel,
11314 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
11315 		    return FALSE;
11316 		}
11317 	      else
11318 		entry = sym->st_value;
11319 	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
11320 	    }
11321 	}
11322     }
11323 
11324   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
11325   name = h->root.root.string;
11326   if (h == elf_hash_table (info)->hdynamic
11327       || h == elf_hash_table (info)->hgot)
11328     sym->st_shndx = SHN_ABS;
11329   else if (strcmp (name, "_DYNAMIC_LINK") == 0
11330 	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
11331     {
11332       sym->st_shndx = SHN_ABS;
11333       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11334       sym->st_value = 1;
11335     }
11336   else if (SGI_COMPAT (output_bfd))
11337     {
11338       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
11339 	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
11340 	{
11341 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11342 	  sym->st_other = STO_PROTECTED;
11343 	  sym->st_value = 0;
11344 	  sym->st_shndx = SHN_MIPS_DATA;
11345 	}
11346       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
11347 	{
11348 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
11349 	  sym->st_other = STO_PROTECTED;
11350 	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
11351 	  sym->st_shndx = SHN_ABS;
11352 	}
11353       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
11354 	{
11355 	  if (h->type == STT_FUNC)
11356 	    sym->st_shndx = SHN_MIPS_TEXT;
11357 	  else if (h->type == STT_OBJECT)
11358 	    sym->st_shndx = SHN_MIPS_DATA;
11359 	}
11360     }
11361 
11362   /* Emit a copy reloc, if needed.  */
11363   if (h->needs_copy)
11364     {
11365       asection *s;
11366       bfd_vma symval;
11367 
11368       BFD_ASSERT (h->dynindx != -1);
11369       BFD_ASSERT (htab->use_plts_and_copy_relocs);
11370 
11371       s = mips_elf_rel_dyn_section (info, FALSE);
11372       symval = (h->root.u.def.section->output_section->vma
11373 		+ h->root.u.def.section->output_offset
11374 		+ h->root.u.def.value);
11375       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
11376 					  h->dynindx, R_MIPS_COPY, symval);
11377     }
11378 
11379   /* Handle the IRIX6-specific symbols.  */
11380   if (IRIX_COMPAT (output_bfd) == ict_irix6)
11381     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
11382 
11383   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
11384      to treat compressed symbols like any other.  */
11385   if (ELF_ST_IS_MIPS16 (sym->st_other))
11386     {
11387       BFD_ASSERT (sym->st_value & 1);
11388       sym->st_other -= STO_MIPS16;
11389     }
11390   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
11391     {
11392       BFD_ASSERT (sym->st_value & 1);
11393       sym->st_other -= STO_MICROMIPS;
11394     }
11395 
11396   return TRUE;
11397 }
11398 
11399 /* Likewise, for VxWorks.  */
11400 
11401 bfd_boolean
11402 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
11403 					 struct bfd_link_info *info,
11404 					 struct elf_link_hash_entry *h,
11405 					 Elf_Internal_Sym *sym)
11406 {
11407   bfd *dynobj;
11408   asection *sgot;
11409   struct mips_got_info *g;
11410   struct mips_elf_link_hash_table *htab;
11411   struct mips_elf_link_hash_entry *hmips;
11412 
11413   htab = mips_elf_hash_table (info);
11414   BFD_ASSERT (htab != NULL);
11415   dynobj = elf_hash_table (info)->dynobj;
11416   hmips = (struct mips_elf_link_hash_entry *) h;
11417 
11418   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
11419     {
11420       bfd_byte *loc;
11421       bfd_vma plt_address, got_address, got_offset, branch_offset;
11422       Elf_Internal_Rela rel;
11423       static const bfd_vma *plt_entry;
11424       bfd_vma gotplt_index;
11425       bfd_vma plt_offset;
11426 
11427       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
11428       gotplt_index = h->plt.plist->gotplt_index;
11429 
11430       BFD_ASSERT (h->dynindx != -1);
11431       BFD_ASSERT (htab->root.splt != NULL);
11432       BFD_ASSERT (gotplt_index != MINUS_ONE);
11433       BFD_ASSERT (plt_offset <= htab->root.splt->size);
11434 
11435       /* Calculate the address of the .plt entry.  */
11436       plt_address = (htab->root.splt->output_section->vma
11437 		     + htab->root.splt->output_offset
11438 		     + plt_offset);
11439 
11440       /* Calculate the address of the .got.plt entry.  */
11441       got_address = (htab->root.sgotplt->output_section->vma
11442 		     + htab->root.sgotplt->output_offset
11443 		     + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11444 
11445       /* Calculate the offset of the .got.plt entry from
11446 	 _GLOBAL_OFFSET_TABLE_.  */
11447       got_offset = mips_elf_gotplt_index (info, h);
11448 
11449       /* Calculate the offset for the branch at the start of the PLT
11450 	 entry.  The branch jumps to the beginning of .plt.  */
11451       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11452 
11453       /* Fill in the initial value of the .got.plt entry.  */
11454       bfd_put_32 (output_bfd, plt_address,
11455 		  (htab->root.sgotplt->contents
11456 		   + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11457 
11458       /* Find out where the .plt entry should go.  */
11459       loc = htab->root.splt->contents + plt_offset;
11460 
11461       if (bfd_link_pic (info))
11462 	{
11463 	  plt_entry = mips_vxworks_shared_plt_entry;
11464 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11465 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11466 	}
11467       else
11468 	{
11469 	  bfd_vma got_address_high, got_address_low;
11470 
11471 	  plt_entry = mips_vxworks_exec_plt_entry;
11472 	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11473 	  got_address_low = got_address & 0xffff;
11474 
11475 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11476 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11477 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11478 	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11479 	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11480 	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11481 	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11482 	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11483 
11484 	  loc = (htab->srelplt2->contents
11485 		 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11486 
11487 	  /* Emit a relocation for the .got.plt entry.  */
11488 	  rel.r_offset = got_address;
11489 	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11490 	  rel.r_addend = plt_offset;
11491 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11492 
11493 	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11494 	  loc += sizeof (Elf32_External_Rela);
11495 	  rel.r_offset = plt_address + 8;
11496 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11497 	  rel.r_addend = got_offset;
11498 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11499 
11500 	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11501 	  loc += sizeof (Elf32_External_Rela);
11502 	  rel.r_offset += 4;
11503 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11504 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11505 	}
11506 
11507       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11508       loc = (htab->root.srelplt->contents
11509 	     + gotplt_index * sizeof (Elf32_External_Rela));
11510       rel.r_offset = got_address;
11511       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11512       rel.r_addend = 0;
11513       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11514 
11515       if (!h->def_regular)
11516 	sym->st_shndx = SHN_UNDEF;
11517     }
11518 
11519   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11520 
11521   sgot = htab->root.sgot;
11522   g = htab->got_info;
11523   BFD_ASSERT (g != NULL);
11524 
11525   /* See if this symbol has an entry in the GOT.  */
11526   if (hmips->global_got_area != GGA_NONE)
11527     {
11528       bfd_vma offset;
11529       Elf_Internal_Rela outrel;
11530       bfd_byte *loc;
11531       asection *s;
11532 
11533       /* Install the symbol value in the GOT.   */
11534       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11535       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11536 
11537       /* Add a dynamic relocation for it.  */
11538       s = mips_elf_rel_dyn_section (info, FALSE);
11539       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11540       outrel.r_offset = (sgot->output_section->vma
11541 			 + sgot->output_offset
11542 			 + offset);
11543       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11544       outrel.r_addend = 0;
11545       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11546     }
11547 
11548   /* Emit a copy reloc, if needed.  */
11549   if (h->needs_copy)
11550     {
11551       Elf_Internal_Rela rel;
11552       asection *srel;
11553       bfd_byte *loc;
11554 
11555       BFD_ASSERT (h->dynindx != -1);
11556 
11557       rel.r_offset = (h->root.u.def.section->output_section->vma
11558 		      + h->root.u.def.section->output_offset
11559 		      + h->root.u.def.value);
11560       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11561       rel.r_addend = 0;
11562       if (h->root.u.def.section == htab->root.sdynrelro)
11563 	srel = htab->root.sreldynrelro;
11564       else
11565 	srel = htab->root.srelbss;
11566       loc = srel->contents + srel->reloc_count * sizeof (Elf32_External_Rela);
11567       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11568       ++srel->reloc_count;
11569     }
11570 
11571   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11572   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11573     sym->st_value &= ~1;
11574 
11575   return TRUE;
11576 }
11577 
11578 /* Write out a plt0 entry to the beginning of .plt.  */
11579 
11580 static bfd_boolean
11581 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11582 {
11583   bfd_byte *loc;
11584   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11585   static const bfd_vma *plt_entry;
11586   struct mips_elf_link_hash_table *htab;
11587 
11588   htab = mips_elf_hash_table (info);
11589   BFD_ASSERT (htab != NULL);
11590 
11591   if (ABI_64_P (output_bfd))
11592     plt_entry = (htab->compact_branches
11593 		 ? mipsr6_n64_exec_plt0_entry_compact
11594 		 : mips_n64_exec_plt0_entry);
11595   else if (ABI_N32_P (output_bfd))
11596     plt_entry = (htab->compact_branches
11597 		 ? mipsr6_n32_exec_plt0_entry_compact
11598 		 : mips_n32_exec_plt0_entry);
11599   else if (!htab->plt_header_is_comp)
11600     plt_entry = (htab->compact_branches
11601 		 ? mipsr6_o32_exec_plt0_entry_compact
11602 		 : mips_o32_exec_plt0_entry);
11603   else if (htab->insn32)
11604     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11605   else
11606     plt_entry = micromips_o32_exec_plt0_entry;
11607 
11608   /* Calculate the value of .got.plt.  */
11609   gotplt_value = (htab->root.sgotplt->output_section->vma
11610 		  + htab->root.sgotplt->output_offset);
11611   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11612   gotplt_value_low = gotplt_value & 0xffff;
11613 
11614   /* The PLT sequence is not safe for N64 if .got.plt's address can
11615      not be loaded in two instructions.  */
11616   if (ABI_64_P (output_bfd)
11617       && ((gotplt_value + 0x80008000) & ~(bfd_vma) 0xffffffff) != 0)
11618     {
11619       _bfd_error_handler
11620 	/* xgettext:c-format */
11621 	(_("%pB: `%pA' start VMA of %#" PRIx64 " outside the 32-bit range "
11622 	   "supported; consider using `-Ttext-segment=...'"),
11623 	 output_bfd,
11624 	 htab->root.sgotplt->output_section,
11625 	 (int64_t) gotplt_value);
11626       bfd_set_error (bfd_error_no_error);
11627       return FALSE;
11628     }
11629 
11630   /* Install the PLT header.  */
11631   loc = htab->root.splt->contents;
11632   if (plt_entry == micromips_o32_exec_plt0_entry)
11633     {
11634       bfd_vma gotpc_offset;
11635       bfd_vma loc_address;
11636       size_t i;
11637 
11638       BFD_ASSERT (gotplt_value % 4 == 0);
11639 
11640       loc_address = (htab->root.splt->output_section->vma
11641 		     + htab->root.splt->output_offset);
11642       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11643 
11644       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11645       if (gotpc_offset + 0x1000000 >= 0x2000000)
11646 	{
11647 	  _bfd_error_handler
11648 	    /* xgettext:c-format */
11649 	    (_("%pB: `%pA' offset of %" PRId64 " from `%pA' "
11650 	       "beyond the range of ADDIUPC"),
11651 	     output_bfd,
11652 	     htab->root.sgotplt->output_section,
11653 	     (int64_t) gotpc_offset,
11654 	     htab->root.splt->output_section);
11655 	  bfd_set_error (bfd_error_no_error);
11656 	  return FALSE;
11657 	}
11658       bfd_put_16 (output_bfd,
11659 		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11660       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11661       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11662 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11663     }
11664   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11665     {
11666       size_t i;
11667 
11668       bfd_put_16 (output_bfd, plt_entry[0], loc);
11669       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11670       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11671       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11672       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11673       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11674       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11675 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11676     }
11677   else
11678     {
11679       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11680       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11681       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11682       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11683       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11684       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11685       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11686       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11687     }
11688 
11689   return TRUE;
11690 }
11691 
11692 /* Install the PLT header for a VxWorks executable and finalize the
11693    contents of .rela.plt.unloaded.  */
11694 
11695 static void
11696 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11697 {
11698   Elf_Internal_Rela rela;
11699   bfd_byte *loc;
11700   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11701   static const bfd_vma *plt_entry;
11702   struct mips_elf_link_hash_table *htab;
11703 
11704   htab = mips_elf_hash_table (info);
11705   BFD_ASSERT (htab != NULL);
11706 
11707   plt_entry = mips_vxworks_exec_plt0_entry;
11708 
11709   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11710   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11711 	       + htab->root.hgot->root.u.def.section->output_offset
11712 	       + htab->root.hgot->root.u.def.value);
11713 
11714   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11715   got_value_low = got_value & 0xffff;
11716 
11717   /* Calculate the address of the PLT header.  */
11718   plt_address = (htab->root.splt->output_section->vma
11719 		 + htab->root.splt->output_offset);
11720 
11721   /* Install the PLT header.  */
11722   loc = htab->root.splt->contents;
11723   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11724   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11725   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11726   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11727   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11728   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11729 
11730   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11731   loc = htab->srelplt2->contents;
11732   rela.r_offset = plt_address;
11733   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11734   rela.r_addend = 0;
11735   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11736   loc += sizeof (Elf32_External_Rela);
11737 
11738   /* Output the relocation for the following addiu of
11739      %lo(_GLOBAL_OFFSET_TABLE_).  */
11740   rela.r_offset += 4;
11741   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11742   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11743   loc += sizeof (Elf32_External_Rela);
11744 
11745   /* Fix up the remaining relocations.  They may have the wrong
11746      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11747      in which symbols were output.  */
11748   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11749     {
11750       Elf_Internal_Rela rel;
11751 
11752       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11753       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11754       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11755       loc += sizeof (Elf32_External_Rela);
11756 
11757       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11758       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11759       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11760       loc += sizeof (Elf32_External_Rela);
11761 
11762       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11763       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11764       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11765       loc += sizeof (Elf32_External_Rela);
11766     }
11767 }
11768 
11769 /* Install the PLT header for a VxWorks shared library.  */
11770 
11771 static void
11772 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11773 {
11774   unsigned int i;
11775   struct mips_elf_link_hash_table *htab;
11776 
11777   htab = mips_elf_hash_table (info);
11778   BFD_ASSERT (htab != NULL);
11779 
11780   /* We just need to copy the entry byte-by-byte.  */
11781   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11782     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11783 		htab->root.splt->contents + i * 4);
11784 }
11785 
11786 /* Finish up the dynamic sections.  */
11787 
11788 bfd_boolean
11789 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11790 				       struct bfd_link_info *info)
11791 {
11792   bfd *dynobj;
11793   asection *sdyn;
11794   asection *sgot;
11795   struct mips_got_info *gg, *g;
11796   struct mips_elf_link_hash_table *htab;
11797 
11798   htab = mips_elf_hash_table (info);
11799   BFD_ASSERT (htab != NULL);
11800 
11801   dynobj = elf_hash_table (info)->dynobj;
11802 
11803   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11804 
11805   sgot = htab->root.sgot;
11806   gg = htab->got_info;
11807 
11808   if (elf_hash_table (info)->dynamic_sections_created)
11809     {
11810       bfd_byte *b;
11811       int dyn_to_skip = 0, dyn_skipped = 0;
11812 
11813       BFD_ASSERT (sdyn != NULL);
11814       BFD_ASSERT (gg != NULL);
11815 
11816       g = mips_elf_bfd_got (output_bfd, FALSE);
11817       BFD_ASSERT (g != NULL);
11818 
11819       for (b = sdyn->contents;
11820 	   b < sdyn->contents + sdyn->size;
11821 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11822 	{
11823 	  Elf_Internal_Dyn dyn;
11824 	  const char *name;
11825 	  size_t elemsize;
11826 	  asection *s;
11827 	  bfd_boolean swap_out_p;
11828 
11829 	  /* Read in the current dynamic entry.  */
11830 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11831 
11832 	  /* Assume that we're going to modify it and write it out.  */
11833 	  swap_out_p = TRUE;
11834 
11835 	  switch (dyn.d_tag)
11836 	    {
11837 	    case DT_RELENT:
11838 	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11839 	      break;
11840 
11841 	    case DT_RELAENT:
11842 	      BFD_ASSERT (htab->is_vxworks);
11843 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11844 	      break;
11845 
11846 	    case DT_STRSZ:
11847 	      /* Rewrite DT_STRSZ.  */
11848 	      dyn.d_un.d_val =
11849 		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11850 	      break;
11851 
11852 	    case DT_PLTGOT:
11853 	      s = htab->root.sgot;
11854 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11855 	      break;
11856 
11857 	    case DT_MIPS_PLTGOT:
11858 	      s = htab->root.sgotplt;
11859 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11860 	      break;
11861 
11862 	    case DT_MIPS_RLD_VERSION:
11863 	      dyn.d_un.d_val = 1; /* XXX */
11864 	      break;
11865 
11866 	    case DT_MIPS_FLAGS:
11867 	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11868 	      break;
11869 
11870 	    case DT_MIPS_TIME_STAMP:
11871 	      {
11872 		time_t t;
11873 		time (&t);
11874 		dyn.d_un.d_val = t;
11875 	      }
11876 	      break;
11877 
11878 	    case DT_MIPS_ICHECKSUM:
11879 	      /* XXX FIXME: */
11880 	      swap_out_p = FALSE;
11881 	      break;
11882 
11883 	    case DT_MIPS_IVERSION:
11884 	      /* XXX FIXME: */
11885 	      swap_out_p = FALSE;
11886 	      break;
11887 
11888 	    case DT_MIPS_BASE_ADDRESS:
11889 	      s = output_bfd->sections;
11890 	      BFD_ASSERT (s != NULL);
11891 	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11892 	      break;
11893 
11894 	    case DT_MIPS_LOCAL_GOTNO:
11895 	      dyn.d_un.d_val = g->local_gotno;
11896 	      break;
11897 
11898 	    case DT_MIPS_UNREFEXTNO:
11899 	      /* The index into the dynamic symbol table which is the
11900 		 entry of the first external symbol that is not
11901 		 referenced within the same object.  */
11902 	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11903 	      break;
11904 
11905 	    case DT_MIPS_GOTSYM:
11906 	      if (htab->global_gotsym)
11907 		{
11908 		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
11909 		  break;
11910 		}
11911 	      /* In case if we don't have global got symbols we default
11912 		 to setting DT_MIPS_GOTSYM to the same value as
11913 		 DT_MIPS_SYMTABNO.  */
11914 	      /* Fall through.  */
11915 
11916 	    case DT_MIPS_SYMTABNO:
11917 	      name = ".dynsym";
11918 	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11919 	      s = bfd_get_linker_section (dynobj, name);
11920 
11921 	      if (s != NULL)
11922 		dyn.d_un.d_val = s->size / elemsize;
11923 	      else
11924 		dyn.d_un.d_val = 0;
11925 	      break;
11926 
11927 	    case DT_MIPS_HIPAGENO:
11928 	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11929 	      break;
11930 
11931 	    case DT_MIPS_RLD_MAP:
11932 	      {
11933 		struct elf_link_hash_entry *h;
11934 		h = mips_elf_hash_table (info)->rld_symbol;
11935 		if (!h)
11936 		  {
11937 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11938 		    swap_out_p = FALSE;
11939 		    break;
11940 		  }
11941 		s = h->root.u.def.section;
11942 
11943 		/* The MIPS_RLD_MAP tag stores the absolute address of the
11944 		   debug pointer.  */
11945 		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11946 				  + h->root.u.def.value);
11947 	      }
11948 	      break;
11949 
11950 	    case DT_MIPS_RLD_MAP_REL:
11951 	      {
11952 		struct elf_link_hash_entry *h;
11953 		bfd_vma dt_addr, rld_addr;
11954 		h = mips_elf_hash_table (info)->rld_symbol;
11955 		if (!h)
11956 		  {
11957 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11958 		    swap_out_p = FALSE;
11959 		    break;
11960 		  }
11961 		s = h->root.u.def.section;
11962 
11963 		/* The MIPS_RLD_MAP_REL tag stores the offset to the debug
11964 		   pointer, relative to the address of the tag.  */
11965 		dt_addr = (sdyn->output_section->vma + sdyn->output_offset
11966 			   + (b - sdyn->contents));
11967 		rld_addr = (s->output_section->vma + s->output_offset
11968 			    + h->root.u.def.value);
11969 		dyn.d_un.d_ptr = rld_addr - dt_addr;
11970 	      }
11971 	      break;
11972 
11973 	    case DT_MIPS_OPTIONS:
11974 	      s = (bfd_get_section_by_name
11975 		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11976 	      dyn.d_un.d_ptr = s->vma;
11977 	      break;
11978 
11979 	    case DT_PLTREL:
11980 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11981 	      if (htab->is_vxworks)
11982 		dyn.d_un.d_val = DT_RELA;
11983 	      else
11984 		dyn.d_un.d_val = DT_REL;
11985 	      break;
11986 
11987 	    case DT_PLTRELSZ:
11988 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11989 	      dyn.d_un.d_val = htab->root.srelplt->size;
11990 	      break;
11991 
11992 	    case DT_JMPREL:
11993 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11994 	      dyn.d_un.d_ptr = (htab->root.srelplt->output_section->vma
11995 				+ htab->root.srelplt->output_offset);
11996 	      break;
11997 
11998 	    case DT_TEXTREL:
11999 	      /* If we didn't need any text relocations after all, delete
12000 		 the dynamic tag.  */
12001 	      if (!(info->flags & DF_TEXTREL))
12002 		{
12003 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
12004 		  swap_out_p = FALSE;
12005 		}
12006 	      break;
12007 
12008 	    case DT_FLAGS:
12009 	      /* If we didn't need any text relocations after all, clear
12010 		 DF_TEXTREL from DT_FLAGS.  */
12011 	      if (!(info->flags & DF_TEXTREL))
12012 		dyn.d_un.d_val &= ~DF_TEXTREL;
12013 	      else
12014 		swap_out_p = FALSE;
12015 	      break;
12016 
12017 	    case DT_MIPS_XHASH:
12018 	      name = ".MIPS.xhash";
12019 	      s = bfd_get_linker_section (dynobj, name);
12020 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
12021 	      break;
12022 
12023 	    default:
12024 	      swap_out_p = FALSE;
12025 	      if (htab->is_vxworks
12026 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
12027 		swap_out_p = TRUE;
12028 	      break;
12029 	    }
12030 
12031 	  if (swap_out_p || dyn_skipped)
12032 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12033 	      (dynobj, &dyn, b - dyn_skipped);
12034 
12035 	  if (dyn_to_skip)
12036 	    {
12037 	      dyn_skipped += dyn_to_skip;
12038 	      dyn_to_skip = 0;
12039 	    }
12040 	}
12041 
12042       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
12043       if (dyn_skipped > 0)
12044 	memset (b - dyn_skipped, 0, dyn_skipped);
12045     }
12046 
12047   if (sgot != NULL && sgot->size > 0
12048       && !bfd_is_abs_section (sgot->output_section))
12049     {
12050       if (htab->is_vxworks)
12051 	{
12052 	  /* The first entry of the global offset table points to the
12053 	     ".dynamic" section.  The second is initialized by the
12054 	     loader and contains the shared library identifier.
12055 	     The third is also initialized by the loader and points
12056 	     to the lazy resolution stub.  */
12057 	  MIPS_ELF_PUT_WORD (output_bfd,
12058 			     sdyn->output_offset + sdyn->output_section->vma,
12059 			     sgot->contents);
12060 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
12061 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12062 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
12063 			     sgot->contents
12064 			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
12065 	}
12066       else
12067 	{
12068 	  /* The first entry of the global offset table will be filled at
12069 	     runtime. The second entry will be used by some runtime loaders.
12070 	     This isn't the case of IRIX rld.  */
12071 	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
12072 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12073 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
12074 	}
12075 
12076       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
12077 	 = MIPS_ELF_GOT_SIZE (output_bfd);
12078     }
12079 
12080   /* Generate dynamic relocations for the non-primary gots.  */
12081   if (gg != NULL && gg->next)
12082     {
12083       Elf_Internal_Rela rel[3];
12084       bfd_vma addend = 0;
12085 
12086       memset (rel, 0, sizeof (rel));
12087       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
12088 
12089       for (g = gg->next; g->next != gg; g = g->next)
12090 	{
12091 	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
12092 	    + g->next->tls_gotno;
12093 
12094 	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
12095 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12096 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
12097 			     sgot->contents
12098 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
12099 
12100 	  if (! bfd_link_pic (info))
12101 	    continue;
12102 
12103 	  for (; got_index < g->local_gotno; got_index++)
12104 	    {
12105 	      if (got_index >= g->assigned_low_gotno
12106 		  && got_index <= g->assigned_high_gotno)
12107 		continue;
12108 
12109 	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
12110 		= got_index * MIPS_ELF_GOT_SIZE (output_bfd);
12111 	      if (!(mips_elf_create_dynamic_relocation
12112 		    (output_bfd, info, rel, NULL,
12113 		     bfd_abs_section_ptr,
12114 		     0, &addend, sgot)))
12115 		return FALSE;
12116 	      BFD_ASSERT (addend == 0);
12117 	    }
12118 	}
12119     }
12120 
12121   /* The generation of dynamic relocations for the non-primary gots
12122      adds more dynamic relocations.  We cannot count them until
12123      here.  */
12124 
12125   if (elf_hash_table (info)->dynamic_sections_created)
12126     {
12127       bfd_byte *b;
12128       bfd_boolean swap_out_p;
12129 
12130       BFD_ASSERT (sdyn != NULL);
12131 
12132       for (b = sdyn->contents;
12133 	   b < sdyn->contents + sdyn->size;
12134 	   b += MIPS_ELF_DYN_SIZE (dynobj))
12135 	{
12136 	  Elf_Internal_Dyn dyn;
12137 	  asection *s;
12138 
12139 	  /* Read in the current dynamic entry.  */
12140 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
12141 
12142 	  /* Assume that we're going to modify it and write it out.  */
12143 	  swap_out_p = TRUE;
12144 
12145 	  switch (dyn.d_tag)
12146 	    {
12147 	    case DT_RELSZ:
12148 	      /* Reduce DT_RELSZ to account for any relocations we
12149 		 decided not to make.  This is for the n64 irix rld,
12150 		 which doesn't seem to apply any relocations if there
12151 		 are trailing null entries.  */
12152 	      s = mips_elf_rel_dyn_section (info, FALSE);
12153 	      dyn.d_un.d_val = (s->reloc_count
12154 				* (ABI_64_P (output_bfd)
12155 				   ? sizeof (Elf64_Mips_External_Rel)
12156 				   : sizeof (Elf32_External_Rel)));
12157 	      /* Adjust the section size too.  Tools like the prelinker
12158 		 can reasonably expect the values to the same.  */
12159 	      BFD_ASSERT (!bfd_is_abs_section (s->output_section));
12160 	      elf_section_data (s->output_section)->this_hdr.sh_size
12161 		= dyn.d_un.d_val;
12162 	      break;
12163 
12164 	    default:
12165 	      swap_out_p = FALSE;
12166 	      break;
12167 	    }
12168 
12169 	  if (swap_out_p)
12170 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
12171 	      (dynobj, &dyn, b);
12172 	}
12173     }
12174 
12175   {
12176     asection *s;
12177     Elf32_compact_rel cpt;
12178 
12179     if (SGI_COMPAT (output_bfd))
12180       {
12181 	/* Write .compact_rel section out.  */
12182 	s = bfd_get_linker_section (dynobj, ".compact_rel");
12183 	if (s != NULL)
12184 	  {
12185 	    cpt.id1 = 1;
12186 	    cpt.num = s->reloc_count;
12187 	    cpt.id2 = 2;
12188 	    cpt.offset = (s->output_section->filepos
12189 			  + sizeof (Elf32_External_compact_rel));
12190 	    cpt.reserved0 = 0;
12191 	    cpt.reserved1 = 0;
12192 	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
12193 					    ((Elf32_External_compact_rel *)
12194 					     s->contents));
12195 
12196 	    /* Clean up a dummy stub function entry in .text.  */
12197 	    if (htab->sstubs != NULL)
12198 	      {
12199 		file_ptr dummy_offset;
12200 
12201 		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
12202 		dummy_offset = htab->sstubs->size - htab->function_stub_size;
12203 		memset (htab->sstubs->contents + dummy_offset, 0,
12204 			htab->function_stub_size);
12205 	      }
12206 	  }
12207       }
12208 
12209     /* The psABI says that the dynamic relocations must be sorted in
12210        increasing order of r_symndx.  The VxWorks EABI doesn't require
12211        this, and because the code below handles REL rather than RELA
12212        relocations, using it for VxWorks would be outright harmful.  */
12213     if (!htab->is_vxworks)
12214       {
12215 	s = mips_elf_rel_dyn_section (info, FALSE);
12216 	if (s != NULL
12217 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
12218 	  {
12219 	    reldyn_sorting_bfd = output_bfd;
12220 
12221 	    if (ABI_64_P (output_bfd))
12222 	      qsort ((Elf64_External_Rel *) s->contents + 1,
12223 		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
12224 		     sort_dynamic_relocs_64);
12225 	    else
12226 	      qsort ((Elf32_External_Rel *) s->contents + 1,
12227 		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
12228 		     sort_dynamic_relocs);
12229 	  }
12230       }
12231   }
12232 
12233   if (htab->root.splt && htab->root.splt->size > 0)
12234     {
12235       if (htab->is_vxworks)
12236 	{
12237 	  if (bfd_link_pic (info))
12238 	    mips_vxworks_finish_shared_plt (output_bfd, info);
12239 	  else
12240 	    mips_vxworks_finish_exec_plt (output_bfd, info);
12241 	}
12242       else
12243 	{
12244 	  BFD_ASSERT (!bfd_link_pic (info));
12245 	  if (!mips_finish_exec_plt (output_bfd, info))
12246 	    return FALSE;
12247 	}
12248     }
12249   return TRUE;
12250 }
12251 
12252 
12253 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
12254 
12255 static void
12256 mips_set_isa_flags (bfd *abfd)
12257 {
12258   flagword val;
12259 
12260   switch (bfd_get_mach (abfd))
12261     {
12262     default:
12263       if (ABI_N32_P (abfd) || ABI_64_P (abfd))
12264         val = E_MIPS_ARCH_3;
12265       else
12266         val = E_MIPS_ARCH_1;
12267       break;
12268 
12269     case bfd_mach_mips3000:
12270       val = E_MIPS_ARCH_1;
12271       break;
12272 
12273     case bfd_mach_mips3900:
12274       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
12275       break;
12276 
12277     case bfd_mach_mips6000:
12278       val = E_MIPS_ARCH_2;
12279       break;
12280 
12281     case bfd_mach_mips4010:
12282       val = E_MIPS_ARCH_2 | E_MIPS_MACH_4010;
12283       break;
12284 
12285     case bfd_mach_mips4000:
12286     case bfd_mach_mips4300:
12287     case bfd_mach_mips4400:
12288     case bfd_mach_mips4600:
12289       val = E_MIPS_ARCH_3;
12290       break;
12291 
12292     case bfd_mach_mips4100:
12293       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
12294       break;
12295 
12296     case bfd_mach_mips4111:
12297       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
12298       break;
12299 
12300     case bfd_mach_mips4120:
12301       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
12302       break;
12303 
12304     case bfd_mach_mips4650:
12305       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
12306       break;
12307 
12308     case bfd_mach_mips5400:
12309       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
12310       break;
12311 
12312     case bfd_mach_mips5500:
12313       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
12314       break;
12315 
12316     case bfd_mach_mips5900:
12317       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
12318       break;
12319 
12320     case bfd_mach_mips9000:
12321       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
12322       break;
12323 
12324     case bfd_mach_mips5000:
12325     case bfd_mach_mips7000:
12326     case bfd_mach_mips8000:
12327     case bfd_mach_mips10000:
12328     case bfd_mach_mips12000:
12329     case bfd_mach_mips14000:
12330     case bfd_mach_mips16000:
12331       val = E_MIPS_ARCH_4;
12332       break;
12333 
12334     case bfd_mach_mips5:
12335       val = E_MIPS_ARCH_5;
12336       break;
12337 
12338     case bfd_mach_mips_loongson_2e:
12339       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
12340       break;
12341 
12342     case bfd_mach_mips_loongson_2f:
12343       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
12344       break;
12345 
12346     case bfd_mach_mips_sb1:
12347       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
12348       break;
12349 
12350     case bfd_mach_mips_gs464:
12351       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464;
12352       break;
12353 
12354     case bfd_mach_mips_gs464e:
12355       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS464E;
12356       break;
12357 
12358     case bfd_mach_mips_gs264e:
12359       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_GS264E;
12360       break;
12361 
12362     case bfd_mach_mips_octeon:
12363     case bfd_mach_mips_octeonp:
12364       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
12365       break;
12366 
12367     case bfd_mach_mips_octeon3:
12368       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
12369       break;
12370 
12371     case bfd_mach_mips_xlr:
12372       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
12373       break;
12374 
12375     case bfd_mach_mips_octeon2:
12376       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
12377       break;
12378 
12379     case bfd_mach_mipsisa32:
12380       val = E_MIPS_ARCH_32;
12381       break;
12382 
12383     case bfd_mach_mipsisa64:
12384       val = E_MIPS_ARCH_64;
12385       break;
12386 
12387     case bfd_mach_mipsisa32r2:
12388     case bfd_mach_mipsisa32r3:
12389     case bfd_mach_mipsisa32r5:
12390       val = E_MIPS_ARCH_32R2;
12391       break;
12392 
12393     case bfd_mach_mips_interaptiv_mr2:
12394       val = E_MIPS_ARCH_32R2 | E_MIPS_MACH_IAMR2;
12395       break;
12396 
12397     case bfd_mach_mipsisa64r2:
12398     case bfd_mach_mipsisa64r3:
12399     case bfd_mach_mipsisa64r5:
12400       val = E_MIPS_ARCH_64R2;
12401       break;
12402 
12403     case bfd_mach_mipsisa32r6:
12404       val = E_MIPS_ARCH_32R6;
12405       break;
12406 
12407     case bfd_mach_mipsisa64r6:
12408       val = E_MIPS_ARCH_64R6;
12409       break;
12410     }
12411   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
12412   elf_elfheader (abfd)->e_flags |= val;
12413 
12414 }
12415 
12416 
12417 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
12418    Don't do so for code sections.  We want to keep ordering of HI16/LO16
12419    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
12420    relocs to be sorted.  */
12421 
12422 bfd_boolean
12423 _bfd_mips_elf_sort_relocs_p (asection *sec)
12424 {
12425   return (sec->flags & SEC_CODE) == 0;
12426 }
12427 
12428 
12429 /* The final processing done just before writing out a MIPS ELF object
12430    file.  This gets the MIPS architecture right based on the machine
12431    number.  This is used by both the 32-bit and the 64-bit ABI.  */
12432 
12433 void
12434 _bfd_mips_final_write_processing (bfd *abfd)
12435 {
12436   unsigned int i;
12437   Elf_Internal_Shdr **hdrpp;
12438   const char *name;
12439   asection *sec;
12440 
12441   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
12442      is nonzero.  This is for compatibility with old objects, which used
12443      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
12444   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
12445     mips_set_isa_flags (abfd);
12446 
12447   /* Set the sh_info field for .gptab sections and other appropriate
12448      info for each special section.  */
12449   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
12450        i < elf_numsections (abfd);
12451        i++, hdrpp++)
12452     {
12453       switch ((*hdrpp)->sh_type)
12454 	{
12455 	case SHT_MIPS_MSYM:
12456 	case SHT_MIPS_LIBLIST:
12457 	  sec = bfd_get_section_by_name (abfd, ".dynstr");
12458 	  if (sec != NULL)
12459 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12460 	  break;
12461 
12462 	case SHT_MIPS_GPTAB:
12463 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12464 	  name = bfd_section_name ((*hdrpp)->bfd_section);
12465 	  BFD_ASSERT (name != NULL
12466 		      && CONST_STRNEQ (name, ".gptab."));
12467 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
12468 	  BFD_ASSERT (sec != NULL);
12469 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12470 	  break;
12471 
12472 	case SHT_MIPS_CONTENT:
12473 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12474 	  name = bfd_section_name ((*hdrpp)->bfd_section);
12475 	  BFD_ASSERT (name != NULL
12476 		      && CONST_STRNEQ (name, ".MIPS.content"));
12477 	  sec = bfd_get_section_by_name (abfd,
12478 					 name + sizeof ".MIPS.content" - 1);
12479 	  BFD_ASSERT (sec != NULL);
12480 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12481 	  break;
12482 
12483 	case SHT_MIPS_SYMBOL_LIB:
12484 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
12485 	  if (sec != NULL)
12486 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12487 	  sec = bfd_get_section_by_name (abfd, ".liblist");
12488 	  if (sec != NULL)
12489 	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
12490 	  break;
12491 
12492 	case SHT_MIPS_EVENTS:
12493 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
12494 	  name = bfd_section_name ((*hdrpp)->bfd_section);
12495 	  BFD_ASSERT (name != NULL);
12496 	  if (CONST_STRNEQ (name, ".MIPS.events"))
12497 	    sec = bfd_get_section_by_name (abfd,
12498 					   name + sizeof ".MIPS.events" - 1);
12499 	  else
12500 	    {
12501 	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12502 	      sec = bfd_get_section_by_name (abfd,
12503 					     (name
12504 					      + sizeof ".MIPS.post_rel" - 1));
12505 	    }
12506 	  BFD_ASSERT (sec != NULL);
12507 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12508 	  break;
12509 
12510 	case SHT_MIPS_XHASH:
12511 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
12512 	  if (sec != NULL)
12513 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12514 	}
12515     }
12516 }
12517 
12518 bfd_boolean
12519 _bfd_mips_elf_final_write_processing (bfd *abfd)
12520 {
12521   _bfd_mips_final_write_processing (abfd);
12522   return _bfd_elf_final_write_processing (abfd);
12523 }
12524 
12525 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12526    segments.  */
12527 
12528 int
12529 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12530 					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
12531 {
12532   asection *s;
12533   int ret = 0;
12534 
12535   /* See if we need a PT_MIPS_REGINFO segment.  */
12536   s = bfd_get_section_by_name (abfd, ".reginfo");
12537   if (s && (s->flags & SEC_LOAD))
12538     ++ret;
12539 
12540   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12541   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12542     ++ret;
12543 
12544   /* See if we need a PT_MIPS_OPTIONS segment.  */
12545   if (IRIX_COMPAT (abfd) == ict_irix6
12546       && bfd_get_section_by_name (abfd,
12547 				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12548     ++ret;
12549 
12550   /* See if we need a PT_MIPS_RTPROC segment.  */
12551   if (IRIX_COMPAT (abfd) == ict_irix5
12552       && bfd_get_section_by_name (abfd, ".dynamic")
12553       && bfd_get_section_by_name (abfd, ".mdebug"))
12554     ++ret;
12555 
12556   /* Allocate a PT_NULL header in dynamic objects.  See
12557      _bfd_mips_elf_modify_segment_map for details.  */
12558   if (!SGI_COMPAT (abfd)
12559       && bfd_get_section_by_name (abfd, ".dynamic"))
12560     ++ret;
12561 
12562   return ret;
12563 }
12564 
12565 /* Modify the segment map for an IRIX5 executable.  */
12566 
12567 bfd_boolean
12568 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12569 				  struct bfd_link_info *info)
12570 {
12571   asection *s;
12572   struct elf_segment_map *m, **pm;
12573   bfd_size_type amt;
12574 
12575   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12576      segment.  */
12577   s = bfd_get_section_by_name (abfd, ".reginfo");
12578   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12579     {
12580       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12581 	if (m->p_type == PT_MIPS_REGINFO)
12582 	  break;
12583       if (m == NULL)
12584 	{
12585 	  amt = sizeof *m;
12586 	  m = bfd_zalloc (abfd, amt);
12587 	  if (m == NULL)
12588 	    return FALSE;
12589 
12590 	  m->p_type = PT_MIPS_REGINFO;
12591 	  m->count = 1;
12592 	  m->sections[0] = s;
12593 
12594 	  /* We want to put it after the PHDR and INTERP segments.  */
12595 	  pm = &elf_seg_map (abfd);
12596 	  while (*pm != NULL
12597 		 && ((*pm)->p_type == PT_PHDR
12598 		     || (*pm)->p_type == PT_INTERP))
12599 	    pm = &(*pm)->next;
12600 
12601 	  m->next = *pm;
12602 	  *pm = m;
12603 	}
12604     }
12605 
12606   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12607      segment.  */
12608   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12609   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12610     {
12611       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12612 	if (m->p_type == PT_MIPS_ABIFLAGS)
12613 	  break;
12614       if (m == NULL)
12615 	{
12616 	  amt = sizeof *m;
12617 	  m = bfd_zalloc (abfd, amt);
12618 	  if (m == NULL)
12619 	    return FALSE;
12620 
12621 	  m->p_type = PT_MIPS_ABIFLAGS;
12622 	  m->count = 1;
12623 	  m->sections[0] = s;
12624 
12625 	  /* We want to put it after the PHDR and INTERP segments.  */
12626 	  pm = &elf_seg_map (abfd);
12627 	  while (*pm != NULL
12628 		 && ((*pm)->p_type == PT_PHDR
12629 		     || (*pm)->p_type == PT_INTERP))
12630 	    pm = &(*pm)->next;
12631 
12632 	  m->next = *pm;
12633 	  *pm = m;
12634 	}
12635     }
12636 
12637   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12638      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12639      PT_MIPS_OPTIONS segment immediately following the program header
12640      table.  */
12641   if (NEWABI_P (abfd)
12642       /* On non-IRIX6 new abi, we'll have already created a segment
12643 	 for this section, so don't create another.  I'm not sure this
12644 	 is not also the case for IRIX 6, but I can't test it right
12645 	 now.  */
12646       && IRIX_COMPAT (abfd) == ict_irix6)
12647     {
12648       for (s = abfd->sections; s; s = s->next)
12649 	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12650 	  break;
12651 
12652       if (s)
12653 	{
12654 	  struct elf_segment_map *options_segment;
12655 
12656 	  pm = &elf_seg_map (abfd);
12657 	  while (*pm != NULL
12658 		 && ((*pm)->p_type == PT_PHDR
12659 		     || (*pm)->p_type == PT_INTERP))
12660 	    pm = &(*pm)->next;
12661 
12662 	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12663 	    {
12664 	      amt = sizeof (struct elf_segment_map);
12665 	      options_segment = bfd_zalloc (abfd, amt);
12666 	      options_segment->next = *pm;
12667 	      options_segment->p_type = PT_MIPS_OPTIONS;
12668 	      options_segment->p_flags = PF_R;
12669 	      options_segment->p_flags_valid = TRUE;
12670 	      options_segment->count = 1;
12671 	      options_segment->sections[0] = s;
12672 	      *pm = options_segment;
12673 	    }
12674 	}
12675     }
12676   else
12677     {
12678       if (IRIX_COMPAT (abfd) == ict_irix5)
12679 	{
12680 	  /* If there are .dynamic and .mdebug sections, we make a room
12681 	     for the RTPROC header.  FIXME: Rewrite without section names.  */
12682 	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
12683 	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12684 	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12685 	    {
12686 	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12687 		if (m->p_type == PT_MIPS_RTPROC)
12688 		  break;
12689 	      if (m == NULL)
12690 		{
12691 		  amt = sizeof *m;
12692 		  m = bfd_zalloc (abfd, amt);
12693 		  if (m == NULL)
12694 		    return FALSE;
12695 
12696 		  m->p_type = PT_MIPS_RTPROC;
12697 
12698 		  s = bfd_get_section_by_name (abfd, ".rtproc");
12699 		  if (s == NULL)
12700 		    {
12701 		      m->count = 0;
12702 		      m->p_flags = 0;
12703 		      m->p_flags_valid = 1;
12704 		    }
12705 		  else
12706 		    {
12707 		      m->count = 1;
12708 		      m->sections[0] = s;
12709 		    }
12710 
12711 		  /* We want to put it after the DYNAMIC segment.  */
12712 		  pm = &elf_seg_map (abfd);
12713 		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12714 		    pm = &(*pm)->next;
12715 		  if (*pm != NULL)
12716 		    pm = &(*pm)->next;
12717 
12718 		  m->next = *pm;
12719 		  *pm = m;
12720 		}
12721 	    }
12722 	}
12723       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12724 	 .dynstr, .dynsym, and .hash sections, and everything in
12725 	 between.  */
12726       for (pm = &elf_seg_map (abfd); *pm != NULL;
12727 	   pm = &(*pm)->next)
12728 	if ((*pm)->p_type == PT_DYNAMIC)
12729 	  break;
12730       m = *pm;
12731       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12732 	 glibc's dynamic linker has traditionally derived the number of
12733 	 tags from the p_filesz field, and sometimes allocates stack
12734 	 arrays of that size.  An overly-big PT_DYNAMIC segment can
12735 	 be actively harmful in such cases.  Making PT_DYNAMIC contain
12736 	 other sections can also make life hard for the prelinker,
12737 	 which might move one of the other sections to a different
12738 	 PT_LOAD segment.  */
12739       if (SGI_COMPAT (abfd)
12740 	  && m != NULL
12741 	  && m->count == 1
12742 	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
12743 	{
12744 	  static const char *sec_names[] =
12745 	  {
12746 	    ".dynamic", ".dynstr", ".dynsym", ".hash"
12747 	  };
12748 	  bfd_vma low, high;
12749 	  unsigned int i, c;
12750 	  struct elf_segment_map *n;
12751 
12752 	  low = ~(bfd_vma) 0;
12753 	  high = 0;
12754 	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12755 	    {
12756 	      s = bfd_get_section_by_name (abfd, sec_names[i]);
12757 	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
12758 		{
12759 		  bfd_size_type sz;
12760 
12761 		  if (low > s->vma)
12762 		    low = s->vma;
12763 		  sz = s->size;
12764 		  if (high < s->vma + sz)
12765 		    high = s->vma + sz;
12766 		}
12767 	    }
12768 
12769 	  c = 0;
12770 	  for (s = abfd->sections; s != NULL; s = s->next)
12771 	    if ((s->flags & SEC_LOAD) != 0
12772 		&& s->vma >= low
12773 		&& s->vma + s->size <= high)
12774 	      ++c;
12775 
12776 	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12777 	  n = bfd_zalloc (abfd, amt);
12778 	  if (n == NULL)
12779 	    return FALSE;
12780 	  *n = *m;
12781 	  n->count = c;
12782 
12783 	  i = 0;
12784 	  for (s = abfd->sections; s != NULL; s = s->next)
12785 	    {
12786 	      if ((s->flags & SEC_LOAD) != 0
12787 		  && s->vma >= low
12788 		  && s->vma + s->size <= high)
12789 		{
12790 		  n->sections[i] = s;
12791 		  ++i;
12792 		}
12793 	    }
12794 
12795 	  *pm = n;
12796 	}
12797     }
12798 
12799   /* Allocate a spare program header in dynamic objects so that tools
12800      like the prelinker can add an extra PT_LOAD entry.
12801 
12802      If the prelinker needs to make room for a new PT_LOAD entry, its
12803      standard procedure is to move the first (read-only) sections into
12804      the new (writable) segment.  However, the MIPS ABI requires
12805      .dynamic to be in a read-only segment, and the section will often
12806      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12807 
12808      Although the prelinker could in principle move .dynamic to a
12809      writable segment, it seems better to allocate a spare program
12810      header instead, and avoid the need to move any sections.
12811      There is a long tradition of allocating spare dynamic tags,
12812      so allocating a spare program header seems like a natural
12813      extension.
12814 
12815      If INFO is NULL, we may be copying an already prelinked binary
12816      with objcopy or strip, so do not add this header.  */
12817   if (info != NULL
12818       && !SGI_COMPAT (abfd)
12819       && bfd_get_section_by_name (abfd, ".dynamic"))
12820     {
12821       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12822 	if ((*pm)->p_type == PT_NULL)
12823 	  break;
12824       if (*pm == NULL)
12825 	{
12826 	  m = bfd_zalloc (abfd, sizeof (*m));
12827 	  if (m == NULL)
12828 	    return FALSE;
12829 
12830 	  m->p_type = PT_NULL;
12831 	  *pm = m;
12832 	}
12833     }
12834 
12835   return TRUE;
12836 }
12837 
12838 /* Return the section that should be marked against GC for a given
12839    relocation.  */
12840 
12841 asection *
12842 _bfd_mips_elf_gc_mark_hook (asection *sec,
12843 			    struct bfd_link_info *info,
12844 			    Elf_Internal_Rela *rel,
12845 			    struct elf_link_hash_entry *h,
12846 			    Elf_Internal_Sym *sym)
12847 {
12848   /* ??? Do mips16 stub sections need to be handled special?  */
12849 
12850   if (h != NULL)
12851     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12852       {
12853       case R_MIPS_GNU_VTINHERIT:
12854       case R_MIPS_GNU_VTENTRY:
12855 	return NULL;
12856       }
12857 
12858   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12859 }
12860 
12861 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12862 
12863 bfd_boolean
12864 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12865 				      elf_gc_mark_hook_fn gc_mark_hook)
12866 {
12867   bfd *sub;
12868 
12869   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12870 
12871   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12872     {
12873       asection *o;
12874 
12875       if (! is_mips_elf (sub))
12876 	continue;
12877 
12878       for (o = sub->sections; o != NULL; o = o->next)
12879 	if (!o->gc_mark
12880 	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P (bfd_section_name (o)))
12881 	  {
12882 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12883 	      return FALSE;
12884 	  }
12885     }
12886 
12887   return TRUE;
12888 }
12889 
12890 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12891    hiding the old indirect symbol.  Process additional relocation
12892    information.  Also called for weakdefs, in which case we just let
12893    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12894 
12895 void
12896 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12897 				    struct elf_link_hash_entry *dir,
12898 				    struct elf_link_hash_entry *ind)
12899 {
12900   struct mips_elf_link_hash_entry *dirmips, *indmips;
12901 
12902   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12903 
12904   dirmips = (struct mips_elf_link_hash_entry *) dir;
12905   indmips = (struct mips_elf_link_hash_entry *) ind;
12906   /* Any absolute non-dynamic relocations against an indirect or weak
12907      definition will be against the target symbol.  */
12908   if (indmips->has_static_relocs)
12909     dirmips->has_static_relocs = TRUE;
12910 
12911   if (ind->root.type != bfd_link_hash_indirect)
12912     return;
12913 
12914   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12915   if (indmips->readonly_reloc)
12916     dirmips->readonly_reloc = TRUE;
12917   if (indmips->no_fn_stub)
12918     dirmips->no_fn_stub = TRUE;
12919   if (indmips->fn_stub)
12920     {
12921       dirmips->fn_stub = indmips->fn_stub;
12922       indmips->fn_stub = NULL;
12923     }
12924   if (indmips->need_fn_stub)
12925     {
12926       dirmips->need_fn_stub = TRUE;
12927       indmips->need_fn_stub = FALSE;
12928     }
12929   if (indmips->call_stub)
12930     {
12931       dirmips->call_stub = indmips->call_stub;
12932       indmips->call_stub = NULL;
12933     }
12934   if (indmips->call_fp_stub)
12935     {
12936       dirmips->call_fp_stub = indmips->call_fp_stub;
12937       indmips->call_fp_stub = NULL;
12938     }
12939   if (indmips->global_got_area < dirmips->global_got_area)
12940     dirmips->global_got_area = indmips->global_got_area;
12941   if (indmips->global_got_area < GGA_NONE)
12942     indmips->global_got_area = GGA_NONE;
12943   if (indmips->has_nonpic_branches)
12944     dirmips->has_nonpic_branches = TRUE;
12945 }
12946 
12947 /* Take care of the special `__gnu_absolute_zero' symbol and ignore attempts
12948    to hide it.  It has to remain global (it will also be protected) so as to
12949    be assigned a global GOT entry, which will then remain unchanged at load
12950    time.  */
12951 
12952 void
12953 _bfd_mips_elf_hide_symbol (struct bfd_link_info *info,
12954 			   struct elf_link_hash_entry *entry,
12955 			   bfd_boolean force_local)
12956 {
12957   struct mips_elf_link_hash_table *htab;
12958 
12959   htab = mips_elf_hash_table (info);
12960   BFD_ASSERT (htab != NULL);
12961   if (htab->use_absolute_zero
12962       && strcmp (entry->root.root.string, "__gnu_absolute_zero") == 0)
12963     return;
12964 
12965   _bfd_elf_link_hash_hide_symbol (info, entry, force_local);
12966 }
12967 
12968 #define PDR_SIZE 32
12969 
12970 bfd_boolean
12971 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12972 			    struct bfd_link_info *info)
12973 {
12974   asection *o;
12975   bfd_boolean ret = FALSE;
12976   unsigned char *tdata;
12977   size_t i, skip;
12978 
12979   o = bfd_get_section_by_name (abfd, ".pdr");
12980   if (! o)
12981     return FALSE;
12982   if (o->size == 0)
12983     return FALSE;
12984   if (o->size % PDR_SIZE != 0)
12985     return FALSE;
12986   if (o->output_section != NULL
12987       && bfd_is_abs_section (o->output_section))
12988     return FALSE;
12989 
12990   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12991   if (! tdata)
12992     return FALSE;
12993 
12994   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12995 					    info->keep_memory);
12996   if (!cookie->rels)
12997     {
12998       free (tdata);
12999       return FALSE;
13000     }
13001 
13002   cookie->rel = cookie->rels;
13003   cookie->relend = cookie->rels + o->reloc_count;
13004 
13005   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
13006     {
13007       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
13008 	{
13009 	  tdata[i] = 1;
13010 	  skip ++;
13011 	}
13012     }
13013 
13014   if (skip != 0)
13015     {
13016       mips_elf_section_data (o)->u.tdata = tdata;
13017       if (o->rawsize == 0)
13018 	o->rawsize = o->size;
13019       o->size -= skip * PDR_SIZE;
13020       ret = TRUE;
13021     }
13022   else
13023     free (tdata);
13024 
13025   if (! info->keep_memory)
13026     free (cookie->rels);
13027 
13028   return ret;
13029 }
13030 
13031 bfd_boolean
13032 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
13033 {
13034   if (strcmp (sec->name, ".pdr") == 0)
13035     return TRUE;
13036   return FALSE;
13037 }
13038 
13039 bfd_boolean
13040 _bfd_mips_elf_write_section (bfd *output_bfd,
13041 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
13042 			     asection *sec, bfd_byte *contents)
13043 {
13044   bfd_byte *to, *from, *end;
13045   int i;
13046 
13047   if (strcmp (sec->name, ".pdr") != 0)
13048     return FALSE;
13049 
13050   if (mips_elf_section_data (sec)->u.tdata == NULL)
13051     return FALSE;
13052 
13053   to = contents;
13054   end = contents + sec->size;
13055   for (from = contents, i = 0;
13056        from < end;
13057        from += PDR_SIZE, i++)
13058     {
13059       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
13060 	continue;
13061       if (to != from)
13062 	memcpy (to, from, PDR_SIZE);
13063       to += PDR_SIZE;
13064     }
13065   bfd_set_section_contents (output_bfd, sec->output_section, contents,
13066 			    sec->output_offset, sec->size);
13067   return TRUE;
13068 }
13069 
13070 /* microMIPS code retains local labels for linker relaxation.  Omit them
13071    from output by default for clarity.  */
13072 
13073 bfd_boolean
13074 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
13075 {
13076   return _bfd_elf_is_local_label_name (abfd, sym->name);
13077 }
13078 
13079 /* MIPS ELF uses a special find_nearest_line routine in order the
13080    handle the ECOFF debugging information.  */
13081 
13082 struct mips_elf_find_line
13083 {
13084   struct ecoff_debug_info d;
13085   struct ecoff_find_line i;
13086 };
13087 
13088 bfd_boolean
13089 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
13090 				 asection *section, bfd_vma offset,
13091 				 const char **filename_ptr,
13092 				 const char **functionname_ptr,
13093 				 unsigned int *line_ptr,
13094 				 unsigned int *discriminator_ptr)
13095 {
13096   asection *msec;
13097 
13098   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
13099 				     filename_ptr, functionname_ptr,
13100 				     line_ptr, discriminator_ptr,
13101 				     dwarf_debug_sections,
13102 				     &elf_tdata (abfd)->dwarf2_find_line_info)
13103       == 1)
13104     return TRUE;
13105 
13106   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
13107 				     filename_ptr, functionname_ptr,
13108 				     line_ptr))
13109     {
13110       if (!*functionname_ptr)
13111 	_bfd_elf_find_function (abfd, symbols, section, offset,
13112 				*filename_ptr ? NULL : filename_ptr,
13113 				functionname_ptr);
13114       return TRUE;
13115     }
13116 
13117   msec = bfd_get_section_by_name (abfd, ".mdebug");
13118   if (msec != NULL)
13119     {
13120       flagword origflags;
13121       struct mips_elf_find_line *fi;
13122       const struct ecoff_debug_swap * const swap =
13123 	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
13124 
13125       /* If we are called during a link, mips_elf_final_link may have
13126 	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
13127 	 if appropriate (which it normally will be).  */
13128       origflags = msec->flags;
13129       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
13130 	msec->flags |= SEC_HAS_CONTENTS;
13131 
13132       fi = mips_elf_tdata (abfd)->find_line_info;
13133       if (fi == NULL)
13134 	{
13135 	  bfd_size_type external_fdr_size;
13136 	  char *fraw_src;
13137 	  char *fraw_end;
13138 	  struct fdr *fdr_ptr;
13139 	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
13140 
13141 	  fi = bfd_zalloc (abfd, amt);
13142 	  if (fi == NULL)
13143 	    {
13144 	      msec->flags = origflags;
13145 	      return FALSE;
13146 	    }
13147 
13148 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
13149 	    {
13150 	      msec->flags = origflags;
13151 	      return FALSE;
13152 	    }
13153 
13154 	  /* Swap in the FDR information.  */
13155 	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
13156 	  fi->d.fdr = bfd_alloc (abfd, amt);
13157 	  if (fi->d.fdr == NULL)
13158 	    {
13159 	      msec->flags = origflags;
13160 	      return FALSE;
13161 	    }
13162 	  external_fdr_size = swap->external_fdr_size;
13163 	  fdr_ptr = fi->d.fdr;
13164 	  fraw_src = (char *) fi->d.external_fdr;
13165 	  fraw_end = (fraw_src
13166 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
13167 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
13168 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
13169 
13170 	  mips_elf_tdata (abfd)->find_line_info = fi;
13171 
13172 	  /* Note that we don't bother to ever free this information.
13173 	     find_nearest_line is either called all the time, as in
13174 	     objdump -l, so the information should be saved, or it is
13175 	     rarely called, as in ld error messages, so the memory
13176 	     wasted is unimportant.  Still, it would probably be a
13177 	     good idea for free_cached_info to throw it away.  */
13178 	}
13179 
13180       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
13181 				  &fi->i, filename_ptr, functionname_ptr,
13182 				  line_ptr))
13183 	{
13184 	  msec->flags = origflags;
13185 	  return TRUE;
13186 	}
13187 
13188       msec->flags = origflags;
13189     }
13190 
13191   /* Fall back on the generic ELF find_nearest_line routine.  */
13192 
13193   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
13194 				     filename_ptr, functionname_ptr,
13195 				     line_ptr, discriminator_ptr);
13196 }
13197 
13198 bfd_boolean
13199 _bfd_mips_elf_find_inliner_info (bfd *abfd,
13200 				 const char **filename_ptr,
13201 				 const char **functionname_ptr,
13202 				 unsigned int *line_ptr)
13203 {
13204   bfd_boolean found;
13205   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
13206 					 functionname_ptr, line_ptr,
13207 					 & elf_tdata (abfd)->dwarf2_find_line_info);
13208   return found;
13209 }
13210 
13211 
13212 /* When are writing out the .options or .MIPS.options section,
13213    remember the bytes we are writing out, so that we can install the
13214    GP value in the section_processing routine.  */
13215 
13216 bfd_boolean
13217 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
13218 				    const void *location,
13219 				    file_ptr offset, bfd_size_type count)
13220 {
13221   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
13222     {
13223       bfd_byte *c;
13224 
13225       if (elf_section_data (section) == NULL)
13226 	{
13227 	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
13228 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
13229 	  if (elf_section_data (section) == NULL)
13230 	    return FALSE;
13231 	}
13232       c = mips_elf_section_data (section)->u.tdata;
13233       if (c == NULL)
13234 	{
13235 	  c = bfd_zalloc (abfd, section->size);
13236 	  if (c == NULL)
13237 	    return FALSE;
13238 	  mips_elf_section_data (section)->u.tdata = c;
13239 	}
13240 
13241       memcpy (c + offset, location, count);
13242     }
13243 
13244   return _bfd_elf_set_section_contents (abfd, section, location, offset,
13245 					count);
13246 }
13247 
13248 /* This is almost identical to bfd_generic_get_... except that some
13249    MIPS relocations need to be handled specially.  Sigh.  */
13250 
13251 bfd_byte *
13252 _bfd_elf_mips_get_relocated_section_contents
13253   (bfd *abfd,
13254    struct bfd_link_info *link_info,
13255    struct bfd_link_order *link_order,
13256    bfd_byte *data,
13257    bfd_boolean relocatable,
13258    asymbol **symbols)
13259 {
13260   /* Get enough memory to hold the stuff */
13261   bfd *input_bfd = link_order->u.indirect.section->owner;
13262   asection *input_section = link_order->u.indirect.section;
13263   bfd_size_type sz;
13264 
13265   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
13266   arelent **reloc_vector = NULL;
13267   long reloc_count;
13268 
13269   if (reloc_size < 0)
13270     goto error_return;
13271 
13272   reloc_vector = bfd_malloc (reloc_size);
13273   if (reloc_vector == NULL && reloc_size != 0)
13274     goto error_return;
13275 
13276   /* read in the section */
13277   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
13278   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
13279     goto error_return;
13280 
13281   reloc_count = bfd_canonicalize_reloc (input_bfd,
13282 					input_section,
13283 					reloc_vector,
13284 					symbols);
13285   if (reloc_count < 0)
13286     goto error_return;
13287 
13288   if (reloc_count > 0)
13289     {
13290       arelent **parent;
13291       /* for mips */
13292       int gp_found;
13293       bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
13294 
13295       {
13296 	struct bfd_hash_entry *h;
13297 	struct bfd_link_hash_entry *lh;
13298 	/* Skip all this stuff if we aren't mixing formats.  */
13299 	if (abfd && input_bfd
13300 	    && abfd->xvec == input_bfd->xvec)
13301 	  lh = 0;
13302 	else
13303 	  {
13304 	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
13305 	    lh = (struct bfd_link_hash_entry *) h;
13306 	  }
13307       lookup:
13308 	if (lh)
13309 	  {
13310 	    switch (lh->type)
13311 	      {
13312 	      case bfd_link_hash_undefined:
13313 	      case bfd_link_hash_undefweak:
13314 	      case bfd_link_hash_common:
13315 		gp_found = 0;
13316 		break;
13317 	      case bfd_link_hash_defined:
13318 	      case bfd_link_hash_defweak:
13319 		gp_found = 1;
13320 		gp = lh->u.def.value;
13321 		break;
13322 	      case bfd_link_hash_indirect:
13323 	      case bfd_link_hash_warning:
13324 		lh = lh->u.i.link;
13325 		/* @@FIXME  ignoring warning for now */
13326 		goto lookup;
13327 	      case bfd_link_hash_new:
13328 	      default:
13329 		abort ();
13330 	      }
13331 	  }
13332 	else
13333 	  gp_found = 0;
13334       }
13335       /* end mips */
13336       for (parent = reloc_vector; *parent != NULL; parent++)
13337 	{
13338 	  char *error_message = NULL;
13339 	  bfd_reloc_status_type r;
13340 
13341 	  /* Specific to MIPS: Deal with relocation types that require
13342 	     knowing the gp of the output bfd.  */
13343 	  asymbol *sym = *(*parent)->sym_ptr_ptr;
13344 
13345 	  /* If we've managed to find the gp and have a special
13346 	     function for the relocation then go ahead, else default
13347 	     to the generic handling.  */
13348 	  if (gp_found
13349 	      && (*parent)->howto->special_function
13350 	      == _bfd_mips_elf32_gprel16_reloc)
13351 	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
13352 					       input_section, relocatable,
13353 					       data, gp);
13354 	  else
13355 	    r = bfd_perform_relocation (input_bfd, *parent, data,
13356 					input_section,
13357 					relocatable ? abfd : NULL,
13358 					&error_message);
13359 
13360 	  if (relocatable)
13361 	    {
13362 	      asection *os = input_section->output_section;
13363 
13364 	      /* A partial link, so keep the relocs */
13365 	      os->orelocation[os->reloc_count] = *parent;
13366 	      os->reloc_count++;
13367 	    }
13368 
13369 	  if (r != bfd_reloc_ok)
13370 	    {
13371 	      switch (r)
13372 		{
13373 		case bfd_reloc_undefined:
13374 		  (*link_info->callbacks->undefined_symbol)
13375 		    (link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13376 		     input_bfd, input_section, (*parent)->address, TRUE);
13377 		  break;
13378 		case bfd_reloc_dangerous:
13379 		  BFD_ASSERT (error_message != NULL);
13380 		  (*link_info->callbacks->reloc_dangerous)
13381 		    (link_info, error_message,
13382 		     input_bfd, input_section, (*parent)->address);
13383 		  break;
13384 		case bfd_reloc_overflow:
13385 		  (*link_info->callbacks->reloc_overflow)
13386 		    (link_info, NULL,
13387 		     bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
13388 		     (*parent)->howto->name, (*parent)->addend,
13389 		     input_bfd, input_section, (*parent)->address);
13390 		  break;
13391 		case bfd_reloc_outofrange:
13392 		default:
13393 		  abort ();
13394 		  break;
13395 		}
13396 
13397 	    }
13398 	}
13399     }
13400   if (reloc_vector != NULL)
13401     free (reloc_vector);
13402   return data;
13403 
13404 error_return:
13405   if (reloc_vector != NULL)
13406     free (reloc_vector);
13407   return NULL;
13408 }
13409 
13410 static bfd_boolean
13411 mips_elf_relax_delete_bytes (bfd *abfd,
13412 			     asection *sec, bfd_vma addr, int count)
13413 {
13414   Elf_Internal_Shdr *symtab_hdr;
13415   unsigned int sec_shndx;
13416   bfd_byte *contents;
13417   Elf_Internal_Rela *irel, *irelend;
13418   Elf_Internal_Sym *isym;
13419   Elf_Internal_Sym *isymend;
13420   struct elf_link_hash_entry **sym_hashes;
13421   struct elf_link_hash_entry **end_hashes;
13422   struct elf_link_hash_entry **start_hashes;
13423   unsigned int symcount;
13424 
13425   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
13426   contents = elf_section_data (sec)->this_hdr.contents;
13427 
13428   irel = elf_section_data (sec)->relocs;
13429   irelend = irel + sec->reloc_count;
13430 
13431   /* Actually delete the bytes.  */
13432   memmove (contents + addr, contents + addr + count,
13433 	   (size_t) (sec->size - addr - count));
13434   sec->size -= count;
13435 
13436   /* Adjust all the relocs.  */
13437   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
13438     {
13439       /* Get the new reloc address.  */
13440       if (irel->r_offset > addr)
13441 	irel->r_offset -= count;
13442     }
13443 
13444   BFD_ASSERT (addr % 2 == 0);
13445   BFD_ASSERT (count % 2 == 0);
13446 
13447   /* Adjust the local symbols defined in this section.  */
13448   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13449   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
13450   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
13451     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
13452       isym->st_value -= count;
13453 
13454   /* Now adjust the global symbols defined in this section.  */
13455   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
13456 	      - symtab_hdr->sh_info);
13457   sym_hashes = start_hashes = elf_sym_hashes (abfd);
13458   end_hashes = sym_hashes + symcount;
13459 
13460   for (; sym_hashes < end_hashes; sym_hashes++)
13461     {
13462       struct elf_link_hash_entry *sym_hash = *sym_hashes;
13463 
13464       if ((sym_hash->root.type == bfd_link_hash_defined
13465 	   || sym_hash->root.type == bfd_link_hash_defweak)
13466 	  && sym_hash->root.u.def.section == sec)
13467 	{
13468 	  bfd_vma value = sym_hash->root.u.def.value;
13469 
13470 	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
13471 	    value &= MINUS_TWO;
13472 	  if (value > addr)
13473 	    sym_hash->root.u.def.value -= count;
13474 	}
13475     }
13476 
13477   return TRUE;
13478 }
13479 
13480 
13481 /* Opcodes needed for microMIPS relaxation as found in
13482    opcodes/micromips-opc.c.  */
13483 
13484 struct opcode_descriptor {
13485   unsigned long match;
13486   unsigned long mask;
13487 };
13488 
13489 /* The $ra register aka $31.  */
13490 
13491 #define RA 31
13492 
13493 /* 32-bit instruction format register fields.  */
13494 
13495 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13496 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13497 
13498 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13499 
13500 #define OP16_VALID_REG(r) \
13501   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13502 
13503 
13504 /* 32-bit and 16-bit branches.  */
13505 
13506 static const struct opcode_descriptor b_insns_32[] = {
13507   { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
13508   { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13509   { 0, 0 }  /* End marker for find_match().  */
13510 };
13511 
13512 static const struct opcode_descriptor bc_insn_32 =
13513   { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
13514 
13515 static const struct opcode_descriptor bz_insn_32 =
13516   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
13517 
13518 static const struct opcode_descriptor bzal_insn_32 =
13519   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
13520 
13521 static const struct opcode_descriptor beq_insn_32 =
13522   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
13523 
13524 static const struct opcode_descriptor b_insn_16 =
13525   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
13526 
13527 static const struct opcode_descriptor bz_insn_16 =
13528   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
13529 
13530 
13531 /* 32-bit and 16-bit branch EQ and NE zero.  */
13532 
13533 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13534    eq and second the ne.  This convention is used when replacing a
13535    32-bit BEQ/BNE with the 16-bit version.  */
13536 
13537 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13538 
13539 static const struct opcode_descriptor bz_rs_insns_32[] = {
13540   { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
13541   { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
13542   { 0, 0 }  /* End marker for find_match().  */
13543 };
13544 
13545 static const struct opcode_descriptor bz_rt_insns_32[] = {
13546   { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
13547   { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
13548   { 0, 0 }  /* End marker for find_match().  */
13549 };
13550 
13551 static const struct opcode_descriptor bzc_insns_32[] = {
13552   { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
13553   { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
13554   { 0, 0 }  /* End marker for find_match().  */
13555 };
13556 
13557 static const struct opcode_descriptor bz_insns_16[] = {
13558   { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
13559   { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
13560   { 0, 0 }  /* End marker for find_match().  */
13561 };
13562 
13563 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13564 
13565 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0xf) + 2)
13566 #define BZ16_REG_FIELD(r) (((r) & 7) << 7)
13567 
13568 
13569 /* 32-bit instructions with a delay slot.  */
13570 
13571 static const struct opcode_descriptor jal_insn_32_bd16 =
13572   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
13573 
13574 static const struct opcode_descriptor jal_insn_32_bd32 =
13575   { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
13576 
13577 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13578   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
13579 
13580 static const struct opcode_descriptor j_insn_32 =
13581   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
13582 
13583 static const struct opcode_descriptor jalr_insn_32 =
13584   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
13585 
13586 /* This table can be compacted, because no opcode replacement is made.  */
13587 
13588 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13589   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
13590 
13591   { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
13592   { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
13593 
13594   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
13595   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
13596   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
13597   { 0, 0 }  /* End marker for find_match().  */
13598 };
13599 
13600 /* This table can be compacted, because no opcode replacement is made.  */
13601 
13602 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13603   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
13604 
13605   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
13606   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
13607   { 0, 0 }  /* End marker for find_match().  */
13608 };
13609 
13610 
13611 /* 16-bit instructions with a delay slot.  */
13612 
13613 static const struct opcode_descriptor jalr_insn_16_bd16 =
13614   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
13615 
13616 static const struct opcode_descriptor jalr_insn_16_bd32 =
13617   { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
13618 
13619 static const struct opcode_descriptor jr_insn_16 =
13620   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
13621 
13622 #define JR16_REG(opcode) ((opcode) & 0x1f)
13623 
13624 /* This table can be compacted, because no opcode replacement is made.  */
13625 
13626 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13627   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
13628 
13629   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
13630   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
13631   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
13632   { 0, 0 }  /* End marker for find_match().  */
13633 };
13634 
13635 
13636 /* LUI instruction.  */
13637 
13638 static const struct opcode_descriptor lui_insn =
13639  { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
13640 
13641 
13642 /* ADDIU instruction.  */
13643 
13644 static const struct opcode_descriptor addiu_insn =
13645   { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
13646 
13647 static const struct opcode_descriptor addiupc_insn =
13648   { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
13649 
13650 #define ADDIUPC_REG_FIELD(r) \
13651   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13652 
13653 
13654 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13655 
13656 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13657    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13658 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13659 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13660 
13661 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13662 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13663 
13664 static const struct opcode_descriptor move_insns_32[] = {
13665   { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13666   { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13667   { 0, 0 }  /* End marker for find_match().  */
13668 };
13669 
13670 static const struct opcode_descriptor move_insn_16 =
13671   { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
13672 
13673 
13674 /* NOP instructions.  */
13675 
13676 static const struct opcode_descriptor nop_insn_32 =
13677   { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
13678 
13679 static const struct opcode_descriptor nop_insn_16 =
13680   { /* "nop",	"",		*/ 0x0c00,     0xffff };
13681 
13682 
13683 /* Instruction match support.  */
13684 
13685 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13686 
13687 static int
13688 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13689 {
13690   unsigned long indx;
13691 
13692   for (indx = 0; insn[indx].mask != 0; indx++)
13693     if (MATCH (opcode, insn[indx]))
13694       return indx;
13695 
13696   return -1;
13697 }
13698 
13699 
13700 /* Branch and delay slot decoding support.  */
13701 
13702 /* If PTR points to what *might* be a 16-bit branch or jump, then
13703    return the minimum length of its delay slot, otherwise return 0.
13704    Non-zero results are not definitive as we might be checking against
13705    the second half of another instruction.  */
13706 
13707 static int
13708 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13709 {
13710   unsigned long opcode;
13711   int bdsize;
13712 
13713   opcode = bfd_get_16 (abfd, ptr);
13714   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13715     /* 16-bit branch/jump with a 32-bit delay slot.  */
13716     bdsize = 4;
13717   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13718 	   || find_match (opcode, ds_insns_16_bd16) >= 0)
13719     /* 16-bit branch/jump with a 16-bit delay slot.  */
13720     bdsize = 2;
13721   else
13722     /* No delay slot.  */
13723     bdsize = 0;
13724 
13725   return bdsize;
13726 }
13727 
13728 /* If PTR points to what *might* be a 32-bit branch or jump, then
13729    return the minimum length of its delay slot, otherwise return 0.
13730    Non-zero results are not definitive as we might be checking against
13731    the second half of another instruction.  */
13732 
13733 static int
13734 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13735 {
13736   unsigned long opcode;
13737   int bdsize;
13738 
13739   opcode = bfd_get_micromips_32 (abfd, ptr);
13740   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13741     /* 32-bit branch/jump with a 32-bit delay slot.  */
13742     bdsize = 4;
13743   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13744     /* 32-bit branch/jump with a 16-bit delay slot.  */
13745     bdsize = 2;
13746   else
13747     /* No delay slot.  */
13748     bdsize = 0;
13749 
13750   return bdsize;
13751 }
13752 
13753 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13754    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13755 
13756 static bfd_boolean
13757 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13758 {
13759   unsigned long opcode;
13760 
13761   opcode = bfd_get_16 (abfd, ptr);
13762   if (MATCH (opcode, b_insn_16)
13763 						/* B16  */
13764       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13765 						/* JR16  */
13766       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13767 						/* BEQZ16, BNEZ16  */
13768       || (MATCH (opcode, jalr_insn_16_bd32)
13769 						/* JALR16  */
13770 	  && reg != JR16_REG (opcode) && reg != RA))
13771     return TRUE;
13772 
13773   return FALSE;
13774 }
13775 
13776 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13777    then return TRUE, otherwise FALSE.  */
13778 
13779 static bfd_boolean
13780 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13781 {
13782   unsigned long opcode;
13783 
13784   opcode = bfd_get_micromips_32 (abfd, ptr);
13785   if (MATCH (opcode, j_insn_32)
13786 						/* J  */
13787       || MATCH (opcode, bc_insn_32)
13788 						/* BC1F, BC1T, BC2F, BC2T  */
13789       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13790 						/* JAL, JALX  */
13791       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13792 						/* BGEZ, BGTZ, BLEZ, BLTZ  */
13793       || (MATCH (opcode, bzal_insn_32)
13794 						/* BGEZAL, BLTZAL  */
13795 	  && reg != OP32_SREG (opcode) && reg != RA)
13796       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13797 						/* JALR, JALR.HB, BEQ, BNE  */
13798 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13799     return TRUE;
13800 
13801   return FALSE;
13802 }
13803 
13804 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13805    IRELEND) at OFFSET indicate that there must be a compact branch there,
13806    then return TRUE, otherwise FALSE.  */
13807 
13808 static bfd_boolean
13809 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13810 		     const Elf_Internal_Rela *internal_relocs,
13811 		     const Elf_Internal_Rela *irelend)
13812 {
13813   const Elf_Internal_Rela *irel;
13814   unsigned long opcode;
13815 
13816   opcode = bfd_get_micromips_32 (abfd, ptr);
13817   if (find_match (opcode, bzc_insns_32) < 0)
13818     return FALSE;
13819 
13820   for (irel = internal_relocs; irel < irelend; irel++)
13821     if (irel->r_offset == offset
13822 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13823       return TRUE;
13824 
13825   return FALSE;
13826 }
13827 
13828 /* Bitsize checking.  */
13829 #define IS_BITSIZE(val, N)						\
13830   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
13831     - (1ULL << ((N) - 1))) == (val))
13832 
13833 
13834 bfd_boolean
13835 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13836 			     struct bfd_link_info *link_info,
13837 			     bfd_boolean *again)
13838 {
13839   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13840   Elf_Internal_Shdr *symtab_hdr;
13841   Elf_Internal_Rela *internal_relocs;
13842   Elf_Internal_Rela *irel, *irelend;
13843   bfd_byte *contents = NULL;
13844   Elf_Internal_Sym *isymbuf = NULL;
13845 
13846   /* Assume nothing changes.  */
13847   *again = FALSE;
13848 
13849   /* We don't have to do anything for a relocatable link, if
13850      this section does not have relocs, or if this is not a
13851      code section.  */
13852 
13853   if (bfd_link_relocatable (link_info)
13854       || (sec->flags & SEC_RELOC) == 0
13855       || sec->reloc_count == 0
13856       || (sec->flags & SEC_CODE) == 0)
13857     return TRUE;
13858 
13859   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13860 
13861   /* Get a copy of the native relocations.  */
13862   internal_relocs = (_bfd_elf_link_read_relocs
13863 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13864 		      link_info->keep_memory));
13865   if (internal_relocs == NULL)
13866     goto error_return;
13867 
13868   /* Walk through them looking for relaxing opportunities.  */
13869   irelend = internal_relocs + sec->reloc_count;
13870   for (irel = internal_relocs; irel < irelend; irel++)
13871     {
13872       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13873       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13874       bfd_boolean target_is_micromips_code_p;
13875       unsigned long opcode;
13876       bfd_vma symval;
13877       bfd_vma pcrval;
13878       bfd_byte *ptr;
13879       int fndopc;
13880 
13881       /* The number of bytes to delete for relaxation and from where
13882 	 to delete these bytes starting at irel->r_offset.  */
13883       int delcnt = 0;
13884       int deloff = 0;
13885 
13886       /* If this isn't something that can be relaxed, then ignore
13887 	 this reloc.  */
13888       if (r_type != R_MICROMIPS_HI16
13889 	  && r_type != R_MICROMIPS_PC16_S1
13890 	  && r_type != R_MICROMIPS_26_S1)
13891 	continue;
13892 
13893       /* Get the section contents if we haven't done so already.  */
13894       if (contents == NULL)
13895 	{
13896 	  /* Get cached copy if it exists.  */
13897 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
13898 	    contents = elf_section_data (sec)->this_hdr.contents;
13899 	  /* Go get them off disk.  */
13900 	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13901 	    goto error_return;
13902 	}
13903       ptr = contents + irel->r_offset;
13904 
13905       /* Read this BFD's local symbols if we haven't done so already.  */
13906       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13907 	{
13908 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13909 	  if (isymbuf == NULL)
13910 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13911 					    symtab_hdr->sh_info, 0,
13912 					    NULL, NULL, NULL);
13913 	  if (isymbuf == NULL)
13914 	    goto error_return;
13915 	}
13916 
13917       /* Get the value of the symbol referred to by the reloc.  */
13918       if (r_symndx < symtab_hdr->sh_info)
13919 	{
13920 	  /* A local symbol.  */
13921 	  Elf_Internal_Sym *isym;
13922 	  asection *sym_sec;
13923 
13924 	  isym = isymbuf + r_symndx;
13925 	  if (isym->st_shndx == SHN_UNDEF)
13926 	    sym_sec = bfd_und_section_ptr;
13927 	  else if (isym->st_shndx == SHN_ABS)
13928 	    sym_sec = bfd_abs_section_ptr;
13929 	  else if (isym->st_shndx == SHN_COMMON)
13930 	    sym_sec = bfd_com_section_ptr;
13931 	  else
13932 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13933 	  symval = (isym->st_value
13934 		    + sym_sec->output_section->vma
13935 		    + sym_sec->output_offset);
13936 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13937 	}
13938       else
13939 	{
13940 	  unsigned long indx;
13941 	  struct elf_link_hash_entry *h;
13942 
13943 	  /* An external symbol.  */
13944 	  indx = r_symndx - symtab_hdr->sh_info;
13945 	  h = elf_sym_hashes (abfd)[indx];
13946 	  BFD_ASSERT (h != NULL);
13947 
13948 	  if (h->root.type != bfd_link_hash_defined
13949 	      && h->root.type != bfd_link_hash_defweak)
13950 	    /* This appears to be a reference to an undefined
13951 	       symbol.  Just ignore it -- it will be caught by the
13952 	       regular reloc processing.  */
13953 	    continue;
13954 
13955 	  symval = (h->root.u.def.value
13956 		    + h->root.u.def.section->output_section->vma
13957 		    + h->root.u.def.section->output_offset);
13958 	  target_is_micromips_code_p = (!h->needs_plt
13959 					&& ELF_ST_IS_MICROMIPS (h->other));
13960 	}
13961 
13962 
13963       /* For simplicity of coding, we are going to modify the
13964 	 section contents, the section relocs, and the BFD symbol
13965 	 table.  We must tell the rest of the code not to free up this
13966 	 information.  It would be possible to instead create a table
13967 	 of changes which have to be made, as is done in coff-mips.c;
13968 	 that would be more work, but would require less memory when
13969 	 the linker is run.  */
13970 
13971       /* Only 32-bit instructions relaxed.  */
13972       if (irel->r_offset + 4 > sec->size)
13973 	continue;
13974 
13975       opcode = bfd_get_micromips_32 (abfd, ptr);
13976 
13977       /* This is the pc-relative distance from the instruction the
13978 	 relocation is applied to, to the symbol referred.  */
13979       pcrval = (symval
13980 		- (sec->output_section->vma + sec->output_offset)
13981 		- irel->r_offset);
13982 
13983       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13984 	 of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13985 	 R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13986 
13987 	   (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13988 
13989 	 where pcrval has first to be adjusted to apply against the LO16
13990 	 location (we make the adjustment later on, when we have figured
13991 	 out the offset).  */
13992       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13993 	{
13994 	  bfd_boolean bzc = FALSE;
13995 	  unsigned long nextopc;
13996 	  unsigned long reg;
13997 	  bfd_vma offset;
13998 
13999 	  /* Give up if the previous reloc was a HI16 against this symbol
14000 	     too.  */
14001 	  if (irel > internal_relocs
14002 	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
14003 	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
14004 	    continue;
14005 
14006 	  /* Or if the next reloc is not a LO16 against this symbol.  */
14007 	  if (irel + 1 >= irelend
14008 	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
14009 	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
14010 	    continue;
14011 
14012 	  /* Or if the second next reloc is a LO16 against this symbol too.  */
14013 	  if (irel + 2 >= irelend
14014 	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
14015 	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
14016 	    continue;
14017 
14018 	  /* See if the LUI instruction *might* be in a branch delay slot.
14019 	     We check whether what looks like a 16-bit branch or jump is
14020 	     actually an immediate argument to a compact branch, and let
14021 	     it through if so.  */
14022 	  if (irel->r_offset >= 2
14023 	      && check_br16_dslot (abfd, ptr - 2)
14024 	      && !(irel->r_offset >= 4
14025 		   && (bzc = check_relocated_bzc (abfd,
14026 						  ptr - 4, irel->r_offset - 4,
14027 						  internal_relocs, irelend))))
14028 	    continue;
14029 	  if (irel->r_offset >= 4
14030 	      && !bzc
14031 	      && check_br32_dslot (abfd, ptr - 4))
14032 	    continue;
14033 
14034 	  reg = OP32_SREG (opcode);
14035 
14036 	  /* We only relax adjacent instructions or ones separated with
14037 	     a branch or jump that has a delay slot.  The branch or jump
14038 	     must not fiddle with the register used to hold the address.
14039 	     Subtract 4 for the LUI itself.  */
14040 	  offset = irel[1].r_offset - irel[0].r_offset;
14041 	  switch (offset - 4)
14042 	    {
14043 	    case 0:
14044 	      break;
14045 	    case 2:
14046 	      if (check_br16 (abfd, ptr + 4, reg))
14047 		break;
14048 	      continue;
14049 	    case 4:
14050 	      if (check_br32 (abfd, ptr + 4, reg))
14051 		break;
14052 	      continue;
14053 	    default:
14054 	      continue;
14055 	    }
14056 
14057 	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
14058 
14059 	  /* Give up unless the same register is used with both
14060 	     relocations.  */
14061 	  if (OP32_SREG (nextopc) != reg)
14062 	    continue;
14063 
14064 	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
14065 	     and rounding up to take masking of the two LSBs into account.  */
14066 	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
14067 
14068 	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
14069 	  if (IS_BITSIZE (symval, 16))
14070 	    {
14071 	      /* Fix the relocation's type.  */
14072 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
14073 
14074 	      /* Instructions using R_MICROMIPS_LO16 have the base or
14075 		 source register in bits 20:16.  This register becomes $0
14076 		 (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
14077 	      nextopc &= ~0x001f0000;
14078 	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
14079 			  contents + irel[1].r_offset);
14080 	    }
14081 
14082 	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
14083 	     We add 4 to take LUI deletion into account while checking
14084 	     the PC-relative distance.  */
14085 	  else if (symval % 4 == 0
14086 		   && IS_BITSIZE (pcrval + 4, 25)
14087 		   && MATCH (nextopc, addiu_insn)
14088 		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
14089 		   && OP16_VALID_REG (OP32_TREG (nextopc)))
14090 	    {
14091 	      /* Fix the relocation's type.  */
14092 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
14093 
14094 	      /* Replace ADDIU with the ADDIUPC version.  */
14095 	      nextopc = (addiupc_insn.match
14096 			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
14097 
14098 	      bfd_put_micromips_32 (abfd, nextopc,
14099 				    contents + irel[1].r_offset);
14100 	    }
14101 
14102 	  /* Can't do anything, give up, sigh...  */
14103 	  else
14104 	    continue;
14105 
14106 	  /* Fix the relocation's type.  */
14107 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
14108 
14109 	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
14110 	  delcnt = 4;
14111 	  deloff = 0;
14112 	}
14113 
14114       /* Compact branch relaxation -- due to the multitude of macros
14115 	 employed by the compiler/assembler, compact branches are not
14116 	 always generated.  Obviously, this can/will be fixed elsewhere,
14117 	 but there is no drawback in double checking it here.  */
14118       else if (r_type == R_MICROMIPS_PC16_S1
14119 	       && irel->r_offset + 5 < sec->size
14120 	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14121 		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
14122 	       && ((!insn32
14123 		    && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
14124 					nop_insn_16) ? 2 : 0))
14125 		   || (irel->r_offset + 7 < sec->size
14126 		       && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
14127 								 ptr + 4),
14128 					   nop_insn_32) ? 4 : 0))))
14129 	{
14130 	  unsigned long reg;
14131 
14132 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14133 
14134 	  /* Replace BEQZ/BNEZ with the compact version.  */
14135 	  opcode = (bzc_insns_32[fndopc].match
14136 		    | BZC32_REG_FIELD (reg)
14137 		    | (opcode & 0xffff));		/* Addend value.  */
14138 
14139 	  bfd_put_micromips_32 (abfd, opcode, ptr);
14140 
14141 	  /* Delete the delay slot NOP: two or four bytes from
14142 	     irel->offset + 4; delcnt has already been set above.  */
14143 	  deloff = 4;
14144 	}
14145 
14146       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
14147 	 to check the distance from the next instruction, so subtract 2.  */
14148       else if (!insn32
14149 	       && r_type == R_MICROMIPS_PC16_S1
14150 	       && IS_BITSIZE (pcrval - 2, 11)
14151 	       && find_match (opcode, b_insns_32) >= 0)
14152 	{
14153 	  /* Fix the relocation's type.  */
14154 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
14155 
14156 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
14157 	  bfd_put_16 (abfd,
14158 		      (b_insn_16.match
14159 		       | (opcode & 0x3ff)),		/* Addend value.  */
14160 		      ptr);
14161 
14162 	  /* Delete 2 bytes from irel->r_offset + 2.  */
14163 	  delcnt = 2;
14164 	  deloff = 2;
14165 	}
14166 
14167       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
14168 	 to check the distance from the next instruction, so subtract 2.  */
14169       else if (!insn32
14170 	       && r_type == R_MICROMIPS_PC16_S1
14171 	       && IS_BITSIZE (pcrval - 2, 8)
14172 	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
14173 		    && OP16_VALID_REG (OP32_SREG (opcode)))
14174 		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
14175 		       && OP16_VALID_REG (OP32_TREG (opcode)))))
14176 	{
14177 	  unsigned long reg;
14178 
14179 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
14180 
14181 	  /* Fix the relocation's type.  */
14182 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
14183 
14184 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
14185 	  bfd_put_16 (abfd,
14186 		      (bz_insns_16[fndopc].match
14187 		       | BZ16_REG_FIELD (reg)
14188 		       | (opcode & 0x7f)),		/* Addend value.  */
14189 		      ptr);
14190 
14191 	  /* Delete 2 bytes from irel->r_offset + 2.  */
14192 	  delcnt = 2;
14193 	  deloff = 2;
14194 	}
14195 
14196       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
14197       else if (!insn32
14198 	       && r_type == R_MICROMIPS_26_S1
14199 	       && target_is_micromips_code_p
14200 	       && irel->r_offset + 7 < sec->size
14201 	       && MATCH (opcode, jal_insn_32_bd32))
14202 	{
14203 	  unsigned long n32opc;
14204 	  bfd_boolean relaxed = FALSE;
14205 
14206 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
14207 
14208 	  if (MATCH (n32opc, nop_insn_32))
14209 	    {
14210 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
14211 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
14212 
14213 	      relaxed = TRUE;
14214 	    }
14215 	  else if (find_match (n32opc, move_insns_32) >= 0)
14216 	    {
14217 	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
14218 	      bfd_put_16 (abfd,
14219 			  (move_insn_16.match
14220 			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
14221 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
14222 			  ptr + 4);
14223 
14224 	      relaxed = TRUE;
14225 	    }
14226 	  /* Other 32-bit instructions relaxable to 16-bit
14227 	     instructions will be handled here later.  */
14228 
14229 	  if (relaxed)
14230 	    {
14231 	      /* JAL with 32-bit delay slot that is changed to a JALS
14232 		 with 16-bit delay slot.  */
14233 	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
14234 
14235 	      /* Delete 2 bytes from irel->r_offset + 6.  */
14236 	      delcnt = 2;
14237 	      deloff = 6;
14238 	    }
14239 	}
14240 
14241       if (delcnt != 0)
14242 	{
14243 	  /* Note that we've changed the relocs, section contents, etc.  */
14244 	  elf_section_data (sec)->relocs = internal_relocs;
14245 	  elf_section_data (sec)->this_hdr.contents = contents;
14246 	  symtab_hdr->contents = (unsigned char *) isymbuf;
14247 
14248 	  /* Delete bytes depending on the delcnt and deloff.  */
14249 	  if (!mips_elf_relax_delete_bytes (abfd, sec,
14250 					    irel->r_offset + deloff, delcnt))
14251 	    goto error_return;
14252 
14253 	  /* That will change things, so we should relax again.
14254 	     Note that this is not required, and it may be slow.  */
14255 	  *again = TRUE;
14256 	}
14257     }
14258 
14259   if (isymbuf != NULL
14260       && symtab_hdr->contents != (unsigned char *) isymbuf)
14261     {
14262       if (! link_info->keep_memory)
14263 	free (isymbuf);
14264       else
14265 	{
14266 	  /* Cache the symbols for elf_link_input_bfd.  */
14267 	  symtab_hdr->contents = (unsigned char *) isymbuf;
14268 	}
14269     }
14270 
14271   if (contents != NULL
14272       && elf_section_data (sec)->this_hdr.contents != contents)
14273     {
14274       if (! link_info->keep_memory)
14275 	free (contents);
14276       else
14277 	{
14278 	  /* Cache the section contents for elf_link_input_bfd.  */
14279 	  elf_section_data (sec)->this_hdr.contents = contents;
14280 	}
14281     }
14282 
14283   if (internal_relocs != NULL
14284       && elf_section_data (sec)->relocs != internal_relocs)
14285     free (internal_relocs);
14286 
14287   return TRUE;
14288 
14289  error_return:
14290   if (isymbuf != NULL
14291       && symtab_hdr->contents != (unsigned char *) isymbuf)
14292     free (isymbuf);
14293   if (contents != NULL
14294       && elf_section_data (sec)->this_hdr.contents != contents)
14295     free (contents);
14296   if (internal_relocs != NULL
14297       && elf_section_data (sec)->relocs != internal_relocs)
14298     free (internal_relocs);
14299 
14300   return FALSE;
14301 }
14302 
14303 /* Create a MIPS ELF linker hash table.  */
14304 
14305 struct bfd_link_hash_table *
14306 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
14307 {
14308   struct mips_elf_link_hash_table *ret;
14309   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
14310 
14311   ret = bfd_zmalloc (amt);
14312   if (ret == NULL)
14313     return NULL;
14314 
14315   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
14316 				      mips_elf_link_hash_newfunc,
14317 				      sizeof (struct mips_elf_link_hash_entry),
14318 				      MIPS_ELF_DATA))
14319     {
14320       free (ret);
14321       return NULL;
14322     }
14323   ret->root.init_plt_refcount.plist = NULL;
14324   ret->root.init_plt_offset.plist = NULL;
14325 
14326   return &ret->root.root;
14327 }
14328 
14329 /* Likewise, but indicate that the target is VxWorks.  */
14330 
14331 struct bfd_link_hash_table *
14332 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
14333 {
14334   struct bfd_link_hash_table *ret;
14335 
14336   ret = _bfd_mips_elf_link_hash_table_create (abfd);
14337   if (ret)
14338     {
14339       struct mips_elf_link_hash_table *htab;
14340 
14341       htab = (struct mips_elf_link_hash_table *) ret;
14342       htab->use_plts_and_copy_relocs = TRUE;
14343       htab->is_vxworks = TRUE;
14344     }
14345   return ret;
14346 }
14347 
14348 /* A function that the linker calls if we are allowed to use PLTs
14349    and copy relocs.  */
14350 
14351 void
14352 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
14353 {
14354   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
14355 }
14356 
14357 /* A function that the linker calls to select between all or only
14358    32-bit microMIPS instructions, and between making or ignoring
14359    branch relocation checks for invalid transitions between ISA modes.
14360    Also record whether we have been configured for a GNU target.  */
14361 
14362 void
14363 _bfd_mips_elf_linker_flags (struct bfd_link_info *info, bfd_boolean insn32,
14364 			    bfd_boolean ignore_branch_isa,
14365 			    bfd_boolean gnu_target)
14366 {
14367   mips_elf_hash_table (info)->insn32 = insn32;
14368   mips_elf_hash_table (info)->ignore_branch_isa = ignore_branch_isa;
14369   mips_elf_hash_table (info)->gnu_target = gnu_target;
14370 }
14371 
14372 /* A function that the linker calls to enable use of compact branches in
14373    linker generated code for MIPSR6.  */
14374 
14375 void
14376 _bfd_mips_elf_compact_branches (struct bfd_link_info *info, bfd_boolean on)
14377 {
14378   mips_elf_hash_table (info)->compact_branches = on;
14379 }
14380 
14381 
14382 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
14383 
14384 struct mips_mach_extension
14385 {
14386   unsigned long extension, base;
14387 };
14388 
14389 
14390 /* An array describing how BFD machines relate to one another.  The entries
14391    are ordered topologically with MIPS I extensions listed last.  */
14392 
14393 static const struct mips_mach_extension mips_mach_extensions[] =
14394 {
14395   /* MIPS64r2 extensions.  */
14396   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14397   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14398   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14399   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14400   { bfd_mach_mips_gs264e, bfd_mach_mips_gs464e },
14401   { bfd_mach_mips_gs464e, bfd_mach_mips_gs464 },
14402   { bfd_mach_mips_gs464, bfd_mach_mipsisa64r2 },
14403 
14404   /* MIPS64 extensions.  */
14405   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14406   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14407   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14408 
14409   /* MIPS V extensions.  */
14410   { bfd_mach_mipsisa64, bfd_mach_mips5 },
14411 
14412   /* R10000 extensions.  */
14413   { bfd_mach_mips12000, bfd_mach_mips10000 },
14414   { bfd_mach_mips14000, bfd_mach_mips10000 },
14415   { bfd_mach_mips16000, bfd_mach_mips10000 },
14416 
14417   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14418      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14419      better to allow vr5400 and vr5500 code to be merged anyway, since
14420      many libraries will just use the core ISA.  Perhaps we could add
14421      some sort of ASE flag if this ever proves a problem.  */
14422   { bfd_mach_mips5500, bfd_mach_mips5400 },
14423   { bfd_mach_mips5400, bfd_mach_mips5000 },
14424 
14425   /* MIPS IV extensions.  */
14426   { bfd_mach_mips5, bfd_mach_mips8000 },
14427   { bfd_mach_mips10000, bfd_mach_mips8000 },
14428   { bfd_mach_mips5000, bfd_mach_mips8000 },
14429   { bfd_mach_mips7000, bfd_mach_mips8000 },
14430   { bfd_mach_mips9000, bfd_mach_mips8000 },
14431 
14432   /* VR4100 extensions.  */
14433   { bfd_mach_mips4120, bfd_mach_mips4100 },
14434   { bfd_mach_mips4111, bfd_mach_mips4100 },
14435 
14436   /* MIPS III extensions.  */
14437   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14438   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14439   { bfd_mach_mips8000, bfd_mach_mips4000 },
14440   { bfd_mach_mips4650, bfd_mach_mips4000 },
14441   { bfd_mach_mips4600, bfd_mach_mips4000 },
14442   { bfd_mach_mips4400, bfd_mach_mips4000 },
14443   { bfd_mach_mips4300, bfd_mach_mips4000 },
14444   { bfd_mach_mips4100, bfd_mach_mips4000 },
14445   { bfd_mach_mips5900, bfd_mach_mips4000 },
14446 
14447   /* MIPS32r3 extensions.  */
14448   { bfd_mach_mips_interaptiv_mr2, bfd_mach_mipsisa32r3 },
14449 
14450   /* MIPS32r2 extensions.  */
14451   { bfd_mach_mipsisa32r3, bfd_mach_mipsisa32r2 },
14452 
14453   /* MIPS32 extensions.  */
14454   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14455 
14456   /* MIPS II extensions.  */
14457   { bfd_mach_mips4000, bfd_mach_mips6000 },
14458   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14459   { bfd_mach_mips4010, bfd_mach_mips6000 },
14460 
14461   /* MIPS I extensions.  */
14462   { bfd_mach_mips6000, bfd_mach_mips3000 },
14463   { bfd_mach_mips3900, bfd_mach_mips3000 }
14464 };
14465 
14466 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14467 
14468 static bfd_boolean
14469 mips_mach_extends_p (unsigned long base, unsigned long extension)
14470 {
14471   size_t i;
14472 
14473   if (extension == base)
14474     return TRUE;
14475 
14476   if (base == bfd_mach_mipsisa32
14477       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14478     return TRUE;
14479 
14480   if (base == bfd_mach_mipsisa32r2
14481       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14482     return TRUE;
14483 
14484   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14485     if (extension == mips_mach_extensions[i].extension)
14486       {
14487 	extension = mips_mach_extensions[i].base;
14488 	if (extension == base)
14489 	  return TRUE;
14490       }
14491 
14492   return FALSE;
14493 }
14494 
14495 /* Return the BFD mach for each .MIPS.abiflags ISA Extension.  */
14496 
14497 static unsigned long
14498 bfd_mips_isa_ext_mach (unsigned int isa_ext)
14499 {
14500   switch (isa_ext)
14501     {
14502     case AFL_EXT_3900:	      return bfd_mach_mips3900;
14503     case AFL_EXT_4010:	      return bfd_mach_mips4010;
14504     case AFL_EXT_4100:	      return bfd_mach_mips4100;
14505     case AFL_EXT_4111:	      return bfd_mach_mips4111;
14506     case AFL_EXT_4120:	      return bfd_mach_mips4120;
14507     case AFL_EXT_4650:	      return bfd_mach_mips4650;
14508     case AFL_EXT_5400:	      return bfd_mach_mips5400;
14509     case AFL_EXT_5500:	      return bfd_mach_mips5500;
14510     case AFL_EXT_5900:	      return bfd_mach_mips5900;
14511     case AFL_EXT_10000:	      return bfd_mach_mips10000;
14512     case AFL_EXT_LOONGSON_2E: return bfd_mach_mips_loongson_2e;
14513     case AFL_EXT_LOONGSON_2F: return bfd_mach_mips_loongson_2f;
14514     case AFL_EXT_SB1:	      return bfd_mach_mips_sb1;
14515     case AFL_EXT_OCTEON:      return bfd_mach_mips_octeon;
14516     case AFL_EXT_OCTEONP:     return bfd_mach_mips_octeonp;
14517     case AFL_EXT_OCTEON2:     return bfd_mach_mips_octeon2;
14518     case AFL_EXT_XLR:	      return bfd_mach_mips_xlr;
14519     default:		      return bfd_mach_mips3000;
14520     }
14521 }
14522 
14523 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
14524 
14525 unsigned int
14526 bfd_mips_isa_ext (bfd *abfd)
14527 {
14528   switch (bfd_get_mach (abfd))
14529     {
14530     case bfd_mach_mips3900:	    return AFL_EXT_3900;
14531     case bfd_mach_mips4010:	    return AFL_EXT_4010;
14532     case bfd_mach_mips4100:	    return AFL_EXT_4100;
14533     case bfd_mach_mips4111:	    return AFL_EXT_4111;
14534     case bfd_mach_mips4120:	    return AFL_EXT_4120;
14535     case bfd_mach_mips4650:	    return AFL_EXT_4650;
14536     case bfd_mach_mips5400:	    return AFL_EXT_5400;
14537     case bfd_mach_mips5500:	    return AFL_EXT_5500;
14538     case bfd_mach_mips5900:	    return AFL_EXT_5900;
14539     case bfd_mach_mips10000:	    return AFL_EXT_10000;
14540     case bfd_mach_mips_loongson_2e: return AFL_EXT_LOONGSON_2E;
14541     case bfd_mach_mips_loongson_2f: return AFL_EXT_LOONGSON_2F;
14542     case bfd_mach_mips_sb1:	    return AFL_EXT_SB1;
14543     case bfd_mach_mips_octeon:	    return AFL_EXT_OCTEON;
14544     case bfd_mach_mips_octeonp:	    return AFL_EXT_OCTEONP;
14545     case bfd_mach_mips_octeon3:	    return AFL_EXT_OCTEON3;
14546     case bfd_mach_mips_octeon2:	    return AFL_EXT_OCTEON2;
14547     case bfd_mach_mips_xlr:	    return AFL_EXT_XLR;
14548     case bfd_mach_mips_interaptiv_mr2:
14549       return AFL_EXT_INTERAPTIV_MR2;
14550     default:			    return 0;
14551     }
14552 }
14553 
14554 /* Encode ISA level and revision as a single value.  */
14555 #define LEVEL_REV(LEV,REV) ((LEV) << 3 | (REV))
14556 
14557 /* Decode a single value into level and revision.  */
14558 #define ISA_LEVEL(LEVREV)  ((LEVREV) >> 3)
14559 #define ISA_REV(LEVREV)    ((LEVREV) & 0x7)
14560 
14561 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
14562 
14563 static void
14564 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
14565 {
14566   int new_isa = 0;
14567   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
14568     {
14569     case E_MIPS_ARCH_1:    new_isa = LEVEL_REV (1, 0); break;
14570     case E_MIPS_ARCH_2:    new_isa = LEVEL_REV (2, 0); break;
14571     case E_MIPS_ARCH_3:    new_isa = LEVEL_REV (3, 0); break;
14572     case E_MIPS_ARCH_4:    new_isa = LEVEL_REV (4, 0); break;
14573     case E_MIPS_ARCH_5:    new_isa = LEVEL_REV (5, 0); break;
14574     case E_MIPS_ARCH_32:   new_isa = LEVEL_REV (32, 1); break;
14575     case E_MIPS_ARCH_32R2: new_isa = LEVEL_REV (32, 2); break;
14576     case E_MIPS_ARCH_32R6: new_isa = LEVEL_REV (32, 6); break;
14577     case E_MIPS_ARCH_64:   new_isa = LEVEL_REV (64, 1); break;
14578     case E_MIPS_ARCH_64R2: new_isa = LEVEL_REV (64, 2); break;
14579     case E_MIPS_ARCH_64R6: new_isa = LEVEL_REV (64, 6); break;
14580     default:
14581       _bfd_error_handler
14582 	/* xgettext:c-format */
14583 	(_("%pB: unknown architecture %s"),
14584 	 abfd, bfd_printable_name (abfd));
14585     }
14586 
14587   if (new_isa > LEVEL_REV (abiflags->isa_level, abiflags->isa_rev))
14588     {
14589       abiflags->isa_level = ISA_LEVEL (new_isa);
14590       abiflags->isa_rev = ISA_REV (new_isa);
14591     }
14592 
14593   /* Update the isa_ext if ABFD describes a further extension.  */
14594   if (mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags->isa_ext),
14595 			   bfd_get_mach (abfd)))
14596     abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14597 }
14598 
14599 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14600 
14601 static bfd_boolean
14602 mips_32bit_flags_p (flagword flags)
14603 {
14604   return ((flags & EF_MIPS_32BITMODE) != 0
14605 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14606 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14607 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14608 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14609 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14610 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14611 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14612 }
14613 
14614 /* Infer the content of the ABI flags based on the elf header.  */
14615 
14616 static void
14617 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14618 {
14619   obj_attribute *in_attr;
14620 
14621   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14622   update_mips_abiflags_isa (abfd, abiflags);
14623 
14624   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14625     abiflags->gpr_size = AFL_REG_32;
14626   else
14627     abiflags->gpr_size = AFL_REG_64;
14628 
14629   abiflags->cpr1_size = AFL_REG_NONE;
14630 
14631   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14632   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14633 
14634   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14635       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14636       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14637 	  && abiflags->gpr_size == AFL_REG_32))
14638     abiflags->cpr1_size = AFL_REG_32;
14639   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14640 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14641 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14642     abiflags->cpr1_size = AFL_REG_64;
14643 
14644   abiflags->cpr2_size = AFL_REG_NONE;
14645 
14646   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14647     abiflags->ases |= AFL_ASE_MDMX;
14648   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14649     abiflags->ases |= AFL_ASE_MIPS16;
14650   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14651     abiflags->ases |= AFL_ASE_MICROMIPS;
14652 
14653   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14654       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14655       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14656       && abiflags->isa_level >= 32
14657       && abiflags->ases != AFL_ASE_LOONGSON_EXT)
14658     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14659 }
14660 
14661 /* We need to use a special link routine to handle the .reginfo and
14662    the .mdebug sections.  We need to merge all instances of these
14663    sections together, not write them all out sequentially.  */
14664 
14665 bfd_boolean
14666 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14667 {
14668   asection *o;
14669   struct bfd_link_order *p;
14670   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14671   asection *rtproc_sec, *abiflags_sec;
14672   Elf32_RegInfo reginfo;
14673   struct ecoff_debug_info debug;
14674   struct mips_htab_traverse_info hti;
14675   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14676   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14677   HDRR *symhdr = &debug.symbolic_header;
14678   void *mdebug_handle = NULL;
14679   asection *s;
14680   EXTR esym;
14681   unsigned int i;
14682   bfd_size_type amt;
14683   struct mips_elf_link_hash_table *htab;
14684 
14685   static const char * const secname[] =
14686   {
14687     ".text", ".init", ".fini", ".data",
14688     ".rodata", ".sdata", ".sbss", ".bss"
14689   };
14690   static const int sc[] =
14691   {
14692     scText, scInit, scFini, scData,
14693     scRData, scSData, scSBss, scBss
14694   };
14695 
14696   htab = mips_elf_hash_table (info);
14697   BFD_ASSERT (htab != NULL);
14698 
14699   /* Sort the dynamic symbols so that those with GOT entries come after
14700      those without.  */
14701   if (!mips_elf_sort_hash_table (abfd, info))
14702     return FALSE;
14703 
14704   /* Create any scheduled LA25 stubs.  */
14705   hti.info = info;
14706   hti.output_bfd = abfd;
14707   hti.error = FALSE;
14708   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14709   if (hti.error)
14710     return FALSE;
14711 
14712   /* Get a value for the GP register.  */
14713   if (elf_gp (abfd) == 0)
14714     {
14715       struct bfd_link_hash_entry *h;
14716 
14717       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14718       if (h != NULL && h->type == bfd_link_hash_defined)
14719 	elf_gp (abfd) = (h->u.def.value
14720 			 + h->u.def.section->output_section->vma
14721 			 + h->u.def.section->output_offset);
14722       else if (htab->is_vxworks
14723 	       && (h = bfd_link_hash_lookup (info->hash,
14724 					     "_GLOBAL_OFFSET_TABLE_",
14725 					     FALSE, FALSE, TRUE))
14726 	       && h->type == bfd_link_hash_defined)
14727 	elf_gp (abfd) = (h->u.def.section->output_section->vma
14728 			 + h->u.def.section->output_offset
14729 			 + h->u.def.value);
14730       else if (bfd_link_relocatable (info))
14731 	{
14732 	  bfd_vma lo = MINUS_ONE;
14733 
14734 	  /* Find the GP-relative section with the lowest offset.  */
14735 	  for (o = abfd->sections; o != NULL; o = o->next)
14736 	    if (o->vma < lo
14737 		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14738 	      lo = o->vma;
14739 
14740 	  /* And calculate GP relative to that.  */
14741 	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14742 	}
14743       else
14744 	{
14745 	  /* If the relocate_section function needs to do a reloc
14746 	     involving the GP value, it should make a reloc_dangerous
14747 	     callback to warn that GP is not defined.  */
14748 	}
14749     }
14750 
14751   /* Go through the sections and collect the .reginfo and .mdebug
14752      information.  */
14753   abiflags_sec = NULL;
14754   reginfo_sec = NULL;
14755   mdebug_sec = NULL;
14756   gptab_data_sec = NULL;
14757   gptab_bss_sec = NULL;
14758   for (o = abfd->sections; o != NULL; o = o->next)
14759     {
14760       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14761 	{
14762 	  /* We have found the .MIPS.abiflags section in the output file.
14763 	     Look through all the link_orders comprising it and remove them.
14764 	     The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14765 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14766 	    {
14767 	      asection *input_section;
14768 
14769 	      if (p->type != bfd_indirect_link_order)
14770 		{
14771 		  if (p->type == bfd_data_link_order)
14772 		    continue;
14773 		  abort ();
14774 		}
14775 
14776 	      input_section = p->u.indirect.section;
14777 
14778 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14779 		 elf_link_input_bfd ignores this section.  */
14780 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14781 	    }
14782 
14783 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14784 	  BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14785 
14786 	  /* Skip this section later on (I don't think this currently
14787 	     matters, but someday it might).  */
14788 	  o->map_head.link_order = NULL;
14789 
14790 	  abiflags_sec = o;
14791 	}
14792 
14793       if (strcmp (o->name, ".reginfo") == 0)
14794 	{
14795 	  memset (&reginfo, 0, sizeof reginfo);
14796 
14797 	  /* We have found the .reginfo section in the output file.
14798 	     Look through all the link_orders comprising it and merge
14799 	     the information together.  */
14800 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14801 	    {
14802 	      asection *input_section;
14803 	      bfd *input_bfd;
14804 	      Elf32_External_RegInfo ext;
14805 	      Elf32_RegInfo sub;
14806 	      bfd_size_type sz;
14807 
14808 	      if (p->type != bfd_indirect_link_order)
14809 		{
14810 		  if (p->type == bfd_data_link_order)
14811 		    continue;
14812 		  abort ();
14813 		}
14814 
14815 	      input_section = p->u.indirect.section;
14816 	      input_bfd = input_section->owner;
14817 
14818 	      sz = (input_section->size < sizeof (ext)
14819 		    ? input_section->size : sizeof (ext));
14820 	      memset (&ext, 0, sizeof (ext));
14821 	      if (! bfd_get_section_contents (input_bfd, input_section,
14822 					      &ext, 0, sz))
14823 		return FALSE;
14824 
14825 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14826 
14827 	      reginfo.ri_gprmask |= sub.ri_gprmask;
14828 	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14829 	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14830 	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14831 	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14832 
14833 	      /* ri_gp_value is set by the function
14834 		 `_bfd_mips_elf_section_processing' when the section is
14835 		 finally written out.  */
14836 
14837 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14838 		 elf_link_input_bfd ignores this section.  */
14839 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14840 	    }
14841 
14842 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14843 	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14844 
14845 	  /* Skip this section later on (I don't think this currently
14846 	     matters, but someday it might).  */
14847 	  o->map_head.link_order = NULL;
14848 
14849 	  reginfo_sec = o;
14850 	}
14851 
14852       if (strcmp (o->name, ".mdebug") == 0)
14853 	{
14854 	  struct extsym_info einfo;
14855 	  bfd_vma last;
14856 
14857 	  /* We have found the .mdebug section in the output file.
14858 	     Look through all the link_orders comprising it and merge
14859 	     the information together.  */
14860 	  symhdr->magic = swap->sym_magic;
14861 	  /* FIXME: What should the version stamp be?  */
14862 	  symhdr->vstamp = 0;
14863 	  symhdr->ilineMax = 0;
14864 	  symhdr->cbLine = 0;
14865 	  symhdr->idnMax = 0;
14866 	  symhdr->ipdMax = 0;
14867 	  symhdr->isymMax = 0;
14868 	  symhdr->ioptMax = 0;
14869 	  symhdr->iauxMax = 0;
14870 	  symhdr->issMax = 0;
14871 	  symhdr->issExtMax = 0;
14872 	  symhdr->ifdMax = 0;
14873 	  symhdr->crfd = 0;
14874 	  symhdr->iextMax = 0;
14875 
14876 	  /* We accumulate the debugging information itself in the
14877 	     debug_info structure.  */
14878 	  debug.line = NULL;
14879 	  debug.external_dnr = NULL;
14880 	  debug.external_pdr = NULL;
14881 	  debug.external_sym = NULL;
14882 	  debug.external_opt = NULL;
14883 	  debug.external_aux = NULL;
14884 	  debug.ss = NULL;
14885 	  debug.ssext = debug.ssext_end = NULL;
14886 	  debug.external_fdr = NULL;
14887 	  debug.external_rfd = NULL;
14888 	  debug.external_ext = debug.external_ext_end = NULL;
14889 
14890 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14891 	  if (mdebug_handle == NULL)
14892 	    return FALSE;
14893 
14894 	  esym.jmptbl = 0;
14895 	  esym.cobol_main = 0;
14896 	  esym.weakext = 0;
14897 	  esym.reserved = 0;
14898 	  esym.ifd = ifdNil;
14899 	  esym.asym.iss = issNil;
14900 	  esym.asym.st = stLocal;
14901 	  esym.asym.reserved = 0;
14902 	  esym.asym.index = indexNil;
14903 	  last = 0;
14904 	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14905 	    {
14906 	      esym.asym.sc = sc[i];
14907 	      s = bfd_get_section_by_name (abfd, secname[i]);
14908 	      if (s != NULL)
14909 		{
14910 		  esym.asym.value = s->vma;
14911 		  last = s->vma + s->size;
14912 		}
14913 	      else
14914 		esym.asym.value = last;
14915 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14916 						 secname[i], &esym))
14917 		return FALSE;
14918 	    }
14919 
14920 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14921 	    {
14922 	      asection *input_section;
14923 	      bfd *input_bfd;
14924 	      const struct ecoff_debug_swap *input_swap;
14925 	      struct ecoff_debug_info input_debug;
14926 	      char *eraw_src;
14927 	      char *eraw_end;
14928 
14929 	      if (p->type != bfd_indirect_link_order)
14930 		{
14931 		  if (p->type == bfd_data_link_order)
14932 		    continue;
14933 		  abort ();
14934 		}
14935 
14936 	      input_section = p->u.indirect.section;
14937 	      input_bfd = input_section->owner;
14938 
14939 	      if (!is_mips_elf (input_bfd))
14940 		{
14941 		  /* I don't know what a non MIPS ELF bfd would be
14942 		     doing with a .mdebug section, but I don't really
14943 		     want to deal with it.  */
14944 		  continue;
14945 		}
14946 
14947 	      input_swap = (get_elf_backend_data (input_bfd)
14948 			    ->elf_backend_ecoff_debug_swap);
14949 
14950 	      BFD_ASSERT (p->size == input_section->size);
14951 
14952 	      /* The ECOFF linking code expects that we have already
14953 		 read in the debugging information and set up an
14954 		 ecoff_debug_info structure, so we do that now.  */
14955 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14956 						   &input_debug))
14957 		return FALSE;
14958 
14959 	      if (! (bfd_ecoff_debug_accumulate
14960 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
14961 		      &input_debug, input_swap, info)))
14962 		return FALSE;
14963 
14964 	      /* Loop through the external symbols.  For each one with
14965 		 interesting information, try to find the symbol in
14966 		 the linker global hash table and save the information
14967 		 for the output external symbols.  */
14968 	      eraw_src = input_debug.external_ext;
14969 	      eraw_end = (eraw_src
14970 			  + (input_debug.symbolic_header.iextMax
14971 			     * input_swap->external_ext_size));
14972 	      for (;
14973 		   eraw_src < eraw_end;
14974 		   eraw_src += input_swap->external_ext_size)
14975 		{
14976 		  EXTR ext;
14977 		  const char *name;
14978 		  struct mips_elf_link_hash_entry *h;
14979 
14980 		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14981 		  if (ext.asym.sc == scNil
14982 		      || ext.asym.sc == scUndefined
14983 		      || ext.asym.sc == scSUndefined)
14984 		    continue;
14985 
14986 		  name = input_debug.ssext + ext.asym.iss;
14987 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14988 						 name, FALSE, FALSE, TRUE);
14989 		  if (h == NULL || h->esym.ifd != -2)
14990 		    continue;
14991 
14992 		  if (ext.ifd != -1)
14993 		    {
14994 		      BFD_ASSERT (ext.ifd
14995 				  < input_debug.symbolic_header.ifdMax);
14996 		      ext.ifd = input_debug.ifdmap[ext.ifd];
14997 		    }
14998 
14999 		  h->esym = ext;
15000 		}
15001 
15002 	      /* Free up the information we just read.  */
15003 	      free (input_debug.line);
15004 	      free (input_debug.external_dnr);
15005 	      free (input_debug.external_pdr);
15006 	      free (input_debug.external_sym);
15007 	      free (input_debug.external_opt);
15008 	      free (input_debug.external_aux);
15009 	      free (input_debug.ss);
15010 	      free (input_debug.ssext);
15011 	      free (input_debug.external_fdr);
15012 	      free (input_debug.external_rfd);
15013 	      free (input_debug.external_ext);
15014 
15015 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
15016 		 elf_link_input_bfd ignores this section.  */
15017 	      input_section->flags &= ~SEC_HAS_CONTENTS;
15018 	    }
15019 
15020 	  if (SGI_COMPAT (abfd) && bfd_link_pic (info))
15021 	    {
15022 	      /* Create .rtproc section.  */
15023 	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
15024 	      if (rtproc_sec == NULL)
15025 		{
15026 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
15027 				    | SEC_LINKER_CREATED | SEC_READONLY);
15028 
15029 		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
15030 								   ".rtproc",
15031 								   flags);
15032 		  if (rtproc_sec == NULL
15033 		      || !bfd_set_section_alignment (rtproc_sec, 4))
15034 		    return FALSE;
15035 		}
15036 
15037 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
15038 						     info, rtproc_sec,
15039 						     &debug))
15040 		return FALSE;
15041 	    }
15042 
15043 	  /* Build the external symbol information.  */
15044 	  einfo.abfd = abfd;
15045 	  einfo.info = info;
15046 	  einfo.debug = &debug;
15047 	  einfo.swap = swap;
15048 	  einfo.failed = FALSE;
15049 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
15050 				       mips_elf_output_extsym, &einfo);
15051 	  if (einfo.failed)
15052 	    return FALSE;
15053 
15054 	  /* Set the size of the .mdebug section.  */
15055 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
15056 
15057 	  /* Skip this section later on (I don't think this currently
15058 	     matters, but someday it might).  */
15059 	  o->map_head.link_order = NULL;
15060 
15061 	  mdebug_sec = o;
15062 	}
15063 
15064       if (CONST_STRNEQ (o->name, ".gptab."))
15065 	{
15066 	  const char *subname;
15067 	  unsigned int c;
15068 	  Elf32_gptab *tab;
15069 	  Elf32_External_gptab *ext_tab;
15070 	  unsigned int j;
15071 
15072 	  /* The .gptab.sdata and .gptab.sbss sections hold
15073 	     information describing how the small data area would
15074 	     change depending upon the -G switch.  These sections
15075 	     not used in executables files.  */
15076 	  if (! bfd_link_relocatable (info))
15077 	    {
15078 	      for (p = o->map_head.link_order; p != NULL; p = p->next)
15079 		{
15080 		  asection *input_section;
15081 
15082 		  if (p->type != bfd_indirect_link_order)
15083 		    {
15084 		      if (p->type == bfd_data_link_order)
15085 			continue;
15086 		      abort ();
15087 		    }
15088 
15089 		  input_section = p->u.indirect.section;
15090 
15091 		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
15092 		     elf_link_input_bfd ignores this section.  */
15093 		  input_section->flags &= ~SEC_HAS_CONTENTS;
15094 		}
15095 
15096 	      /* Skip this section later on (I don't think this
15097 		 currently matters, but someday it might).  */
15098 	      o->map_head.link_order = NULL;
15099 
15100 	      /* Really remove the section.  */
15101 	      bfd_section_list_remove (abfd, o);
15102 	      --abfd->section_count;
15103 
15104 	      continue;
15105 	    }
15106 
15107 	  /* There is one gptab for initialized data, and one for
15108 	     uninitialized data.  */
15109 	  if (strcmp (o->name, ".gptab.sdata") == 0)
15110 	    gptab_data_sec = o;
15111 	  else if (strcmp (o->name, ".gptab.sbss") == 0)
15112 	    gptab_bss_sec = o;
15113 	  else
15114 	    {
15115 	      _bfd_error_handler
15116 		/* xgettext:c-format */
15117 		(_("%pB: illegal section name `%pA'"), abfd, o);
15118 	      bfd_set_error (bfd_error_nonrepresentable_section);
15119 	      return FALSE;
15120 	    }
15121 
15122 	  /* The linker script always combines .gptab.data and
15123 	     .gptab.sdata into .gptab.sdata, and likewise for
15124 	     .gptab.bss and .gptab.sbss.  It is possible that there is
15125 	     no .sdata or .sbss section in the output file, in which
15126 	     case we must change the name of the output section.  */
15127 	  subname = o->name + sizeof ".gptab" - 1;
15128 	  if (bfd_get_section_by_name (abfd, subname) == NULL)
15129 	    {
15130 	      if (o == gptab_data_sec)
15131 		o->name = ".gptab.data";
15132 	      else
15133 		o->name = ".gptab.bss";
15134 	      subname = o->name + sizeof ".gptab" - 1;
15135 	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
15136 	    }
15137 
15138 	  /* Set up the first entry.  */
15139 	  c = 1;
15140 	  amt = c * sizeof (Elf32_gptab);
15141 	  tab = bfd_malloc (amt);
15142 	  if (tab == NULL)
15143 	    return FALSE;
15144 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
15145 	  tab[0].gt_header.gt_unused = 0;
15146 
15147 	  /* Combine the input sections.  */
15148 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
15149 	    {
15150 	      asection *input_section;
15151 	      bfd *input_bfd;
15152 	      bfd_size_type size;
15153 	      unsigned long last;
15154 	      bfd_size_type gpentry;
15155 
15156 	      if (p->type != bfd_indirect_link_order)
15157 		{
15158 		  if (p->type == bfd_data_link_order)
15159 		    continue;
15160 		  abort ();
15161 		}
15162 
15163 	      input_section = p->u.indirect.section;
15164 	      input_bfd = input_section->owner;
15165 
15166 	      /* Combine the gptab entries for this input section one
15167 		 by one.  We know that the input gptab entries are
15168 		 sorted by ascending -G value.  */
15169 	      size = input_section->size;
15170 	      last = 0;
15171 	      for (gpentry = sizeof (Elf32_External_gptab);
15172 		   gpentry < size;
15173 		   gpentry += sizeof (Elf32_External_gptab))
15174 		{
15175 		  Elf32_External_gptab ext_gptab;
15176 		  Elf32_gptab int_gptab;
15177 		  unsigned long val;
15178 		  unsigned long add;
15179 		  bfd_boolean exact;
15180 		  unsigned int look;
15181 
15182 		  if (! (bfd_get_section_contents
15183 			 (input_bfd, input_section, &ext_gptab, gpentry,
15184 			  sizeof (Elf32_External_gptab))))
15185 		    {
15186 		      free (tab);
15187 		      return FALSE;
15188 		    }
15189 
15190 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
15191 						&int_gptab);
15192 		  val = int_gptab.gt_entry.gt_g_value;
15193 		  add = int_gptab.gt_entry.gt_bytes - last;
15194 
15195 		  exact = FALSE;
15196 		  for (look = 1; look < c; look++)
15197 		    {
15198 		      if (tab[look].gt_entry.gt_g_value >= val)
15199 			tab[look].gt_entry.gt_bytes += add;
15200 
15201 		      if (tab[look].gt_entry.gt_g_value == val)
15202 			exact = TRUE;
15203 		    }
15204 
15205 		  if (! exact)
15206 		    {
15207 		      Elf32_gptab *new_tab;
15208 		      unsigned int max;
15209 
15210 		      /* We need a new table entry.  */
15211 		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
15212 		      new_tab = bfd_realloc (tab, amt);
15213 		      if (new_tab == NULL)
15214 			{
15215 			  free (tab);
15216 			  return FALSE;
15217 			}
15218 		      tab = new_tab;
15219 		      tab[c].gt_entry.gt_g_value = val;
15220 		      tab[c].gt_entry.gt_bytes = add;
15221 
15222 		      /* Merge in the size for the next smallest -G
15223 			 value, since that will be implied by this new
15224 			 value.  */
15225 		      max = 0;
15226 		      for (look = 1; look < c; look++)
15227 			{
15228 			  if (tab[look].gt_entry.gt_g_value < val
15229 			      && (max == 0
15230 				  || (tab[look].gt_entry.gt_g_value
15231 				      > tab[max].gt_entry.gt_g_value)))
15232 			    max = look;
15233 			}
15234 		      if (max != 0)
15235 			tab[c].gt_entry.gt_bytes +=
15236 			  tab[max].gt_entry.gt_bytes;
15237 
15238 		      ++c;
15239 		    }
15240 
15241 		  last = int_gptab.gt_entry.gt_bytes;
15242 		}
15243 
15244 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
15245 		 elf_link_input_bfd ignores this section.  */
15246 	      input_section->flags &= ~SEC_HAS_CONTENTS;
15247 	    }
15248 
15249 	  /* The table must be sorted by -G value.  */
15250 	  if (c > 2)
15251 	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
15252 
15253 	  /* Swap out the table.  */
15254 	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
15255 	  ext_tab = bfd_alloc (abfd, amt);
15256 	  if (ext_tab == NULL)
15257 	    {
15258 	      free (tab);
15259 	      return FALSE;
15260 	    }
15261 
15262 	  for (j = 0; j < c; j++)
15263 	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
15264 	  free (tab);
15265 
15266 	  o->size = c * sizeof (Elf32_External_gptab);
15267 	  o->contents = (bfd_byte *) ext_tab;
15268 
15269 	  /* Skip this section later on (I don't think this currently
15270 	     matters, but someday it might).  */
15271 	  o->map_head.link_order = NULL;
15272 	}
15273     }
15274 
15275   /* Invoke the regular ELF backend linker to do all the work.  */
15276   if (!bfd_elf_final_link (abfd, info))
15277     return FALSE;
15278 
15279   /* Now write out the computed sections.  */
15280 
15281   if (abiflags_sec != NULL)
15282     {
15283       Elf_External_ABIFlags_v0 ext;
15284       Elf_Internal_ABIFlags_v0 *abiflags;
15285 
15286       abiflags = &mips_elf_tdata (abfd)->abiflags;
15287 
15288       /* Set up the abiflags if no valid input sections were found.  */
15289       if (!mips_elf_tdata (abfd)->abiflags_valid)
15290 	{
15291 	  infer_mips_abiflags (abfd, abiflags);
15292 	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
15293 	}
15294       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
15295       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
15296 	return FALSE;
15297     }
15298 
15299   if (reginfo_sec != NULL)
15300     {
15301       Elf32_External_RegInfo ext;
15302 
15303       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
15304       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
15305 	return FALSE;
15306     }
15307 
15308   if (mdebug_sec != NULL)
15309     {
15310       BFD_ASSERT (abfd->output_has_begun);
15311       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
15312 					       swap, info,
15313 					       mdebug_sec->filepos))
15314 	return FALSE;
15315 
15316       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
15317     }
15318 
15319   if (gptab_data_sec != NULL)
15320     {
15321       if (! bfd_set_section_contents (abfd, gptab_data_sec,
15322 				      gptab_data_sec->contents,
15323 				      0, gptab_data_sec->size))
15324 	return FALSE;
15325     }
15326 
15327   if (gptab_bss_sec != NULL)
15328     {
15329       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
15330 				      gptab_bss_sec->contents,
15331 				      0, gptab_bss_sec->size))
15332 	return FALSE;
15333     }
15334 
15335   if (SGI_COMPAT (abfd))
15336     {
15337       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
15338       if (rtproc_sec != NULL)
15339 	{
15340 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
15341 					  rtproc_sec->contents,
15342 					  0, rtproc_sec->size))
15343 	    return FALSE;
15344 	}
15345     }
15346 
15347   return TRUE;
15348 }
15349 
15350 /* Merge object file header flags from IBFD into OBFD.  Raise an error
15351    if there are conflicting settings.  */
15352 
15353 static bfd_boolean
15354 mips_elf_merge_obj_e_flags (bfd *ibfd, struct bfd_link_info *info)
15355 {
15356   bfd *obfd = info->output_bfd;
15357   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15358   flagword old_flags;
15359   flagword new_flags;
15360   bfd_boolean ok;
15361 
15362   new_flags = elf_elfheader (ibfd)->e_flags;
15363   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15364   old_flags = elf_elfheader (obfd)->e_flags;
15365 
15366   /* Check flag compatibility.  */
15367 
15368   new_flags &= ~EF_MIPS_NOREORDER;
15369   old_flags &= ~EF_MIPS_NOREORDER;
15370 
15371   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
15372      doesn't seem to matter.  */
15373   new_flags &= ~EF_MIPS_XGOT;
15374   old_flags &= ~EF_MIPS_XGOT;
15375 
15376   /* MIPSpro generates ucode info in n64 objects.  Again, we should
15377      just be able to ignore this.  */
15378   new_flags &= ~EF_MIPS_UCODE;
15379   old_flags &= ~EF_MIPS_UCODE;
15380 
15381   /* DSOs should only be linked with CPIC code.  */
15382   if ((ibfd->flags & DYNAMIC) != 0)
15383     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15384 
15385   if (new_flags == old_flags)
15386     return TRUE;
15387 
15388   ok = TRUE;
15389 
15390   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15391       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15392     {
15393       _bfd_error_handler
15394 	(_("%pB: warning: linking abicalls files with non-abicalls files"),
15395 	 ibfd);
15396       ok = TRUE;
15397     }
15398 
15399   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15400     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15401   if (! (new_flags & EF_MIPS_PIC))
15402     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15403 
15404   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15405   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15406 
15407   /* Compare the ISAs.  */
15408   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15409     {
15410       _bfd_error_handler
15411 	(_("%pB: linking 32-bit code with 64-bit code"),
15412 	 ibfd);
15413       ok = FALSE;
15414     }
15415   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15416     {
15417       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15418       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15419 	{
15420 	  /* Copy the architecture info from IBFD to OBFD.  Also copy
15421 	     the 32-bit flag (if set) so that we continue to recognise
15422 	     OBFD as a 32-bit binary.  */
15423 	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15424 	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15425 	  elf_elfheader (obfd)->e_flags
15426 	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15427 
15428 	  /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15429 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15430 
15431 	  /* Copy across the ABI flags if OBFD doesn't use them
15432 	     and if that was what caused us to treat IBFD as 32-bit.  */
15433 	  if ((old_flags & EF_MIPS_ABI) == 0
15434 	      && mips_32bit_flags_p (new_flags)
15435 	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15436 	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15437 	}
15438       else
15439 	{
15440 	  /* The ISAs aren't compatible.  */
15441 	  _bfd_error_handler
15442 	    /* xgettext:c-format */
15443 	    (_("%pB: linking %s module with previous %s modules"),
15444 	     ibfd,
15445 	     bfd_printable_name (ibfd),
15446 	     bfd_printable_name (obfd));
15447 	  ok = FALSE;
15448 	}
15449     }
15450 
15451   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15452   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15453 
15454   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15455      does set EI_CLASS differently from any 32-bit ABI.  */
15456   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15457       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15458 	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15459     {
15460       /* Only error if both are set (to different values).  */
15461       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15462 	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15463 	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15464 	{
15465 	  _bfd_error_handler
15466 	    /* xgettext:c-format */
15467 	    (_("%pB: ABI mismatch: linking %s module with previous %s modules"),
15468 	     ibfd,
15469 	     elf_mips_abi_name (ibfd),
15470 	     elf_mips_abi_name (obfd));
15471 	  ok = FALSE;
15472 	}
15473       new_flags &= ~EF_MIPS_ABI;
15474       old_flags &= ~EF_MIPS_ABI;
15475     }
15476 
15477   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15478      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15479   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15480     {
15481       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15482       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15483       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15484       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15485       int micro_mis = old_m16 && new_micro;
15486       int m16_mis = old_micro && new_m16;
15487 
15488       if (m16_mis || micro_mis)
15489 	{
15490 	  _bfd_error_handler
15491 	    /* xgettext:c-format */
15492 	    (_("%pB: ASE mismatch: linking %s module with previous %s modules"),
15493 	     ibfd,
15494 	     m16_mis ? "MIPS16" : "microMIPS",
15495 	     m16_mis ? "microMIPS" : "MIPS16");
15496 	  ok = FALSE;
15497 	}
15498 
15499       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15500 
15501       new_flags &= ~ EF_MIPS_ARCH_ASE;
15502       old_flags &= ~ EF_MIPS_ARCH_ASE;
15503     }
15504 
15505   /* Compare NaN encodings.  */
15506   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15507     {
15508       /* xgettext:c-format */
15509       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15510 			  ibfd,
15511 			  (new_flags & EF_MIPS_NAN2008
15512 			   ? "-mnan=2008" : "-mnan=legacy"),
15513 			  (old_flags & EF_MIPS_NAN2008
15514 			   ? "-mnan=2008" : "-mnan=legacy"));
15515       ok = FALSE;
15516       new_flags &= ~EF_MIPS_NAN2008;
15517       old_flags &= ~EF_MIPS_NAN2008;
15518     }
15519 
15520   /* Compare FP64 state.  */
15521   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15522     {
15523       /* xgettext:c-format */
15524       _bfd_error_handler (_("%pB: linking %s module with previous %s modules"),
15525 			  ibfd,
15526 			  (new_flags & EF_MIPS_FP64
15527 			   ? "-mfp64" : "-mfp32"),
15528 			  (old_flags & EF_MIPS_FP64
15529 			   ? "-mfp64" : "-mfp32"));
15530       ok = FALSE;
15531       new_flags &= ~EF_MIPS_FP64;
15532       old_flags &= ~EF_MIPS_FP64;
15533     }
15534 
15535   /* Warn about any other mismatches */
15536   if (new_flags != old_flags)
15537     {
15538       /* xgettext:c-format */
15539       _bfd_error_handler
15540 	(_("%pB: uses different e_flags (%#x) fields than previous modules "
15541 	   "(%#x)"),
15542 	 ibfd, new_flags, old_flags);
15543       ok = FALSE;
15544     }
15545 
15546   return ok;
15547 }
15548 
15549 /* Merge object attributes from IBFD into OBFD.  Raise an error if
15550    there are conflicting attributes.  */
15551 static bfd_boolean
15552 mips_elf_merge_obj_attributes (bfd *ibfd, struct bfd_link_info *info)
15553 {
15554   bfd *obfd = info->output_bfd;
15555   obj_attribute *in_attr;
15556   obj_attribute *out_attr;
15557   bfd *abi_fp_bfd;
15558   bfd *abi_msa_bfd;
15559 
15560   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
15561   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15562   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
15563     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15564 
15565   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
15566   if (!abi_msa_bfd
15567       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15568     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
15569 
15570   if (!elf_known_obj_attributes_proc (obfd)[0].i)
15571     {
15572       /* This is the first object.  Copy the attributes.  */
15573       _bfd_elf_copy_obj_attributes (ibfd, obfd);
15574 
15575       /* Use the Tag_null value to indicate the attributes have been
15576 	 initialized.  */
15577       elf_known_obj_attributes_proc (obfd)[0].i = 1;
15578 
15579       return TRUE;
15580     }
15581 
15582   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
15583      non-conflicting ones.  */
15584   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15585   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
15586     {
15587       int out_fp, in_fp;
15588 
15589       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15590       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15591       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
15592       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
15593 	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
15594       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
15595 	       && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15596 		   || in_fp == Val_GNU_MIPS_ABI_FP_64
15597 		   || in_fp == Val_GNU_MIPS_ABI_FP_64A))
15598 	{
15599 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15600 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15601 	}
15602       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
15603 	       && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
15604 		   || out_fp == Val_GNU_MIPS_ABI_FP_64
15605 		   || out_fp == Val_GNU_MIPS_ABI_FP_64A))
15606 	/* Keep the current setting.  */;
15607       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
15608 	       && in_fp == Val_GNU_MIPS_ABI_FP_64)
15609 	{
15610 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
15611 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
15612 	}
15613       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
15614 	       && out_fp == Val_GNU_MIPS_ABI_FP_64)
15615 	/* Keep the current setting.  */;
15616       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
15617 	{
15618 	  const char *out_string, *in_string;
15619 
15620 	  out_string = _bfd_mips_fp_abi_string (out_fp);
15621 	  in_string = _bfd_mips_fp_abi_string (in_fp);
15622 	  /* First warn about cases involving unrecognised ABIs.  */
15623 	  if (!out_string && !in_string)
15624 	    /* xgettext:c-format */
15625 	    _bfd_error_handler
15626 	      (_("warning: %pB uses unknown floating point ABI %d "
15627 		 "(set by %pB), %pB uses unknown floating point ABI %d"),
15628 	       obfd, out_fp, abi_fp_bfd, ibfd, in_fp);
15629 	  else if (!out_string)
15630 	    _bfd_error_handler
15631 	      /* xgettext:c-format */
15632 	      (_("warning: %pB uses unknown floating point ABI %d "
15633 		 "(set by %pB), %pB uses %s"),
15634 	       obfd, out_fp, abi_fp_bfd, ibfd, in_string);
15635 	  else if (!in_string)
15636 	    _bfd_error_handler
15637 	      /* xgettext:c-format */
15638 	      (_("warning: %pB uses %s (set by %pB), "
15639 		 "%pB uses unknown floating point ABI %d"),
15640 	       obfd, out_string, abi_fp_bfd, ibfd, in_fp);
15641 	  else
15642 	    {
15643 	      /* If one of the bfds is soft-float, the other must be
15644 		 hard-float.  The exact choice of hard-float ABI isn't
15645 		 really relevant to the error message.  */
15646 	      if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15647 		out_string = "-mhard-float";
15648 	      else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
15649 		in_string = "-mhard-float";
15650 	      _bfd_error_handler
15651 		/* xgettext:c-format */
15652 		(_("warning: %pB uses %s (set by %pB), %pB uses %s"),
15653 		 obfd, out_string, abi_fp_bfd, ibfd, in_string);
15654 	    }
15655 	}
15656     }
15657 
15658   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
15659      non-conflicting ones.  */
15660   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15661     {
15662       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
15663       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
15664 	out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
15665       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
15666 	switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
15667 	  {
15668 	  case Val_GNU_MIPS_ABI_MSA_128:
15669 	    _bfd_error_handler
15670 	      /* xgettext:c-format */
15671 	      (_("warning: %pB uses %s (set by %pB), "
15672 		 "%pB uses unknown MSA ABI %d"),
15673 	       obfd, "-mmsa", abi_msa_bfd,
15674 	       ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15675 	    break;
15676 
15677 	  default:
15678 	    switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
15679 	      {
15680 	      case Val_GNU_MIPS_ABI_MSA_128:
15681 		_bfd_error_handler
15682 		  /* xgettext:c-format */
15683 		  (_("warning: %pB uses unknown MSA ABI %d "
15684 		     "(set by %pB), %pB uses %s"),
15685 		     obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15686 		   abi_msa_bfd, ibfd, "-mmsa");
15687 		  break;
15688 
15689 	      default:
15690 		_bfd_error_handler
15691 		  /* xgettext:c-format */
15692 		  (_("warning: %pB uses unknown MSA ABI %d "
15693 		     "(set by %pB), %pB uses unknown MSA ABI %d"),
15694 		   obfd, out_attr[Tag_GNU_MIPS_ABI_MSA].i,
15695 		   abi_msa_bfd, ibfd, in_attr[Tag_GNU_MIPS_ABI_MSA].i);
15696 		break;
15697 	      }
15698 	  }
15699     }
15700 
15701   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15702   return _bfd_elf_merge_object_attributes (ibfd, info);
15703 }
15704 
15705 /* Merge object ABI flags from IBFD into OBFD.  Raise an error if
15706    there are conflicting settings.  */
15707 
15708 static bfd_boolean
15709 mips_elf_merge_obj_abiflags (bfd *ibfd, bfd *obfd)
15710 {
15711   obj_attribute *out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15712   struct mips_elf_obj_tdata *out_tdata = mips_elf_tdata (obfd);
15713   struct mips_elf_obj_tdata *in_tdata = mips_elf_tdata (ibfd);
15714 
15715   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15716   out_tdata->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15717 
15718 #define max(a, b) ((a) > (b) ? (a) : (b))
15719   /* Merge abiflags.  */
15720   out_tdata->abiflags.isa_level = max (out_tdata->abiflags.isa_level,
15721 				       in_tdata->abiflags.isa_level);
15722   out_tdata->abiflags.isa_rev = max (out_tdata->abiflags.isa_rev,
15723 				     in_tdata->abiflags.isa_rev);
15724   out_tdata->abiflags.gpr_size = max (out_tdata->abiflags.gpr_size,
15725 				      in_tdata->abiflags.gpr_size);
15726   out_tdata->abiflags.cpr1_size = max (out_tdata->abiflags.cpr1_size,
15727 				       in_tdata->abiflags.cpr1_size);
15728   out_tdata->abiflags.cpr2_size = max (out_tdata->abiflags.cpr2_size,
15729 				       in_tdata->abiflags.cpr2_size);
15730 #undef max
15731   out_tdata->abiflags.ases |= in_tdata->abiflags.ases;
15732   out_tdata->abiflags.flags1 |= in_tdata->abiflags.flags1;
15733 
15734   return TRUE;
15735 }
15736 
15737 /* Merge backend specific data from an object file to the output
15738    object file when linking.  */
15739 
15740 bfd_boolean
15741 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, struct bfd_link_info *info)
15742 {
15743   bfd *obfd = info->output_bfd;
15744   struct mips_elf_obj_tdata *out_tdata;
15745   struct mips_elf_obj_tdata *in_tdata;
15746   bfd_boolean null_input_bfd = TRUE;
15747   asection *sec;
15748   bfd_boolean ok;
15749 
15750   /* Check if we have the same endianness.  */
15751   if (! _bfd_generic_verify_endian_match (ibfd, info))
15752     {
15753       _bfd_error_handler
15754 	(_("%pB: endianness incompatible with that of the selected emulation"),
15755 	 ibfd);
15756       return FALSE;
15757     }
15758 
15759   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15760     return TRUE;
15761 
15762   in_tdata = mips_elf_tdata (ibfd);
15763   out_tdata = mips_elf_tdata (obfd);
15764 
15765   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15766     {
15767       _bfd_error_handler
15768 	(_("%pB: ABI is incompatible with that of the selected emulation"),
15769 	 ibfd);
15770       return FALSE;
15771     }
15772 
15773   /* Check to see if the input BFD actually contains any sections.  If not,
15774      then it has no attributes, and its flags may not have been initialized
15775      either, but it cannot actually cause any incompatibility.  */
15776   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15777     {
15778       /* Ignore synthetic sections and empty .text, .data and .bss sections
15779 	 which are automatically generated by gas.  Also ignore fake
15780 	 (s)common sections, since merely defining a common symbol does
15781 	 not affect compatibility.  */
15782       if ((sec->flags & SEC_IS_COMMON) == 0
15783 	  && strcmp (sec->name, ".reginfo")
15784 	  && strcmp (sec->name, ".mdebug")
15785 	  && (sec->size != 0
15786 	      || (strcmp (sec->name, ".text")
15787 		  && strcmp (sec->name, ".data")
15788 		  && strcmp (sec->name, ".bss"))))
15789 	{
15790 	  null_input_bfd = FALSE;
15791 	  break;
15792 	}
15793     }
15794   if (null_input_bfd)
15795     return TRUE;
15796 
15797   /* Populate abiflags using existing information.  */
15798   if (in_tdata->abiflags_valid)
15799     {
15800       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15801       Elf_Internal_ABIFlags_v0 in_abiflags;
15802       Elf_Internal_ABIFlags_v0 abiflags;
15803 
15804       /* Set up the FP ABI attribute from the abiflags if it is not already
15805 	 set.  */
15806       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15807 	in_attr[Tag_GNU_MIPS_ABI_FP].i = in_tdata->abiflags.fp_abi;
15808 
15809       infer_mips_abiflags (ibfd, &abiflags);
15810       in_abiflags = in_tdata->abiflags;
15811 
15812       /* It is not possible to infer the correct ISA revision
15813 	 for R3 or R5 so drop down to R2 for the checks.  */
15814       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15815 	in_abiflags.isa_rev = 2;
15816 
15817       if (LEVEL_REV (in_abiflags.isa_level, in_abiflags.isa_rev)
15818 	  < LEVEL_REV (abiflags.isa_level, abiflags.isa_rev))
15819 	_bfd_error_handler
15820 	  (_("%pB: warning: inconsistent ISA between e_flags and "
15821 	     ".MIPS.abiflags"), ibfd);
15822       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15823 	  && in_abiflags.fp_abi != abiflags.fp_abi)
15824 	_bfd_error_handler
15825 	  (_("%pB: warning: inconsistent FP ABI between .gnu.attributes and "
15826 	     ".MIPS.abiflags"), ibfd);
15827       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15828 	_bfd_error_handler
15829 	  (_("%pB: warning: inconsistent ASEs between e_flags and "
15830 	     ".MIPS.abiflags"), ibfd);
15831       /* The isa_ext is allowed to be an extension of what can be inferred
15832 	 from e_flags.  */
15833       if (!mips_mach_extends_p (bfd_mips_isa_ext_mach (abiflags.isa_ext),
15834 				bfd_mips_isa_ext_mach (in_abiflags.isa_ext)))
15835 	_bfd_error_handler
15836 	  (_("%pB: warning: inconsistent ISA extensions between e_flags and "
15837 	     ".MIPS.abiflags"), ibfd);
15838       if (in_abiflags.flags2 != 0)
15839 	_bfd_error_handler
15840 	  (_("%pB: warning: unexpected flag in the flags2 field of "
15841 	     ".MIPS.abiflags (0x%lx)"), ibfd,
15842 	   in_abiflags.flags2);
15843     }
15844   else
15845     {
15846       infer_mips_abiflags (ibfd, &in_tdata->abiflags);
15847       in_tdata->abiflags_valid = TRUE;
15848     }
15849 
15850   if (!out_tdata->abiflags_valid)
15851     {
15852       /* Copy input abiflags if output abiflags are not already valid.  */
15853       out_tdata->abiflags = in_tdata->abiflags;
15854       out_tdata->abiflags_valid = TRUE;
15855     }
15856 
15857   if (! elf_flags_init (obfd))
15858     {
15859       elf_flags_init (obfd) = TRUE;
15860       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15861       elf_elfheader (obfd)->e_ident[EI_CLASS]
15862 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
15863 
15864       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15865 	  && (bfd_get_arch_info (obfd)->the_default
15866 	      || mips_mach_extends_p (bfd_get_mach (obfd),
15867 				      bfd_get_mach (ibfd))))
15868 	{
15869 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15870 				   bfd_get_mach (ibfd)))
15871 	    return FALSE;
15872 
15873 	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15874 	  update_mips_abiflags_isa (obfd, &out_tdata->abiflags);
15875 	}
15876 
15877       ok = TRUE;
15878     }
15879   else
15880     ok = mips_elf_merge_obj_e_flags (ibfd, info);
15881 
15882   ok = mips_elf_merge_obj_attributes (ibfd, info) && ok;
15883 
15884   ok = mips_elf_merge_obj_abiflags (ibfd, obfd) && ok;
15885 
15886   if (!ok)
15887     {
15888       bfd_set_error (bfd_error_bad_value);
15889       return FALSE;
15890     }
15891 
15892   return TRUE;
15893 }
15894 
15895 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15896 
15897 bfd_boolean
15898 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15899 {
15900   BFD_ASSERT (!elf_flags_init (abfd)
15901 	      || elf_elfheader (abfd)->e_flags == flags);
15902 
15903   elf_elfheader (abfd)->e_flags = flags;
15904   elf_flags_init (abfd) = TRUE;
15905   return TRUE;
15906 }
15907 
15908 char *
15909 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15910 {
15911   switch (dtag)
15912     {
15913     default: return "";
15914     case DT_MIPS_RLD_VERSION:
15915       return "MIPS_RLD_VERSION";
15916     case DT_MIPS_TIME_STAMP:
15917       return "MIPS_TIME_STAMP";
15918     case DT_MIPS_ICHECKSUM:
15919       return "MIPS_ICHECKSUM";
15920     case DT_MIPS_IVERSION:
15921       return "MIPS_IVERSION";
15922     case DT_MIPS_FLAGS:
15923       return "MIPS_FLAGS";
15924     case DT_MIPS_BASE_ADDRESS:
15925       return "MIPS_BASE_ADDRESS";
15926     case DT_MIPS_MSYM:
15927       return "MIPS_MSYM";
15928     case DT_MIPS_CONFLICT:
15929       return "MIPS_CONFLICT";
15930     case DT_MIPS_LIBLIST:
15931       return "MIPS_LIBLIST";
15932     case DT_MIPS_LOCAL_GOTNO:
15933       return "MIPS_LOCAL_GOTNO";
15934     case DT_MIPS_CONFLICTNO:
15935       return "MIPS_CONFLICTNO";
15936     case DT_MIPS_LIBLISTNO:
15937       return "MIPS_LIBLISTNO";
15938     case DT_MIPS_SYMTABNO:
15939       return "MIPS_SYMTABNO";
15940     case DT_MIPS_UNREFEXTNO:
15941       return "MIPS_UNREFEXTNO";
15942     case DT_MIPS_GOTSYM:
15943       return "MIPS_GOTSYM";
15944     case DT_MIPS_HIPAGENO:
15945       return "MIPS_HIPAGENO";
15946     case DT_MIPS_RLD_MAP:
15947       return "MIPS_RLD_MAP";
15948     case DT_MIPS_RLD_MAP_REL:
15949       return "MIPS_RLD_MAP_REL";
15950     case DT_MIPS_DELTA_CLASS:
15951       return "MIPS_DELTA_CLASS";
15952     case DT_MIPS_DELTA_CLASS_NO:
15953       return "MIPS_DELTA_CLASS_NO";
15954     case DT_MIPS_DELTA_INSTANCE:
15955       return "MIPS_DELTA_INSTANCE";
15956     case DT_MIPS_DELTA_INSTANCE_NO:
15957       return "MIPS_DELTA_INSTANCE_NO";
15958     case DT_MIPS_DELTA_RELOC:
15959       return "MIPS_DELTA_RELOC";
15960     case DT_MIPS_DELTA_RELOC_NO:
15961       return "MIPS_DELTA_RELOC_NO";
15962     case DT_MIPS_DELTA_SYM:
15963       return "MIPS_DELTA_SYM";
15964     case DT_MIPS_DELTA_SYM_NO:
15965       return "MIPS_DELTA_SYM_NO";
15966     case DT_MIPS_DELTA_CLASSSYM:
15967       return "MIPS_DELTA_CLASSSYM";
15968     case DT_MIPS_DELTA_CLASSSYM_NO:
15969       return "MIPS_DELTA_CLASSSYM_NO";
15970     case DT_MIPS_CXX_FLAGS:
15971       return "MIPS_CXX_FLAGS";
15972     case DT_MIPS_PIXIE_INIT:
15973       return "MIPS_PIXIE_INIT";
15974     case DT_MIPS_SYMBOL_LIB:
15975       return "MIPS_SYMBOL_LIB";
15976     case DT_MIPS_LOCALPAGE_GOTIDX:
15977       return "MIPS_LOCALPAGE_GOTIDX";
15978     case DT_MIPS_LOCAL_GOTIDX:
15979       return "MIPS_LOCAL_GOTIDX";
15980     case DT_MIPS_HIDDEN_GOTIDX:
15981       return "MIPS_HIDDEN_GOTIDX";
15982     case DT_MIPS_PROTECTED_GOTIDX:
15983       return "MIPS_PROTECTED_GOT_IDX";
15984     case DT_MIPS_OPTIONS:
15985       return "MIPS_OPTIONS";
15986     case DT_MIPS_INTERFACE:
15987       return "MIPS_INTERFACE";
15988     case DT_MIPS_DYNSTR_ALIGN:
15989       return "DT_MIPS_DYNSTR_ALIGN";
15990     case DT_MIPS_INTERFACE_SIZE:
15991       return "DT_MIPS_INTERFACE_SIZE";
15992     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15993       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15994     case DT_MIPS_PERF_SUFFIX:
15995       return "DT_MIPS_PERF_SUFFIX";
15996     case DT_MIPS_COMPACT_SIZE:
15997       return "DT_MIPS_COMPACT_SIZE";
15998     case DT_MIPS_GP_VALUE:
15999       return "DT_MIPS_GP_VALUE";
16000     case DT_MIPS_AUX_DYNAMIC:
16001       return "DT_MIPS_AUX_DYNAMIC";
16002     case DT_MIPS_PLTGOT:
16003       return "DT_MIPS_PLTGOT";
16004     case DT_MIPS_RWPLT:
16005       return "DT_MIPS_RWPLT";
16006     case DT_MIPS_XHASH:
16007       return "DT_MIPS_XHASH";
16008     }
16009 }
16010 
16011 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
16012    not known.  */
16013 
16014 const char *
16015 _bfd_mips_fp_abi_string (int fp)
16016 {
16017   switch (fp)
16018     {
16019       /* These strings aren't translated because they're simply
16020 	 option lists.  */
16021     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16022       return "-mdouble-float";
16023 
16024     case Val_GNU_MIPS_ABI_FP_SINGLE:
16025       return "-msingle-float";
16026 
16027     case Val_GNU_MIPS_ABI_FP_SOFT:
16028       return "-msoft-float";
16029 
16030     case Val_GNU_MIPS_ABI_FP_OLD_64:
16031       return _("-mips32r2 -mfp64 (12 callee-saved)");
16032 
16033     case Val_GNU_MIPS_ABI_FP_XX:
16034       return "-mfpxx";
16035 
16036     case Val_GNU_MIPS_ABI_FP_64:
16037       return "-mgp32 -mfp64";
16038 
16039     case Val_GNU_MIPS_ABI_FP_64A:
16040       return "-mgp32 -mfp64 -mno-odd-spreg";
16041 
16042     default:
16043       return 0;
16044     }
16045 }
16046 
16047 static void
16048 print_mips_ases (FILE *file, unsigned int mask)
16049 {
16050   if (mask & AFL_ASE_DSP)
16051     fputs ("\n\tDSP ASE", file);
16052   if (mask & AFL_ASE_DSPR2)
16053     fputs ("\n\tDSP R2 ASE", file);
16054   if (mask & AFL_ASE_DSPR3)
16055     fputs ("\n\tDSP R3 ASE", file);
16056   if (mask & AFL_ASE_EVA)
16057     fputs ("\n\tEnhanced VA Scheme", file);
16058   if (mask & AFL_ASE_MCU)
16059     fputs ("\n\tMCU (MicroController) ASE", file);
16060   if (mask & AFL_ASE_MDMX)
16061     fputs ("\n\tMDMX ASE", file);
16062   if (mask & AFL_ASE_MIPS3D)
16063     fputs ("\n\tMIPS-3D ASE", file);
16064   if (mask & AFL_ASE_MT)
16065     fputs ("\n\tMT ASE", file);
16066   if (mask & AFL_ASE_SMARTMIPS)
16067     fputs ("\n\tSmartMIPS ASE", file);
16068   if (mask & AFL_ASE_VIRT)
16069     fputs ("\n\tVZ ASE", file);
16070   if (mask & AFL_ASE_MSA)
16071     fputs ("\n\tMSA ASE", file);
16072   if (mask & AFL_ASE_MIPS16)
16073     fputs ("\n\tMIPS16 ASE", file);
16074   if (mask & AFL_ASE_MICROMIPS)
16075     fputs ("\n\tMICROMIPS ASE", file);
16076   if (mask & AFL_ASE_XPA)
16077     fputs ("\n\tXPA ASE", file);
16078   if (mask & AFL_ASE_MIPS16E2)
16079     fputs ("\n\tMIPS16e2 ASE", file);
16080   if (mask & AFL_ASE_CRC)
16081     fputs ("\n\tCRC ASE", file);
16082   if (mask & AFL_ASE_GINV)
16083     fputs ("\n\tGINV ASE", file);
16084   if (mask & AFL_ASE_LOONGSON_MMI)
16085     fputs ("\n\tLoongson MMI ASE", file);
16086   if (mask & AFL_ASE_LOONGSON_CAM)
16087     fputs ("\n\tLoongson CAM ASE", file);
16088   if (mask & AFL_ASE_LOONGSON_EXT)
16089     fputs ("\n\tLoongson EXT ASE", file);
16090   if (mask & AFL_ASE_LOONGSON_EXT2)
16091     fputs ("\n\tLoongson EXT2 ASE", file);
16092   if (mask == 0)
16093     fprintf (file, "\n\t%s", _("None"));
16094   else if ((mask & ~AFL_ASE_MASK) != 0)
16095     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
16096 }
16097 
16098 static void
16099 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
16100 {
16101   switch (isa_ext)
16102     {
16103     case 0:
16104       fputs (_("None"), file);
16105       break;
16106     case AFL_EXT_XLR:
16107       fputs ("RMI XLR", file);
16108       break;
16109     case AFL_EXT_OCTEON3:
16110       fputs ("Cavium Networks Octeon3", file);
16111       break;
16112     case AFL_EXT_OCTEON2:
16113       fputs ("Cavium Networks Octeon2", file);
16114       break;
16115     case AFL_EXT_OCTEONP:
16116       fputs ("Cavium Networks OcteonP", file);
16117       break;
16118     case AFL_EXT_OCTEON:
16119       fputs ("Cavium Networks Octeon", file);
16120       break;
16121     case AFL_EXT_5900:
16122       fputs ("Toshiba R5900", file);
16123       break;
16124     case AFL_EXT_4650:
16125       fputs ("MIPS R4650", file);
16126       break;
16127     case AFL_EXT_4010:
16128       fputs ("LSI R4010", file);
16129       break;
16130     case AFL_EXT_4100:
16131       fputs ("NEC VR4100", file);
16132       break;
16133     case AFL_EXT_3900:
16134       fputs ("Toshiba R3900", file);
16135       break;
16136     case AFL_EXT_10000:
16137       fputs ("MIPS R10000", file);
16138       break;
16139     case AFL_EXT_SB1:
16140       fputs ("Broadcom SB-1", file);
16141       break;
16142     case AFL_EXT_4111:
16143       fputs ("NEC VR4111/VR4181", file);
16144       break;
16145     case AFL_EXT_4120:
16146       fputs ("NEC VR4120", file);
16147       break;
16148     case AFL_EXT_5400:
16149       fputs ("NEC VR5400", file);
16150       break;
16151     case AFL_EXT_5500:
16152       fputs ("NEC VR5500", file);
16153       break;
16154     case AFL_EXT_LOONGSON_2E:
16155       fputs ("ST Microelectronics Loongson 2E", file);
16156       break;
16157     case AFL_EXT_LOONGSON_2F:
16158       fputs ("ST Microelectronics Loongson 2F", file);
16159       break;
16160     case AFL_EXT_INTERAPTIV_MR2:
16161       fputs ("Imagination interAptiv MR2", file);
16162       break;
16163     default:
16164       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
16165       break;
16166     }
16167 }
16168 
16169 static void
16170 print_mips_fp_abi_value (FILE *file, int val)
16171 {
16172   switch (val)
16173     {
16174     case Val_GNU_MIPS_ABI_FP_ANY:
16175       fprintf (file, _("Hard or soft float\n"));
16176       break;
16177     case Val_GNU_MIPS_ABI_FP_DOUBLE:
16178       fprintf (file, _("Hard float (double precision)\n"));
16179       break;
16180     case Val_GNU_MIPS_ABI_FP_SINGLE:
16181       fprintf (file, _("Hard float (single precision)\n"));
16182       break;
16183     case Val_GNU_MIPS_ABI_FP_SOFT:
16184       fprintf (file, _("Soft float\n"));
16185       break;
16186     case Val_GNU_MIPS_ABI_FP_OLD_64:
16187       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
16188       break;
16189     case Val_GNU_MIPS_ABI_FP_XX:
16190       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
16191       break;
16192     case Val_GNU_MIPS_ABI_FP_64:
16193       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
16194       break;
16195     case Val_GNU_MIPS_ABI_FP_64A:
16196       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
16197       break;
16198     default:
16199       fprintf (file, "??? (%d)\n", val);
16200       break;
16201     }
16202 }
16203 
16204 static int
16205 get_mips_reg_size (int reg_size)
16206 {
16207   return (reg_size == AFL_REG_NONE) ? 0
16208 	 : (reg_size == AFL_REG_32) ? 32
16209 	 : (reg_size == AFL_REG_64) ? 64
16210 	 : (reg_size == AFL_REG_128) ? 128
16211 	 : -1;
16212 }
16213 
16214 bfd_boolean
16215 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
16216 {
16217   FILE *file = ptr;
16218 
16219   BFD_ASSERT (abfd != NULL && ptr != NULL);
16220 
16221   /* Print normal ELF private data.  */
16222   _bfd_elf_print_private_bfd_data (abfd, ptr);
16223 
16224   /* xgettext:c-format */
16225   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
16226 
16227   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
16228     fprintf (file, _(" [abi=O32]"));
16229   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
16230     fprintf (file, _(" [abi=O64]"));
16231   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
16232     fprintf (file, _(" [abi=EABI32]"));
16233   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
16234     fprintf (file, _(" [abi=EABI64]"));
16235   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
16236     fprintf (file, _(" [abi unknown]"));
16237   else if (ABI_N32_P (abfd))
16238     fprintf (file, _(" [abi=N32]"));
16239   else if (ABI_64_P (abfd))
16240     fprintf (file, _(" [abi=64]"));
16241   else
16242     fprintf (file, _(" [no abi set]"));
16243 
16244   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
16245     fprintf (file, " [mips1]");
16246   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
16247     fprintf (file, " [mips2]");
16248   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
16249     fprintf (file, " [mips3]");
16250   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
16251     fprintf (file, " [mips4]");
16252   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
16253     fprintf (file, " [mips5]");
16254   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
16255     fprintf (file, " [mips32]");
16256   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
16257     fprintf (file, " [mips64]");
16258   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
16259     fprintf (file, " [mips32r2]");
16260   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
16261     fprintf (file, " [mips64r2]");
16262   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
16263     fprintf (file, " [mips32r6]");
16264   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
16265     fprintf (file, " [mips64r6]");
16266   else
16267     fprintf (file, _(" [unknown ISA]"));
16268 
16269   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
16270     fprintf (file, " [mdmx]");
16271 
16272   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
16273     fprintf (file, " [mips16]");
16274 
16275   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
16276     fprintf (file, " [micromips]");
16277 
16278   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
16279     fprintf (file, " [nan2008]");
16280 
16281   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
16282     fprintf (file, " [old fp64]");
16283 
16284   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
16285     fprintf (file, " [32bitmode]");
16286   else
16287     fprintf (file, _(" [not 32bitmode]"));
16288 
16289   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
16290     fprintf (file, " [noreorder]");
16291 
16292   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
16293     fprintf (file, " [PIC]");
16294 
16295   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
16296     fprintf (file, " [CPIC]");
16297 
16298   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
16299     fprintf (file, " [XGOT]");
16300 
16301   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
16302     fprintf (file, " [UCODE]");
16303 
16304   fputc ('\n', file);
16305 
16306   if (mips_elf_tdata (abfd)->abiflags_valid)
16307     {
16308       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
16309       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
16310       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
16311       if (abiflags->isa_rev > 1)
16312 	fprintf (file, "r%d", abiflags->isa_rev);
16313       fprintf (file, "\nGPR size: %d",
16314 	       get_mips_reg_size (abiflags->gpr_size));
16315       fprintf (file, "\nCPR1 size: %d",
16316 	       get_mips_reg_size (abiflags->cpr1_size));
16317       fprintf (file, "\nCPR2 size: %d",
16318 	       get_mips_reg_size (abiflags->cpr2_size));
16319       fputs ("\nFP ABI: ", file);
16320       print_mips_fp_abi_value (file, abiflags->fp_abi);
16321       fputs ("ISA Extension: ", file);
16322       print_mips_isa_ext (file, abiflags->isa_ext);
16323       fputs ("\nASEs:", file);
16324       print_mips_ases (file, abiflags->ases);
16325       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
16326       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
16327       fputc ('\n', file);
16328     }
16329 
16330   return TRUE;
16331 }
16332 
16333 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
16334 {
16335   { STRING_COMMA_LEN (".lit4"),	  0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16336   { STRING_COMMA_LEN (".lit8"),	  0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16337   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
16338   { STRING_COMMA_LEN (".sbss"),	 -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16339   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
16340   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
16341   { STRING_COMMA_LEN (".MIPS.xhash"),  0, SHT_MIPS_XHASH,   SHF_ALLOC },
16342   { NULL,		      0,  0, 0,		     0 }
16343 };
16344 
16345 /* Merge non visibility st_other attributes.  Ensure that the
16346    STO_OPTIONAL flag is copied into h->other, even if this is not a
16347    definiton of the symbol.  */
16348 void
16349 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
16350 				      const Elf_Internal_Sym *isym,
16351 				      bfd_boolean definition,
16352 				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
16353 {
16354   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
16355     {
16356       unsigned char other;
16357 
16358       other = (definition ? isym->st_other : h->other);
16359       other &= ~ELF_ST_VISIBILITY (-1);
16360       h->other = other | ELF_ST_VISIBILITY (h->other);
16361     }
16362 
16363   if (!definition
16364       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
16365     h->other |= STO_OPTIONAL;
16366 }
16367 
16368 /* Decide whether an undefined symbol is special and can be ignored.
16369    This is the case for OPTIONAL symbols on IRIX.  */
16370 bfd_boolean
16371 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
16372 {
16373   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
16374 }
16375 
16376 bfd_boolean
16377 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
16378 {
16379   return (sym->st_shndx == SHN_COMMON
16380 	  || sym->st_shndx == SHN_MIPS_ACOMMON
16381 	  || sym->st_shndx == SHN_MIPS_SCOMMON);
16382 }
16383 
16384 /* Return address for Ith PLT stub in section PLT, for relocation REL
16385    or (bfd_vma) -1 if it should not be included.  */
16386 
16387 bfd_vma
16388 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
16389 			   const arelent *rel ATTRIBUTE_UNUSED)
16390 {
16391   return (plt->vma
16392 	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
16393 	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
16394 }
16395 
16396 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
16397    and microMIPS PLT slots we may have a many-to-one mapping between .plt
16398    and .got.plt and also the slots may be of a different size each we walk
16399    the PLT manually fetching instructions and matching them against known
16400    patterns.  To make things easier standard MIPS slots, if any, always come
16401    first.  As we don't create proper ELF symbols we use the UDATA.I member
16402    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
16403    with the ST_OTHER member of the ELF symbol.  */
16404 
16405 long
16406 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
16407 				    long symcount ATTRIBUTE_UNUSED,
16408 				    asymbol **syms ATTRIBUTE_UNUSED,
16409 				    long dynsymcount, asymbol **dynsyms,
16410 				    asymbol **ret)
16411 {
16412   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
16413   static const char microsuffix[] = "@micromipsplt";
16414   static const char m16suffix[] = "@mips16plt";
16415   static const char mipssuffix[] = "@plt";
16416 
16417   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
16418   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
16419   bfd_boolean micromips_p = MICROMIPS_P (abfd);
16420   Elf_Internal_Shdr *hdr;
16421   bfd_byte *plt_data;
16422   bfd_vma plt_offset;
16423   unsigned int other;
16424   bfd_vma entry_size;
16425   bfd_vma plt0_size;
16426   asection *relplt;
16427   bfd_vma opcode;
16428   asection *plt;
16429   asymbol *send;
16430   size_t size;
16431   char *names;
16432   long counti;
16433   arelent *p;
16434   asymbol *s;
16435   char *nend;
16436   long count;
16437   long pi;
16438   long i;
16439   long n;
16440 
16441   *ret = NULL;
16442 
16443   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
16444     return 0;
16445 
16446   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
16447   if (relplt == NULL)
16448     return 0;
16449 
16450   hdr = &elf_section_data (relplt)->this_hdr;
16451   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
16452     return 0;
16453 
16454   plt = bfd_get_section_by_name (abfd, ".plt");
16455   if (plt == NULL)
16456     return 0;
16457 
16458   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
16459   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
16460     return -1;
16461   p = relplt->relocation;
16462 
16463   /* Calculating the exact amount of space required for symbols would
16464      require two passes over the PLT, so just pessimise assuming two
16465      PLT slots per relocation.  */
16466   count = relplt->size / hdr->sh_entsize;
16467   counti = count * bed->s->int_rels_per_ext_rel;
16468   size = 2 * count * sizeof (asymbol);
16469   size += count * (sizeof (mipssuffix) +
16470 		   (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
16471   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
16472     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
16473 
16474   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
16475   size += sizeof (asymbol) + sizeof (pltname);
16476 
16477   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
16478     return -1;
16479 
16480   if (plt->size < 16)
16481     return -1;
16482 
16483   s = *ret = bfd_malloc (size);
16484   if (s == NULL)
16485     return -1;
16486   send = s + 2 * count + 1;
16487 
16488   names = (char *) send;
16489   nend = (char *) s + size;
16490   n = 0;
16491 
16492   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
16493   if (opcode == 0x3302fffe)
16494     {
16495       if (!micromips_p)
16496 	return -1;
16497       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
16498       other = STO_MICROMIPS;
16499     }
16500   else if (opcode == 0x0398c1d0)
16501     {
16502       if (!micromips_p)
16503 	return -1;
16504       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
16505       other = STO_MICROMIPS;
16506     }
16507   else
16508     {
16509       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
16510       other = 0;
16511     }
16512 
16513   s->the_bfd = abfd;
16514   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
16515   s->section = plt;
16516   s->value = 0;
16517   s->name = names;
16518   s->udata.i = other;
16519   memcpy (names, pltname, sizeof (pltname));
16520   names += sizeof (pltname);
16521   ++s, ++n;
16522 
16523   pi = 0;
16524   for (plt_offset = plt0_size;
16525        plt_offset + 8 <= plt->size && s < send;
16526        plt_offset += entry_size)
16527     {
16528       bfd_vma gotplt_addr;
16529       const char *suffix;
16530       bfd_vma gotplt_hi;
16531       bfd_vma gotplt_lo;
16532       size_t suffixlen;
16533 
16534       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
16535 
16536       /* Check if the second word matches the expected MIPS16 instruction.  */
16537       if (opcode == 0x651aeb00)
16538 	{
16539 	  if (micromips_p)
16540 	    return -1;
16541 	  /* Truncated table???  */
16542 	  if (plt_offset + 16 > plt->size)
16543 	    break;
16544 	  gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
16545 	  entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
16546 	  suffixlen = sizeof (m16suffix);
16547 	  suffix = m16suffix;
16548 	  other = STO_MIPS16;
16549 	}
16550       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16551       else if (opcode == 0xff220000)
16552 	{
16553 	  if (!micromips_p)
16554 	    return -1;
16555 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16556 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16557 	  gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16558 	  gotplt_lo <<= 2;
16559 	  gotplt_addr = gotplt_hi + gotplt_lo;
16560 	  gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16561 	  entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16562 	  suffixlen = sizeof (microsuffix);
16563 	  suffix = microsuffix;
16564 	  other = STO_MICROMIPS;
16565 	}
16566       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16567       else if ((opcode & 0xffff0000) == 0xff2f0000)
16568 	{
16569 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16570 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16571 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16572 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16573 	  gotplt_addr = gotplt_hi + gotplt_lo;
16574 	  entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16575 	  suffixlen = sizeof (microsuffix);
16576 	  suffix = microsuffix;
16577 	  other = STO_MICROMIPS;
16578 	}
16579       /* Otherwise assume standard MIPS code.  */
16580       else
16581 	{
16582 	  gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16583 	  gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16584 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16585 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16586 	  gotplt_addr = gotplt_hi + gotplt_lo;
16587 	  entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16588 	  suffixlen = sizeof (mipssuffix);
16589 	  suffix = mipssuffix;
16590 	  other = 0;
16591 	}
16592       /* Truncated table???  */
16593       if (plt_offset + entry_size > plt->size)
16594 	break;
16595 
16596       for (i = 0;
16597 	   i < count && p[pi].address != gotplt_addr;
16598 	   i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16599 
16600       if (i < count)
16601 	{
16602 	  size_t namelen;
16603 	  size_t len;
16604 
16605 	  *s = **p[pi].sym_ptr_ptr;
16606 	  /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16607 	     we are defining a symbol, ensure one of them is set.  */
16608 	  if ((s->flags & BSF_LOCAL) == 0)
16609 	    s->flags |= BSF_GLOBAL;
16610 	  s->flags |= BSF_SYNTHETIC;
16611 	  s->section = plt;
16612 	  s->value = plt_offset;
16613 	  s->name = names;
16614 	  s->udata.i = other;
16615 
16616 	  len = strlen ((*p[pi].sym_ptr_ptr)->name);
16617 	  namelen = len + suffixlen;
16618 	  if (names + namelen > nend)
16619 	    break;
16620 
16621 	  memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16622 	  names += len;
16623 	  memcpy (names, suffix, suffixlen);
16624 	  names += suffixlen;
16625 
16626 	  ++s, ++n;
16627 	  pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16628 	}
16629     }
16630 
16631   free (plt_data);
16632 
16633   return n;
16634 }
16635 
16636 /* Return the ABI flags associated with ABFD if available.  */
16637 
16638 Elf_Internal_ABIFlags_v0 *
16639 bfd_mips_elf_get_abiflags (bfd *abfd)
16640 {
16641   struct mips_elf_obj_tdata *tdata = mips_elf_tdata (abfd);
16642 
16643   return tdata->abiflags_valid ? &tdata->abiflags : NULL;
16644 }
16645 
16646 /* MIPS libc ABI versions, used with the EI_ABIVERSION ELF file header
16647    field.  Taken from `libc-abis.h' generated at GNU libc build time.
16648    Using a MIPS_ prefix as other libc targets use different values.  */
16649 enum
16650 {
16651   MIPS_LIBC_ABI_DEFAULT = 0,
16652   MIPS_LIBC_ABI_MIPS_PLT,
16653   MIPS_LIBC_ABI_UNIQUE,
16654   MIPS_LIBC_ABI_MIPS_O32_FP64,
16655   MIPS_LIBC_ABI_ABSOLUTE,
16656   MIPS_LIBC_ABI_XHASH,
16657   MIPS_LIBC_ABI_MAX
16658 };
16659 
16660 bfd_boolean
16661 _bfd_mips_init_file_header (bfd *abfd, struct bfd_link_info *link_info)
16662 {
16663   struct mips_elf_link_hash_table *htab = NULL;
16664   Elf_Internal_Ehdr *i_ehdrp;
16665 
16666   if (!_bfd_elf_init_file_header (abfd, link_info))
16667     return FALSE;
16668 
16669   i_ehdrp = elf_elfheader (abfd);
16670   if (link_info)
16671     {
16672       htab = mips_elf_hash_table (link_info);
16673       BFD_ASSERT (htab != NULL);
16674     }
16675 
16676   if (htab != NULL && htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16677     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_PLT;
16678 
16679   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16680       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16681     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_MIPS_O32_FP64;
16682 
16683   /* Mark that we need support for absolute symbols in the dynamic loader.  */
16684   if (htab != NULL && htab->use_absolute_zero && htab->gnu_target)
16685     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_ABSOLUTE;
16686 
16687   /* Mark that we need support for .MIPS.xhash in the dynamic linker,
16688      if it is the only hash section that will be created.  */
16689   if (link_info && link_info->emit_gnu_hash && !link_info->emit_hash)
16690     i_ehdrp->e_ident[EI_ABIVERSION] = MIPS_LIBC_ABI_XHASH;
16691   return TRUE;
16692 }
16693 
16694 int
16695 _bfd_mips_elf_compact_eh_encoding
16696   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16697 {
16698   return DW_EH_PE_pcrel | DW_EH_PE_sdata4;
16699 }
16700 
16701 /* Return the opcode for can't unwind.  */
16702 
16703 int
16704 _bfd_mips_elf_cant_unwind_opcode
16705   (struct bfd_link_info *link_info ATTRIBUTE_UNUSED)
16706 {
16707   return COMPACT_EH_CANT_UNWIND_OPCODE;
16708 }
16709 
16710 /* Record a position XLAT_LOC in the xlat translation table, associated with
16711    the hash entry H.  The entry in the translation table will later be
16712    populated with the real symbol dynindx.  */
16713 
16714 void
16715 _bfd_mips_elf_record_xhash_symbol (struct elf_link_hash_entry *h,
16716 				   bfd_vma xlat_loc)
16717 {
16718   struct mips_elf_link_hash_entry *hmips;
16719 
16720   hmips = (struct mips_elf_link_hash_entry *) h;
16721   hmips->mipsxhash_loc = xlat_loc;
16722 }
16723