xref: /netbsd-src/external/gpl3/gdb/dist/bfd/elfxx-mips.c (revision a6f3f22f245acb8ee3bbf6871d7dce989204fa97)
1 /* MIPS-specific support for ELF
2    Copyright (C) 1993-2015 Free Software Foundation, Inc.
3 
4    Most of the information added by Ian Lance Taylor, Cygnus Support,
5    <ian@cygnus.com>.
6    N32/64 ABI support added by Mark Mitchell, CodeSourcery, LLC.
7    <mark@codesourcery.com>
8    Traditional MIPS targets support added by Koundinya.K, Dansk Data
9    Elektronik & Operations Research Group. <kk@ddeorg.soft.net>
10 
11    This file is part of BFD, the Binary File Descriptor library.
12 
13    This program is free software; you can redistribute it and/or modify
14    it under the terms of the GNU General Public License as published by
15    the Free Software Foundation; either version 3 of the License, or
16    (at your option) any later version.
17 
18    This program is distributed in the hope that it will be useful,
19    but WITHOUT ANY WARRANTY; without even the implied warranty of
20    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21    GNU General Public License for more details.
22 
23    You should have received a copy of the GNU General Public License
24    along with this program; if not, write to the Free Software
25    Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
26    MA 02110-1301, USA.  */
27 
28 
29 /* This file handles functionality common to the different MIPS ABI's.  */
30 
31 #include "sysdep.h"
32 #include "bfd.h"
33 #include "libbfd.h"
34 #include "libiberty.h"
35 #include "elf-bfd.h"
36 #include "elfxx-mips.h"
37 #include "elf/mips.h"
38 #include "elf-vxworks.h"
39 
40 /* Get the ECOFF swapping routines.  */
41 #include "coff/sym.h"
42 #include "coff/symconst.h"
43 #include "coff/ecoff.h"
44 #include "coff/mips.h"
45 
46 #include "hashtab.h"
47 
48 /* Types of TLS GOT entry.  */
49 enum mips_got_tls_type {
50   GOT_TLS_NONE,
51   GOT_TLS_GD,
52   GOT_TLS_LDM,
53   GOT_TLS_IE
54 };
55 
56 /* This structure is used to hold information about one GOT entry.
57    There are four types of entry:
58 
59       (1) an absolute address
60 	    requires: abfd == NULL
61 	    fields: d.address
62 
63       (2) a SYMBOL + OFFSET address, where SYMBOL is local to an input bfd
64 	    requires: abfd != NULL, symndx >= 0, tls_type != GOT_TLS_LDM
65 	    fields: abfd, symndx, d.addend, tls_type
66 
67       (3) a SYMBOL address, where SYMBOL is not local to an input bfd
68 	    requires: abfd != NULL, symndx == -1
69 	    fields: d.h, tls_type
70 
71       (4) a TLS LDM slot
72 	    requires: abfd != NULL, symndx == 0, tls_type == GOT_TLS_LDM
73 	    fields: none; there's only one of these per GOT.  */
74 struct mips_got_entry
75 {
76   /* One input bfd that needs the GOT entry.  */
77   bfd *abfd;
78   /* The index of the symbol, as stored in the relocation r_info, if
79      we have a local symbol; -1 otherwise.  */
80   long symndx;
81   union
82   {
83     /* If abfd == NULL, an address that must be stored in the got.  */
84     bfd_vma address;
85     /* If abfd != NULL && symndx != -1, the addend of the relocation
86        that should be added to the symbol value.  */
87     bfd_vma addend;
88     /* If abfd != NULL && symndx == -1, the hash table entry
89        corresponding to a symbol in the GOT.  The symbol's entry
90        is in the local area if h->global_got_area is GGA_NONE,
91        otherwise it is in the global area.  */
92     struct mips_elf_link_hash_entry *h;
93   } d;
94 
95   /* The TLS type of this GOT entry.  An LDM GOT entry will be a local
96      symbol entry with r_symndx == 0.  */
97   unsigned char tls_type;
98 
99   /* True if we have filled in the GOT contents for a TLS entry,
100      and created the associated relocations.  */
101   unsigned char tls_initialized;
102 
103   /* The offset from the beginning of the .got section to the entry
104      corresponding to this symbol+addend.  If it's a global symbol
105      whose offset is yet to be decided, it's going to be -1.  */
106   long gotidx;
107 };
108 
109 /* This structure represents a GOT page reference from an input bfd.
110    Each instance represents a symbol + ADDEND, where the representation
111    of the symbol depends on whether it is local to the input bfd.
112    If it is, then SYMNDX >= 0, and the symbol has index SYMNDX in U.ABFD.
113    Otherwise, SYMNDX < 0 and U.H points to the symbol's hash table entry.
114 
115    Page references with SYMNDX >= 0 always become page references
116    in the output.  Page references with SYMNDX < 0 only become page
117    references if the symbol binds locally; in other cases, the page
118    reference decays to a global GOT reference.  */
119 struct mips_got_page_ref
120 {
121   long symndx;
122   union
123   {
124     struct mips_elf_link_hash_entry *h;
125     bfd *abfd;
126   } u;
127   bfd_vma addend;
128 };
129 
130 /* This structure describes a range of addends: [MIN_ADDEND, MAX_ADDEND].
131    The structures form a non-overlapping list that is sorted by increasing
132    MIN_ADDEND.  */
133 struct mips_got_page_range
134 {
135   struct mips_got_page_range *next;
136   bfd_signed_vma min_addend;
137   bfd_signed_vma max_addend;
138 };
139 
140 /* This structure describes the range of addends that are applied to page
141    relocations against a given section.  */
142 struct mips_got_page_entry
143 {
144   /* The section that these entries are based on.  */
145   asection *sec;
146   /* The ranges for this page entry.  */
147   struct mips_got_page_range *ranges;
148   /* The maximum number of page entries needed for RANGES.  */
149   bfd_vma num_pages;
150 };
151 
152 /* This structure is used to hold .got information when linking.  */
153 
154 struct mips_got_info
155 {
156   /* The number of global .got entries.  */
157   unsigned int global_gotno;
158   /* The number of global .got entries that are in the GGA_RELOC_ONLY area.  */
159   unsigned int reloc_only_gotno;
160   /* The number of .got slots used for TLS.  */
161   unsigned int tls_gotno;
162   /* The first unused TLS .got entry.  Used only during
163      mips_elf_initialize_tls_index.  */
164   unsigned int tls_assigned_gotno;
165   /* The number of local .got entries, eventually including page entries.  */
166   unsigned int local_gotno;
167   /* The maximum number of page entries needed.  */
168   unsigned int page_gotno;
169   /* The number of relocations needed for the GOT entries.  */
170   unsigned int relocs;
171   /* The first unused local .got entry.  */
172   unsigned int assigned_low_gotno;
173   /* The last unused local .got entry.  */
174   unsigned int assigned_high_gotno;
175   /* A hash table holding members of the got.  */
176   struct htab *got_entries;
177   /* A hash table holding mips_got_page_ref structures.  */
178   struct htab *got_page_refs;
179   /* A hash table of mips_got_page_entry structures.  */
180   struct htab *got_page_entries;
181   /* In multi-got links, a pointer to the next got (err, rather, most
182      of the time, it points to the previous got).  */
183   struct mips_got_info *next;
184 };
185 
186 /* Structure passed when merging bfds' gots.  */
187 
188 struct mips_elf_got_per_bfd_arg
189 {
190   /* The output bfd.  */
191   bfd *obfd;
192   /* The link information.  */
193   struct bfd_link_info *info;
194   /* A pointer to the primary got, i.e., the one that's going to get
195      the implicit relocations from DT_MIPS_LOCAL_GOTNO and
196      DT_MIPS_GOTSYM.  */
197   struct mips_got_info *primary;
198   /* A non-primary got we're trying to merge with other input bfd's
199      gots.  */
200   struct mips_got_info *current;
201   /* The maximum number of got entries that can be addressed with a
202      16-bit offset.  */
203   unsigned int max_count;
204   /* The maximum number of page entries needed by each got.  */
205   unsigned int max_pages;
206   /* The total number of global entries which will live in the
207      primary got and be automatically relocated.  This includes
208      those not referenced by the primary GOT but included in
209      the "master" GOT.  */
210   unsigned int global_count;
211 };
212 
213 /* A structure used to pass information to htab_traverse callbacks
214    when laying out the GOT.  */
215 
216 struct mips_elf_traverse_got_arg
217 {
218   struct bfd_link_info *info;
219   struct mips_got_info *g;
220   int value;
221 };
222 
223 struct _mips_elf_section_data
224 {
225   struct bfd_elf_section_data elf;
226   union
227   {
228     bfd_byte *tdata;
229   } u;
230 };
231 
232 #define mips_elf_section_data(sec) \
233   ((struct _mips_elf_section_data *) elf_section_data (sec))
234 
235 #define is_mips_elf(bfd)				\
236   (bfd_get_flavour (bfd) == bfd_target_elf_flavour	\
237    && elf_tdata (bfd) != NULL				\
238    && elf_object_id (bfd) == MIPS_ELF_DATA)
239 
240 /* The ABI says that every symbol used by dynamic relocations must have
241    a global GOT entry.  Among other things, this provides the dynamic
242    linker with a free, directly-indexed cache.  The GOT can therefore
243    contain symbols that are not referenced by GOT relocations themselves
244    (in other words, it may have symbols that are not referenced by things
245    like R_MIPS_GOT16 and R_MIPS_GOT_PAGE).
246 
247    GOT relocations are less likely to overflow if we put the associated
248    GOT entries towards the beginning.  We therefore divide the global
249    GOT entries into two areas: "normal" and "reloc-only".  Entries in
250    the first area can be used for both dynamic relocations and GP-relative
251    accesses, while those in the "reloc-only" area are for dynamic
252    relocations only.
253 
254    These GGA_* ("Global GOT Area") values are organised so that lower
255    values are more general than higher values.  Also, non-GGA_NONE
256    values are ordered by the position of the area in the GOT.  */
257 #define GGA_NORMAL 0
258 #define GGA_RELOC_ONLY 1
259 #define GGA_NONE 2
260 
261 /* Information about a non-PIC interface to a PIC function.  There are
262    two ways of creating these interfaces.  The first is to add:
263 
264 	lui	$25,%hi(func)
265 	addiu	$25,$25,%lo(func)
266 
267    immediately before a PIC function "func".  The second is to add:
268 
269 	lui	$25,%hi(func)
270 	j	func
271 	addiu	$25,$25,%lo(func)
272 
273    to a separate trampoline section.
274 
275    Stubs of the first kind go in a new section immediately before the
276    target function.  Stubs of the second kind go in a single section
277    pointed to by the hash table's "strampoline" field.  */
278 struct mips_elf_la25_stub {
279   /* The generated section that contains this stub.  */
280   asection *stub_section;
281 
282   /* The offset of the stub from the start of STUB_SECTION.  */
283   bfd_vma offset;
284 
285   /* One symbol for the original function.  Its location is available
286      in H->root.root.u.def.  */
287   struct mips_elf_link_hash_entry *h;
288 };
289 
290 /* Macros for populating a mips_elf_la25_stub.  */
291 
292 #define LA25_LUI(VAL) (0x3c190000 | (VAL))	/* lui t9,VAL */
293 #define LA25_J(VAL) (0x08000000 | (((VAL) >> 2) & 0x3ffffff)) /* j VAL */
294 #define LA25_ADDIU(VAL) (0x27390000 | (VAL))	/* addiu t9,t9,VAL */
295 #define LA25_LUI_MICROMIPS(VAL)						\
296   (0x41b90000 | (VAL))				/* lui t9,VAL */
297 #define LA25_J_MICROMIPS(VAL)						\
298   (0xd4000000 | (((VAL) >> 1) & 0x3ffffff))	/* j VAL */
299 #define LA25_ADDIU_MICROMIPS(VAL)					\
300   (0x33390000 | (VAL))				/* addiu t9,t9,VAL */
301 
302 /* This structure is passed to mips_elf_sort_hash_table_f when sorting
303    the dynamic symbols.  */
304 
305 struct mips_elf_hash_sort_data
306 {
307   /* The symbol in the global GOT with the lowest dynamic symbol table
308      index.  */
309   struct elf_link_hash_entry *low;
310   /* The least dynamic symbol table index corresponding to a non-TLS
311      symbol with a GOT entry.  */
312   long min_got_dynindx;
313   /* The greatest dynamic symbol table index corresponding to a symbol
314      with a GOT entry that is not referenced (e.g., a dynamic symbol
315      with dynamic relocations pointing to it from non-primary GOTs).  */
316   long max_unref_got_dynindx;
317   /* The greatest dynamic symbol table index not corresponding to a
318      symbol without a GOT entry.  */
319   long max_non_got_dynindx;
320 };
321 
322 /* We make up to two PLT entries if needed, one for standard MIPS code
323    and one for compressed code, either a MIPS16 or microMIPS one.  We
324    keep a separate record of traditional lazy-binding stubs, for easier
325    processing.  */
326 
327 struct plt_entry
328 {
329   /* Traditional SVR4 stub offset, or -1 if none.  */
330   bfd_vma stub_offset;
331 
332   /* Standard PLT entry offset, or -1 if none.  */
333   bfd_vma mips_offset;
334 
335   /* Compressed PLT entry offset, or -1 if none.  */
336   bfd_vma comp_offset;
337 
338   /* The corresponding .got.plt index, or -1 if none.  */
339   bfd_vma gotplt_index;
340 
341   /* Whether we need a standard PLT entry.  */
342   unsigned int need_mips : 1;
343 
344   /* Whether we need a compressed PLT entry.  */
345   unsigned int need_comp : 1;
346 };
347 
348 /* The MIPS ELF linker needs additional information for each symbol in
349    the global hash table.  */
350 
351 struct mips_elf_link_hash_entry
352 {
353   struct elf_link_hash_entry root;
354 
355   /* External symbol information.  */
356   EXTR esym;
357 
358   /* The la25 stub we have created for ths symbol, if any.  */
359   struct mips_elf_la25_stub *la25_stub;
360 
361   /* Number of R_MIPS_32, R_MIPS_REL32, or R_MIPS_64 relocs against
362      this symbol.  */
363   unsigned int possibly_dynamic_relocs;
364 
365   /* If there is a stub that 32 bit functions should use to call this
366      16 bit function, this points to the section containing the stub.  */
367   asection *fn_stub;
368 
369   /* If there is a stub that 16 bit functions should use to call this
370      32 bit function, this points to the section containing the stub.  */
371   asection *call_stub;
372 
373   /* This is like the call_stub field, but it is used if the function
374      being called returns a floating point value.  */
375   asection *call_fp_stub;
376 
377   /* The highest GGA_* value that satisfies all references to this symbol.  */
378   unsigned int global_got_area : 2;
379 
380   /* True if all GOT relocations against this symbol are for calls.  This is
381      a looser condition than no_fn_stub below, because there may be other
382      non-call non-GOT relocations against the symbol.  */
383   unsigned int got_only_for_calls : 1;
384 
385   /* True if one of the relocations described by possibly_dynamic_relocs
386      is against a readonly section.  */
387   unsigned int readonly_reloc : 1;
388 
389   /* True if there is a relocation against this symbol that must be
390      resolved by the static linker (in other words, if the relocation
391      cannot possibly be made dynamic).  */
392   unsigned int has_static_relocs : 1;
393 
394   /* True if we must not create a .MIPS.stubs entry for this symbol.
395      This is set, for example, if there are relocations related to
396      taking the function's address, i.e. any but R_MIPS_CALL*16 ones.
397      See "MIPS ABI Supplement, 3rd Edition", p. 4-20.  */
398   unsigned int no_fn_stub : 1;
399 
400   /* Whether we need the fn_stub; this is true if this symbol appears
401      in any relocs other than a 16 bit call.  */
402   unsigned int need_fn_stub : 1;
403 
404   /* True if this symbol is referenced by branch relocations from
405      any non-PIC input file.  This is used to determine whether an
406      la25 stub is required.  */
407   unsigned int has_nonpic_branches : 1;
408 
409   /* Does this symbol need a traditional MIPS lazy-binding stub
410      (as opposed to a PLT entry)?  */
411   unsigned int needs_lazy_stub : 1;
412 
413   /* Does this symbol resolve to a PLT entry?  */
414   unsigned int use_plt_entry : 1;
415 };
416 
417 /* MIPS ELF linker hash table.  */
418 
419 struct mips_elf_link_hash_table
420 {
421   struct elf_link_hash_table root;
422 
423   /* The number of .rtproc entries.  */
424   bfd_size_type procedure_count;
425 
426   /* The size of the .compact_rel section (if SGI_COMPAT).  */
427   bfd_size_type compact_rel_size;
428 
429   /* This flag indicates that the value of DT_MIPS_RLD_MAP dynamic entry
430      is set to the address of __rld_obj_head as in IRIX5 and IRIX6.  */
431   bfd_boolean use_rld_obj_head;
432 
433   /* The  __rld_map or __rld_obj_head symbol. */
434   struct elf_link_hash_entry *rld_symbol;
435 
436   /* This is set if we see any mips16 stub sections.  */
437   bfd_boolean mips16_stubs_seen;
438 
439   /* True if we can generate copy relocs and PLTs.  */
440   bfd_boolean use_plts_and_copy_relocs;
441 
442   /* True if we can only use 32-bit microMIPS instructions.  */
443   bfd_boolean insn32;
444 
445   /* True if we're generating code for VxWorks.  */
446   bfd_boolean is_vxworks;
447 
448   /* True if we already reported the small-data section overflow.  */
449   bfd_boolean small_data_overflow_reported;
450 
451   /* Shortcuts to some dynamic sections, or NULL if they are not
452      being used.  */
453   asection *srelbss;
454   asection *sdynbss;
455   asection *srelplt;
456   asection *srelplt2;
457   asection *sgotplt;
458   asection *splt;
459   asection *sstubs;
460   asection *sgot;
461 
462   /* The master GOT information.  */
463   struct mips_got_info *got_info;
464 
465   /* The global symbol in the GOT with the lowest index in the dynamic
466      symbol table.  */
467   struct elf_link_hash_entry *global_gotsym;
468 
469   /* The size of the PLT header in bytes.  */
470   bfd_vma plt_header_size;
471 
472   /* The size of a standard PLT entry in bytes.  */
473   bfd_vma plt_mips_entry_size;
474 
475   /* The size of a compressed PLT entry in bytes.  */
476   bfd_vma plt_comp_entry_size;
477 
478   /* The offset of the next standard PLT entry to create.  */
479   bfd_vma plt_mips_offset;
480 
481   /* The offset of the next compressed PLT entry to create.  */
482   bfd_vma plt_comp_offset;
483 
484   /* The index of the next .got.plt entry to create.  */
485   bfd_vma plt_got_index;
486 
487   /* The number of functions that need a lazy-binding stub.  */
488   bfd_vma lazy_stub_count;
489 
490   /* The size of a function stub entry in bytes.  */
491   bfd_vma function_stub_size;
492 
493   /* The number of reserved entries at the beginning of the GOT.  */
494   unsigned int reserved_gotno;
495 
496   /* The section used for mips_elf_la25_stub trampolines.
497      See the comment above that structure for details.  */
498   asection *strampoline;
499 
500   /* A table of mips_elf_la25_stubs, indexed by (input_section, offset)
501      pairs.  */
502   htab_t la25_stubs;
503 
504   /* A function FN (NAME, IS, OS) that creates a new input section
505      called NAME and links it to output section OS.  If IS is nonnull,
506      the new section should go immediately before it, otherwise it
507      should go at the (current) beginning of OS.
508 
509      The function returns the new section on success, otherwise it
510      returns null.  */
511   asection *(*add_stub_section) (const char *, asection *, asection *);
512 
513   /* Small local sym cache.  */
514   struct sym_cache sym_cache;
515 
516   /* Is the PLT header compressed?  */
517   unsigned int plt_header_is_comp : 1;
518 };
519 
520 /* Get the MIPS ELF linker hash table from a link_info structure.  */
521 
522 #define mips_elf_hash_table(p) \
523   (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
524   == MIPS_ELF_DATA ? ((struct mips_elf_link_hash_table *) ((p)->hash)) : NULL)
525 
526 /* A structure used to communicate with htab_traverse callbacks.  */
527 struct mips_htab_traverse_info
528 {
529   /* The usual link-wide information.  */
530   struct bfd_link_info *info;
531   bfd *output_bfd;
532 
533   /* Starts off FALSE and is set to TRUE if the link should be aborted.  */
534   bfd_boolean error;
535 };
536 
537 /* MIPS ELF private object data.  */
538 
539 struct mips_elf_obj_tdata
540 {
541   /* Generic ELF private object data.  */
542   struct elf_obj_tdata root;
543 
544   /* Input BFD providing Tag_GNU_MIPS_ABI_FP attribute for output.  */
545   bfd *abi_fp_bfd;
546 
547   /* Input BFD providing Tag_GNU_MIPS_ABI_MSA attribute for output.  */
548   bfd *abi_msa_bfd;
549 
550   /* The abiflags for this object.  */
551   Elf_Internal_ABIFlags_v0 abiflags;
552   bfd_boolean abiflags_valid;
553 
554   /* The GOT requirements of input bfds.  */
555   struct mips_got_info *got;
556 
557   /* Used by _bfd_mips_elf_find_nearest_line.  The structure could be
558      included directly in this one, but there's no point to wasting
559      the memory just for the infrequently called find_nearest_line.  */
560   struct mips_elf_find_line *find_line_info;
561 
562   /* An array of stub sections indexed by symbol number.  */
563   asection **local_stubs;
564   asection **local_call_stubs;
565 
566   /* The Irix 5 support uses two virtual sections, which represent
567      text/data symbols defined in dynamic objects.  */
568   asymbol *elf_data_symbol;
569   asymbol *elf_text_symbol;
570   asection *elf_data_section;
571   asection *elf_text_section;
572 };
573 
574 /* Get MIPS ELF private object data from BFD's tdata.  */
575 
576 #define mips_elf_tdata(bfd) \
577   ((struct mips_elf_obj_tdata *) (bfd)->tdata.any)
578 
579 #define TLS_RELOC_P(r_type) \
580   (r_type == R_MIPS_TLS_DTPMOD32		\
581    || r_type == R_MIPS_TLS_DTPMOD64		\
582    || r_type == R_MIPS_TLS_DTPREL32		\
583    || r_type == R_MIPS_TLS_DTPREL64		\
584    || r_type == R_MIPS_TLS_GD			\
585    || r_type == R_MIPS_TLS_LDM			\
586    || r_type == R_MIPS_TLS_DTPREL_HI16		\
587    || r_type == R_MIPS_TLS_DTPREL_LO16		\
588    || r_type == R_MIPS_TLS_GOTTPREL		\
589    || r_type == R_MIPS_TLS_TPREL32		\
590    || r_type == R_MIPS_TLS_TPREL64		\
591    || r_type == R_MIPS_TLS_TPREL_HI16		\
592    || r_type == R_MIPS_TLS_TPREL_LO16		\
593    || r_type == R_MIPS16_TLS_GD			\
594    || r_type == R_MIPS16_TLS_LDM		\
595    || r_type == R_MIPS16_TLS_DTPREL_HI16	\
596    || r_type == R_MIPS16_TLS_DTPREL_LO16	\
597    || r_type == R_MIPS16_TLS_GOTTPREL		\
598    || r_type == R_MIPS16_TLS_TPREL_HI16		\
599    || r_type == R_MIPS16_TLS_TPREL_LO16		\
600    || r_type == R_MICROMIPS_TLS_GD		\
601    || r_type == R_MICROMIPS_TLS_LDM		\
602    || r_type == R_MICROMIPS_TLS_DTPREL_HI16	\
603    || r_type == R_MICROMIPS_TLS_DTPREL_LO16	\
604    || r_type == R_MICROMIPS_TLS_GOTTPREL	\
605    || r_type == R_MICROMIPS_TLS_TPREL_HI16	\
606    || r_type == R_MICROMIPS_TLS_TPREL_LO16)
607 
608 /* Structure used to pass information to mips_elf_output_extsym.  */
609 
610 struct extsym_info
611 {
612   bfd *abfd;
613   struct bfd_link_info *info;
614   struct ecoff_debug_info *debug;
615   const struct ecoff_debug_swap *swap;
616   bfd_boolean failed;
617 };
618 
619 /* The names of the runtime procedure table symbols used on IRIX5.  */
620 
621 static const char * const mips_elf_dynsym_rtproc_names[] =
622 {
623   "_procedure_table",
624   "_procedure_string_table",
625   "_procedure_table_size",
626   NULL
627 };
628 
629 /* These structures are used to generate the .compact_rel section on
630    IRIX5.  */
631 
632 typedef struct
633 {
634   unsigned long id1;		/* Always one?  */
635   unsigned long num;		/* Number of compact relocation entries.  */
636   unsigned long id2;		/* Always two?  */
637   unsigned long offset;		/* The file offset of the first relocation.  */
638   unsigned long reserved0;	/* Zero?  */
639   unsigned long reserved1;	/* Zero?  */
640 } Elf32_compact_rel;
641 
642 typedef struct
643 {
644   bfd_byte id1[4];
645   bfd_byte num[4];
646   bfd_byte id2[4];
647   bfd_byte offset[4];
648   bfd_byte reserved0[4];
649   bfd_byte reserved1[4];
650 } Elf32_External_compact_rel;
651 
652 typedef struct
653 {
654   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
655   unsigned int rtype : 4;	/* Relocation types. See below.  */
656   unsigned int dist2to : 8;
657   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
658   unsigned long konst;		/* KONST field. See below.  */
659   unsigned long vaddr;		/* VADDR to be relocated.  */
660 } Elf32_crinfo;
661 
662 typedef struct
663 {
664   unsigned int ctype : 1;	/* 1: long 0: short format. See below.  */
665   unsigned int rtype : 4;	/* Relocation types. See below.  */
666   unsigned int dist2to : 8;
667   unsigned int relvaddr : 19;	/* (VADDR - vaddr of the previous entry)/ 4 */
668   unsigned long konst;		/* KONST field. See below.  */
669 } Elf32_crinfo2;
670 
671 typedef struct
672 {
673   bfd_byte info[4];
674   bfd_byte konst[4];
675   bfd_byte vaddr[4];
676 } Elf32_External_crinfo;
677 
678 typedef struct
679 {
680   bfd_byte info[4];
681   bfd_byte konst[4];
682 } Elf32_External_crinfo2;
683 
684 /* These are the constants used to swap the bitfields in a crinfo.  */
685 
686 #define CRINFO_CTYPE (0x1)
687 #define CRINFO_CTYPE_SH (31)
688 #define CRINFO_RTYPE (0xf)
689 #define CRINFO_RTYPE_SH (27)
690 #define CRINFO_DIST2TO (0xff)
691 #define CRINFO_DIST2TO_SH (19)
692 #define CRINFO_RELVADDR (0x7ffff)
693 #define CRINFO_RELVADDR_SH (0)
694 
695 /* A compact relocation info has long (3 words) or short (2 words)
696    formats.  A short format doesn't have VADDR field and relvaddr
697    fields contains ((VADDR - vaddr of the previous entry) >> 2).  */
698 #define CRF_MIPS_LONG			1
699 #define CRF_MIPS_SHORT			0
700 
701 /* There are 4 types of compact relocation at least. The value KONST
702    has different meaning for each type:
703 
704    (type)		(konst)
705    CT_MIPS_REL32	Address in data
706    CT_MIPS_WORD		Address in word (XXX)
707    CT_MIPS_GPHI_LO	GP - vaddr
708    CT_MIPS_JMPAD	Address to jump
709    */
710 
711 #define CRT_MIPS_REL32			0xa
712 #define CRT_MIPS_WORD			0xb
713 #define CRT_MIPS_GPHI_LO		0xc
714 #define CRT_MIPS_JMPAD			0xd
715 
716 #define mips_elf_set_cr_format(x,format)	((x).ctype = (format))
717 #define mips_elf_set_cr_type(x,type)		((x).rtype = (type))
718 #define mips_elf_set_cr_dist2to(x,v)		((x).dist2to = (v))
719 #define mips_elf_set_cr_relvaddr(x,d)		((x).relvaddr = (d)<<2)
720 
721 /* The structure of the runtime procedure descriptor created by the
722    loader for use by the static exception system.  */
723 
724 typedef struct runtime_pdr {
725 	bfd_vma	adr;		/* Memory address of start of procedure.  */
726 	long	regmask;	/* Save register mask.  */
727 	long	regoffset;	/* Save register offset.  */
728 	long	fregmask;	/* Save floating point register mask.  */
729 	long	fregoffset;	/* Save floating point register offset.  */
730 	long	frameoffset;	/* Frame size.  */
731 	short	framereg;	/* Frame pointer register.  */
732 	short	pcreg;		/* Offset or reg of return pc.  */
733 	long	irpss;		/* Index into the runtime string table.  */
734 	long	reserved;
735 	struct exception_info *exception_info;/* Pointer to exception array.  */
736 } RPDR, *pRPDR;
737 #define cbRPDR sizeof (RPDR)
738 #define rpdNil ((pRPDR) 0)
739 
740 static struct mips_got_entry *mips_elf_create_local_got_entry
741   (bfd *, struct bfd_link_info *, bfd *, bfd_vma, unsigned long,
742    struct mips_elf_link_hash_entry *, int);
743 static bfd_boolean mips_elf_sort_hash_table_f
744   (struct mips_elf_link_hash_entry *, void *);
745 static bfd_vma mips_elf_high
746   (bfd_vma);
747 static bfd_boolean mips_elf_create_dynamic_relocation
748   (bfd *, struct bfd_link_info *, const Elf_Internal_Rela *,
749    struct mips_elf_link_hash_entry *, asection *, bfd_vma,
750    bfd_vma *, asection *);
751 static bfd_vma mips_elf_adjust_gp
752   (bfd *, struct mips_got_info *, bfd *);
753 
754 /* This will be used when we sort the dynamic relocation records.  */
755 static bfd *reldyn_sorting_bfd;
756 
757 /* True if ABFD is for CPUs with load interlocking that include
758    non-MIPS1 CPUs and R3900.  */
759 #define LOAD_INTERLOCKS_P(abfd) \
760   (   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) != E_MIPS_ARCH_1) \
761    || ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_3900))
762 
763 /* True if ABFD is for CPUs that are faster if JAL is converted to BAL.
764    This should be safe for all architectures.  We enable this predicate
765    for RM9000 for now.  */
766 #define JAL_TO_BAL_P(abfd) \
767   ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == E_MIPS_MACH_9000)
768 
769 /* True if ABFD is for CPUs that are faster if JALR is converted to BAL.
770    This should be safe for all architectures.  We enable this predicate for
771    all CPUs.  */
772 #define JALR_TO_BAL_P(abfd) 1
773 
774 /* True if ABFD is for CPUs that are faster if JR is converted to B.
775    This should be safe for all architectures.  We enable this predicate for
776    all CPUs.  */
777 #define JR_TO_B_P(abfd) 1
778 
779 /* True if ABFD is a PIC object.  */
780 #define PIC_OBJECT_P(abfd) \
781   ((elf_elfheader (abfd)->e_flags & EF_MIPS_PIC) != 0)
782 
783 /* Nonzero if ABFD is using the O32 ABI.  */
784 #define ABI_O32_P(abfd) \
785   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
786 
787 /* Nonzero if ABFD is using the N32 ABI.  */
788 #define ABI_N32_P(abfd) \
789   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI2) != 0)
790 
791 /* Nonzero if ABFD is using the N64 ABI.  */
792 #define ABI_64_P(abfd) \
793   (get_elf_backend_data (abfd)->s->elfclass == ELFCLASS64)
794 
795 /* Nonzero if ABFD is using NewABI conventions.  */
796 #define NEWABI_P(abfd) (ABI_N32_P (abfd) || ABI_64_P (abfd))
797 
798 /* Nonzero if ABFD has microMIPS code.  */
799 #define MICROMIPS_P(abfd) \
800   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS) != 0)
801 
802 /* Nonzero if ABFD is MIPS R6.  */
803 #define MIPSR6_P(abfd) \
804   ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6 \
805     || (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
806 
807 /* The IRIX compatibility level we are striving for.  */
808 #define IRIX_COMPAT(abfd) \
809   (get_elf_backend_data (abfd)->elf_backend_mips_irix_compat (abfd))
810 
811 /* Whether we are trying to be compatible with IRIX at all.  */
812 #define SGI_COMPAT(abfd) \
813   (IRIX_COMPAT (abfd) != ict_none)
814 
815 /* The name of the options section.  */
816 #define MIPS_ELF_OPTIONS_SECTION_NAME(abfd) \
817   (NEWABI_P (abfd) ? ".MIPS.options" : ".options")
818 
819 /* True if NAME is the recognized name of any SHT_MIPS_OPTIONS section.
820    Some IRIX system files do not use MIPS_ELF_OPTIONS_SECTION_NAME.  */
821 #define MIPS_ELF_OPTIONS_SECTION_NAME_P(NAME) \
822   (strcmp (NAME, ".MIPS.options") == 0 || strcmp (NAME, ".options") == 0)
823 
824 /* True if NAME is the recognized name of any SHT_MIPS_ABIFLAGS section.  */
825 #define MIPS_ELF_ABIFLAGS_SECTION_NAME_P(NAME) \
826   (strcmp (NAME, ".MIPS.abiflags") == 0)
827 
828 /* Whether the section is readonly.  */
829 #define MIPS_ELF_READONLY_SECTION(sec) \
830   ((sec->flags & (SEC_ALLOC | SEC_LOAD | SEC_READONLY))		\
831    == (SEC_ALLOC | SEC_LOAD | SEC_READONLY))
832 
833 /* The name of the stub section.  */
834 #define MIPS_ELF_STUB_SECTION_NAME(abfd) ".MIPS.stubs"
835 
836 /* The size of an external REL relocation.  */
837 #define MIPS_ELF_REL_SIZE(abfd) \
838   (get_elf_backend_data (abfd)->s->sizeof_rel)
839 
840 /* The size of an external RELA relocation.  */
841 #define MIPS_ELF_RELA_SIZE(abfd) \
842   (get_elf_backend_data (abfd)->s->sizeof_rela)
843 
844 /* The size of an external dynamic table entry.  */
845 #define MIPS_ELF_DYN_SIZE(abfd) \
846   (get_elf_backend_data (abfd)->s->sizeof_dyn)
847 
848 /* The size of a GOT entry.  */
849 #define MIPS_ELF_GOT_SIZE(abfd) \
850   (get_elf_backend_data (abfd)->s->arch_size / 8)
851 
852 /* The size of the .rld_map section. */
853 #define MIPS_ELF_RLD_MAP_SIZE(abfd) \
854   (get_elf_backend_data (abfd)->s->arch_size / 8)
855 
856 /* The size of a symbol-table entry.  */
857 #define MIPS_ELF_SYM_SIZE(abfd) \
858   (get_elf_backend_data (abfd)->s->sizeof_sym)
859 
860 /* The default alignment for sections, as a power of two.  */
861 #define MIPS_ELF_LOG_FILE_ALIGN(abfd)				\
862   (get_elf_backend_data (abfd)->s->log_file_align)
863 
864 /* Get word-sized data.  */
865 #define MIPS_ELF_GET_WORD(abfd, ptr) \
866   (ABI_64_P (abfd) ? bfd_get_64 (abfd, ptr) : bfd_get_32 (abfd, ptr))
867 
868 /* Put out word-sized data.  */
869 #define MIPS_ELF_PUT_WORD(abfd, val, ptr)	\
870   (ABI_64_P (abfd) 				\
871    ? bfd_put_64 (abfd, val, ptr) 		\
872    : bfd_put_32 (abfd, val, ptr))
873 
874 /* The opcode for word-sized loads (LW or LD).  */
875 #define MIPS_ELF_LOAD_WORD(abfd) \
876   (ABI_64_P (abfd) ? 0xdc000000 : 0x8c000000)
877 
878 /* Add a dynamic symbol table-entry.  */
879 #define MIPS_ELF_ADD_DYNAMIC_ENTRY(info, tag, val)	\
880   _bfd_elf_add_dynamic_entry (info, tag, val)
881 
882 #define MIPS_ELF_RTYPE_TO_HOWTO(abfd, rtype, rela)			\
883   (get_elf_backend_data (abfd)->elf_backend_mips_rtype_to_howto (rtype, rela))
884 
885 /* The name of the dynamic relocation section.  */
886 #define MIPS_ELF_REL_DYN_NAME(INFO) \
887   (mips_elf_hash_table (INFO)->is_vxworks ? ".rela.dyn" : ".rel.dyn")
888 
889 /* In case we're on a 32-bit machine, construct a 64-bit "-1" value
890    from smaller values.  Start with zero, widen, *then* decrement.  */
891 #define MINUS_ONE	(((bfd_vma)0) - 1)
892 #define MINUS_TWO	(((bfd_vma)0) - 2)
893 
894 /* The value to write into got[1] for SVR4 targets, to identify it is
895    a GNU object.  The dynamic linker can then use got[1] to store the
896    module pointer.  */
897 #define MIPS_ELF_GNU_GOT1_MASK(abfd) \
898   ((bfd_vma) 1 << (ABI_64_P (abfd) ? 63 : 31))
899 
900 /* The offset of $gp from the beginning of the .got section.  */
901 #define ELF_MIPS_GP_OFFSET(INFO) \
902   (mips_elf_hash_table (INFO)->is_vxworks ? 0x0 : 0x7ff0)
903 
904 /* The maximum size of the GOT for it to be addressable using 16-bit
905    offsets from $gp.  */
906 #define MIPS_ELF_GOT_MAX_SIZE(INFO) (ELF_MIPS_GP_OFFSET (INFO) + 0x7fff)
907 
908 /* Instructions which appear in a stub.  */
909 #define STUB_LW(abfd)							\
910   ((ABI_64_P (abfd)							\
911     ? 0xdf998010				/* ld t9,0x8010(gp) */	\
912     : 0x8f998010))              		/* lw t9,0x8010(gp) */
913 #define STUB_MOVE(abfd)							\
914    ((ABI_64_P (abfd)							\
915      ? 0x03e0782d				/* daddu t7,ra */	\
916      : 0x03e07821))				/* addu t7,ra */
917 #define STUB_LUI(VAL) (0x3c180000 + (VAL))	/* lui t8,VAL */
918 #define STUB_JALR 0x0320f809			/* jalr t9,ra */
919 #define STUB_ORI(VAL) (0x37180000 + (VAL))	/* ori t8,t8,VAL */
920 #define STUB_LI16U(VAL) (0x34180000 + (VAL))	/* ori t8,zero,VAL unsigned */
921 #define STUB_LI16S(abfd, VAL)						\
922    ((ABI_64_P (abfd)							\
923     ? (0x64180000 + (VAL))	/* daddiu t8,zero,VAL sign extended */	\
924     : (0x24180000 + (VAL))))	/* addiu t8,zero,VAL sign extended */
925 
926 /* Likewise for the microMIPS ASE.  */
927 #define STUB_LW_MICROMIPS(abfd)						\
928   (ABI_64_P (abfd)							\
929    ? 0xdf3c8010					/* ld t9,0x8010(gp) */	\
930    : 0xff3c8010)				/* lw t9,0x8010(gp) */
931 #define STUB_MOVE_MICROMIPS 0x0dff		/* move t7,ra */
932 #define STUB_MOVE32_MICROMIPS(abfd)					\
933    (ABI_64_P (abfd)							\
934     ? 0x581f7950				/* daddu t7,ra,zero */	\
935     : 0x001f7950)				/* addu t7,ra,zero */
936 #define STUB_LUI_MICROMIPS(VAL)						\
937    (0x41b80000 + (VAL))				/* lui t8,VAL */
938 #define STUB_JALR_MICROMIPS 0x45d9		/* jalr t9 */
939 #define STUB_JALR32_MICROMIPS 0x03f90f3c	/* jalr ra,t9 */
940 #define STUB_ORI_MICROMIPS(VAL)						\
941   (0x53180000 + (VAL))				/* ori t8,t8,VAL */
942 #define STUB_LI16U_MICROMIPS(VAL)					\
943   (0x53000000 + (VAL))				/* ori t8,zero,VAL unsigned */
944 #define STUB_LI16S_MICROMIPS(abfd, VAL)					\
945    (ABI_64_P (abfd)							\
946     ? 0x5f000000 + (VAL)	/* daddiu t8,zero,VAL sign extended */	\
947     : 0x33000000 + (VAL))	/* addiu t8,zero,VAL sign extended */
948 
949 #define MIPS_FUNCTION_STUB_NORMAL_SIZE 16
950 #define MIPS_FUNCTION_STUB_BIG_SIZE 20
951 #define MICROMIPS_FUNCTION_STUB_NORMAL_SIZE 12
952 #define MICROMIPS_FUNCTION_STUB_BIG_SIZE 16
953 #define MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE 16
954 #define MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE 20
955 
956 /* The name of the dynamic interpreter.  This is put in the .interp
957    section.  */
958 
959 #define ELF_DYNAMIC_INTERPRETER(abfd) 		\
960    (ABI_N32_P (abfd) ? "/usr/lib32/libc.so.1" 	\
961     : ABI_64_P (abfd) ? "/usr/lib64/libc.so.1" 	\
962     : "/usr/lib/libc.so.1")
963 
964 #ifdef BFD64
965 #define MNAME(bfd,pre,pos) \
966   (ABI_64_P (bfd) ? CONCAT4 (pre,64,_,pos) : CONCAT4 (pre,32,_,pos))
967 #define ELF_R_SYM(bfd, i)					\
968   (ABI_64_P (bfd) ? ELF64_R_SYM (i) : ELF32_R_SYM (i))
969 #define ELF_R_TYPE(bfd, i)					\
970   (ABI_64_P (bfd) ? ELF64_MIPS_R_TYPE (i) : ELF32_R_TYPE (i))
971 #define ELF_R_INFO(bfd, s, t)					\
972   (ABI_64_P (bfd) ? ELF64_R_INFO (s, t) : ELF32_R_INFO (s, t))
973 #else
974 #define MNAME(bfd,pre,pos) CONCAT4 (pre,32,_,pos)
975 #define ELF_R_SYM(bfd, i)					\
976   (ELF32_R_SYM (i))
977 #define ELF_R_TYPE(bfd, i)					\
978   (ELF32_R_TYPE (i))
979 #define ELF_R_INFO(bfd, s, t)					\
980   (ELF32_R_INFO (s, t))
981 #endif
982 
983   /* The mips16 compiler uses a couple of special sections to handle
984      floating point arguments.
985 
986      Section names that look like .mips16.fn.FNNAME contain stubs that
987      copy floating point arguments from the fp regs to the gp regs and
988      then jump to FNNAME.  If any 32 bit function calls FNNAME, the
989      call should be redirected to the stub instead.  If no 32 bit
990      function calls FNNAME, the stub should be discarded.  We need to
991      consider any reference to the function, not just a call, because
992      if the address of the function is taken we will need the stub,
993      since the address might be passed to a 32 bit function.
994 
995      Section names that look like .mips16.call.FNNAME contain stubs
996      that copy floating point arguments from the gp regs to the fp
997      regs and then jump to FNNAME.  If FNNAME is a 32 bit function,
998      then any 16 bit function that calls FNNAME should be redirected
999      to the stub instead.  If FNNAME is not a 32 bit function, the
1000      stub should be discarded.
1001 
1002      .mips16.call.fp.FNNAME sections are similar, but contain stubs
1003      which call FNNAME and then copy the return value from the fp regs
1004      to the gp regs.  These stubs store the return value in $18 while
1005      calling FNNAME; any function which might call one of these stubs
1006      must arrange to save $18 around the call.  (This case is not
1007      needed for 32 bit functions that call 16 bit functions, because
1008      16 bit functions always return floating point values in both
1009      $f0/$f1 and $2/$3.)
1010 
1011      Note that in all cases FNNAME might be defined statically.
1012      Therefore, FNNAME is not used literally.  Instead, the relocation
1013      information will indicate which symbol the section is for.
1014 
1015      We record any stubs that we find in the symbol table.  */
1016 
1017 #define FN_STUB ".mips16.fn."
1018 #define CALL_STUB ".mips16.call."
1019 #define CALL_FP_STUB ".mips16.call.fp."
1020 
1021 #define FN_STUB_P(name) CONST_STRNEQ (name, FN_STUB)
1022 #define CALL_STUB_P(name) CONST_STRNEQ (name, CALL_STUB)
1023 #define CALL_FP_STUB_P(name) CONST_STRNEQ (name, CALL_FP_STUB)
1024 
1025 /* The format of the first PLT entry in an O32 executable.  */
1026 static const bfd_vma mips_o32_exec_plt0_entry[] =
1027 {
1028   0x3c1c0000,	/* lui $28, %hi(&GOTPLT[0])				*/
1029   0x8f990000,	/* lw $25, %lo(&GOTPLT[0])($28)				*/
1030   0x279c0000,	/* addiu $28, $28, %lo(&GOTPLT[0])			*/
1031   0x031cc023,	/* subu $24, $24, $28					*/
1032   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
1033   0x0018c082,	/* srl $24, $24, 2					*/
1034   0x0320f809,	/* jalr $25						*/
1035   0x2718fffe	/* subu $24, $24, 2					*/
1036 };
1037 
1038 /* The format of the first PLT entry in an N32 executable.  Different
1039    because gp ($28) is not available; we use t2 ($14) instead.  */
1040 static const bfd_vma mips_n32_exec_plt0_entry[] =
1041 {
1042   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1043   0x8dd90000,	/* lw $25, %lo(&GOTPLT[0])($14)				*/
1044   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1045   0x030ec023,	/* subu $24, $24, $14					*/
1046   0x03e07821,	/* move $15, $31	# 32-bit move (addu)		*/
1047   0x0018c082,	/* srl $24, $24, 2					*/
1048   0x0320f809,	/* jalr $25						*/
1049   0x2718fffe	/* subu $24, $24, 2					*/
1050 };
1051 
1052 /* The format of the first PLT entry in an N64 executable.  Different
1053    from N32 because of the increased size of GOT entries.  */
1054 static const bfd_vma mips_n64_exec_plt0_entry[] =
1055 {
1056   0x3c0e0000,	/* lui $14, %hi(&GOTPLT[0])				*/
1057   0xddd90000,	/* ld $25, %lo(&GOTPLT[0])($14)				*/
1058   0x25ce0000,	/* addiu $14, $14, %lo(&GOTPLT[0])			*/
1059   0x030ec023,	/* subu $24, $24, $14					*/
1060   0x03e0782d,	/* move $15, $31	# 64-bit move (daddu)		*/
1061   0x0018c0c2,	/* srl $24, $24, 3					*/
1062   0x0320f809,	/* jalr $25						*/
1063   0x2718fffe	/* subu $24, $24, 2					*/
1064 };
1065 
1066 /* The format of the microMIPS first PLT entry in an O32 executable.
1067    We rely on v0 ($2) rather than t8 ($24) to contain the address
1068    of the GOTPLT entry handled, so this stub may only be used when
1069    all the subsequent PLT entries are microMIPS code too.
1070 
1071    The trailing NOP is for alignment and correct disassembly only.  */
1072 static const bfd_vma micromips_o32_exec_plt0_entry[] =
1073 {
1074   0x7980, 0x0000,	/* addiupc $3, (&GOTPLT[0]) - .			*/
1075   0xff23, 0x0000,	/* lw $25, 0($3)				*/
1076   0x0535,		/* subu $2, $2, $3				*/
1077   0x2525,		/* srl $2, $2, 2				*/
1078   0x3302, 0xfffe,	/* subu $24, $2, 2				*/
1079   0x0dff,		/* move $15, $31				*/
1080   0x45f9,		/* jalrs $25					*/
1081   0x0f83,		/* move $28, $3					*/
1082   0x0c00		/* nop						*/
1083 };
1084 
1085 /* The format of the microMIPS first PLT entry in an O32 executable
1086    in the insn32 mode.  */
1087 static const bfd_vma micromips_insn32_o32_exec_plt0_entry[] =
1088 {
1089   0x41bc, 0x0000,	/* lui $28, %hi(&GOTPLT[0])			*/
1090   0xff3c, 0x0000,	/* lw $25, %lo(&GOTPLT[0])($28)			*/
1091   0x339c, 0x0000,	/* addiu $28, $28, %lo(&GOTPLT[0])		*/
1092   0x0398, 0xc1d0,	/* subu $24, $24, $28				*/
1093   0x001f, 0x7950,	/* move $15, $31				*/
1094   0x0318, 0x1040,	/* srl $24, $24, 2				*/
1095   0x03f9, 0x0f3c,	/* jalr $25					*/
1096   0x3318, 0xfffe	/* subu $24, $24, 2				*/
1097 };
1098 
1099 /* The format of subsequent standard PLT entries.  */
1100 static const bfd_vma mips_exec_plt_entry[] =
1101 {
1102   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1103   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1104   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1105   0x03200008	/* jr $25					*/
1106 };
1107 
1108 /* In the following PLT entry the JR and ADDIU instructions will
1109    be swapped in _bfd_mips_elf_finish_dynamic_symbol because
1110    LOAD_INTERLOCKS_P will be true for MIPS R6.  */
1111 static const bfd_vma mipsr6_exec_plt_entry[] =
1112 {
1113   0x3c0f0000,	/* lui $15, %hi(.got.plt entry)			*/
1114   0x01f90000,	/* l[wd] $25, %lo(.got.plt entry)($15)		*/
1115   0x25f80000,	/* addiu $24, $15, %lo(.got.plt entry)		*/
1116   0x03200009	/* jr $25					*/
1117 };
1118 
1119 /* The format of subsequent MIPS16 o32 PLT entries.  We use v0 ($2)
1120    and v1 ($3) as temporaries because t8 ($24) and t9 ($25) are not
1121    directly addressable.  */
1122 static const bfd_vma mips16_o32_exec_plt_entry[] =
1123 {
1124   0xb203,		/* lw $2, 12($pc)			*/
1125   0x9a60,		/* lw $3, 0($2)				*/
1126   0x651a,		/* move $24, $2				*/
1127   0xeb00,		/* jr $3				*/
1128   0x653b,		/* move $25, $3				*/
1129   0x6500,		/* nop					*/
1130   0x0000, 0x0000	/* .word (.got.plt entry)		*/
1131 };
1132 
1133 /* The format of subsequent microMIPS o32 PLT entries.  We use v0 ($2)
1134    as a temporary because t8 ($24) is not addressable with ADDIUPC.  */
1135 static const bfd_vma micromips_o32_exec_plt_entry[] =
1136 {
1137   0x7900, 0x0000,	/* addiupc $2, (.got.plt entry) - .	*/
1138   0xff22, 0x0000,	/* lw $25, 0($2)			*/
1139   0x4599,		/* jr $25				*/
1140   0x0f02		/* move $24, $2				*/
1141 };
1142 
1143 /* The format of subsequent microMIPS o32 PLT entries in the insn32 mode.  */
1144 static const bfd_vma micromips_insn32_o32_exec_plt_entry[] =
1145 {
1146   0x41af, 0x0000,	/* lui $15, %hi(.got.plt entry)		*/
1147   0xff2f, 0x0000,	/* lw $25, %lo(.got.plt entry)($15)	*/
1148   0x0019, 0x0f3c,	/* jr $25				*/
1149   0x330f, 0x0000	/* addiu $24, $15, %lo(.got.plt entry)	*/
1150 };
1151 
1152 /* The format of the first PLT entry in a VxWorks executable.  */
1153 static const bfd_vma mips_vxworks_exec_plt0_entry[] =
1154 {
1155   0x3c190000,	/* lui t9, %hi(_GLOBAL_OFFSET_TABLE_)		*/
1156   0x27390000,	/* addiu t9, t9, %lo(_GLOBAL_OFFSET_TABLE_)	*/
1157   0x8f390008,	/* lw t9, 8(t9)					*/
1158   0x00000000,	/* nop						*/
1159   0x03200008,	/* jr t9					*/
1160   0x00000000	/* nop						*/
1161 };
1162 
1163 /* The format of subsequent PLT entries.  */
1164 static const bfd_vma mips_vxworks_exec_plt_entry[] =
1165 {
1166   0x10000000,	/* b .PLT_resolver			*/
1167   0x24180000,	/* li t8, <pltindex>			*/
1168   0x3c190000,	/* lui t9, %hi(<.got.plt slot>)		*/
1169   0x27390000,	/* addiu t9, t9, %lo(<.got.plt slot>)	*/
1170   0x8f390000,	/* lw t9, 0(t9)				*/
1171   0x00000000,	/* nop					*/
1172   0x03200008,	/* jr t9				*/
1173   0x00000000	/* nop					*/
1174 };
1175 
1176 /* The format of the first PLT entry in a VxWorks shared object.  */
1177 static const bfd_vma mips_vxworks_shared_plt0_entry[] =
1178 {
1179   0x8f990008,	/* lw t9, 8(gp)		*/
1180   0x00000000,	/* nop			*/
1181   0x03200008,	/* jr t9		*/
1182   0x00000000,	/* nop			*/
1183   0x00000000,	/* nop			*/
1184   0x00000000	/* nop			*/
1185 };
1186 
1187 /* The format of subsequent PLT entries.  */
1188 static const bfd_vma mips_vxworks_shared_plt_entry[] =
1189 {
1190   0x10000000,	/* b .PLT_resolver	*/
1191   0x24180000	/* li t8, <pltindex>	*/
1192 };
1193 
1194 /* microMIPS 32-bit opcode helper installer.  */
1195 
1196 static void
1197 bfd_put_micromips_32 (const bfd *abfd, bfd_vma opcode, bfd_byte *ptr)
1198 {
1199   bfd_put_16 (abfd, (opcode >> 16) & 0xffff, ptr);
1200   bfd_put_16 (abfd,  opcode        & 0xffff, ptr + 2);
1201 }
1202 
1203 /* microMIPS 32-bit opcode helper retriever.  */
1204 
1205 static bfd_vma
1206 bfd_get_micromips_32 (const bfd *abfd, const bfd_byte *ptr)
1207 {
1208   return (bfd_get_16 (abfd, ptr) << 16) | bfd_get_16 (abfd, ptr + 2);
1209 }
1210 
1211 /* Look up an entry in a MIPS ELF linker hash table.  */
1212 
1213 #define mips_elf_link_hash_lookup(table, string, create, copy, follow)	\
1214   ((struct mips_elf_link_hash_entry *)					\
1215    elf_link_hash_lookup (&(table)->root, (string), (create),		\
1216 			 (copy), (follow)))
1217 
1218 /* Traverse a MIPS ELF linker hash table.  */
1219 
1220 #define mips_elf_link_hash_traverse(table, func, info)			\
1221   (elf_link_hash_traverse						\
1222    (&(table)->root,							\
1223     (bfd_boolean (*) (struct elf_link_hash_entry *, void *)) (func),	\
1224     (info)))
1225 
1226 /* Find the base offsets for thread-local storage in this object,
1227    for GD/LD and IE/LE respectively.  */
1228 
1229 #define TP_OFFSET 0x7000
1230 #define DTP_OFFSET 0x8000
1231 
1232 static bfd_vma
1233 dtprel_base (struct bfd_link_info *info)
1234 {
1235   /* If tls_sec is NULL, we should have signalled an error already.  */
1236   if (elf_hash_table (info)->tls_sec == NULL)
1237     return 0;
1238   return elf_hash_table (info)->tls_sec->vma + DTP_OFFSET;
1239 }
1240 
1241 static bfd_vma
1242 tprel_base (struct bfd_link_info *info)
1243 {
1244   /* If tls_sec is NULL, we should have signalled an error already.  */
1245   if (elf_hash_table (info)->tls_sec == NULL)
1246     return 0;
1247   return elf_hash_table (info)->tls_sec->vma + TP_OFFSET;
1248 }
1249 
1250 /* Create an entry in a MIPS ELF linker hash table.  */
1251 
1252 static struct bfd_hash_entry *
1253 mips_elf_link_hash_newfunc (struct bfd_hash_entry *entry,
1254 			    struct bfd_hash_table *table, const char *string)
1255 {
1256   struct mips_elf_link_hash_entry *ret =
1257     (struct mips_elf_link_hash_entry *) entry;
1258 
1259   /* Allocate the structure if it has not already been allocated by a
1260      subclass.  */
1261   if (ret == NULL)
1262     ret = bfd_hash_allocate (table, sizeof (struct mips_elf_link_hash_entry));
1263   if (ret == NULL)
1264     return (struct bfd_hash_entry *) ret;
1265 
1266   /* Call the allocation method of the superclass.  */
1267   ret = ((struct mips_elf_link_hash_entry *)
1268 	 _bfd_elf_link_hash_newfunc ((struct bfd_hash_entry *) ret,
1269 				     table, string));
1270   if (ret != NULL)
1271     {
1272       /* Set local fields.  */
1273       memset (&ret->esym, 0, sizeof (EXTR));
1274       /* We use -2 as a marker to indicate that the information has
1275 	 not been set.  -1 means there is no associated ifd.  */
1276       ret->esym.ifd = -2;
1277       ret->la25_stub = 0;
1278       ret->possibly_dynamic_relocs = 0;
1279       ret->fn_stub = NULL;
1280       ret->call_stub = NULL;
1281       ret->call_fp_stub = NULL;
1282       ret->global_got_area = GGA_NONE;
1283       ret->got_only_for_calls = TRUE;
1284       ret->readonly_reloc = FALSE;
1285       ret->has_static_relocs = FALSE;
1286       ret->no_fn_stub = FALSE;
1287       ret->need_fn_stub = FALSE;
1288       ret->has_nonpic_branches = FALSE;
1289       ret->needs_lazy_stub = FALSE;
1290       ret->use_plt_entry = FALSE;
1291     }
1292 
1293   return (struct bfd_hash_entry *) ret;
1294 }
1295 
1296 /* Allocate MIPS ELF private object data.  */
1297 
1298 bfd_boolean
1299 _bfd_mips_elf_mkobject (bfd *abfd)
1300 {
1301   return bfd_elf_allocate_object (abfd, sizeof (struct mips_elf_obj_tdata),
1302 				  MIPS_ELF_DATA);
1303 }
1304 
1305 bfd_boolean
1306 _bfd_mips_elf_new_section_hook (bfd *abfd, asection *sec)
1307 {
1308   if (!sec->used_by_bfd)
1309     {
1310       struct _mips_elf_section_data *sdata;
1311       bfd_size_type amt = sizeof (*sdata);
1312 
1313       sdata = bfd_zalloc (abfd, amt);
1314       if (sdata == NULL)
1315 	return FALSE;
1316       sec->used_by_bfd = sdata;
1317     }
1318 
1319   return _bfd_elf_new_section_hook (abfd, sec);
1320 }
1321 
1322 /* Read ECOFF debugging information from a .mdebug section into a
1323    ecoff_debug_info structure.  */
1324 
1325 bfd_boolean
1326 _bfd_mips_elf_read_ecoff_info (bfd *abfd, asection *section,
1327 			       struct ecoff_debug_info *debug)
1328 {
1329   HDRR *symhdr;
1330   const struct ecoff_debug_swap *swap;
1331   char *ext_hdr;
1332 
1333   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1334   memset (debug, 0, sizeof (*debug));
1335 
1336   ext_hdr = bfd_malloc (swap->external_hdr_size);
1337   if (ext_hdr == NULL && swap->external_hdr_size != 0)
1338     goto error_return;
1339 
1340   if (! bfd_get_section_contents (abfd, section, ext_hdr, 0,
1341 				  swap->external_hdr_size))
1342     goto error_return;
1343 
1344   symhdr = &debug->symbolic_header;
1345   (*swap->swap_hdr_in) (abfd, ext_hdr, symhdr);
1346 
1347   /* The symbolic header contains absolute file offsets and sizes to
1348      read.  */
1349 #define READ(ptr, offset, count, size, type)				\
1350   if (symhdr->count == 0)						\
1351     debug->ptr = NULL;							\
1352   else									\
1353     {									\
1354       bfd_size_type amt = (bfd_size_type) size * symhdr->count;		\
1355       debug->ptr = bfd_malloc (amt);					\
1356       if (debug->ptr == NULL)						\
1357 	goto error_return;						\
1358       if (bfd_seek (abfd, symhdr->offset, SEEK_SET) != 0		\
1359 	  || bfd_bread (debug->ptr, amt, abfd) != amt)			\
1360 	goto error_return;						\
1361     }
1362 
1363   READ (line, cbLineOffset, cbLine, sizeof (unsigned char), unsigned char *);
1364   READ (external_dnr, cbDnOffset, idnMax, swap->external_dnr_size, void *);
1365   READ (external_pdr, cbPdOffset, ipdMax, swap->external_pdr_size, void *);
1366   READ (external_sym, cbSymOffset, isymMax, swap->external_sym_size, void *);
1367   READ (external_opt, cbOptOffset, ioptMax, swap->external_opt_size, void *);
1368   READ (external_aux, cbAuxOffset, iauxMax, sizeof (union aux_ext),
1369 	union aux_ext *);
1370   READ (ss, cbSsOffset, issMax, sizeof (char), char *);
1371   READ (ssext, cbSsExtOffset, issExtMax, sizeof (char), char *);
1372   READ (external_fdr, cbFdOffset, ifdMax, swap->external_fdr_size, void *);
1373   READ (external_rfd, cbRfdOffset, crfd, swap->external_rfd_size, void *);
1374   READ (external_ext, cbExtOffset, iextMax, swap->external_ext_size, void *);
1375 #undef READ
1376 
1377   debug->fdr = NULL;
1378 
1379   return TRUE;
1380 
1381  error_return:
1382   if (ext_hdr != NULL)
1383     free (ext_hdr);
1384   if (debug->line != NULL)
1385     free (debug->line);
1386   if (debug->external_dnr != NULL)
1387     free (debug->external_dnr);
1388   if (debug->external_pdr != NULL)
1389     free (debug->external_pdr);
1390   if (debug->external_sym != NULL)
1391     free (debug->external_sym);
1392   if (debug->external_opt != NULL)
1393     free (debug->external_opt);
1394   if (debug->external_aux != NULL)
1395     free (debug->external_aux);
1396   if (debug->ss != NULL)
1397     free (debug->ss);
1398   if (debug->ssext != NULL)
1399     free (debug->ssext);
1400   if (debug->external_fdr != NULL)
1401     free (debug->external_fdr);
1402   if (debug->external_rfd != NULL)
1403     free (debug->external_rfd);
1404   if (debug->external_ext != NULL)
1405     free (debug->external_ext);
1406   return FALSE;
1407 }
1408 
1409 /* Swap RPDR (runtime procedure table entry) for output.  */
1410 
1411 static void
1412 ecoff_swap_rpdr_out (bfd *abfd, const RPDR *in, struct rpdr_ext *ex)
1413 {
1414   H_PUT_S32 (abfd, in->adr, ex->p_adr);
1415   H_PUT_32 (abfd, in->regmask, ex->p_regmask);
1416   H_PUT_32 (abfd, in->regoffset, ex->p_regoffset);
1417   H_PUT_32 (abfd, in->fregmask, ex->p_fregmask);
1418   H_PUT_32 (abfd, in->fregoffset, ex->p_fregoffset);
1419   H_PUT_32 (abfd, in->frameoffset, ex->p_frameoffset);
1420 
1421   H_PUT_16 (abfd, in->framereg, ex->p_framereg);
1422   H_PUT_16 (abfd, in->pcreg, ex->p_pcreg);
1423 
1424   H_PUT_32 (abfd, in->irpss, ex->p_irpss);
1425 }
1426 
1427 /* Create a runtime procedure table from the .mdebug section.  */
1428 
1429 static bfd_boolean
1430 mips_elf_create_procedure_table (void *handle, bfd *abfd,
1431 				 struct bfd_link_info *info, asection *s,
1432 				 struct ecoff_debug_info *debug)
1433 {
1434   const struct ecoff_debug_swap *swap;
1435   HDRR *hdr = &debug->symbolic_header;
1436   RPDR *rpdr, *rp;
1437   struct rpdr_ext *erp;
1438   void *rtproc;
1439   struct pdr_ext *epdr;
1440   struct sym_ext *esym;
1441   char *ss, **sv;
1442   char *str;
1443   bfd_size_type size;
1444   bfd_size_type count;
1445   unsigned long sindex;
1446   unsigned long i;
1447   PDR pdr;
1448   SYMR sym;
1449   const char *no_name_func = _("static procedure (no name)");
1450 
1451   epdr = NULL;
1452   rpdr = NULL;
1453   esym = NULL;
1454   ss = NULL;
1455   sv = NULL;
1456 
1457   swap = get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
1458 
1459   sindex = strlen (no_name_func) + 1;
1460   count = hdr->ipdMax;
1461   if (count > 0)
1462     {
1463       size = swap->external_pdr_size;
1464 
1465       epdr = bfd_malloc (size * count);
1466       if (epdr == NULL)
1467 	goto error_return;
1468 
1469       if (! _bfd_ecoff_get_accumulated_pdr (handle, (bfd_byte *) epdr))
1470 	goto error_return;
1471 
1472       size = sizeof (RPDR);
1473       rp = rpdr = bfd_malloc (size * count);
1474       if (rpdr == NULL)
1475 	goto error_return;
1476 
1477       size = sizeof (char *);
1478       sv = bfd_malloc (size * count);
1479       if (sv == NULL)
1480 	goto error_return;
1481 
1482       count = hdr->isymMax;
1483       size = swap->external_sym_size;
1484       esym = bfd_malloc (size * count);
1485       if (esym == NULL)
1486 	goto error_return;
1487 
1488       if (! _bfd_ecoff_get_accumulated_sym (handle, (bfd_byte *) esym))
1489 	goto error_return;
1490 
1491       count = hdr->issMax;
1492       ss = bfd_malloc (count);
1493       if (ss == NULL)
1494 	goto error_return;
1495       if (! _bfd_ecoff_get_accumulated_ss (handle, (bfd_byte *) ss))
1496 	goto error_return;
1497 
1498       count = hdr->ipdMax;
1499       for (i = 0; i < (unsigned long) count; i++, rp++)
1500 	{
1501 	  (*swap->swap_pdr_in) (abfd, epdr + i, &pdr);
1502 	  (*swap->swap_sym_in) (abfd, &esym[pdr.isym], &sym);
1503 	  rp->adr = sym.value;
1504 	  rp->regmask = pdr.regmask;
1505 	  rp->regoffset = pdr.regoffset;
1506 	  rp->fregmask = pdr.fregmask;
1507 	  rp->fregoffset = pdr.fregoffset;
1508 	  rp->frameoffset = pdr.frameoffset;
1509 	  rp->framereg = pdr.framereg;
1510 	  rp->pcreg = pdr.pcreg;
1511 	  rp->irpss = sindex;
1512 	  sv[i] = ss + sym.iss;
1513 	  sindex += strlen (sv[i]) + 1;
1514 	}
1515     }
1516 
1517   size = sizeof (struct rpdr_ext) * (count + 2) + sindex;
1518   size = BFD_ALIGN (size, 16);
1519   rtproc = bfd_alloc (abfd, size);
1520   if (rtproc == NULL)
1521     {
1522       mips_elf_hash_table (info)->procedure_count = 0;
1523       goto error_return;
1524     }
1525 
1526   mips_elf_hash_table (info)->procedure_count = count + 2;
1527 
1528   erp = rtproc;
1529   memset (erp, 0, sizeof (struct rpdr_ext));
1530   erp++;
1531   str = (char *) rtproc + sizeof (struct rpdr_ext) * (count + 2);
1532   strcpy (str, no_name_func);
1533   str += strlen (no_name_func) + 1;
1534   for (i = 0; i < count; i++)
1535     {
1536       ecoff_swap_rpdr_out (abfd, rpdr + i, erp + i);
1537       strcpy (str, sv[i]);
1538       str += strlen (sv[i]) + 1;
1539     }
1540   H_PUT_S32 (abfd, -1, (erp + count)->p_adr);
1541 
1542   /* Set the size and contents of .rtproc section.  */
1543   s->size = size;
1544   s->contents = rtproc;
1545 
1546   /* Skip this section later on (I don't think this currently
1547      matters, but someday it might).  */
1548   s->map_head.link_order = NULL;
1549 
1550   if (epdr != NULL)
1551     free (epdr);
1552   if (rpdr != NULL)
1553     free (rpdr);
1554   if (esym != NULL)
1555     free (esym);
1556   if (ss != NULL)
1557     free (ss);
1558   if (sv != NULL)
1559     free (sv);
1560 
1561   return TRUE;
1562 
1563  error_return:
1564   if (epdr != NULL)
1565     free (epdr);
1566   if (rpdr != NULL)
1567     free (rpdr);
1568   if (esym != NULL)
1569     free (esym);
1570   if (ss != NULL)
1571     free (ss);
1572   if (sv != NULL)
1573     free (sv);
1574   return FALSE;
1575 }
1576 
1577 /* We're going to create a stub for H.  Create a symbol for the stub's
1578    value and size, to help make the disassembly easier to read.  */
1579 
1580 static bfd_boolean
1581 mips_elf_create_stub_symbol (struct bfd_link_info *info,
1582 			     struct mips_elf_link_hash_entry *h,
1583 			     const char *prefix, asection *s, bfd_vma value,
1584 			     bfd_vma size)
1585 {
1586   struct bfd_link_hash_entry *bh;
1587   struct elf_link_hash_entry *elfh;
1588   const char *name;
1589 
1590   if (ELF_ST_IS_MICROMIPS (h->root.other))
1591     value |= 1;
1592 
1593   /* Create a new symbol.  */
1594   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1595   bh = NULL;
1596   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1597 					 BSF_LOCAL, s, value, NULL,
1598 					 TRUE, FALSE, &bh))
1599     return FALSE;
1600 
1601   /* Make it a local function.  */
1602   elfh = (struct elf_link_hash_entry *) bh;
1603   elfh->type = ELF_ST_INFO (STB_LOCAL, STT_FUNC);
1604   elfh->size = size;
1605   elfh->forced_local = 1;
1606   return TRUE;
1607 }
1608 
1609 /* We're about to redefine H.  Create a symbol to represent H's
1610    current value and size, to help make the disassembly easier
1611    to read.  */
1612 
1613 static bfd_boolean
1614 mips_elf_create_shadow_symbol (struct bfd_link_info *info,
1615 			       struct mips_elf_link_hash_entry *h,
1616 			       const char *prefix)
1617 {
1618   struct bfd_link_hash_entry *bh;
1619   struct elf_link_hash_entry *elfh;
1620   const char *name;
1621   asection *s;
1622   bfd_vma value;
1623 
1624   /* Read the symbol's value.  */
1625   BFD_ASSERT (h->root.root.type == bfd_link_hash_defined
1626 	      || h->root.root.type == bfd_link_hash_defweak);
1627   s = h->root.root.u.def.section;
1628   value = h->root.root.u.def.value;
1629 
1630   /* Create a new symbol.  */
1631   name = ACONCAT ((prefix, h->root.root.root.string, NULL));
1632   bh = NULL;
1633   if (!_bfd_generic_link_add_one_symbol (info, s->owner, name,
1634 					 BSF_LOCAL, s, value, NULL,
1635 					 TRUE, FALSE, &bh))
1636     return FALSE;
1637 
1638   /* Make it local and copy the other attributes from H.  */
1639   elfh = (struct elf_link_hash_entry *) bh;
1640   elfh->type = ELF_ST_INFO (STB_LOCAL, ELF_ST_TYPE (h->root.type));
1641   elfh->other = h->root.other;
1642   elfh->size = h->root.size;
1643   elfh->forced_local = 1;
1644   return TRUE;
1645 }
1646 
1647 /* Return TRUE if relocations in SECTION can refer directly to a MIPS16
1648    function rather than to a hard-float stub.  */
1649 
1650 static bfd_boolean
1651 section_allows_mips16_refs_p (asection *section)
1652 {
1653   const char *name;
1654 
1655   name = bfd_get_section_name (section->owner, section);
1656   return (FN_STUB_P (name)
1657 	  || CALL_STUB_P (name)
1658 	  || CALL_FP_STUB_P (name)
1659 	  || strcmp (name, ".pdr") == 0);
1660 }
1661 
1662 /* [RELOCS, RELEND) are the relocations against SEC, which is a MIPS16
1663    stub section of some kind.  Return the R_SYMNDX of the target
1664    function, or 0 if we can't decide which function that is.  */
1665 
1666 static unsigned long
1667 mips16_stub_symndx (const struct elf_backend_data *bed,
1668 		    asection *sec ATTRIBUTE_UNUSED,
1669 		    const Elf_Internal_Rela *relocs,
1670 		    const Elf_Internal_Rela *relend)
1671 {
1672   int int_rels_per_ext_rel = bed->s->int_rels_per_ext_rel;
1673   const Elf_Internal_Rela *rel;
1674 
1675   /* Trust the first R_MIPS_NONE relocation, if any, but not a subsequent
1676      one in a compound relocation.  */
1677   for (rel = relocs; rel < relend; rel += int_rels_per_ext_rel)
1678     if (ELF_R_TYPE (sec->owner, rel->r_info) == R_MIPS_NONE)
1679       return ELF_R_SYM (sec->owner, rel->r_info);
1680 
1681   /* Otherwise trust the first relocation, whatever its kind.  This is
1682      the traditional behavior.  */
1683   if (relocs < relend)
1684     return ELF_R_SYM (sec->owner, relocs->r_info);
1685 
1686   return 0;
1687 }
1688 
1689 /* Check the mips16 stubs for a particular symbol, and see if we can
1690    discard them.  */
1691 
1692 static void
1693 mips_elf_check_mips16_stubs (struct bfd_link_info *info,
1694 			     struct mips_elf_link_hash_entry *h)
1695 {
1696   /* Dynamic symbols must use the standard call interface, in case other
1697      objects try to call them.  */
1698   if (h->fn_stub != NULL
1699       && h->root.dynindx != -1)
1700     {
1701       mips_elf_create_shadow_symbol (info, h, ".mips16.");
1702       h->need_fn_stub = TRUE;
1703     }
1704 
1705   if (h->fn_stub != NULL
1706       && ! h->need_fn_stub)
1707     {
1708       /* We don't need the fn_stub; the only references to this symbol
1709          are 16 bit calls.  Clobber the size to 0 to prevent it from
1710          being included in the link.  */
1711       h->fn_stub->size = 0;
1712       h->fn_stub->flags &= ~SEC_RELOC;
1713       h->fn_stub->reloc_count = 0;
1714       h->fn_stub->flags |= SEC_EXCLUDE;
1715     }
1716 
1717   if (h->call_stub != NULL
1718       && ELF_ST_IS_MIPS16 (h->root.other))
1719     {
1720       /* We don't need the call_stub; this is a 16 bit function, so
1721          calls from other 16 bit functions are OK.  Clobber the size
1722          to 0 to prevent it from being included in the link.  */
1723       h->call_stub->size = 0;
1724       h->call_stub->flags &= ~SEC_RELOC;
1725       h->call_stub->reloc_count = 0;
1726       h->call_stub->flags |= SEC_EXCLUDE;
1727     }
1728 
1729   if (h->call_fp_stub != NULL
1730       && ELF_ST_IS_MIPS16 (h->root.other))
1731     {
1732       /* We don't need the call_stub; this is a 16 bit function, so
1733          calls from other 16 bit functions are OK.  Clobber the size
1734          to 0 to prevent it from being included in the link.  */
1735       h->call_fp_stub->size = 0;
1736       h->call_fp_stub->flags &= ~SEC_RELOC;
1737       h->call_fp_stub->reloc_count = 0;
1738       h->call_fp_stub->flags |= SEC_EXCLUDE;
1739     }
1740 }
1741 
1742 /* Hashtable callbacks for mips_elf_la25_stubs.  */
1743 
1744 static hashval_t
1745 mips_elf_la25_stub_hash (const void *entry_)
1746 {
1747   const struct mips_elf_la25_stub *entry;
1748 
1749   entry = (struct mips_elf_la25_stub *) entry_;
1750   return entry->h->root.root.u.def.section->id
1751     + entry->h->root.root.u.def.value;
1752 }
1753 
1754 static int
1755 mips_elf_la25_stub_eq (const void *entry1_, const void *entry2_)
1756 {
1757   const struct mips_elf_la25_stub *entry1, *entry2;
1758 
1759   entry1 = (struct mips_elf_la25_stub *) entry1_;
1760   entry2 = (struct mips_elf_la25_stub *) entry2_;
1761   return ((entry1->h->root.root.u.def.section
1762 	   == entry2->h->root.root.u.def.section)
1763 	  && (entry1->h->root.root.u.def.value
1764 	      == entry2->h->root.root.u.def.value));
1765 }
1766 
1767 /* Called by the linker to set up the la25 stub-creation code.  FN is
1768    the linker's implementation of add_stub_function.  Return true on
1769    success.  */
1770 
1771 bfd_boolean
1772 _bfd_mips_elf_init_stubs (struct bfd_link_info *info,
1773 			  asection *(*fn) (const char *, asection *,
1774 					   asection *))
1775 {
1776   struct mips_elf_link_hash_table *htab;
1777 
1778   htab = mips_elf_hash_table (info);
1779   if (htab == NULL)
1780     return FALSE;
1781 
1782   htab->add_stub_section = fn;
1783   htab->la25_stubs = htab_try_create (1, mips_elf_la25_stub_hash,
1784 				      mips_elf_la25_stub_eq, NULL);
1785   if (htab->la25_stubs == NULL)
1786     return FALSE;
1787 
1788   return TRUE;
1789 }
1790 
1791 /* Return true if H is a locally-defined PIC function, in the sense
1792    that it or its fn_stub might need $25 to be valid on entry.
1793    Note that MIPS16 functions set up $gp using PC-relative instructions,
1794    so they themselves never need $25 to be valid.  Only non-MIPS16
1795    entry points are of interest here.  */
1796 
1797 static bfd_boolean
1798 mips_elf_local_pic_function_p (struct mips_elf_link_hash_entry *h)
1799 {
1800   return ((h->root.root.type == bfd_link_hash_defined
1801 	   || h->root.root.type == bfd_link_hash_defweak)
1802 	  && h->root.def_regular
1803 	  && !bfd_is_abs_section (h->root.root.u.def.section)
1804 	  && (!ELF_ST_IS_MIPS16 (h->root.other)
1805 	      || (h->fn_stub && h->need_fn_stub))
1806 	  && (PIC_OBJECT_P (h->root.root.u.def.section->owner)
1807 	      || ELF_ST_IS_MIPS_PIC (h->root.other)));
1808 }
1809 
1810 /* Set *SEC to the input section that contains the target of STUB.
1811    Return the offset of the target from the start of that section.  */
1812 
1813 static bfd_vma
1814 mips_elf_get_la25_target (struct mips_elf_la25_stub *stub,
1815 			  asection **sec)
1816 {
1817   if (ELF_ST_IS_MIPS16 (stub->h->root.other))
1818     {
1819       BFD_ASSERT (stub->h->need_fn_stub);
1820       *sec = stub->h->fn_stub;
1821       return 0;
1822     }
1823   else
1824     {
1825       *sec = stub->h->root.root.u.def.section;
1826       return stub->h->root.root.u.def.value;
1827     }
1828 }
1829 
1830 /* STUB describes an la25 stub that we have decided to implement
1831    by inserting an LUI/ADDIU pair before the target function.
1832    Create the section and redirect the function symbol to it.  */
1833 
1834 static bfd_boolean
1835 mips_elf_add_la25_intro (struct mips_elf_la25_stub *stub,
1836 			 struct bfd_link_info *info)
1837 {
1838   struct mips_elf_link_hash_table *htab;
1839   char *name;
1840   asection *s, *input_section;
1841   unsigned int align;
1842 
1843   htab = mips_elf_hash_table (info);
1844   if (htab == NULL)
1845     return FALSE;
1846 
1847   /* Create a unique name for the new section.  */
1848   name = bfd_malloc (11 + sizeof (".text.stub."));
1849   if (name == NULL)
1850     return FALSE;
1851   sprintf (name, ".text.stub.%d", (int) htab_elements (htab->la25_stubs));
1852 
1853   /* Create the section.  */
1854   mips_elf_get_la25_target (stub, &input_section);
1855   s = htab->add_stub_section (name, input_section,
1856 			      input_section->output_section);
1857   if (s == NULL)
1858     return FALSE;
1859 
1860   /* Make sure that any padding goes before the stub.  */
1861   align = input_section->alignment_power;
1862   if (!bfd_set_section_alignment (s->owner, s, align))
1863     return FALSE;
1864   if (align > 3)
1865     s->size = (1 << align) - 8;
1866 
1867   /* Create a symbol for the stub.  */
1868   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 8);
1869   stub->stub_section = s;
1870   stub->offset = s->size;
1871 
1872   /* Allocate room for it.  */
1873   s->size += 8;
1874   return TRUE;
1875 }
1876 
1877 /* STUB describes an la25 stub that we have decided to implement
1878    with a separate trampoline.  Allocate room for it and redirect
1879    the function symbol to it.  */
1880 
1881 static bfd_boolean
1882 mips_elf_add_la25_trampoline (struct mips_elf_la25_stub *stub,
1883 			      struct bfd_link_info *info)
1884 {
1885   struct mips_elf_link_hash_table *htab;
1886   asection *s;
1887 
1888   htab = mips_elf_hash_table (info);
1889   if (htab == NULL)
1890     return FALSE;
1891 
1892   /* Create a trampoline section, if we haven't already.  */
1893   s = htab->strampoline;
1894   if (s == NULL)
1895     {
1896       asection *input_section = stub->h->root.root.u.def.section;
1897       s = htab->add_stub_section (".text", NULL,
1898 				  input_section->output_section);
1899       if (s == NULL || !bfd_set_section_alignment (s->owner, s, 4))
1900 	return FALSE;
1901       htab->strampoline = s;
1902     }
1903 
1904   /* Create a symbol for the stub.  */
1905   mips_elf_create_stub_symbol (info, stub->h, ".pic.", s, s->size, 16);
1906   stub->stub_section = s;
1907   stub->offset = s->size;
1908 
1909   /* Allocate room for it.  */
1910   s->size += 16;
1911   return TRUE;
1912 }
1913 
1914 /* H describes a symbol that needs an la25 stub.  Make sure that an
1915    appropriate stub exists and point H at it.  */
1916 
1917 static bfd_boolean
1918 mips_elf_add_la25_stub (struct bfd_link_info *info,
1919 			struct mips_elf_link_hash_entry *h)
1920 {
1921   struct mips_elf_link_hash_table *htab;
1922   struct mips_elf_la25_stub search, *stub;
1923   bfd_boolean use_trampoline_p;
1924   asection *s;
1925   bfd_vma value;
1926   void **slot;
1927 
1928   /* Describe the stub we want.  */
1929   search.stub_section = NULL;
1930   search.offset = 0;
1931   search.h = h;
1932 
1933   /* See if we've already created an equivalent stub.  */
1934   htab = mips_elf_hash_table (info);
1935   if (htab == NULL)
1936     return FALSE;
1937 
1938   slot = htab_find_slot (htab->la25_stubs, &search, INSERT);
1939   if (slot == NULL)
1940     return FALSE;
1941 
1942   stub = (struct mips_elf_la25_stub *) *slot;
1943   if (stub != NULL)
1944     {
1945       /* We can reuse the existing stub.  */
1946       h->la25_stub = stub;
1947       return TRUE;
1948     }
1949 
1950   /* Create a permanent copy of ENTRY and add it to the hash table.  */
1951   stub = bfd_malloc (sizeof (search));
1952   if (stub == NULL)
1953     return FALSE;
1954   *stub = search;
1955   *slot = stub;
1956 
1957   /* Prefer to use LUI/ADDIU stubs if the function is at the beginning
1958      of the section and if we would need no more than 2 nops.  */
1959   value = mips_elf_get_la25_target (stub, &s);
1960   use_trampoline_p = (value != 0 || s->alignment_power > 4);
1961 
1962   h->la25_stub = stub;
1963   return (use_trampoline_p
1964 	  ? mips_elf_add_la25_trampoline (stub, info)
1965 	  : mips_elf_add_la25_intro (stub, info));
1966 }
1967 
1968 /* A mips_elf_link_hash_traverse callback that is called before sizing
1969    sections.  DATA points to a mips_htab_traverse_info structure.  */
1970 
1971 static bfd_boolean
1972 mips_elf_check_symbols (struct mips_elf_link_hash_entry *h, void *data)
1973 {
1974   struct mips_htab_traverse_info *hti;
1975 
1976   hti = (struct mips_htab_traverse_info *) data;
1977   if (!hti->info->relocatable)
1978     mips_elf_check_mips16_stubs (hti->info, h);
1979 
1980   if (mips_elf_local_pic_function_p (h))
1981     {
1982       /* PR 12845: If H is in a section that has been garbage
1983 	 collected it will have its output section set to *ABS*.  */
1984       if (bfd_is_abs_section (h->root.root.u.def.section->output_section))
1985 	return TRUE;
1986 
1987       /* H is a function that might need $25 to be valid on entry.
1988 	 If we're creating a non-PIC relocatable object, mark H as
1989 	 being PIC.  If we're creating a non-relocatable object with
1990 	 non-PIC branches and jumps to H, make sure that H has an la25
1991 	 stub.  */
1992       if (hti->info->relocatable)
1993 	{
1994 	  if (!PIC_OBJECT_P (hti->output_bfd))
1995 	    h->root.other = ELF_ST_SET_MIPS_PIC (h->root.other);
1996 	}
1997       else if (h->has_nonpic_branches && !mips_elf_add_la25_stub (hti->info, h))
1998 	{
1999 	  hti->error = TRUE;
2000 	  return FALSE;
2001 	}
2002     }
2003   return TRUE;
2004 }
2005 
2006 /* R_MIPS16_26 is used for the mips16 jal and jalx instructions.
2007    Most mips16 instructions are 16 bits, but these instructions
2008    are 32 bits.
2009 
2010    The format of these instructions is:
2011 
2012    +--------------+--------------------------------+
2013    |     JALX     | X|   Imm 20:16  |   Imm 25:21  |
2014    +--------------+--------------------------------+
2015    |                Immediate  15:0                |
2016    +-----------------------------------------------+
2017 
2018    JALX is the 5-bit value 00011.  X is 0 for jal, 1 for jalx.
2019    Note that the immediate value in the first word is swapped.
2020 
2021    When producing a relocatable object file, R_MIPS16_26 is
2022    handled mostly like R_MIPS_26.  In particular, the addend is
2023    stored as a straight 26-bit value in a 32-bit instruction.
2024    (gas makes life simpler for itself by never adjusting a
2025    R_MIPS16_26 reloc to be against a section, so the addend is
2026    always zero).  However, the 32 bit instruction is stored as 2
2027    16-bit values, rather than a single 32-bit value.  In a
2028    big-endian file, the result is the same; in a little-endian
2029    file, the two 16-bit halves of the 32 bit value are swapped.
2030    This is so that a disassembler can recognize the jal
2031    instruction.
2032 
2033    When doing a final link, R_MIPS16_26 is treated as a 32 bit
2034    instruction stored as two 16-bit values.  The addend A is the
2035    contents of the targ26 field.  The calculation is the same as
2036    R_MIPS_26.  When storing the calculated value, reorder the
2037    immediate value as shown above, and don't forget to store the
2038    value as two 16-bit values.
2039 
2040    To put it in MIPS ABI terms, the relocation field is T-targ26-16,
2041    defined as
2042 
2043    big-endian:
2044    +--------+----------------------+
2045    |        |                      |
2046    |        |    targ26-16         |
2047    |31    26|25                   0|
2048    +--------+----------------------+
2049 
2050    little-endian:
2051    +----------+------+-------------+
2052    |          |      |             |
2053    |  sub1    |      |     sub2    |
2054    |0        9|10  15|16         31|
2055    +----------+--------------------+
2056    where targ26-16 is sub1 followed by sub2 (i.e., the addend field A is
2057    ((sub1 << 16) | sub2)).
2058 
2059    When producing a relocatable object file, the calculation is
2060    (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2061    When producing a fully linked file, the calculation is
2062    let R = (((A < 2) | ((P + 4) & 0xf0000000) + S) >> 2)
2063    ((R & 0x1f0000) << 5) | ((R & 0x3e00000) >> 5) | (R & 0xffff)
2064 
2065    The table below lists the other MIPS16 instruction relocations.
2066    Each one is calculated in the same way as the non-MIPS16 relocation
2067    given on the right, but using the extended MIPS16 layout of 16-bit
2068    immediate fields:
2069 
2070 	R_MIPS16_GPREL		R_MIPS_GPREL16
2071 	R_MIPS16_GOT16		R_MIPS_GOT16
2072 	R_MIPS16_CALL16		R_MIPS_CALL16
2073 	R_MIPS16_HI16		R_MIPS_HI16
2074 	R_MIPS16_LO16		R_MIPS_LO16
2075 
2076    A typical instruction will have a format like this:
2077 
2078    +--------------+--------------------------------+
2079    |    EXTEND    |     Imm 10:5    |   Imm 15:11  |
2080    +--------------+--------------------------------+
2081    |    Major     |   rx   |   ry   |   Imm  4:0   |
2082    +--------------+--------------------------------+
2083 
2084    EXTEND is the five bit value 11110.  Major is the instruction
2085    opcode.
2086 
2087    All we need to do here is shuffle the bits appropriately.
2088    As above, the two 16-bit halves must be swapped on a
2089    little-endian system.  */
2090 
2091 static inline bfd_boolean
2092 mips16_reloc_p (int r_type)
2093 {
2094   switch (r_type)
2095     {
2096     case R_MIPS16_26:
2097     case R_MIPS16_GPREL:
2098     case R_MIPS16_GOT16:
2099     case R_MIPS16_CALL16:
2100     case R_MIPS16_HI16:
2101     case R_MIPS16_LO16:
2102     case R_MIPS16_TLS_GD:
2103     case R_MIPS16_TLS_LDM:
2104     case R_MIPS16_TLS_DTPREL_HI16:
2105     case R_MIPS16_TLS_DTPREL_LO16:
2106     case R_MIPS16_TLS_GOTTPREL:
2107     case R_MIPS16_TLS_TPREL_HI16:
2108     case R_MIPS16_TLS_TPREL_LO16:
2109       return TRUE;
2110 
2111     default:
2112       return FALSE;
2113     }
2114 }
2115 
2116 /* Check if a microMIPS reloc.  */
2117 
2118 static inline bfd_boolean
2119 micromips_reloc_p (unsigned int r_type)
2120 {
2121   return r_type >= R_MICROMIPS_min && r_type < R_MICROMIPS_max;
2122 }
2123 
2124 /* Similar to MIPS16, the two 16-bit halves in microMIPS must be swapped
2125    on a little-endian system.  This does not apply to R_MICROMIPS_PC7_S1
2126    and R_MICROMIPS_PC10_S1 relocs that apply to 16-bit instructions.  */
2127 
2128 static inline bfd_boolean
2129 micromips_reloc_shuffle_p (unsigned int r_type)
2130 {
2131   return (micromips_reloc_p (r_type)
2132 	  && r_type != R_MICROMIPS_PC7_S1
2133 	  && r_type != R_MICROMIPS_PC10_S1);
2134 }
2135 
2136 static inline bfd_boolean
2137 got16_reloc_p (int r_type)
2138 {
2139   return (r_type == R_MIPS_GOT16
2140 	  || r_type == R_MIPS16_GOT16
2141 	  || r_type == R_MICROMIPS_GOT16);
2142 }
2143 
2144 static inline bfd_boolean
2145 call16_reloc_p (int r_type)
2146 {
2147   return (r_type == R_MIPS_CALL16
2148 	  || r_type == R_MIPS16_CALL16
2149 	  || r_type == R_MICROMIPS_CALL16);
2150 }
2151 
2152 static inline bfd_boolean
2153 got_disp_reloc_p (unsigned int r_type)
2154 {
2155   return r_type == R_MIPS_GOT_DISP || r_type == R_MICROMIPS_GOT_DISP;
2156 }
2157 
2158 static inline bfd_boolean
2159 got_page_reloc_p (unsigned int r_type)
2160 {
2161   return r_type == R_MIPS_GOT_PAGE || r_type == R_MICROMIPS_GOT_PAGE;
2162 }
2163 
2164 static inline bfd_boolean
2165 got_ofst_reloc_p (unsigned int r_type)
2166 {
2167   return r_type == R_MIPS_GOT_OFST || r_type == R_MICROMIPS_GOT_OFST;
2168 }
2169 
2170 static inline bfd_boolean
2171 got_hi16_reloc_p (unsigned int r_type)
2172 {
2173   return r_type == R_MIPS_GOT_HI16 || r_type == R_MICROMIPS_GOT_HI16;
2174 }
2175 
2176 static inline bfd_boolean
2177 got_lo16_reloc_p (unsigned int r_type)
2178 {
2179   return r_type == R_MIPS_GOT_LO16 || r_type == R_MICROMIPS_GOT_LO16;
2180 }
2181 
2182 static inline bfd_boolean
2183 call_hi16_reloc_p (unsigned int r_type)
2184 {
2185   return r_type == R_MIPS_CALL_HI16 || r_type == R_MICROMIPS_CALL_HI16;
2186 }
2187 
2188 static inline bfd_boolean
2189 call_lo16_reloc_p (unsigned int r_type)
2190 {
2191   return r_type == R_MIPS_CALL_LO16 || r_type == R_MICROMIPS_CALL_LO16;
2192 }
2193 
2194 static inline bfd_boolean
2195 hi16_reloc_p (int r_type)
2196 {
2197   return (r_type == R_MIPS_HI16
2198 	  || r_type == R_MIPS16_HI16
2199 	  || r_type == R_MICROMIPS_HI16
2200 	  || r_type == R_MIPS_PCHI16);
2201 }
2202 
2203 static inline bfd_boolean
2204 lo16_reloc_p (int r_type)
2205 {
2206   return (r_type == R_MIPS_LO16
2207 	  || r_type == R_MIPS16_LO16
2208 	  || r_type == R_MICROMIPS_LO16
2209 	  || r_type == R_MIPS_PCLO16);
2210 }
2211 
2212 static inline bfd_boolean
2213 mips16_call_reloc_p (int r_type)
2214 {
2215   return r_type == R_MIPS16_26 || r_type == R_MIPS16_CALL16;
2216 }
2217 
2218 static inline bfd_boolean
2219 jal_reloc_p (int r_type)
2220 {
2221   return (r_type == R_MIPS_26
2222 	  || r_type == R_MIPS16_26
2223 	  || r_type == R_MICROMIPS_26_S1);
2224 }
2225 
2226 static inline bfd_boolean
2227 aligned_pcrel_reloc_p (int r_type)
2228 {
2229   return (r_type == R_MIPS_PC18_S3
2230 	  || r_type == R_MIPS_PC19_S2);
2231 }
2232 
2233 static inline bfd_boolean
2234 micromips_branch_reloc_p (int r_type)
2235 {
2236   return (r_type == R_MICROMIPS_26_S1
2237 	  || r_type == R_MICROMIPS_PC16_S1
2238 	  || r_type == R_MICROMIPS_PC10_S1
2239 	  || r_type == R_MICROMIPS_PC7_S1);
2240 }
2241 
2242 static inline bfd_boolean
2243 tls_gd_reloc_p (unsigned int r_type)
2244 {
2245   return (r_type == R_MIPS_TLS_GD
2246 	  || r_type == R_MIPS16_TLS_GD
2247 	  || r_type == R_MICROMIPS_TLS_GD);
2248 }
2249 
2250 static inline bfd_boolean
2251 tls_ldm_reloc_p (unsigned int r_type)
2252 {
2253   return (r_type == R_MIPS_TLS_LDM
2254 	  || r_type == R_MIPS16_TLS_LDM
2255 	  || r_type == R_MICROMIPS_TLS_LDM);
2256 }
2257 
2258 static inline bfd_boolean
2259 tls_gottprel_reloc_p (unsigned int r_type)
2260 {
2261   return (r_type == R_MIPS_TLS_GOTTPREL
2262 	  || r_type == R_MIPS16_TLS_GOTTPREL
2263 	  || r_type == R_MICROMIPS_TLS_GOTTPREL);
2264 }
2265 
2266 void
2267 _bfd_mips_elf_reloc_unshuffle (bfd *abfd, int r_type,
2268 			       bfd_boolean jal_shuffle, bfd_byte *data)
2269 {
2270   bfd_vma first, second, val;
2271 
2272   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2273     return;
2274 
2275   /* Pick up the first and second halfwords of the instruction.  */
2276   first = bfd_get_16 (abfd, data);
2277   second = bfd_get_16 (abfd, data + 2);
2278   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2279     val = first << 16 | second;
2280   else if (r_type != R_MIPS16_26)
2281     val = (((first & 0xf800) << 16) | ((second & 0xffe0) << 11)
2282 	   | ((first & 0x1f) << 11) | (first & 0x7e0) | (second & 0x1f));
2283   else
2284     val = (((first & 0xfc00) << 16) | ((first & 0x3e0) << 11)
2285 	   | ((first & 0x1f) << 21) | second);
2286   bfd_put_32 (abfd, val, data);
2287 }
2288 
2289 void
2290 _bfd_mips_elf_reloc_shuffle (bfd *abfd, int r_type,
2291 			     bfd_boolean jal_shuffle, bfd_byte *data)
2292 {
2293   bfd_vma first, second, val;
2294 
2295   if (!mips16_reloc_p (r_type) && !micromips_reloc_shuffle_p (r_type))
2296     return;
2297 
2298   val = bfd_get_32 (abfd, data);
2299   if (micromips_reloc_p (r_type) || (r_type == R_MIPS16_26 && !jal_shuffle))
2300     {
2301       second = val & 0xffff;
2302       first = val >> 16;
2303     }
2304   else if (r_type != R_MIPS16_26)
2305     {
2306       second = ((val >> 11) & 0xffe0) | (val & 0x1f);
2307       first = ((val >> 16) & 0xf800) | ((val >> 11) & 0x1f) | (val & 0x7e0);
2308     }
2309   else
2310     {
2311       second = val & 0xffff;
2312       first = ((val >> 16) & 0xfc00) | ((val >> 11) & 0x3e0)
2313 	       | ((val >> 21) & 0x1f);
2314     }
2315   bfd_put_16 (abfd, second, data + 2);
2316   bfd_put_16 (abfd, first, data);
2317 }
2318 
2319 bfd_reloc_status_type
2320 _bfd_mips_elf_gprel16_with_gp (bfd *abfd, asymbol *symbol,
2321 			       arelent *reloc_entry, asection *input_section,
2322 			       bfd_boolean relocatable, void *data, bfd_vma gp)
2323 {
2324   bfd_vma relocation;
2325   bfd_signed_vma val;
2326   bfd_reloc_status_type status;
2327 
2328   if (bfd_is_com_section (symbol->section))
2329     relocation = 0;
2330   else
2331     relocation = symbol->value;
2332 
2333   relocation += symbol->section->output_section->vma;
2334   relocation += symbol->section->output_offset;
2335 
2336   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2337     return bfd_reloc_outofrange;
2338 
2339   /* Set val to the offset into the section or symbol.  */
2340   val = reloc_entry->addend;
2341 
2342   _bfd_mips_elf_sign_extend (val, 16);
2343 
2344   /* Adjust val for the final section location and GP value.  If we
2345      are producing relocatable output, we don't want to do this for
2346      an external symbol.  */
2347   if (! relocatable
2348       || (symbol->flags & BSF_SECTION_SYM) != 0)
2349     val += relocation - gp;
2350 
2351   if (reloc_entry->howto->partial_inplace)
2352     {
2353       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2354 				       (bfd_byte *) data
2355 				       + reloc_entry->address);
2356       if (status != bfd_reloc_ok)
2357 	return status;
2358     }
2359   else
2360     reloc_entry->addend = val;
2361 
2362   if (relocatable)
2363     reloc_entry->address += input_section->output_offset;
2364 
2365   return bfd_reloc_ok;
2366 }
2367 
2368 /* Used to store a REL high-part relocation such as R_MIPS_HI16 or
2369    R_MIPS_GOT16.  REL is the relocation, INPUT_SECTION is the section
2370    that contains the relocation field and DATA points to the start of
2371    INPUT_SECTION.  */
2372 
2373 struct mips_hi16
2374 {
2375   struct mips_hi16 *next;
2376   bfd_byte *data;
2377   asection *input_section;
2378   arelent rel;
2379 };
2380 
2381 /* FIXME: This should not be a static variable.  */
2382 
2383 static struct mips_hi16 *mips_hi16_list;
2384 
2385 /* A howto special_function for REL *HI16 relocations.  We can only
2386    calculate the correct value once we've seen the partnering
2387    *LO16 relocation, so just save the information for later.
2388 
2389    The ABI requires that the *LO16 immediately follow the *HI16.
2390    However, as a GNU extension, we permit an arbitrary number of
2391    *HI16s to be associated with a single *LO16.  This significantly
2392    simplies the relocation handling in gcc.  */
2393 
2394 bfd_reloc_status_type
2395 _bfd_mips_elf_hi16_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2396 			  asymbol *symbol ATTRIBUTE_UNUSED, void *data,
2397 			  asection *input_section, bfd *output_bfd,
2398 			  char **error_message ATTRIBUTE_UNUSED)
2399 {
2400   struct mips_hi16 *n;
2401 
2402   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2403     return bfd_reloc_outofrange;
2404 
2405   n = bfd_malloc (sizeof *n);
2406   if (n == NULL)
2407     return bfd_reloc_outofrange;
2408 
2409   n->next = mips_hi16_list;
2410   n->data = data;
2411   n->input_section = input_section;
2412   n->rel = *reloc_entry;
2413   mips_hi16_list = n;
2414 
2415   if (output_bfd != NULL)
2416     reloc_entry->address += input_section->output_offset;
2417 
2418   return bfd_reloc_ok;
2419 }
2420 
2421 /* A howto special_function for REL R_MIPS*_GOT16 relocations.  This is just
2422    like any other 16-bit relocation when applied to global symbols, but is
2423    treated in the same as R_MIPS_HI16 when applied to local symbols.  */
2424 
2425 bfd_reloc_status_type
2426 _bfd_mips_elf_got16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2427 			   void *data, asection *input_section,
2428 			   bfd *output_bfd, char **error_message)
2429 {
2430   if ((symbol->flags & (BSF_GLOBAL | BSF_WEAK)) != 0
2431       || bfd_is_und_section (bfd_get_section (symbol))
2432       || bfd_is_com_section (bfd_get_section (symbol)))
2433     /* The relocation is against a global symbol.  */
2434     return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2435 					input_section, output_bfd,
2436 					error_message);
2437 
2438   return _bfd_mips_elf_hi16_reloc (abfd, reloc_entry, symbol, data,
2439 				   input_section, output_bfd, error_message);
2440 }
2441 
2442 /* A howto special_function for REL *LO16 relocations.  The *LO16 itself
2443    is a straightforward 16 bit inplace relocation, but we must deal with
2444    any partnering high-part relocations as well.  */
2445 
2446 bfd_reloc_status_type
2447 _bfd_mips_elf_lo16_reloc (bfd *abfd, arelent *reloc_entry, asymbol *symbol,
2448 			  void *data, asection *input_section,
2449 			  bfd *output_bfd, char **error_message)
2450 {
2451   bfd_vma vallo;
2452   bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2453 
2454   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2455     return bfd_reloc_outofrange;
2456 
2457   _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2458 				 location);
2459   vallo = bfd_get_32 (abfd, location);
2460   _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2461 			       location);
2462 
2463   while (mips_hi16_list != NULL)
2464     {
2465       bfd_reloc_status_type ret;
2466       struct mips_hi16 *hi;
2467 
2468       hi = mips_hi16_list;
2469 
2470       /* R_MIPS*_GOT16 relocations are something of a special case.  We
2471 	 want to install the addend in the same way as for a R_MIPS*_HI16
2472 	 relocation (with a rightshift of 16).  However, since GOT16
2473 	 relocations can also be used with global symbols, their howto
2474 	 has a rightshift of 0.  */
2475       if (hi->rel.howto->type == R_MIPS_GOT16)
2476 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS_HI16, FALSE);
2477       else if (hi->rel.howto->type == R_MIPS16_GOT16)
2478 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MIPS16_HI16, FALSE);
2479       else if (hi->rel.howto->type == R_MICROMIPS_GOT16)
2480 	hi->rel.howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, R_MICROMIPS_HI16, FALSE);
2481 
2482       /* VALLO is a signed 16-bit number.  Bias it by 0x8000 so that any
2483 	 carry or borrow will induce a change of +1 or -1 in the high part.  */
2484       hi->rel.addend += (vallo + 0x8000) & 0xffff;
2485 
2486       ret = _bfd_mips_elf_generic_reloc (abfd, &hi->rel, symbol, hi->data,
2487 					 hi->input_section, output_bfd,
2488 					 error_message);
2489       if (ret != bfd_reloc_ok)
2490 	return ret;
2491 
2492       mips_hi16_list = hi->next;
2493       free (hi);
2494     }
2495 
2496   return _bfd_mips_elf_generic_reloc (abfd, reloc_entry, symbol, data,
2497 				      input_section, output_bfd,
2498 				      error_message);
2499 }
2500 
2501 /* A generic howto special_function.  This calculates and installs the
2502    relocation itself, thus avoiding the oft-discussed problems in
2503    bfd_perform_relocation and bfd_install_relocation.  */
2504 
2505 bfd_reloc_status_type
2506 _bfd_mips_elf_generic_reloc (bfd *abfd ATTRIBUTE_UNUSED, arelent *reloc_entry,
2507 			     asymbol *symbol, void *data ATTRIBUTE_UNUSED,
2508 			     asection *input_section, bfd *output_bfd,
2509 			     char **error_message ATTRIBUTE_UNUSED)
2510 {
2511   bfd_signed_vma val;
2512   bfd_reloc_status_type status;
2513   bfd_boolean relocatable;
2514 
2515   relocatable = (output_bfd != NULL);
2516 
2517   if (reloc_entry->address > bfd_get_section_limit (abfd, input_section))
2518     return bfd_reloc_outofrange;
2519 
2520   /* Build up the field adjustment in VAL.  */
2521   val = 0;
2522   if (!relocatable || (symbol->flags & BSF_SECTION_SYM) != 0)
2523     {
2524       /* Either we're calculating the final field value or we have a
2525 	 relocation against a section symbol.  Add in the section's
2526 	 offset or address.  */
2527       val += symbol->section->output_section->vma;
2528       val += symbol->section->output_offset;
2529     }
2530 
2531   if (!relocatable)
2532     {
2533       /* We're calculating the final field value.  Add in the symbol's value
2534 	 and, if pc-relative, subtract the address of the field itself.  */
2535       val += symbol->value;
2536       if (reloc_entry->howto->pc_relative)
2537 	{
2538 	  val -= input_section->output_section->vma;
2539 	  val -= input_section->output_offset;
2540 	  val -= reloc_entry->address;
2541 	}
2542     }
2543 
2544   /* VAL is now the final adjustment.  If we're keeping this relocation
2545      in the output file, and if the relocation uses a separate addend,
2546      we just need to add VAL to that addend.  Otherwise we need to add
2547      VAL to the relocation field itself.  */
2548   if (relocatable && !reloc_entry->howto->partial_inplace)
2549     reloc_entry->addend += val;
2550   else
2551     {
2552       bfd_byte *location = (bfd_byte *) data + reloc_entry->address;
2553 
2554       /* Add in the separate addend, if any.  */
2555       val += reloc_entry->addend;
2556 
2557       /* Add VAL to the relocation field.  */
2558       _bfd_mips_elf_reloc_unshuffle (abfd, reloc_entry->howto->type, FALSE,
2559 				     location);
2560       status = _bfd_relocate_contents (reloc_entry->howto, abfd, val,
2561 				       location);
2562       _bfd_mips_elf_reloc_shuffle (abfd, reloc_entry->howto->type, FALSE,
2563 				   location);
2564 
2565       if (status != bfd_reloc_ok)
2566 	return status;
2567     }
2568 
2569   if (relocatable)
2570     reloc_entry->address += input_section->output_offset;
2571 
2572   return bfd_reloc_ok;
2573 }
2574 
2575 /* Swap an entry in a .gptab section.  Note that these routines rely
2576    on the equivalence of the two elements of the union.  */
2577 
2578 static void
2579 bfd_mips_elf32_swap_gptab_in (bfd *abfd, const Elf32_External_gptab *ex,
2580 			      Elf32_gptab *in)
2581 {
2582   in->gt_entry.gt_g_value = H_GET_32 (abfd, ex->gt_entry.gt_g_value);
2583   in->gt_entry.gt_bytes = H_GET_32 (abfd, ex->gt_entry.gt_bytes);
2584 }
2585 
2586 static void
2587 bfd_mips_elf32_swap_gptab_out (bfd *abfd, const Elf32_gptab *in,
2588 			       Elf32_External_gptab *ex)
2589 {
2590   H_PUT_32 (abfd, in->gt_entry.gt_g_value, ex->gt_entry.gt_g_value);
2591   H_PUT_32 (abfd, in->gt_entry.gt_bytes, ex->gt_entry.gt_bytes);
2592 }
2593 
2594 static void
2595 bfd_elf32_swap_compact_rel_out (bfd *abfd, const Elf32_compact_rel *in,
2596 				Elf32_External_compact_rel *ex)
2597 {
2598   H_PUT_32 (abfd, in->id1, ex->id1);
2599   H_PUT_32 (abfd, in->num, ex->num);
2600   H_PUT_32 (abfd, in->id2, ex->id2);
2601   H_PUT_32 (abfd, in->offset, ex->offset);
2602   H_PUT_32 (abfd, in->reserved0, ex->reserved0);
2603   H_PUT_32 (abfd, in->reserved1, ex->reserved1);
2604 }
2605 
2606 static void
2607 bfd_elf32_swap_crinfo_out (bfd *abfd, const Elf32_crinfo *in,
2608 			   Elf32_External_crinfo *ex)
2609 {
2610   unsigned long l;
2611 
2612   l = (((in->ctype & CRINFO_CTYPE) << CRINFO_CTYPE_SH)
2613        | ((in->rtype & CRINFO_RTYPE) << CRINFO_RTYPE_SH)
2614        | ((in->dist2to & CRINFO_DIST2TO) << CRINFO_DIST2TO_SH)
2615        | ((in->relvaddr & CRINFO_RELVADDR) << CRINFO_RELVADDR_SH));
2616   H_PUT_32 (abfd, l, ex->info);
2617   H_PUT_32 (abfd, in->konst, ex->konst);
2618   H_PUT_32 (abfd, in->vaddr, ex->vaddr);
2619 }
2620 
2621 /* A .reginfo section holds a single Elf32_RegInfo structure.  These
2622    routines swap this structure in and out.  They are used outside of
2623    BFD, so they are globally visible.  */
2624 
2625 void
2626 bfd_mips_elf32_swap_reginfo_in (bfd *abfd, const Elf32_External_RegInfo *ex,
2627 				Elf32_RegInfo *in)
2628 {
2629   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2630   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2631   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2632   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2633   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2634   in->ri_gp_value = H_GET_32 (abfd, ex->ri_gp_value);
2635 }
2636 
2637 void
2638 bfd_mips_elf32_swap_reginfo_out (bfd *abfd, const Elf32_RegInfo *in,
2639 				 Elf32_External_RegInfo *ex)
2640 {
2641   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2642   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2643   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2644   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2645   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2646   H_PUT_32 (abfd, in->ri_gp_value, ex->ri_gp_value);
2647 }
2648 
2649 /* In the 64 bit ABI, the .MIPS.options section holds register
2650    information in an Elf64_Reginfo structure.  These routines swap
2651    them in and out.  They are globally visible because they are used
2652    outside of BFD.  These routines are here so that gas can call them
2653    without worrying about whether the 64 bit ABI has been included.  */
2654 
2655 void
2656 bfd_mips_elf64_swap_reginfo_in (bfd *abfd, const Elf64_External_RegInfo *ex,
2657 				Elf64_Internal_RegInfo *in)
2658 {
2659   in->ri_gprmask = H_GET_32 (abfd, ex->ri_gprmask);
2660   in->ri_pad = H_GET_32 (abfd, ex->ri_pad);
2661   in->ri_cprmask[0] = H_GET_32 (abfd, ex->ri_cprmask[0]);
2662   in->ri_cprmask[1] = H_GET_32 (abfd, ex->ri_cprmask[1]);
2663   in->ri_cprmask[2] = H_GET_32 (abfd, ex->ri_cprmask[2]);
2664   in->ri_cprmask[3] = H_GET_32 (abfd, ex->ri_cprmask[3]);
2665   in->ri_gp_value = H_GET_64 (abfd, ex->ri_gp_value);
2666 }
2667 
2668 void
2669 bfd_mips_elf64_swap_reginfo_out (bfd *abfd, const Elf64_Internal_RegInfo *in,
2670 				 Elf64_External_RegInfo *ex)
2671 {
2672   H_PUT_32 (abfd, in->ri_gprmask, ex->ri_gprmask);
2673   H_PUT_32 (abfd, in->ri_pad, ex->ri_pad);
2674   H_PUT_32 (abfd, in->ri_cprmask[0], ex->ri_cprmask[0]);
2675   H_PUT_32 (abfd, in->ri_cprmask[1], ex->ri_cprmask[1]);
2676   H_PUT_32 (abfd, in->ri_cprmask[2], ex->ri_cprmask[2]);
2677   H_PUT_32 (abfd, in->ri_cprmask[3], ex->ri_cprmask[3]);
2678   H_PUT_64 (abfd, in->ri_gp_value, ex->ri_gp_value);
2679 }
2680 
2681 /* Swap in an options header.  */
2682 
2683 void
2684 bfd_mips_elf_swap_options_in (bfd *abfd, const Elf_External_Options *ex,
2685 			      Elf_Internal_Options *in)
2686 {
2687   in->kind = H_GET_8 (abfd, ex->kind);
2688   in->size = H_GET_8 (abfd, ex->size);
2689   in->section = H_GET_16 (abfd, ex->section);
2690   in->info = H_GET_32 (abfd, ex->info);
2691 }
2692 
2693 /* Swap out an options header.  */
2694 
2695 void
2696 bfd_mips_elf_swap_options_out (bfd *abfd, const Elf_Internal_Options *in,
2697 			       Elf_External_Options *ex)
2698 {
2699   H_PUT_8 (abfd, in->kind, ex->kind);
2700   H_PUT_8 (abfd, in->size, ex->size);
2701   H_PUT_16 (abfd, in->section, ex->section);
2702   H_PUT_32 (abfd, in->info, ex->info);
2703 }
2704 
2705 /* Swap in an abiflags structure.  */
2706 
2707 void
2708 bfd_mips_elf_swap_abiflags_v0_in (bfd *abfd,
2709 				  const Elf_External_ABIFlags_v0 *ex,
2710 				  Elf_Internal_ABIFlags_v0 *in)
2711 {
2712   in->version = H_GET_16 (abfd, ex->version);
2713   in->isa_level = H_GET_8 (abfd, ex->isa_level);
2714   in->isa_rev = H_GET_8 (abfd, ex->isa_rev);
2715   in->gpr_size = H_GET_8 (abfd, ex->gpr_size);
2716   in->cpr1_size = H_GET_8 (abfd, ex->cpr1_size);
2717   in->cpr2_size = H_GET_8 (abfd, ex->cpr2_size);
2718   in->fp_abi = H_GET_8 (abfd, ex->fp_abi);
2719   in->isa_ext = H_GET_32 (abfd, ex->isa_ext);
2720   in->ases = H_GET_32 (abfd, ex->ases);
2721   in->flags1 = H_GET_32 (abfd, ex->flags1);
2722   in->flags2 = H_GET_32 (abfd, ex->flags2);
2723 }
2724 
2725 /* Swap out an abiflags structure.  */
2726 
2727 void
2728 bfd_mips_elf_swap_abiflags_v0_out (bfd *abfd,
2729 				   const Elf_Internal_ABIFlags_v0 *in,
2730 				   Elf_External_ABIFlags_v0 *ex)
2731 {
2732   H_PUT_16 (abfd, in->version, ex->version);
2733   H_PUT_8 (abfd, in->isa_level, ex->isa_level);
2734   H_PUT_8 (abfd, in->isa_rev, ex->isa_rev);
2735   H_PUT_8 (abfd, in->gpr_size, ex->gpr_size);
2736   H_PUT_8 (abfd, in->cpr1_size, ex->cpr1_size);
2737   H_PUT_8 (abfd, in->cpr2_size, ex->cpr2_size);
2738   H_PUT_8 (abfd, in->fp_abi, ex->fp_abi);
2739   H_PUT_32 (abfd, in->isa_ext, ex->isa_ext);
2740   H_PUT_32 (abfd, in->ases, ex->ases);
2741   H_PUT_32 (abfd, in->flags1, ex->flags1);
2742   H_PUT_32 (abfd, in->flags2, ex->flags2);
2743 }
2744 
2745 /* This function is called via qsort() to sort the dynamic relocation
2746    entries by increasing r_symndx value.  */
2747 
2748 static int
2749 sort_dynamic_relocs (const void *arg1, const void *arg2)
2750 {
2751   Elf_Internal_Rela int_reloc1;
2752   Elf_Internal_Rela int_reloc2;
2753   int diff;
2754 
2755   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg1, &int_reloc1);
2756   bfd_elf32_swap_reloc_in (reldyn_sorting_bfd, arg2, &int_reloc2);
2757 
2758   diff = ELF32_R_SYM (int_reloc1.r_info) - ELF32_R_SYM (int_reloc2.r_info);
2759   if (diff != 0)
2760     return diff;
2761 
2762   if (int_reloc1.r_offset < int_reloc2.r_offset)
2763     return -1;
2764   if (int_reloc1.r_offset > int_reloc2.r_offset)
2765     return 1;
2766   return 0;
2767 }
2768 
2769 /* Like sort_dynamic_relocs, but used for elf64 relocations.  */
2770 
2771 static int
2772 sort_dynamic_relocs_64 (const void *arg1 ATTRIBUTE_UNUSED,
2773 			const void *arg2 ATTRIBUTE_UNUSED)
2774 {
2775 #ifdef BFD64
2776   Elf_Internal_Rela int_reloc1[3];
2777   Elf_Internal_Rela int_reloc2[3];
2778 
2779   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2780     (reldyn_sorting_bfd, arg1, int_reloc1);
2781   (*get_elf_backend_data (reldyn_sorting_bfd)->s->swap_reloc_in)
2782     (reldyn_sorting_bfd, arg2, int_reloc2);
2783 
2784   if (ELF64_R_SYM (int_reloc1[0].r_info) < ELF64_R_SYM (int_reloc2[0].r_info))
2785     return -1;
2786   if (ELF64_R_SYM (int_reloc1[0].r_info) > ELF64_R_SYM (int_reloc2[0].r_info))
2787     return 1;
2788 
2789   if (int_reloc1[0].r_offset < int_reloc2[0].r_offset)
2790     return -1;
2791   if (int_reloc1[0].r_offset > int_reloc2[0].r_offset)
2792     return 1;
2793   return 0;
2794 #else
2795   abort ();
2796 #endif
2797 }
2798 
2799 
2800 /* This routine is used to write out ECOFF debugging external symbol
2801    information.  It is called via mips_elf_link_hash_traverse.  The
2802    ECOFF external symbol information must match the ELF external
2803    symbol information.  Unfortunately, at this point we don't know
2804    whether a symbol is required by reloc information, so the two
2805    tables may wind up being different.  We must sort out the external
2806    symbol information before we can set the final size of the .mdebug
2807    section, and we must set the size of the .mdebug section before we
2808    can relocate any sections, and we can't know which symbols are
2809    required by relocation until we relocate the sections.
2810    Fortunately, it is relatively unlikely that any symbol will be
2811    stripped but required by a reloc.  In particular, it can not happen
2812    when generating a final executable.  */
2813 
2814 static bfd_boolean
2815 mips_elf_output_extsym (struct mips_elf_link_hash_entry *h, void *data)
2816 {
2817   struct extsym_info *einfo = data;
2818   bfd_boolean strip;
2819   asection *sec, *output_section;
2820 
2821   if (h->root.indx == -2)
2822     strip = FALSE;
2823   else if ((h->root.def_dynamic
2824 	    || h->root.ref_dynamic
2825 	    || h->root.type == bfd_link_hash_new)
2826 	   && !h->root.def_regular
2827 	   && !h->root.ref_regular)
2828     strip = TRUE;
2829   else if (einfo->info->strip == strip_all
2830 	   || (einfo->info->strip == strip_some
2831 	       && bfd_hash_lookup (einfo->info->keep_hash,
2832 				   h->root.root.root.string,
2833 				   FALSE, FALSE) == NULL))
2834     strip = TRUE;
2835   else
2836     strip = FALSE;
2837 
2838   if (strip)
2839     return TRUE;
2840 
2841   if (h->esym.ifd == -2)
2842     {
2843       h->esym.jmptbl = 0;
2844       h->esym.cobol_main = 0;
2845       h->esym.weakext = 0;
2846       h->esym.reserved = 0;
2847       h->esym.ifd = ifdNil;
2848       h->esym.asym.value = 0;
2849       h->esym.asym.st = stGlobal;
2850 
2851       if (h->root.root.type == bfd_link_hash_undefined
2852 	  || h->root.root.type == bfd_link_hash_undefweak)
2853 	{
2854 	  const char *name;
2855 
2856 	  /* Use undefined class.  Also, set class and type for some
2857              special symbols.  */
2858 	  name = h->root.root.root.string;
2859 	  if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
2860 	      || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
2861 	    {
2862 	      h->esym.asym.sc = scData;
2863 	      h->esym.asym.st = stLabel;
2864 	      h->esym.asym.value = 0;
2865 	    }
2866 	  else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
2867 	    {
2868 	      h->esym.asym.sc = scAbs;
2869 	      h->esym.asym.st = stLabel;
2870 	      h->esym.asym.value =
2871 		mips_elf_hash_table (einfo->info)->procedure_count;
2872 	    }
2873 	  else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (einfo->abfd))
2874 	    {
2875 	      h->esym.asym.sc = scAbs;
2876 	      h->esym.asym.st = stLabel;
2877 	      h->esym.asym.value = elf_gp (einfo->abfd);
2878 	    }
2879 	  else
2880 	    h->esym.asym.sc = scUndefined;
2881 	}
2882       else if (h->root.root.type != bfd_link_hash_defined
2883 	  && h->root.root.type != bfd_link_hash_defweak)
2884 	h->esym.asym.sc = scAbs;
2885       else
2886 	{
2887 	  const char *name;
2888 
2889 	  sec = h->root.root.u.def.section;
2890 	  output_section = sec->output_section;
2891 
2892 	  /* When making a shared library and symbol h is the one from
2893 	     the another shared library, OUTPUT_SECTION may be null.  */
2894 	  if (output_section == NULL)
2895 	    h->esym.asym.sc = scUndefined;
2896 	  else
2897 	    {
2898 	      name = bfd_section_name (output_section->owner, output_section);
2899 
2900 	      if (strcmp (name, ".text") == 0)
2901 		h->esym.asym.sc = scText;
2902 	      else if (strcmp (name, ".data") == 0)
2903 		h->esym.asym.sc = scData;
2904 	      else if (strcmp (name, ".sdata") == 0)
2905 		h->esym.asym.sc = scSData;
2906 	      else if (strcmp (name, ".rodata") == 0
2907 		       || strcmp (name, ".rdata") == 0)
2908 		h->esym.asym.sc = scRData;
2909 	      else if (strcmp (name, ".bss") == 0)
2910 		h->esym.asym.sc = scBss;
2911 	      else if (strcmp (name, ".sbss") == 0)
2912 		h->esym.asym.sc = scSBss;
2913 	      else if (strcmp (name, ".init") == 0)
2914 		h->esym.asym.sc = scInit;
2915 	      else if (strcmp (name, ".fini") == 0)
2916 		h->esym.asym.sc = scFini;
2917 	      else
2918 		h->esym.asym.sc = scAbs;
2919 	    }
2920 	}
2921 
2922       h->esym.asym.reserved = 0;
2923       h->esym.asym.index = indexNil;
2924     }
2925 
2926   if (h->root.root.type == bfd_link_hash_common)
2927     h->esym.asym.value = h->root.root.u.c.size;
2928   else if (h->root.root.type == bfd_link_hash_defined
2929 	   || h->root.root.type == bfd_link_hash_defweak)
2930     {
2931       if (h->esym.asym.sc == scCommon)
2932 	h->esym.asym.sc = scBss;
2933       else if (h->esym.asym.sc == scSCommon)
2934 	h->esym.asym.sc = scSBss;
2935 
2936       sec = h->root.root.u.def.section;
2937       output_section = sec->output_section;
2938       if (output_section != NULL)
2939 	h->esym.asym.value = (h->root.root.u.def.value
2940 			      + sec->output_offset
2941 			      + output_section->vma);
2942       else
2943 	h->esym.asym.value = 0;
2944     }
2945   else
2946     {
2947       struct mips_elf_link_hash_entry *hd = h;
2948 
2949       while (hd->root.root.type == bfd_link_hash_indirect)
2950 	hd = (struct mips_elf_link_hash_entry *)h->root.root.u.i.link;
2951 
2952       if (hd->needs_lazy_stub)
2953 	{
2954 	  BFD_ASSERT (hd->root.plt.plist != NULL);
2955 	  BFD_ASSERT (hd->root.plt.plist->stub_offset != MINUS_ONE);
2956 	  /* Set type and value for a symbol with a function stub.  */
2957 	  h->esym.asym.st = stProc;
2958 	  sec = hd->root.root.u.def.section;
2959 	  if (sec == NULL)
2960 	    h->esym.asym.value = 0;
2961 	  else
2962 	    {
2963 	      output_section = sec->output_section;
2964 	      if (output_section != NULL)
2965 		h->esym.asym.value = (hd->root.plt.plist->stub_offset
2966 				      + sec->output_offset
2967 				      + output_section->vma);
2968 	      else
2969 		h->esym.asym.value = 0;
2970 	    }
2971 	}
2972     }
2973 
2974   if (! bfd_ecoff_debug_one_external (einfo->abfd, einfo->debug, einfo->swap,
2975 				      h->root.root.root.string,
2976 				      &h->esym))
2977     {
2978       einfo->failed = TRUE;
2979       return FALSE;
2980     }
2981 
2982   return TRUE;
2983 }
2984 
2985 /* A comparison routine used to sort .gptab entries.  */
2986 
2987 static int
2988 gptab_compare (const void *p1, const void *p2)
2989 {
2990   const Elf32_gptab *a1 = p1;
2991   const Elf32_gptab *a2 = p2;
2992 
2993   return a1->gt_entry.gt_g_value - a2->gt_entry.gt_g_value;
2994 }
2995 
2996 /* Functions to manage the got entry hash table.  */
2997 
2998 /* Use all 64 bits of a bfd_vma for the computation of a 32-bit
2999    hash number.  */
3000 
3001 static INLINE hashval_t
3002 mips_elf_hash_bfd_vma (bfd_vma addr)
3003 {
3004 #ifdef BFD64
3005   return addr + (addr >> 32);
3006 #else
3007   return addr;
3008 #endif
3009 }
3010 
3011 static hashval_t
3012 mips_elf_got_entry_hash (const void *entry_)
3013 {
3014   const struct mips_got_entry *entry = (struct mips_got_entry *)entry_;
3015 
3016   return (entry->symndx
3017 	  + ((entry->tls_type == GOT_TLS_LDM) << 18)
3018 	  + (entry->tls_type == GOT_TLS_LDM ? 0
3019 	     : !entry->abfd ? mips_elf_hash_bfd_vma (entry->d.address)
3020 	     : entry->symndx >= 0 ? (entry->abfd->id
3021 				     + mips_elf_hash_bfd_vma (entry->d.addend))
3022 	     : entry->d.h->root.root.root.hash));
3023 }
3024 
3025 static int
3026 mips_elf_got_entry_eq (const void *entry1, const void *entry2)
3027 {
3028   const struct mips_got_entry *e1 = (struct mips_got_entry *)entry1;
3029   const struct mips_got_entry *e2 = (struct mips_got_entry *)entry2;
3030 
3031   return (e1->symndx == e2->symndx
3032 	  && e1->tls_type == e2->tls_type
3033 	  && (e1->tls_type == GOT_TLS_LDM ? TRUE
3034 	      : !e1->abfd ? !e2->abfd && e1->d.address == e2->d.address
3035 	      : e1->symndx >= 0 ? (e1->abfd == e2->abfd
3036 				   && e1->d.addend == e2->d.addend)
3037 	      : e2->abfd && e1->d.h == e2->d.h));
3038 }
3039 
3040 static hashval_t
3041 mips_got_page_ref_hash (const void *ref_)
3042 {
3043   const struct mips_got_page_ref *ref;
3044 
3045   ref = (const struct mips_got_page_ref *) ref_;
3046   return ((ref->symndx >= 0
3047 	   ? (hashval_t) (ref->u.abfd->id + ref->symndx)
3048 	   : ref->u.h->root.root.root.hash)
3049 	  + mips_elf_hash_bfd_vma (ref->addend));
3050 }
3051 
3052 static int
3053 mips_got_page_ref_eq (const void *ref1_, const void *ref2_)
3054 {
3055   const struct mips_got_page_ref *ref1, *ref2;
3056 
3057   ref1 = (const struct mips_got_page_ref *) ref1_;
3058   ref2 = (const struct mips_got_page_ref *) ref2_;
3059   return (ref1->symndx == ref2->symndx
3060 	  && (ref1->symndx < 0
3061 	      ? ref1->u.h == ref2->u.h
3062 	      : ref1->u.abfd == ref2->u.abfd)
3063 	  && ref1->addend == ref2->addend);
3064 }
3065 
3066 static hashval_t
3067 mips_got_page_entry_hash (const void *entry_)
3068 {
3069   const struct mips_got_page_entry *entry;
3070 
3071   entry = (const struct mips_got_page_entry *) entry_;
3072   return entry->sec->id;
3073 }
3074 
3075 static int
3076 mips_got_page_entry_eq (const void *entry1_, const void *entry2_)
3077 {
3078   const struct mips_got_page_entry *entry1, *entry2;
3079 
3080   entry1 = (const struct mips_got_page_entry *) entry1_;
3081   entry2 = (const struct mips_got_page_entry *) entry2_;
3082   return entry1->sec == entry2->sec;
3083 }
3084 
3085 /* Create and return a new mips_got_info structure.  */
3086 
3087 static struct mips_got_info *
3088 mips_elf_create_got_info (bfd *abfd)
3089 {
3090   struct mips_got_info *g;
3091 
3092   g = bfd_zalloc (abfd, sizeof (struct mips_got_info));
3093   if (g == NULL)
3094     return NULL;
3095 
3096   g->got_entries = htab_try_create (1, mips_elf_got_entry_hash,
3097 				    mips_elf_got_entry_eq, NULL);
3098   if (g->got_entries == NULL)
3099     return NULL;
3100 
3101   g->got_page_refs = htab_try_create (1, mips_got_page_ref_hash,
3102 				      mips_got_page_ref_eq, NULL);
3103   if (g->got_page_refs == NULL)
3104     return NULL;
3105 
3106   return g;
3107 }
3108 
3109 /* Return the GOT info for input bfd ABFD, trying to create a new one if
3110    CREATE_P and if ABFD doesn't already have a GOT.  */
3111 
3112 static struct mips_got_info *
3113 mips_elf_bfd_got (bfd *abfd, bfd_boolean create_p)
3114 {
3115   struct mips_elf_obj_tdata *tdata;
3116 
3117   if (!is_mips_elf (abfd))
3118     return NULL;
3119 
3120   tdata = mips_elf_tdata (abfd);
3121   if (!tdata->got && create_p)
3122     tdata->got = mips_elf_create_got_info (abfd);
3123   return tdata->got;
3124 }
3125 
3126 /* Record that ABFD should use output GOT G.  */
3127 
3128 static void
3129 mips_elf_replace_bfd_got (bfd *abfd, struct mips_got_info *g)
3130 {
3131   struct mips_elf_obj_tdata *tdata;
3132 
3133   BFD_ASSERT (is_mips_elf (abfd));
3134   tdata = mips_elf_tdata (abfd);
3135   if (tdata->got)
3136     {
3137       /* The GOT structure itself and the hash table entries are
3138 	 allocated to a bfd, but the hash tables aren't.  */
3139       htab_delete (tdata->got->got_entries);
3140       htab_delete (tdata->got->got_page_refs);
3141       if (tdata->got->got_page_entries)
3142 	htab_delete (tdata->got->got_page_entries);
3143     }
3144   tdata->got = g;
3145 }
3146 
3147 /* Return the dynamic relocation section.  If it doesn't exist, try to
3148    create a new it if CREATE_P, otherwise return NULL.  Also return NULL
3149    if creation fails.  */
3150 
3151 static asection *
3152 mips_elf_rel_dyn_section (struct bfd_link_info *info, bfd_boolean create_p)
3153 {
3154   const char *dname;
3155   asection *sreloc;
3156   bfd *dynobj;
3157 
3158   dname = MIPS_ELF_REL_DYN_NAME (info);
3159   dynobj = elf_hash_table (info)->dynobj;
3160   sreloc = bfd_get_linker_section (dynobj, dname);
3161   if (sreloc == NULL && create_p)
3162     {
3163       sreloc = bfd_make_section_anyway_with_flags (dynobj, dname,
3164 						   (SEC_ALLOC
3165 						    | SEC_LOAD
3166 						    | SEC_HAS_CONTENTS
3167 						    | SEC_IN_MEMORY
3168 						    | SEC_LINKER_CREATED
3169 						    | SEC_READONLY));
3170       if (sreloc == NULL
3171 	  || ! bfd_set_section_alignment (dynobj, sreloc,
3172 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
3173 	return NULL;
3174     }
3175   return sreloc;
3176 }
3177 
3178 /* Return the GOT_TLS_* type required by relocation type R_TYPE.  */
3179 
3180 static int
3181 mips_elf_reloc_tls_type (unsigned int r_type)
3182 {
3183   if (tls_gd_reloc_p (r_type))
3184     return GOT_TLS_GD;
3185 
3186   if (tls_ldm_reloc_p (r_type))
3187     return GOT_TLS_LDM;
3188 
3189   if (tls_gottprel_reloc_p (r_type))
3190     return GOT_TLS_IE;
3191 
3192   return GOT_TLS_NONE;
3193 }
3194 
3195 /* Return the number of GOT slots needed for GOT TLS type TYPE.  */
3196 
3197 static int
3198 mips_tls_got_entries (unsigned int type)
3199 {
3200   switch (type)
3201     {
3202     case GOT_TLS_GD:
3203     case GOT_TLS_LDM:
3204       return 2;
3205 
3206     case GOT_TLS_IE:
3207       return 1;
3208 
3209     case GOT_TLS_NONE:
3210       return 0;
3211     }
3212   abort ();
3213 }
3214 
3215 /* Count the number of relocations needed for a TLS GOT entry, with
3216    access types from TLS_TYPE, and symbol H (or a local symbol if H
3217    is NULL).  */
3218 
3219 static int
3220 mips_tls_got_relocs (struct bfd_link_info *info, unsigned char tls_type,
3221 		     struct elf_link_hash_entry *h)
3222 {
3223   int indx = 0;
3224   bfd_boolean need_relocs = FALSE;
3225   bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3226 
3227   if (h && WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, h)
3228       && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, h)))
3229     indx = h->dynindx;
3230 
3231   if ((info->shared || indx != 0)
3232       && (h == NULL
3233 	  || ELF_ST_VISIBILITY (h->other) == STV_DEFAULT
3234 	  || h->root.type != bfd_link_hash_undefweak))
3235     need_relocs = TRUE;
3236 
3237   if (!need_relocs)
3238     return 0;
3239 
3240   switch (tls_type)
3241     {
3242     case GOT_TLS_GD:
3243       return indx != 0 ? 2 : 1;
3244 
3245     case GOT_TLS_IE:
3246       return 1;
3247 
3248     case GOT_TLS_LDM:
3249       return info->shared ? 1 : 0;
3250 
3251     default:
3252       return 0;
3253     }
3254 }
3255 
3256 /* Add the number of GOT entries and TLS relocations required by ENTRY
3257    to G.  */
3258 
3259 static void
3260 mips_elf_count_got_entry (struct bfd_link_info *info,
3261 			  struct mips_got_info *g,
3262 			  struct mips_got_entry *entry)
3263 {
3264   if (entry->tls_type)
3265     {
3266       g->tls_gotno += mips_tls_got_entries (entry->tls_type);
3267       g->relocs += mips_tls_got_relocs (info, entry->tls_type,
3268 					entry->symndx < 0
3269 					? &entry->d.h->root : NULL);
3270     }
3271   else if (entry->symndx >= 0 || entry->d.h->global_got_area == GGA_NONE)
3272     g->local_gotno += 1;
3273   else
3274     g->global_gotno += 1;
3275 }
3276 
3277 /* Output a simple dynamic relocation into SRELOC.  */
3278 
3279 static void
3280 mips_elf_output_dynamic_relocation (bfd *output_bfd,
3281 				    asection *sreloc,
3282 				    unsigned long reloc_index,
3283 				    unsigned long indx,
3284 				    int r_type,
3285 				    bfd_vma offset)
3286 {
3287   Elf_Internal_Rela rel[3];
3288 
3289   memset (rel, 0, sizeof (rel));
3290 
3291   rel[0].r_info = ELF_R_INFO (output_bfd, indx, r_type);
3292   rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
3293 
3294   if (ABI_64_P (output_bfd))
3295     {
3296       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
3297 	(output_bfd, &rel[0],
3298 	 (sreloc->contents
3299 	  + reloc_index * sizeof (Elf64_Mips_External_Rel)));
3300     }
3301   else
3302     bfd_elf32_swap_reloc_out
3303       (output_bfd, &rel[0],
3304        (sreloc->contents
3305 	+ reloc_index * sizeof (Elf32_External_Rel)));
3306 }
3307 
3308 /* Initialize a set of TLS GOT entries for one symbol.  */
3309 
3310 static void
3311 mips_elf_initialize_tls_slots (bfd *abfd, struct bfd_link_info *info,
3312 			       struct mips_got_entry *entry,
3313 			       struct mips_elf_link_hash_entry *h,
3314 			       bfd_vma value)
3315 {
3316   struct mips_elf_link_hash_table *htab;
3317   int indx;
3318   asection *sreloc, *sgot;
3319   bfd_vma got_offset, got_offset2;
3320   bfd_boolean need_relocs = FALSE;
3321 
3322   htab = mips_elf_hash_table (info);
3323   if (htab == NULL)
3324     return;
3325 
3326   sgot = htab->sgot;
3327 
3328   indx = 0;
3329   if (h != NULL)
3330     {
3331       bfd_boolean dyn = elf_hash_table (info)->dynamic_sections_created;
3332 
3333       if (WILL_CALL_FINISH_DYNAMIC_SYMBOL (dyn, info->shared, &h->root)
3334 	  && (!info->shared || !SYMBOL_REFERENCES_LOCAL (info, &h->root)))
3335 	indx = h->root.dynindx;
3336     }
3337 
3338   if (entry->tls_initialized)
3339     return;
3340 
3341   if ((info->shared || indx != 0)
3342       && (h == NULL
3343 	  || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT
3344 	  || h->root.type != bfd_link_hash_undefweak))
3345     need_relocs = TRUE;
3346 
3347   /* MINUS_ONE means the symbol is not defined in this object.  It may not
3348      be defined at all; assume that the value doesn't matter in that
3349      case.  Otherwise complain if we would use the value.  */
3350   BFD_ASSERT (value != MINUS_ONE || (indx != 0 && need_relocs)
3351 	      || h->root.root.type == bfd_link_hash_undefweak);
3352 
3353   /* Emit necessary relocations.  */
3354   sreloc = mips_elf_rel_dyn_section (info, FALSE);
3355   got_offset = entry->gotidx;
3356 
3357   switch (entry->tls_type)
3358     {
3359     case GOT_TLS_GD:
3360       /* General Dynamic.  */
3361       got_offset2 = got_offset + MIPS_ELF_GOT_SIZE (abfd);
3362 
3363       if (need_relocs)
3364 	{
3365 	  mips_elf_output_dynamic_relocation
3366 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3367 	     ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3368 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3369 
3370 	  if (indx)
3371 	    mips_elf_output_dynamic_relocation
3372 	      (abfd, sreloc, sreloc->reloc_count++, indx,
3373 	       ABI_64_P (abfd) ? R_MIPS_TLS_DTPREL64 : R_MIPS_TLS_DTPREL32,
3374 	       sgot->output_offset + sgot->output_section->vma + got_offset2);
3375 	  else
3376 	    MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3377 			       sgot->contents + got_offset2);
3378 	}
3379       else
3380 	{
3381 	  MIPS_ELF_PUT_WORD (abfd, 1,
3382 			     sgot->contents + got_offset);
3383 	  MIPS_ELF_PUT_WORD (abfd, value - dtprel_base (info),
3384 			     sgot->contents + got_offset2);
3385 	}
3386       break;
3387 
3388     case GOT_TLS_IE:
3389       /* Initial Exec model.  */
3390       if (need_relocs)
3391 	{
3392 	  if (indx == 0)
3393 	    MIPS_ELF_PUT_WORD (abfd, value - elf_hash_table (info)->tls_sec->vma,
3394 			       sgot->contents + got_offset);
3395 	  else
3396 	    MIPS_ELF_PUT_WORD (abfd, 0,
3397 			       sgot->contents + got_offset);
3398 
3399 	  mips_elf_output_dynamic_relocation
3400 	    (abfd, sreloc, sreloc->reloc_count++, indx,
3401 	     ABI_64_P (abfd) ? R_MIPS_TLS_TPREL64 : R_MIPS_TLS_TPREL32,
3402 	     sgot->output_offset + sgot->output_section->vma + got_offset);
3403 	}
3404       else
3405 	MIPS_ELF_PUT_WORD (abfd, value - tprel_base (info),
3406 			   sgot->contents + got_offset);
3407       break;
3408 
3409     case GOT_TLS_LDM:
3410       /* The initial offset is zero, and the LD offsets will include the
3411 	 bias by DTP_OFFSET.  */
3412       MIPS_ELF_PUT_WORD (abfd, 0,
3413 			 sgot->contents + got_offset
3414 			 + MIPS_ELF_GOT_SIZE (abfd));
3415 
3416       if (!info->shared)
3417 	MIPS_ELF_PUT_WORD (abfd, 1,
3418 			   sgot->contents + got_offset);
3419       else
3420 	mips_elf_output_dynamic_relocation
3421 	  (abfd, sreloc, sreloc->reloc_count++, indx,
3422 	   ABI_64_P (abfd) ? R_MIPS_TLS_DTPMOD64 : R_MIPS_TLS_DTPMOD32,
3423 	   sgot->output_offset + sgot->output_section->vma + got_offset);
3424       break;
3425 
3426     default:
3427       abort ();
3428     }
3429 
3430   entry->tls_initialized = TRUE;
3431 }
3432 
3433 /* Return the offset from _GLOBAL_OFFSET_TABLE_ of the .got.plt entry
3434    for global symbol H.  .got.plt comes before the GOT, so the offset
3435    will be negative.  */
3436 
3437 static bfd_vma
3438 mips_elf_gotplt_index (struct bfd_link_info *info,
3439 		       struct elf_link_hash_entry *h)
3440 {
3441   bfd_vma got_address, got_value;
3442   struct mips_elf_link_hash_table *htab;
3443 
3444   htab = mips_elf_hash_table (info);
3445   BFD_ASSERT (htab != NULL);
3446 
3447   BFD_ASSERT (h->plt.plist != NULL);
3448   BFD_ASSERT (h->plt.plist->gotplt_index != MINUS_ONE);
3449 
3450   /* Calculate the address of the associated .got.plt entry.  */
3451   got_address = (htab->sgotplt->output_section->vma
3452 		 + htab->sgotplt->output_offset
3453 		 + (h->plt.plist->gotplt_index
3454 		    * MIPS_ELF_GOT_SIZE (info->output_bfd)));
3455 
3456   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
3457   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
3458 	       + htab->root.hgot->root.u.def.section->output_offset
3459 	       + htab->root.hgot->root.u.def.value);
3460 
3461   return got_address - got_value;
3462 }
3463 
3464 /* Return the GOT offset for address VALUE.   If there is not yet a GOT
3465    entry for this value, create one.  If R_SYMNDX refers to a TLS symbol,
3466    create a TLS GOT entry instead.  Return -1 if no satisfactory GOT
3467    offset can be found.  */
3468 
3469 static bfd_vma
3470 mips_elf_local_got_index (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3471 			  bfd_vma value, unsigned long r_symndx,
3472 			  struct mips_elf_link_hash_entry *h, int r_type)
3473 {
3474   struct mips_elf_link_hash_table *htab;
3475   struct mips_got_entry *entry;
3476 
3477   htab = mips_elf_hash_table (info);
3478   BFD_ASSERT (htab != NULL);
3479 
3480   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value,
3481 					   r_symndx, h, r_type);
3482   if (!entry)
3483     return MINUS_ONE;
3484 
3485   if (entry->tls_type)
3486     mips_elf_initialize_tls_slots (abfd, info, entry, h, value);
3487   return entry->gotidx;
3488 }
3489 
3490 /* Return the GOT index of global symbol H in the primary GOT.  */
3491 
3492 static bfd_vma
3493 mips_elf_primary_global_got_index (bfd *obfd, struct bfd_link_info *info,
3494 				   struct elf_link_hash_entry *h)
3495 {
3496   struct mips_elf_link_hash_table *htab;
3497   long global_got_dynindx;
3498   struct mips_got_info *g;
3499   bfd_vma got_index;
3500 
3501   htab = mips_elf_hash_table (info);
3502   BFD_ASSERT (htab != NULL);
3503 
3504   global_got_dynindx = 0;
3505   if (htab->global_gotsym != NULL)
3506     global_got_dynindx = htab->global_gotsym->dynindx;
3507 
3508   /* Once we determine the global GOT entry with the lowest dynamic
3509      symbol table index, we must put all dynamic symbols with greater
3510      indices into the primary GOT.  That makes it easy to calculate the
3511      GOT offset.  */
3512   BFD_ASSERT (h->dynindx >= global_got_dynindx);
3513   g = mips_elf_bfd_got (obfd, FALSE);
3514   got_index = ((h->dynindx - global_got_dynindx + g->local_gotno)
3515 	       * MIPS_ELF_GOT_SIZE (obfd));
3516   BFD_ASSERT (got_index < htab->sgot->size);
3517 
3518   return got_index;
3519 }
3520 
3521 /* Return the GOT index for the global symbol indicated by H, which is
3522    referenced by a relocation of type R_TYPE in IBFD.  */
3523 
3524 static bfd_vma
3525 mips_elf_global_got_index (bfd *obfd, struct bfd_link_info *info, bfd *ibfd,
3526 			   struct elf_link_hash_entry *h, int r_type)
3527 {
3528   struct mips_elf_link_hash_table *htab;
3529   struct mips_got_info *g;
3530   struct mips_got_entry lookup, *entry;
3531   bfd_vma gotidx;
3532 
3533   htab = mips_elf_hash_table (info);
3534   BFD_ASSERT (htab != NULL);
3535 
3536   g = mips_elf_bfd_got (ibfd, FALSE);
3537   BFD_ASSERT (g);
3538 
3539   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3540   if (!lookup.tls_type && g == mips_elf_bfd_got (obfd, FALSE))
3541     return mips_elf_primary_global_got_index (obfd, info, h);
3542 
3543   lookup.abfd = ibfd;
3544   lookup.symndx = -1;
3545   lookup.d.h = (struct mips_elf_link_hash_entry *) h;
3546   entry = htab_find (g->got_entries, &lookup);
3547   BFD_ASSERT (entry);
3548 
3549   gotidx = entry->gotidx;
3550   BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3551 
3552   if (lookup.tls_type)
3553     {
3554       bfd_vma value = MINUS_ONE;
3555 
3556       if ((h->root.type == bfd_link_hash_defined
3557 	   || h->root.type == bfd_link_hash_defweak)
3558 	  && h->root.u.def.section->output_section)
3559 	value = (h->root.u.def.value
3560 		 + h->root.u.def.section->output_offset
3561 		 + h->root.u.def.section->output_section->vma);
3562 
3563       mips_elf_initialize_tls_slots (obfd, info, entry, lookup.d.h, value);
3564     }
3565   return gotidx;
3566 }
3567 
3568 /* Find a GOT page entry that points to within 32KB of VALUE.  These
3569    entries are supposed to be placed at small offsets in the GOT, i.e.,
3570    within 32KB of GP.  Return the index of the GOT entry, or -1 if no
3571    entry could be created.  If OFFSETP is nonnull, use it to return the
3572    offset of the GOT entry from VALUE.  */
3573 
3574 static bfd_vma
3575 mips_elf_got_page (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3576 		   bfd_vma value, bfd_vma *offsetp)
3577 {
3578   bfd_vma page, got_index;
3579   struct mips_got_entry *entry;
3580 
3581   page = (value + 0x8000) & ~(bfd_vma) 0xffff;
3582   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, page, 0,
3583 					   NULL, R_MIPS_GOT_PAGE);
3584 
3585   if (!entry)
3586     return MINUS_ONE;
3587 
3588   got_index = entry->gotidx;
3589 
3590   if (offsetp)
3591     *offsetp = value - entry->d.address;
3592 
3593   return got_index;
3594 }
3595 
3596 /* Find a local GOT entry for an R_MIPS*_GOT16 relocation against VALUE.
3597    EXTERNAL is true if the relocation was originally against a global
3598    symbol that binds locally.  */
3599 
3600 static bfd_vma
3601 mips_elf_got16_entry (bfd *abfd, bfd *ibfd, struct bfd_link_info *info,
3602 		      bfd_vma value, bfd_boolean external)
3603 {
3604   struct mips_got_entry *entry;
3605 
3606   /* GOT16 relocations against local symbols are followed by a LO16
3607      relocation; those against global symbols are not.  Thus if the
3608      symbol was originally local, the GOT16 relocation should load the
3609      equivalent of %hi(VALUE), otherwise it should load VALUE itself.  */
3610   if (! external)
3611     value = mips_elf_high (value) << 16;
3612 
3613   /* It doesn't matter whether the original relocation was R_MIPS_GOT16,
3614      R_MIPS16_GOT16, R_MIPS_CALL16, etc.  The format of the entry is the
3615      same in all cases.  */
3616   entry = mips_elf_create_local_got_entry (abfd, info, ibfd, value, 0,
3617 					   NULL, R_MIPS_GOT16);
3618   if (entry)
3619     return entry->gotidx;
3620   else
3621     return MINUS_ONE;
3622 }
3623 
3624 /* Returns the offset for the entry at the INDEXth position
3625    in the GOT.  */
3626 
3627 static bfd_vma
3628 mips_elf_got_offset_from_index (struct bfd_link_info *info, bfd *output_bfd,
3629 				bfd *input_bfd, bfd_vma got_index)
3630 {
3631   struct mips_elf_link_hash_table *htab;
3632   asection *sgot;
3633   bfd_vma gp;
3634 
3635   htab = mips_elf_hash_table (info);
3636   BFD_ASSERT (htab != NULL);
3637 
3638   sgot = htab->sgot;
3639   gp = _bfd_get_gp_value (output_bfd)
3640     + mips_elf_adjust_gp (output_bfd, htab->got_info, input_bfd);
3641 
3642   return sgot->output_section->vma + sgot->output_offset + got_index - gp;
3643 }
3644 
3645 /* Create and return a local GOT entry for VALUE, which was calculated
3646    from a symbol belonging to INPUT_SECTON.  Return NULL if it could not
3647    be created.  If R_SYMNDX refers to a TLS symbol, create a TLS entry
3648    instead.  */
3649 
3650 static struct mips_got_entry *
3651 mips_elf_create_local_got_entry (bfd *abfd, struct bfd_link_info *info,
3652 				 bfd *ibfd, bfd_vma value,
3653 				 unsigned long r_symndx,
3654 				 struct mips_elf_link_hash_entry *h,
3655 				 int r_type)
3656 {
3657   struct mips_got_entry lookup, *entry;
3658   void **loc;
3659   struct mips_got_info *g;
3660   struct mips_elf_link_hash_table *htab;
3661   bfd_vma gotidx;
3662 
3663   htab = mips_elf_hash_table (info);
3664   BFD_ASSERT (htab != NULL);
3665 
3666   g = mips_elf_bfd_got (ibfd, FALSE);
3667   if (g == NULL)
3668     {
3669       g = mips_elf_bfd_got (abfd, FALSE);
3670       BFD_ASSERT (g != NULL);
3671     }
3672 
3673   /* This function shouldn't be called for symbols that live in the global
3674      area of the GOT.  */
3675   BFD_ASSERT (h == NULL || h->global_got_area == GGA_NONE);
3676 
3677   lookup.tls_type = mips_elf_reloc_tls_type (r_type);
3678   if (lookup.tls_type)
3679     {
3680       lookup.abfd = ibfd;
3681       if (tls_ldm_reloc_p (r_type))
3682 	{
3683 	  lookup.symndx = 0;
3684 	  lookup.d.addend = 0;
3685 	}
3686       else if (h == NULL)
3687 	{
3688 	  lookup.symndx = r_symndx;
3689 	  lookup.d.addend = 0;
3690 	}
3691       else
3692 	{
3693 	  lookup.symndx = -1;
3694 	  lookup.d.h = h;
3695 	}
3696 
3697       entry = (struct mips_got_entry *) htab_find (g->got_entries, &lookup);
3698       BFD_ASSERT (entry);
3699 
3700       gotidx = entry->gotidx;
3701       BFD_ASSERT (gotidx > 0 && gotidx < htab->sgot->size);
3702 
3703       return entry;
3704     }
3705 
3706   lookup.abfd = NULL;
3707   lookup.symndx = -1;
3708   lookup.d.address = value;
3709   loc = htab_find_slot (g->got_entries, &lookup, INSERT);
3710   if (!loc)
3711     return NULL;
3712 
3713   entry = (struct mips_got_entry *) *loc;
3714   if (entry)
3715     return entry;
3716 
3717   if (g->assigned_low_gotno > g->assigned_high_gotno)
3718     {
3719       /* We didn't allocate enough space in the GOT.  */
3720       (*_bfd_error_handler)
3721 	(_("not enough GOT space for local GOT entries"));
3722       bfd_set_error (bfd_error_bad_value);
3723       return NULL;
3724     }
3725 
3726   entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3727   if (!entry)
3728     return NULL;
3729 
3730   if (got16_reloc_p (r_type)
3731       || call16_reloc_p (r_type)
3732       || got_page_reloc_p (r_type)
3733       || got_disp_reloc_p (r_type))
3734     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_low_gotno++;
3735   else
3736     lookup.gotidx = MIPS_ELF_GOT_SIZE (abfd) * g->assigned_high_gotno--;
3737 
3738   *entry = lookup;
3739   *loc = entry;
3740 
3741   MIPS_ELF_PUT_WORD (abfd, value, htab->sgot->contents + entry->gotidx);
3742 
3743   /* These GOT entries need a dynamic relocation on VxWorks.  */
3744   if (htab->is_vxworks)
3745     {
3746       Elf_Internal_Rela outrel;
3747       asection *s;
3748       bfd_byte *rloc;
3749       bfd_vma got_address;
3750 
3751       s = mips_elf_rel_dyn_section (info, FALSE);
3752       got_address = (htab->sgot->output_section->vma
3753 		     + htab->sgot->output_offset
3754 		     + entry->gotidx);
3755 
3756       rloc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
3757       outrel.r_offset = got_address;
3758       outrel.r_info = ELF32_R_INFO (STN_UNDEF, R_MIPS_32);
3759       outrel.r_addend = value;
3760       bfd_elf32_swap_reloca_out (abfd, &outrel, rloc);
3761     }
3762 
3763   return entry;
3764 }
3765 
3766 /* Return the number of dynamic section symbols required by OUTPUT_BFD.
3767    The number might be exact or a worst-case estimate, depending on how
3768    much information is available to elf_backend_omit_section_dynsym at
3769    the current linking stage.  */
3770 
3771 static bfd_size_type
3772 count_section_dynsyms (bfd *output_bfd, struct bfd_link_info *info)
3773 {
3774   bfd_size_type count;
3775 
3776   count = 0;
3777   if (info->shared || elf_hash_table (info)->is_relocatable_executable)
3778     {
3779       asection *p;
3780       const struct elf_backend_data *bed;
3781 
3782       bed = get_elf_backend_data (output_bfd);
3783       for (p = output_bfd->sections; p ; p = p->next)
3784 	if ((p->flags & SEC_EXCLUDE) == 0
3785 	    && (p->flags & SEC_ALLOC) != 0
3786 	    && !(*bed->elf_backend_omit_section_dynsym) (output_bfd, info, p))
3787 	  ++count;
3788     }
3789   return count;
3790 }
3791 
3792 /* Sort the dynamic symbol table so that symbols that need GOT entries
3793    appear towards the end.  */
3794 
3795 static bfd_boolean
3796 mips_elf_sort_hash_table (bfd *abfd, struct bfd_link_info *info)
3797 {
3798   struct mips_elf_link_hash_table *htab;
3799   struct mips_elf_hash_sort_data hsd;
3800   struct mips_got_info *g;
3801 
3802   if (elf_hash_table (info)->dynsymcount == 0)
3803     return TRUE;
3804 
3805   htab = mips_elf_hash_table (info);
3806   BFD_ASSERT (htab != NULL);
3807 
3808   g = htab->got_info;
3809   if (g == NULL)
3810     return TRUE;
3811 
3812   hsd.low = NULL;
3813   hsd.max_unref_got_dynindx
3814     = hsd.min_got_dynindx
3815     = (elf_hash_table (info)->dynsymcount - g->reloc_only_gotno);
3816   hsd.max_non_got_dynindx = count_section_dynsyms (abfd, info) + 1;
3817   mips_elf_link_hash_traverse (((struct mips_elf_link_hash_table *)
3818 				elf_hash_table (info)),
3819 			       mips_elf_sort_hash_table_f,
3820 			       &hsd);
3821 
3822   /* There should have been enough room in the symbol table to
3823      accommodate both the GOT and non-GOT symbols.  */
3824   BFD_ASSERT (hsd.max_non_got_dynindx <= hsd.min_got_dynindx);
3825   BFD_ASSERT ((unsigned long) hsd.max_unref_got_dynindx
3826 	      == elf_hash_table (info)->dynsymcount);
3827   BFD_ASSERT (elf_hash_table (info)->dynsymcount - hsd.min_got_dynindx
3828 	      == g->global_gotno);
3829 
3830   /* Now we know which dynamic symbol has the lowest dynamic symbol
3831      table index in the GOT.  */
3832   htab->global_gotsym = hsd.low;
3833 
3834   return TRUE;
3835 }
3836 
3837 /* If H needs a GOT entry, assign it the highest available dynamic
3838    index.  Otherwise, assign it the lowest available dynamic
3839    index.  */
3840 
3841 static bfd_boolean
3842 mips_elf_sort_hash_table_f (struct mips_elf_link_hash_entry *h, void *data)
3843 {
3844   struct mips_elf_hash_sort_data *hsd = data;
3845 
3846   /* Symbols without dynamic symbol table entries aren't interesting
3847      at all.  */
3848   if (h->root.dynindx == -1)
3849     return TRUE;
3850 
3851   switch (h->global_got_area)
3852     {
3853     case GGA_NONE:
3854       h->root.dynindx = hsd->max_non_got_dynindx++;
3855       break;
3856 
3857     case GGA_NORMAL:
3858       h->root.dynindx = --hsd->min_got_dynindx;
3859       hsd->low = (struct elf_link_hash_entry *) h;
3860       break;
3861 
3862     case GGA_RELOC_ONLY:
3863       if (hsd->max_unref_got_dynindx == hsd->min_got_dynindx)
3864 	hsd->low = (struct elf_link_hash_entry *) h;
3865       h->root.dynindx = hsd->max_unref_got_dynindx++;
3866       break;
3867     }
3868 
3869   return TRUE;
3870 }
3871 
3872 /* Record that input bfd ABFD requires a GOT entry like *LOOKUP
3873    (which is owned by the caller and shouldn't be added to the
3874    hash table directly).  */
3875 
3876 static bfd_boolean
3877 mips_elf_record_got_entry (struct bfd_link_info *info, bfd *abfd,
3878 			   struct mips_got_entry *lookup)
3879 {
3880   struct mips_elf_link_hash_table *htab;
3881   struct mips_got_entry *entry;
3882   struct mips_got_info *g;
3883   void **loc, **bfd_loc;
3884 
3885   /* Make sure there's a slot for this entry in the master GOT.  */
3886   htab = mips_elf_hash_table (info);
3887   g = htab->got_info;
3888   loc = htab_find_slot (g->got_entries, lookup, INSERT);
3889   if (!loc)
3890     return FALSE;
3891 
3892   /* Populate the entry if it isn't already.  */
3893   entry = (struct mips_got_entry *) *loc;
3894   if (!entry)
3895     {
3896       entry = (struct mips_got_entry *) bfd_alloc (abfd, sizeof (*entry));
3897       if (!entry)
3898 	return FALSE;
3899 
3900       lookup->tls_initialized = FALSE;
3901       lookup->gotidx = -1;
3902       *entry = *lookup;
3903       *loc = entry;
3904     }
3905 
3906   /* Reuse the same GOT entry for the BFD's GOT.  */
3907   g = mips_elf_bfd_got (abfd, TRUE);
3908   if (!g)
3909     return FALSE;
3910 
3911   bfd_loc = htab_find_slot (g->got_entries, lookup, INSERT);
3912   if (!bfd_loc)
3913     return FALSE;
3914 
3915   if (!*bfd_loc)
3916     *bfd_loc = entry;
3917   return TRUE;
3918 }
3919 
3920 /* ABFD has a GOT relocation of type R_TYPE against H.  Reserve a GOT
3921    entry for it.  FOR_CALL is true if the caller is only interested in
3922    using the GOT entry for calls.  */
3923 
3924 static bfd_boolean
3925 mips_elf_record_global_got_symbol (struct elf_link_hash_entry *h,
3926 				   bfd *abfd, struct bfd_link_info *info,
3927 				   bfd_boolean for_call, int r_type)
3928 {
3929   struct mips_elf_link_hash_table *htab;
3930   struct mips_elf_link_hash_entry *hmips;
3931   struct mips_got_entry entry;
3932   unsigned char tls_type;
3933 
3934   htab = mips_elf_hash_table (info);
3935   BFD_ASSERT (htab != NULL);
3936 
3937   hmips = (struct mips_elf_link_hash_entry *) h;
3938   if (!for_call)
3939     hmips->got_only_for_calls = FALSE;
3940 
3941   /* A global symbol in the GOT must also be in the dynamic symbol
3942      table.  */
3943   if (h->dynindx == -1)
3944     {
3945       switch (ELF_ST_VISIBILITY (h->other))
3946 	{
3947 	case STV_INTERNAL:
3948 	case STV_HIDDEN:
3949 	  _bfd_elf_link_hash_hide_symbol (info, h, TRUE);
3950 	  break;
3951 	}
3952       if (!bfd_elf_link_record_dynamic_symbol (info, h))
3953 	return FALSE;
3954     }
3955 
3956   tls_type = mips_elf_reloc_tls_type (r_type);
3957   if (tls_type == GOT_TLS_NONE && hmips->global_got_area > GGA_NORMAL)
3958     hmips->global_got_area = GGA_NORMAL;
3959 
3960   entry.abfd = abfd;
3961   entry.symndx = -1;
3962   entry.d.h = (struct mips_elf_link_hash_entry *) h;
3963   entry.tls_type = tls_type;
3964   return mips_elf_record_got_entry (info, abfd, &entry);
3965 }
3966 
3967 /* ABFD has a GOT relocation of type R_TYPE against symbol SYMNDX + ADDEND,
3968    where SYMNDX is a local symbol.  Reserve a GOT entry for it.  */
3969 
3970 static bfd_boolean
3971 mips_elf_record_local_got_symbol (bfd *abfd, long symndx, bfd_vma addend,
3972 				  struct bfd_link_info *info, int r_type)
3973 {
3974   struct mips_elf_link_hash_table *htab;
3975   struct mips_got_info *g;
3976   struct mips_got_entry entry;
3977 
3978   htab = mips_elf_hash_table (info);
3979   BFD_ASSERT (htab != NULL);
3980 
3981   g = htab->got_info;
3982   BFD_ASSERT (g != NULL);
3983 
3984   entry.abfd = abfd;
3985   entry.symndx = symndx;
3986   entry.d.addend = addend;
3987   entry.tls_type = mips_elf_reloc_tls_type (r_type);
3988   return mips_elf_record_got_entry (info, abfd, &entry);
3989 }
3990 
3991 /* Record that ABFD has a page relocation against SYMNDX + ADDEND.
3992    H is the symbol's hash table entry, or null if SYMNDX is local
3993    to ABFD.  */
3994 
3995 static bfd_boolean
3996 mips_elf_record_got_page_ref (struct bfd_link_info *info, bfd *abfd,
3997 			      long symndx, struct elf_link_hash_entry *h,
3998 			      bfd_signed_vma addend)
3999 {
4000   struct mips_elf_link_hash_table *htab;
4001   struct mips_got_info *g1, *g2;
4002   struct mips_got_page_ref lookup, *entry;
4003   void **loc, **bfd_loc;
4004 
4005   htab = mips_elf_hash_table (info);
4006   BFD_ASSERT (htab != NULL);
4007 
4008   g1 = htab->got_info;
4009   BFD_ASSERT (g1 != NULL);
4010 
4011   if (h)
4012     {
4013       lookup.symndx = -1;
4014       lookup.u.h = (struct mips_elf_link_hash_entry *) h;
4015     }
4016   else
4017     {
4018       lookup.symndx = symndx;
4019       lookup.u.abfd = abfd;
4020     }
4021   lookup.addend = addend;
4022   loc = htab_find_slot (g1->got_page_refs, &lookup, INSERT);
4023   if (loc == NULL)
4024     return FALSE;
4025 
4026   entry = (struct mips_got_page_ref *) *loc;
4027   if (!entry)
4028     {
4029       entry = bfd_alloc (abfd, sizeof (*entry));
4030       if (!entry)
4031 	return FALSE;
4032 
4033       *entry = lookup;
4034       *loc = entry;
4035     }
4036 
4037   /* Add the same entry to the BFD's GOT.  */
4038   g2 = mips_elf_bfd_got (abfd, TRUE);
4039   if (!g2)
4040     return FALSE;
4041 
4042   bfd_loc = htab_find_slot (g2->got_page_refs, &lookup, INSERT);
4043   if (!bfd_loc)
4044     return FALSE;
4045 
4046   if (!*bfd_loc)
4047     *bfd_loc = entry;
4048 
4049   return TRUE;
4050 }
4051 
4052 /* Add room for N relocations to the .rel(a).dyn section in ABFD.  */
4053 
4054 static void
4055 mips_elf_allocate_dynamic_relocations (bfd *abfd, struct bfd_link_info *info,
4056 				       unsigned int n)
4057 {
4058   asection *s;
4059   struct mips_elf_link_hash_table *htab;
4060 
4061   htab = mips_elf_hash_table (info);
4062   BFD_ASSERT (htab != NULL);
4063 
4064   s = mips_elf_rel_dyn_section (info, FALSE);
4065   BFD_ASSERT (s != NULL);
4066 
4067   if (htab->is_vxworks)
4068     s->size += n * MIPS_ELF_RELA_SIZE (abfd);
4069   else
4070     {
4071       if (s->size == 0)
4072 	{
4073 	  /* Make room for a null element.  */
4074 	  s->size += MIPS_ELF_REL_SIZE (abfd);
4075 	  ++s->reloc_count;
4076 	}
4077       s->size += n * MIPS_ELF_REL_SIZE (abfd);
4078     }
4079 }
4080 
4081 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4082    mips_elf_traverse_got_arg structure.  Count the number of GOT
4083    entries and TLS relocs.  Set DATA->value to true if we need
4084    to resolve indirect or warning symbols and then recreate the GOT.  */
4085 
4086 static int
4087 mips_elf_check_recreate_got (void **entryp, void *data)
4088 {
4089   struct mips_got_entry *entry;
4090   struct mips_elf_traverse_got_arg *arg;
4091 
4092   entry = (struct mips_got_entry *) *entryp;
4093   arg = (struct mips_elf_traverse_got_arg *) data;
4094   if (entry->abfd != NULL && entry->symndx == -1)
4095     {
4096       struct mips_elf_link_hash_entry *h;
4097 
4098       h = entry->d.h;
4099       if (h->root.root.type == bfd_link_hash_indirect
4100 	  || h->root.root.type == bfd_link_hash_warning)
4101 	{
4102 	  arg->value = TRUE;
4103 	  return 0;
4104 	}
4105     }
4106   mips_elf_count_got_entry (arg->info, arg->g, entry);
4107   return 1;
4108 }
4109 
4110 /* A htab_traverse callback for GOT entries, with DATA pointing to a
4111    mips_elf_traverse_got_arg structure.  Add all entries to DATA->g,
4112    converting entries for indirect and warning symbols into entries
4113    for the target symbol.  Set DATA->g to null on error.  */
4114 
4115 static int
4116 mips_elf_recreate_got (void **entryp, void *data)
4117 {
4118   struct mips_got_entry new_entry, *entry;
4119   struct mips_elf_traverse_got_arg *arg;
4120   void **slot;
4121 
4122   entry = (struct mips_got_entry *) *entryp;
4123   arg = (struct mips_elf_traverse_got_arg *) data;
4124   if (entry->abfd != NULL
4125       && entry->symndx == -1
4126       && (entry->d.h->root.root.type == bfd_link_hash_indirect
4127 	  || entry->d.h->root.root.type == bfd_link_hash_warning))
4128     {
4129       struct mips_elf_link_hash_entry *h;
4130 
4131       new_entry = *entry;
4132       entry = &new_entry;
4133       h = entry->d.h;
4134       do
4135 	{
4136 	  BFD_ASSERT (h->global_got_area == GGA_NONE);
4137 	  h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
4138 	}
4139       while (h->root.root.type == bfd_link_hash_indirect
4140 	     || h->root.root.type == bfd_link_hash_warning);
4141       entry->d.h = h;
4142     }
4143   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4144   if (slot == NULL)
4145     {
4146       arg->g = NULL;
4147       return 0;
4148     }
4149   if (*slot == NULL)
4150     {
4151       if (entry == &new_entry)
4152 	{
4153 	  entry = bfd_alloc (entry->abfd, sizeof (*entry));
4154 	  if (!entry)
4155 	    {
4156 	      arg->g = NULL;
4157 	      return 0;
4158 	    }
4159 	  *entry = new_entry;
4160 	}
4161       *slot = entry;
4162       mips_elf_count_got_entry (arg->info, arg->g, entry);
4163     }
4164   return 1;
4165 }
4166 
4167 /* Return the maximum number of GOT page entries required for RANGE.  */
4168 
4169 static bfd_vma
4170 mips_elf_pages_for_range (const struct mips_got_page_range *range)
4171 {
4172   return (range->max_addend - range->min_addend + 0x1ffff) >> 16;
4173 }
4174 
4175 /* Record that G requires a page entry that can reach SEC + ADDEND.  */
4176 
4177 static bfd_boolean
4178 mips_elf_record_got_page_entry (struct mips_elf_traverse_got_arg *arg,
4179 				asection *sec, bfd_signed_vma addend)
4180 {
4181   struct mips_got_info *g = arg->g;
4182   struct mips_got_page_entry lookup, *entry;
4183   struct mips_got_page_range **range_ptr, *range;
4184   bfd_vma old_pages, new_pages;
4185   void **loc;
4186 
4187   /* Find the mips_got_page_entry hash table entry for this section.  */
4188   lookup.sec = sec;
4189   loc = htab_find_slot (g->got_page_entries, &lookup, INSERT);
4190   if (loc == NULL)
4191     return FALSE;
4192 
4193   /* Create a mips_got_page_entry if this is the first time we've
4194      seen the section.  */
4195   entry = (struct mips_got_page_entry *) *loc;
4196   if (!entry)
4197     {
4198       entry = bfd_zalloc (arg->info->output_bfd, sizeof (*entry));
4199       if (!entry)
4200 	return FALSE;
4201 
4202       entry->sec = sec;
4203       *loc = entry;
4204     }
4205 
4206   /* Skip over ranges whose maximum extent cannot share a page entry
4207      with ADDEND.  */
4208   range_ptr = &entry->ranges;
4209   while (*range_ptr && addend > (*range_ptr)->max_addend + 0xffff)
4210     range_ptr = &(*range_ptr)->next;
4211 
4212   /* If we scanned to the end of the list, or found a range whose
4213      minimum extent cannot share a page entry with ADDEND, create
4214      a new singleton range.  */
4215   range = *range_ptr;
4216   if (!range || addend < range->min_addend - 0xffff)
4217     {
4218       range = bfd_zalloc (arg->info->output_bfd, sizeof (*range));
4219       if (!range)
4220 	return FALSE;
4221 
4222       range->next = *range_ptr;
4223       range->min_addend = addend;
4224       range->max_addend = addend;
4225 
4226       *range_ptr = range;
4227       entry->num_pages++;
4228       g->page_gotno++;
4229       return TRUE;
4230     }
4231 
4232   /* Remember how many pages the old range contributed.  */
4233   old_pages = mips_elf_pages_for_range (range);
4234 
4235   /* Update the ranges.  */
4236   if (addend < range->min_addend)
4237     range->min_addend = addend;
4238   else if (addend > range->max_addend)
4239     {
4240       if (range->next && addend >= range->next->min_addend - 0xffff)
4241 	{
4242 	  old_pages += mips_elf_pages_for_range (range->next);
4243 	  range->max_addend = range->next->max_addend;
4244 	  range->next = range->next->next;
4245 	}
4246       else
4247 	range->max_addend = addend;
4248     }
4249 
4250   /* Record any change in the total estimate.  */
4251   new_pages = mips_elf_pages_for_range (range);
4252   if (old_pages != new_pages)
4253     {
4254       entry->num_pages += new_pages - old_pages;
4255       g->page_gotno += new_pages - old_pages;
4256     }
4257 
4258   return TRUE;
4259 }
4260 
4261 /* A htab_traverse callback for which *REFP points to a mips_got_page_ref
4262    and for which DATA points to a mips_elf_traverse_got_arg.  Work out
4263    whether the page reference described by *REFP needs a GOT page entry,
4264    and record that entry in DATA->g if so.  Set DATA->g to null on failure.  */
4265 
4266 static bfd_boolean
4267 mips_elf_resolve_got_page_ref (void **refp, void *data)
4268 {
4269   struct mips_got_page_ref *ref;
4270   struct mips_elf_traverse_got_arg *arg;
4271   struct mips_elf_link_hash_table *htab;
4272   asection *sec;
4273   bfd_vma addend;
4274 
4275   ref = (struct mips_got_page_ref *) *refp;
4276   arg = (struct mips_elf_traverse_got_arg *) data;
4277   htab = mips_elf_hash_table (arg->info);
4278 
4279   if (ref->symndx < 0)
4280     {
4281       struct mips_elf_link_hash_entry *h;
4282 
4283       /* Global GOT_PAGEs decay to GOT_DISP and so don't need page entries.  */
4284       h = ref->u.h;
4285       if (!SYMBOL_REFERENCES_LOCAL (arg->info, &h->root))
4286 	return 1;
4287 
4288       /* Ignore undefined symbols; we'll issue an error later if
4289 	 appropriate.  */
4290       if (!((h->root.root.type == bfd_link_hash_defined
4291 	     || h->root.root.type == bfd_link_hash_defweak)
4292 	    && h->root.root.u.def.section))
4293 	return 1;
4294 
4295       sec = h->root.root.u.def.section;
4296       addend = h->root.root.u.def.value + ref->addend;
4297     }
4298   else
4299     {
4300       Elf_Internal_Sym *isym;
4301 
4302       /* Read in the symbol.  */
4303       isym = bfd_sym_from_r_symndx (&htab->sym_cache, ref->u.abfd,
4304 				    ref->symndx);
4305       if (isym == NULL)
4306 	{
4307 	  arg->g = NULL;
4308 	  return 0;
4309 	}
4310 
4311       /* Get the associated input section.  */
4312       sec = bfd_section_from_elf_index (ref->u.abfd, isym->st_shndx);
4313       if (sec == NULL)
4314 	{
4315 	  arg->g = NULL;
4316 	  return 0;
4317 	}
4318 
4319       /* If this is a mergable section, work out the section and offset
4320 	 of the merged data.  For section symbols, the addend specifies
4321 	 of the offset _of_ the first byte in the data, otherwise it
4322 	 specifies the offset _from_ the first byte.  */
4323       if (sec->flags & SEC_MERGE)
4324 	{
4325 	  void *secinfo;
4326 
4327 	  secinfo = elf_section_data (sec)->sec_info;
4328 	  if (ELF_ST_TYPE (isym->st_info) == STT_SECTION)
4329 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4330 						 isym->st_value + ref->addend);
4331 	  else
4332 	    addend = _bfd_merged_section_offset (ref->u.abfd, &sec, secinfo,
4333 						 isym->st_value) + ref->addend;
4334 	}
4335       else
4336 	addend = isym->st_value + ref->addend;
4337     }
4338   if (!mips_elf_record_got_page_entry (arg, sec, addend))
4339     {
4340       arg->g = NULL;
4341       return 0;
4342     }
4343   return 1;
4344 }
4345 
4346 /* If any entries in G->got_entries are for indirect or warning symbols,
4347    replace them with entries for the target symbol.  Convert g->got_page_refs
4348    into got_page_entry structures and estimate the number of page entries
4349    that they require.  */
4350 
4351 static bfd_boolean
4352 mips_elf_resolve_final_got_entries (struct bfd_link_info *info,
4353 				    struct mips_got_info *g)
4354 {
4355   struct mips_elf_traverse_got_arg tga;
4356   struct mips_got_info oldg;
4357 
4358   oldg = *g;
4359 
4360   tga.info = info;
4361   tga.g = g;
4362   tga.value = FALSE;
4363   htab_traverse (g->got_entries, mips_elf_check_recreate_got, &tga);
4364   if (tga.value)
4365     {
4366       *g = oldg;
4367       g->got_entries = htab_create (htab_size (oldg.got_entries),
4368 				    mips_elf_got_entry_hash,
4369 				    mips_elf_got_entry_eq, NULL);
4370       if (!g->got_entries)
4371 	return FALSE;
4372 
4373       htab_traverse (oldg.got_entries, mips_elf_recreate_got, &tga);
4374       if (!tga.g)
4375 	return FALSE;
4376 
4377       htab_delete (oldg.got_entries);
4378     }
4379 
4380   g->got_page_entries = htab_try_create (1, mips_got_page_entry_hash,
4381 					 mips_got_page_entry_eq, NULL);
4382   if (g->got_page_entries == NULL)
4383     return FALSE;
4384 
4385   tga.info = info;
4386   tga.g = g;
4387   htab_traverse (g->got_page_refs, mips_elf_resolve_got_page_ref, &tga);
4388 
4389   return TRUE;
4390 }
4391 
4392 /* Return true if a GOT entry for H should live in the local rather than
4393    global GOT area.  */
4394 
4395 static bfd_boolean
4396 mips_use_local_got_p (struct bfd_link_info *info,
4397 		      struct mips_elf_link_hash_entry *h)
4398 {
4399   /* Symbols that aren't in the dynamic symbol table must live in the
4400      local GOT.  This includes symbols that are completely undefined
4401      and which therefore don't bind locally.  We'll report undefined
4402      symbols later if appropriate.  */
4403   if (h->root.dynindx == -1)
4404     return TRUE;
4405 
4406   /* Symbols that bind locally can (and in the case of forced-local
4407      symbols, must) live in the local GOT.  */
4408   if (h->got_only_for_calls
4409       ? SYMBOL_CALLS_LOCAL (info, &h->root)
4410       : SYMBOL_REFERENCES_LOCAL (info, &h->root))
4411     return TRUE;
4412 
4413   /* If this is an executable that must provide a definition of the symbol,
4414      either though PLTs or copy relocations, then that address should go in
4415      the local rather than global GOT.  */
4416   if (info->executable && h->has_static_relocs)
4417     return TRUE;
4418 
4419   return FALSE;
4420 }
4421 
4422 /* A mips_elf_link_hash_traverse callback for which DATA points to the
4423    link_info structure.  Decide whether the hash entry needs an entry in
4424    the global part of the primary GOT, setting global_got_area accordingly.
4425    Count the number of global symbols that are in the primary GOT only
4426    because they have relocations against them (reloc_only_gotno).  */
4427 
4428 static int
4429 mips_elf_count_got_symbols (struct mips_elf_link_hash_entry *h, void *data)
4430 {
4431   struct bfd_link_info *info;
4432   struct mips_elf_link_hash_table *htab;
4433   struct mips_got_info *g;
4434 
4435   info = (struct bfd_link_info *) data;
4436   htab = mips_elf_hash_table (info);
4437   g = htab->got_info;
4438   if (h->global_got_area != GGA_NONE)
4439     {
4440       /* Make a final decision about whether the symbol belongs in the
4441 	 local or global GOT.  */
4442       if (mips_use_local_got_p (info, h))
4443 	/* The symbol belongs in the local GOT.  We no longer need this
4444 	   entry if it was only used for relocations; those relocations
4445 	   will be against the null or section symbol instead of H.  */
4446 	h->global_got_area = GGA_NONE;
4447       else if (htab->is_vxworks
4448 	       && h->got_only_for_calls
4449 	       && h->root.plt.plist->mips_offset != MINUS_ONE)
4450 	/* On VxWorks, calls can refer directly to the .got.plt entry;
4451 	   they don't need entries in the regular GOT.  .got.plt entries
4452 	   will be allocated by _bfd_mips_elf_adjust_dynamic_symbol.  */
4453 	h->global_got_area = GGA_NONE;
4454       else if (h->global_got_area == GGA_RELOC_ONLY)
4455 	{
4456 	  g->reloc_only_gotno++;
4457 	  g->global_gotno++;
4458 	}
4459     }
4460   return 1;
4461 }
4462 
4463 /* A htab_traverse callback for GOT entries.  Add each one to the GOT
4464    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4465 
4466 static int
4467 mips_elf_add_got_entry (void **entryp, void *data)
4468 {
4469   struct mips_got_entry *entry;
4470   struct mips_elf_traverse_got_arg *arg;
4471   void **slot;
4472 
4473   entry = (struct mips_got_entry *) *entryp;
4474   arg = (struct mips_elf_traverse_got_arg *) data;
4475   slot = htab_find_slot (arg->g->got_entries, entry, INSERT);
4476   if (!slot)
4477     {
4478       arg->g = NULL;
4479       return 0;
4480     }
4481   if (!*slot)
4482     {
4483       *slot = entry;
4484       mips_elf_count_got_entry (arg->info, arg->g, entry);
4485     }
4486   return 1;
4487 }
4488 
4489 /* A htab_traverse callback for GOT page entries.  Add each one to the GOT
4490    given in mips_elf_traverse_got_arg DATA.  Clear DATA->G on error.  */
4491 
4492 static int
4493 mips_elf_add_got_page_entry (void **entryp, void *data)
4494 {
4495   struct mips_got_page_entry *entry;
4496   struct mips_elf_traverse_got_arg *arg;
4497   void **slot;
4498 
4499   entry = (struct mips_got_page_entry *) *entryp;
4500   arg = (struct mips_elf_traverse_got_arg *) data;
4501   slot = htab_find_slot (arg->g->got_page_entries, entry, INSERT);
4502   if (!slot)
4503     {
4504       arg->g = NULL;
4505       return 0;
4506     }
4507   if (!*slot)
4508     {
4509       *slot = entry;
4510       arg->g->page_gotno += entry->num_pages;
4511     }
4512   return 1;
4513 }
4514 
4515 /* Consider merging FROM, which is ABFD's GOT, into TO.  Return -1 if
4516    this would lead to overflow, 1 if they were merged successfully,
4517    and 0 if a merge failed due to lack of memory.  (These values are chosen
4518    so that nonnegative return values can be returned by a htab_traverse
4519    callback.)  */
4520 
4521 static int
4522 mips_elf_merge_got_with (bfd *abfd, struct mips_got_info *from,
4523 			 struct mips_got_info *to,
4524 			 struct mips_elf_got_per_bfd_arg *arg)
4525 {
4526   struct mips_elf_traverse_got_arg tga;
4527   unsigned int estimate;
4528 
4529   /* Work out how many page entries we would need for the combined GOT.  */
4530   estimate = arg->max_pages;
4531   if (estimate >= from->page_gotno + to->page_gotno)
4532     estimate = from->page_gotno + to->page_gotno;
4533 
4534   /* And conservatively estimate how many local and TLS entries
4535      would be needed.  */
4536   estimate += from->local_gotno + to->local_gotno;
4537   estimate += from->tls_gotno + to->tls_gotno;
4538 
4539   /* If we're merging with the primary got, any TLS relocations will
4540      come after the full set of global entries.  Otherwise estimate those
4541      conservatively as well.  */
4542   if (to == arg->primary && from->tls_gotno + to->tls_gotno)
4543     estimate += arg->global_count;
4544   else
4545     estimate += from->global_gotno + to->global_gotno;
4546 
4547   /* Bail out if the combined GOT might be too big.  */
4548   if (estimate > arg->max_count)
4549     return -1;
4550 
4551   /* Transfer the bfd's got information from FROM to TO.  */
4552   tga.info = arg->info;
4553   tga.g = to;
4554   htab_traverse (from->got_entries, mips_elf_add_got_entry, &tga);
4555   if (!tga.g)
4556     return 0;
4557 
4558   htab_traverse (from->got_page_entries, mips_elf_add_got_page_entry, &tga);
4559   if (!tga.g)
4560     return 0;
4561 
4562   mips_elf_replace_bfd_got (abfd, to);
4563   return 1;
4564 }
4565 
4566 /* Attempt to merge GOT G, which belongs to ABFD.  Try to use as much
4567    as possible of the primary got, since it doesn't require explicit
4568    dynamic relocations, but don't use bfds that would reference global
4569    symbols out of the addressable range.  Failing the primary got,
4570    attempt to merge with the current got, or finish the current got
4571    and then make make the new got current.  */
4572 
4573 static bfd_boolean
4574 mips_elf_merge_got (bfd *abfd, struct mips_got_info *g,
4575 		    struct mips_elf_got_per_bfd_arg *arg)
4576 {
4577   unsigned int estimate;
4578   int result;
4579 
4580   if (!mips_elf_resolve_final_got_entries (arg->info, g))
4581     return FALSE;
4582 
4583   /* Work out the number of page, local and TLS entries.  */
4584   estimate = arg->max_pages;
4585   if (estimate > g->page_gotno)
4586     estimate = g->page_gotno;
4587   estimate += g->local_gotno + g->tls_gotno;
4588 
4589   /* We place TLS GOT entries after both locals and globals.  The globals
4590      for the primary GOT may overflow the normal GOT size limit, so be
4591      sure not to merge a GOT which requires TLS with the primary GOT in that
4592      case.  This doesn't affect non-primary GOTs.  */
4593   estimate += (g->tls_gotno > 0 ? arg->global_count : g->global_gotno);
4594 
4595   if (estimate <= arg->max_count)
4596     {
4597       /* If we don't have a primary GOT, use it as
4598 	 a starting point for the primary GOT.  */
4599       if (!arg->primary)
4600 	{
4601 	  arg->primary = g;
4602 	  return TRUE;
4603 	}
4604 
4605       /* Try merging with the primary GOT.  */
4606       result = mips_elf_merge_got_with (abfd, g, arg->primary, arg);
4607       if (result >= 0)
4608 	return result;
4609     }
4610 
4611   /* If we can merge with the last-created got, do it.  */
4612   if (arg->current)
4613     {
4614       result = mips_elf_merge_got_with (abfd, g, arg->current, arg);
4615       if (result >= 0)
4616 	return result;
4617     }
4618 
4619   /* Well, we couldn't merge, so create a new GOT.  Don't check if it
4620      fits; if it turns out that it doesn't, we'll get relocation
4621      overflows anyway.  */
4622   g->next = arg->current;
4623   arg->current = g;
4624 
4625   return TRUE;
4626 }
4627 
4628 /* ENTRYP is a hash table entry for a mips_got_entry.  Set its gotidx
4629    to GOTIDX, duplicating the entry if it has already been assigned
4630    an index in a different GOT.  */
4631 
4632 static bfd_boolean
4633 mips_elf_set_gotidx (void **entryp, long gotidx)
4634 {
4635   struct mips_got_entry *entry;
4636 
4637   entry = (struct mips_got_entry *) *entryp;
4638   if (entry->gotidx > 0)
4639     {
4640       struct mips_got_entry *new_entry;
4641 
4642       new_entry = bfd_alloc (entry->abfd, sizeof (*entry));
4643       if (!new_entry)
4644 	return FALSE;
4645 
4646       *new_entry = *entry;
4647       *entryp = new_entry;
4648       entry = new_entry;
4649     }
4650   entry->gotidx = gotidx;
4651   return TRUE;
4652 }
4653 
4654 /* Set the TLS GOT index for the GOT entry in ENTRYP.  DATA points to a
4655    mips_elf_traverse_got_arg in which DATA->value is the size of one
4656    GOT entry.  Set DATA->g to null on failure.  */
4657 
4658 static int
4659 mips_elf_initialize_tls_index (void **entryp, void *data)
4660 {
4661   struct mips_got_entry *entry;
4662   struct mips_elf_traverse_got_arg *arg;
4663 
4664   /* We're only interested in TLS symbols.  */
4665   entry = (struct mips_got_entry *) *entryp;
4666   if (entry->tls_type == GOT_TLS_NONE)
4667     return 1;
4668 
4669   arg = (struct mips_elf_traverse_got_arg *) data;
4670   if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->tls_assigned_gotno))
4671     {
4672       arg->g = NULL;
4673       return 0;
4674     }
4675 
4676   /* Account for the entries we've just allocated.  */
4677   arg->g->tls_assigned_gotno += mips_tls_got_entries (entry->tls_type);
4678   return 1;
4679 }
4680 
4681 /* A htab_traverse callback for GOT entries, where DATA points to a
4682    mips_elf_traverse_got_arg.  Set the global_got_area of each global
4683    symbol to DATA->value.  */
4684 
4685 static int
4686 mips_elf_set_global_got_area (void **entryp, void *data)
4687 {
4688   struct mips_got_entry *entry;
4689   struct mips_elf_traverse_got_arg *arg;
4690 
4691   entry = (struct mips_got_entry *) *entryp;
4692   arg = (struct mips_elf_traverse_got_arg *) data;
4693   if (entry->abfd != NULL
4694       && entry->symndx == -1
4695       && entry->d.h->global_got_area != GGA_NONE)
4696     entry->d.h->global_got_area = arg->value;
4697   return 1;
4698 }
4699 
4700 /* A htab_traverse callback for secondary GOT entries, where DATA points
4701    to a mips_elf_traverse_got_arg.  Assign GOT indices to global entries
4702    and record the number of relocations they require.  DATA->value is
4703    the size of one GOT entry.  Set DATA->g to null on failure.  */
4704 
4705 static int
4706 mips_elf_set_global_gotidx (void **entryp, void *data)
4707 {
4708   struct mips_got_entry *entry;
4709   struct mips_elf_traverse_got_arg *arg;
4710 
4711   entry = (struct mips_got_entry *) *entryp;
4712   arg = (struct mips_elf_traverse_got_arg *) data;
4713   if (entry->abfd != NULL
4714       && entry->symndx == -1
4715       && entry->d.h->global_got_area != GGA_NONE)
4716     {
4717       if (!mips_elf_set_gotidx (entryp, arg->value * arg->g->assigned_low_gotno))
4718 	{
4719 	  arg->g = NULL;
4720 	  return 0;
4721 	}
4722       arg->g->assigned_low_gotno += 1;
4723 
4724       if (arg->info->shared
4725 	  || (elf_hash_table (arg->info)->dynamic_sections_created
4726 	      && entry->d.h->root.def_dynamic
4727 	      && !entry->d.h->root.def_regular))
4728 	arg->g->relocs += 1;
4729     }
4730 
4731   return 1;
4732 }
4733 
4734 /* A htab_traverse callback for GOT entries for which DATA is the
4735    bfd_link_info.  Forbid any global symbols from having traditional
4736    lazy-binding stubs.  */
4737 
4738 static int
4739 mips_elf_forbid_lazy_stubs (void **entryp, void *data)
4740 {
4741   struct bfd_link_info *info;
4742   struct mips_elf_link_hash_table *htab;
4743   struct mips_got_entry *entry;
4744 
4745   entry = (struct mips_got_entry *) *entryp;
4746   info = (struct bfd_link_info *) data;
4747   htab = mips_elf_hash_table (info);
4748   BFD_ASSERT (htab != NULL);
4749 
4750   if (entry->abfd != NULL
4751       && entry->symndx == -1
4752       && entry->d.h->needs_lazy_stub)
4753     {
4754       entry->d.h->needs_lazy_stub = FALSE;
4755       htab->lazy_stub_count--;
4756     }
4757 
4758   return 1;
4759 }
4760 
4761 /* Return the offset of an input bfd IBFD's GOT from the beginning of
4762    the primary GOT.  */
4763 static bfd_vma
4764 mips_elf_adjust_gp (bfd *abfd, struct mips_got_info *g, bfd *ibfd)
4765 {
4766   if (!g->next)
4767     return 0;
4768 
4769   g = mips_elf_bfd_got (ibfd, FALSE);
4770   if (! g)
4771     return 0;
4772 
4773   BFD_ASSERT (g->next);
4774 
4775   g = g->next;
4776 
4777   return (g->local_gotno + g->global_gotno + g->tls_gotno)
4778     * MIPS_ELF_GOT_SIZE (abfd);
4779 }
4780 
4781 /* Turn a single GOT that is too big for 16-bit addressing into
4782    a sequence of GOTs, each one 16-bit addressable.  */
4783 
4784 static bfd_boolean
4785 mips_elf_multi_got (bfd *abfd, struct bfd_link_info *info,
4786 		    asection *got, bfd_size_type pages)
4787 {
4788   struct mips_elf_link_hash_table *htab;
4789   struct mips_elf_got_per_bfd_arg got_per_bfd_arg;
4790   struct mips_elf_traverse_got_arg tga;
4791   struct mips_got_info *g, *gg;
4792   unsigned int assign, needed_relocs;
4793   bfd *dynobj, *ibfd;
4794 
4795   dynobj = elf_hash_table (info)->dynobj;
4796   htab = mips_elf_hash_table (info);
4797   BFD_ASSERT (htab != NULL);
4798 
4799   g = htab->got_info;
4800 
4801   got_per_bfd_arg.obfd = abfd;
4802   got_per_bfd_arg.info = info;
4803   got_per_bfd_arg.current = NULL;
4804   got_per_bfd_arg.primary = NULL;
4805   got_per_bfd_arg.max_count = ((MIPS_ELF_GOT_MAX_SIZE (info)
4806 				/ MIPS_ELF_GOT_SIZE (abfd))
4807 			       - htab->reserved_gotno);
4808   got_per_bfd_arg.max_pages = pages;
4809   /* The number of globals that will be included in the primary GOT.
4810      See the calls to mips_elf_set_global_got_area below for more
4811      information.  */
4812   got_per_bfd_arg.global_count = g->global_gotno;
4813 
4814   /* Try to merge the GOTs of input bfds together, as long as they
4815      don't seem to exceed the maximum GOT size, choosing one of them
4816      to be the primary GOT.  */
4817   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
4818     {
4819       gg = mips_elf_bfd_got (ibfd, FALSE);
4820       if (gg && !mips_elf_merge_got (ibfd, gg, &got_per_bfd_arg))
4821 	return FALSE;
4822     }
4823 
4824   /* If we do not find any suitable primary GOT, create an empty one.  */
4825   if (got_per_bfd_arg.primary == NULL)
4826     g->next = mips_elf_create_got_info (abfd);
4827   else
4828     g->next = got_per_bfd_arg.primary;
4829   g->next->next = got_per_bfd_arg.current;
4830 
4831   /* GG is now the master GOT, and G is the primary GOT.  */
4832   gg = g;
4833   g = g->next;
4834 
4835   /* Map the output bfd to the primary got.  That's what we're going
4836      to use for bfds that use GOT16 or GOT_PAGE relocations that we
4837      didn't mark in check_relocs, and we want a quick way to find it.
4838      We can't just use gg->next because we're going to reverse the
4839      list.  */
4840   mips_elf_replace_bfd_got (abfd, g);
4841 
4842   /* Every symbol that is referenced in a dynamic relocation must be
4843      present in the primary GOT, so arrange for them to appear after
4844      those that are actually referenced.  */
4845   gg->reloc_only_gotno = gg->global_gotno - g->global_gotno;
4846   g->global_gotno = gg->global_gotno;
4847 
4848   tga.info = info;
4849   tga.value = GGA_RELOC_ONLY;
4850   htab_traverse (gg->got_entries, mips_elf_set_global_got_area, &tga);
4851   tga.value = GGA_NORMAL;
4852   htab_traverse (g->got_entries, mips_elf_set_global_got_area, &tga);
4853 
4854   /* Now go through the GOTs assigning them offset ranges.
4855      [assigned_low_gotno, local_gotno[ will be set to the range of local
4856      entries in each GOT.  We can then compute the end of a GOT by
4857      adding local_gotno to global_gotno.  We reverse the list and make
4858      it circular since then we'll be able to quickly compute the
4859      beginning of a GOT, by computing the end of its predecessor.  To
4860      avoid special cases for the primary GOT, while still preserving
4861      assertions that are valid for both single- and multi-got links,
4862      we arrange for the main got struct to have the right number of
4863      global entries, but set its local_gotno such that the initial
4864      offset of the primary GOT is zero.  Remember that the primary GOT
4865      will become the last item in the circular linked list, so it
4866      points back to the master GOT.  */
4867   gg->local_gotno = -g->global_gotno;
4868   gg->global_gotno = g->global_gotno;
4869   gg->tls_gotno = 0;
4870   assign = 0;
4871   gg->next = gg;
4872 
4873   do
4874     {
4875       struct mips_got_info *gn;
4876 
4877       assign += htab->reserved_gotno;
4878       g->assigned_low_gotno = assign;
4879       g->local_gotno += assign;
4880       g->local_gotno += (pages < g->page_gotno ? pages : g->page_gotno);
4881       g->assigned_high_gotno = g->local_gotno - 1;
4882       assign = g->local_gotno + g->global_gotno + g->tls_gotno;
4883 
4884       /* Take g out of the direct list, and push it onto the reversed
4885 	 list that gg points to.  g->next is guaranteed to be nonnull after
4886 	 this operation, as required by mips_elf_initialize_tls_index. */
4887       gn = g->next;
4888       g->next = gg->next;
4889       gg->next = g;
4890 
4891       /* Set up any TLS entries.  We always place the TLS entries after
4892 	 all non-TLS entries.  */
4893       g->tls_assigned_gotno = g->local_gotno + g->global_gotno;
4894       tga.g = g;
4895       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4896       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
4897       if (!tga.g)
4898 	return FALSE;
4899       BFD_ASSERT (g->tls_assigned_gotno == assign);
4900 
4901       /* Move onto the next GOT.  It will be a secondary GOT if nonull.  */
4902       g = gn;
4903 
4904       /* Forbid global symbols in every non-primary GOT from having
4905 	 lazy-binding stubs.  */
4906       if (g)
4907 	htab_traverse (g->got_entries, mips_elf_forbid_lazy_stubs, info);
4908     }
4909   while (g);
4910 
4911   got->size = assign * MIPS_ELF_GOT_SIZE (abfd);
4912 
4913   needed_relocs = 0;
4914   for (g = gg->next; g && g->next != gg; g = g->next)
4915     {
4916       unsigned int save_assign;
4917 
4918       /* Assign offsets to global GOT entries and count how many
4919 	 relocations they need.  */
4920       save_assign = g->assigned_low_gotno;
4921       g->assigned_low_gotno = g->local_gotno;
4922       tga.info = info;
4923       tga.value = MIPS_ELF_GOT_SIZE (abfd);
4924       tga.g = g;
4925       htab_traverse (g->got_entries, mips_elf_set_global_gotidx, &tga);
4926       if (!tga.g)
4927 	return FALSE;
4928       BFD_ASSERT (g->assigned_low_gotno == g->local_gotno + g->global_gotno);
4929       g->assigned_low_gotno = save_assign;
4930 
4931       if (info->shared)
4932 	{
4933 	  g->relocs += g->local_gotno - g->assigned_low_gotno;
4934 	  BFD_ASSERT (g->assigned_low_gotno == g->next->local_gotno
4935 		      + g->next->global_gotno
4936 		      + g->next->tls_gotno
4937 		      + htab->reserved_gotno);
4938 	}
4939       needed_relocs += g->relocs;
4940     }
4941   needed_relocs += g->relocs;
4942 
4943   if (needed_relocs)
4944     mips_elf_allocate_dynamic_relocations (dynobj, info,
4945 					   needed_relocs);
4946 
4947   return TRUE;
4948 }
4949 
4950 
4951 /* Returns the first relocation of type r_type found, beginning with
4952    RELOCATION.  RELEND is one-past-the-end of the relocation table.  */
4953 
4954 static const Elf_Internal_Rela *
4955 mips_elf_next_relocation (bfd *abfd ATTRIBUTE_UNUSED, unsigned int r_type,
4956 			  const Elf_Internal_Rela *relocation,
4957 			  const Elf_Internal_Rela *relend)
4958 {
4959   unsigned long r_symndx = ELF_R_SYM (abfd, relocation->r_info);
4960 
4961   while (relocation < relend)
4962     {
4963       if (ELF_R_TYPE (abfd, relocation->r_info) == r_type
4964 	  && ELF_R_SYM (abfd, relocation->r_info) == r_symndx)
4965 	return relocation;
4966 
4967       ++relocation;
4968     }
4969 
4970   /* We didn't find it.  */
4971   return NULL;
4972 }
4973 
4974 /* Return whether an input relocation is against a local symbol.  */
4975 
4976 static bfd_boolean
4977 mips_elf_local_relocation_p (bfd *input_bfd,
4978 			     const Elf_Internal_Rela *relocation,
4979 			     asection **local_sections)
4980 {
4981   unsigned long r_symndx;
4982   Elf_Internal_Shdr *symtab_hdr;
4983   size_t extsymoff;
4984 
4985   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
4986   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
4987   extsymoff = (elf_bad_symtab (input_bfd)) ? 0 : symtab_hdr->sh_info;
4988 
4989   if (r_symndx < extsymoff)
4990     return TRUE;
4991   if (elf_bad_symtab (input_bfd) && local_sections[r_symndx] != NULL)
4992     return TRUE;
4993 
4994   return FALSE;
4995 }
4996 
4997 /* Sign-extend VALUE, which has the indicated number of BITS.  */
4998 
4999 bfd_vma
5000 _bfd_mips_elf_sign_extend (bfd_vma value, int bits)
5001 {
5002   if (value & ((bfd_vma) 1 << (bits - 1)))
5003     /* VALUE is negative.  */
5004     value |= ((bfd_vma) - 1) << bits;
5005 
5006   return value;
5007 }
5008 
5009 /* Return non-zero if the indicated VALUE has overflowed the maximum
5010    range expressible by a signed number with the indicated number of
5011    BITS.  */
5012 
5013 static bfd_boolean
5014 mips_elf_overflow_p (bfd_vma value, int bits)
5015 {
5016   bfd_signed_vma svalue = (bfd_signed_vma) value;
5017 
5018   if (svalue > (1 << (bits - 1)) - 1)
5019     /* The value is too big.  */
5020     return TRUE;
5021   else if (svalue < -(1 << (bits - 1)))
5022     /* The value is too small.  */
5023     return TRUE;
5024 
5025   /* All is well.  */
5026   return FALSE;
5027 }
5028 
5029 /* Calculate the %high function.  */
5030 
5031 static bfd_vma
5032 mips_elf_high (bfd_vma value)
5033 {
5034   return ((value + (bfd_vma) 0x8000) >> 16) & 0xffff;
5035 }
5036 
5037 /* Calculate the %higher function.  */
5038 
5039 static bfd_vma
5040 mips_elf_higher (bfd_vma value ATTRIBUTE_UNUSED)
5041 {
5042 #ifdef BFD64
5043   return ((value + (bfd_vma) 0x80008000) >> 32) & 0xffff;
5044 #else
5045   abort ();
5046   return MINUS_ONE;
5047 #endif
5048 }
5049 
5050 /* Calculate the %highest function.  */
5051 
5052 static bfd_vma
5053 mips_elf_highest (bfd_vma value ATTRIBUTE_UNUSED)
5054 {
5055 #ifdef BFD64
5056   return ((value + (((bfd_vma) 0x8000 << 32) | 0x80008000)) >> 48) & 0xffff;
5057 #else
5058   abort ();
5059   return MINUS_ONE;
5060 #endif
5061 }
5062 
5063 /* Create the .compact_rel section.  */
5064 
5065 static bfd_boolean
5066 mips_elf_create_compact_rel_section
5067   (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
5068 {
5069   flagword flags;
5070   register asection *s;
5071 
5072   if (bfd_get_linker_section (abfd, ".compact_rel") == NULL)
5073     {
5074       flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY | SEC_LINKER_CREATED
5075 	       | SEC_READONLY);
5076 
5077       s = bfd_make_section_anyway_with_flags (abfd, ".compact_rel", flags);
5078       if (s == NULL
5079 	  || ! bfd_set_section_alignment (abfd, s,
5080 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
5081 	return FALSE;
5082 
5083       s->size = sizeof (Elf32_External_compact_rel);
5084     }
5085 
5086   return TRUE;
5087 }
5088 
5089 /* Create the .got section to hold the global offset table.  */
5090 
5091 static bfd_boolean
5092 mips_elf_create_got_section (bfd *abfd, struct bfd_link_info *info)
5093 {
5094   flagword flags;
5095   register asection *s;
5096   struct elf_link_hash_entry *h;
5097   struct bfd_link_hash_entry *bh;
5098   struct mips_elf_link_hash_table *htab;
5099 
5100   htab = mips_elf_hash_table (info);
5101   BFD_ASSERT (htab != NULL);
5102 
5103   /* This function may be called more than once.  */
5104   if (htab->sgot)
5105     return TRUE;
5106 
5107   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
5108 	   | SEC_LINKER_CREATED);
5109 
5110   /* We have to use an alignment of 2**4 here because this is hardcoded
5111      in the function stub generation and in the linker script.  */
5112   s = bfd_make_section_anyway_with_flags (abfd, ".got", flags);
5113   if (s == NULL
5114       || ! bfd_set_section_alignment (abfd, s, 4))
5115     return FALSE;
5116   htab->sgot = s;
5117 
5118   /* Define the symbol _GLOBAL_OFFSET_TABLE_.  We don't do this in the
5119      linker script because we don't want to define the symbol if we
5120      are not creating a global offset table.  */
5121   bh = NULL;
5122   if (! (_bfd_generic_link_add_one_symbol
5123 	 (info, abfd, "_GLOBAL_OFFSET_TABLE_", BSF_GLOBAL, s,
5124 	  0, NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
5125     return FALSE;
5126 
5127   h = (struct elf_link_hash_entry *) bh;
5128   h->non_elf = 0;
5129   h->def_regular = 1;
5130   h->type = STT_OBJECT;
5131   h->other = (h->other & ~ELF_ST_VISIBILITY (-1)) | STV_HIDDEN;
5132   elf_hash_table (info)->hgot = h;
5133 
5134   if (info->shared
5135       && ! bfd_elf_link_record_dynamic_symbol (info, h))
5136     return FALSE;
5137 
5138   htab->got_info = mips_elf_create_got_info (abfd);
5139   mips_elf_section_data (s)->elf.this_hdr.sh_flags
5140     |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
5141 
5142   /* We also need a .got.plt section when generating PLTs.  */
5143   s = bfd_make_section_anyway_with_flags (abfd, ".got.plt",
5144 					  SEC_ALLOC | SEC_LOAD
5145 					  | SEC_HAS_CONTENTS
5146 					  | SEC_IN_MEMORY
5147 					  | SEC_LINKER_CREATED);
5148   if (s == NULL)
5149     return FALSE;
5150   htab->sgotplt = s;
5151 
5152   return TRUE;
5153 }
5154 
5155 /* Return true if H refers to the special VxWorks __GOTT_BASE__ or
5156    __GOTT_INDEX__ symbols.  These symbols are only special for
5157    shared objects; they are not used in executables.  */
5158 
5159 static bfd_boolean
5160 is_gott_symbol (struct bfd_link_info *info, struct elf_link_hash_entry *h)
5161 {
5162   return (mips_elf_hash_table (info)->is_vxworks
5163 	  && info->shared
5164 	  && (strcmp (h->root.root.string, "__GOTT_BASE__") == 0
5165 	      || strcmp (h->root.root.string, "__GOTT_INDEX__") == 0));
5166 }
5167 
5168 /* Return TRUE if a relocation of type R_TYPE from INPUT_BFD might
5169    require an la25 stub.  See also mips_elf_local_pic_function_p,
5170    which determines whether the destination function ever requires a
5171    stub.  */
5172 
5173 static bfd_boolean
5174 mips_elf_relocation_needs_la25_stub (bfd *input_bfd, int r_type,
5175 				     bfd_boolean target_is_16_bit_code_p)
5176 {
5177   /* We specifically ignore branches and jumps from EF_PIC objects,
5178      where the onus is on the compiler or programmer to perform any
5179      necessary initialization of $25.  Sometimes such initialization
5180      is unnecessary; for example, -mno-shared functions do not use
5181      the incoming value of $25, and may therefore be called directly.  */
5182   if (PIC_OBJECT_P (input_bfd))
5183     return FALSE;
5184 
5185   switch (r_type)
5186     {
5187     case R_MIPS_26:
5188     case R_MIPS_PC16:
5189     case R_MIPS_PC21_S2:
5190     case R_MIPS_PC26_S2:
5191     case R_MICROMIPS_26_S1:
5192     case R_MICROMIPS_PC7_S1:
5193     case R_MICROMIPS_PC10_S1:
5194     case R_MICROMIPS_PC16_S1:
5195     case R_MICROMIPS_PC23_S2:
5196       return TRUE;
5197 
5198     case R_MIPS16_26:
5199       return !target_is_16_bit_code_p;
5200 
5201     default:
5202       return FALSE;
5203     }
5204 }
5205 
5206 /* Calculate the value produced by the RELOCATION (which comes from
5207    the INPUT_BFD).  The ADDEND is the addend to use for this
5208    RELOCATION; RELOCATION->R_ADDEND is ignored.
5209 
5210    The result of the relocation calculation is stored in VALUEP.
5211    On exit, set *CROSS_MODE_JUMP_P to true if the relocation field
5212    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
5213 
5214    This function returns bfd_reloc_continue if the caller need take no
5215    further action regarding this relocation, bfd_reloc_notsupported if
5216    something goes dramatically wrong, bfd_reloc_overflow if an
5217    overflow occurs, and bfd_reloc_ok to indicate success.  */
5218 
5219 static bfd_reloc_status_type
5220 mips_elf_calculate_relocation (bfd *abfd, bfd *input_bfd,
5221 			       asection *input_section,
5222 			       struct bfd_link_info *info,
5223 			       const Elf_Internal_Rela *relocation,
5224 			       bfd_vma addend, reloc_howto_type *howto,
5225 			       Elf_Internal_Sym *local_syms,
5226 			       asection **local_sections, bfd_vma *valuep,
5227 			       const char **namep,
5228 			       bfd_boolean *cross_mode_jump_p,
5229 			       bfd_boolean save_addend)
5230 {
5231   /* The eventual value we will return.  */
5232   bfd_vma value;
5233   /* The address of the symbol against which the relocation is
5234      occurring.  */
5235   bfd_vma symbol = 0;
5236   /* The final GP value to be used for the relocatable, executable, or
5237      shared object file being produced.  */
5238   bfd_vma gp;
5239   /* The place (section offset or address) of the storage unit being
5240      relocated.  */
5241   bfd_vma p;
5242   /* The value of GP used to create the relocatable object.  */
5243   bfd_vma gp0;
5244   /* The offset into the global offset table at which the address of
5245      the relocation entry symbol, adjusted by the addend, resides
5246      during execution.  */
5247   bfd_vma g = MINUS_ONE;
5248   /* The section in which the symbol referenced by the relocation is
5249      located.  */
5250   asection *sec = NULL;
5251   struct mips_elf_link_hash_entry *h = NULL;
5252   /* TRUE if the symbol referred to by this relocation is a local
5253      symbol.  */
5254   bfd_boolean local_p, was_local_p;
5255   /* TRUE if the symbol referred to by this relocation is "_gp_disp".  */
5256   bfd_boolean gp_disp_p = FALSE;
5257   /* TRUE if the symbol referred to by this relocation is
5258      "__gnu_local_gp".  */
5259   bfd_boolean gnu_local_gp_p = FALSE;
5260   Elf_Internal_Shdr *symtab_hdr;
5261   size_t extsymoff;
5262   unsigned long r_symndx;
5263   int r_type;
5264   /* TRUE if overflow occurred during the calculation of the
5265      relocation value.  */
5266   bfd_boolean overflowed_p;
5267   /* TRUE if this relocation refers to a MIPS16 function.  */
5268   bfd_boolean target_is_16_bit_code_p = FALSE;
5269   bfd_boolean target_is_micromips_code_p = FALSE;
5270   struct mips_elf_link_hash_table *htab;
5271   bfd *dynobj;
5272 
5273   dynobj = elf_hash_table (info)->dynobj;
5274   htab = mips_elf_hash_table (info);
5275   BFD_ASSERT (htab != NULL);
5276 
5277   /* Parse the relocation.  */
5278   r_symndx = ELF_R_SYM (input_bfd, relocation->r_info);
5279   r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
5280   p = (input_section->output_section->vma
5281        + input_section->output_offset
5282        + relocation->r_offset);
5283 
5284   /* Assume that there will be no overflow.  */
5285   overflowed_p = FALSE;
5286 
5287   /* Figure out whether or not the symbol is local, and get the offset
5288      used in the array of hash table entries.  */
5289   symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
5290   local_p = mips_elf_local_relocation_p (input_bfd, relocation,
5291 					 local_sections);
5292   was_local_p = local_p;
5293   if (! elf_bad_symtab (input_bfd))
5294     extsymoff = symtab_hdr->sh_info;
5295   else
5296     {
5297       /* The symbol table does not follow the rule that local symbols
5298 	 must come before globals.  */
5299       extsymoff = 0;
5300     }
5301 
5302   /* Figure out the value of the symbol.  */
5303   if (local_p)
5304     {
5305       Elf_Internal_Sym *sym;
5306 
5307       sym = local_syms + r_symndx;
5308       sec = local_sections[r_symndx];
5309 
5310       symbol = sec->output_section->vma + sec->output_offset;
5311       if (ELF_ST_TYPE (sym->st_info) != STT_SECTION
5312 	  || (sec->flags & SEC_MERGE))
5313 	symbol += sym->st_value;
5314       if ((sec->flags & SEC_MERGE)
5315 	  && ELF_ST_TYPE (sym->st_info) == STT_SECTION)
5316 	{
5317 	  addend = _bfd_elf_rel_local_sym (abfd, sym, &sec, addend);
5318 	  addend -= symbol;
5319 	  addend += sec->output_section->vma + sec->output_offset;
5320 	}
5321 
5322       /* MIPS16/microMIPS text labels should be treated as odd.  */
5323       if (ELF_ST_IS_COMPRESSED (sym->st_other))
5324 	++symbol;
5325 
5326       /* Record the name of this symbol, for our caller.  */
5327       *namep = bfd_elf_string_from_elf_section (input_bfd,
5328 						symtab_hdr->sh_link,
5329 						sym->st_name);
5330       if (*namep == '\0')
5331 	*namep = bfd_section_name (input_bfd, sec);
5332 
5333       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (sym->st_other);
5334       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (sym->st_other);
5335     }
5336   else
5337     {
5338       /* ??? Could we use RELOC_FOR_GLOBAL_SYMBOL here ?  */
5339 
5340       /* For global symbols we look up the symbol in the hash-table.  */
5341       h = ((struct mips_elf_link_hash_entry *)
5342 	   elf_sym_hashes (input_bfd) [r_symndx - extsymoff]);
5343       /* Find the real hash-table entry for this symbol.  */
5344       while (h->root.root.type == bfd_link_hash_indirect
5345 	     || h->root.root.type == bfd_link_hash_warning)
5346 	h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
5347 
5348       /* Record the name of this symbol, for our caller.  */
5349       *namep = h->root.root.root.string;
5350 
5351       /* See if this is the special _gp_disp symbol.  Note that such a
5352 	 symbol must always be a global symbol.  */
5353       if (strcmp (*namep, "_gp_disp") == 0
5354 	  && ! NEWABI_P (input_bfd))
5355 	{
5356 	  /* Relocations against _gp_disp are permitted only with
5357 	     R_MIPS_HI16 and R_MIPS_LO16 relocations.  */
5358 	  if (!hi16_reloc_p (r_type) && !lo16_reloc_p (r_type))
5359 	    return bfd_reloc_notsupported;
5360 
5361 	  gp_disp_p = TRUE;
5362 	}
5363       /* See if this is the special _gp symbol.  Note that such a
5364 	 symbol must always be a global symbol.  */
5365       else if (strcmp (*namep, "__gnu_local_gp") == 0)
5366 	gnu_local_gp_p = TRUE;
5367 
5368 
5369       /* If this symbol is defined, calculate its address.  Note that
5370 	 _gp_disp is a magic symbol, always implicitly defined by the
5371 	 linker, so it's inappropriate to check to see whether or not
5372 	 its defined.  */
5373       else if ((h->root.root.type == bfd_link_hash_defined
5374 		|| h->root.root.type == bfd_link_hash_defweak)
5375 	       && h->root.root.u.def.section)
5376 	{
5377 	  sec = h->root.root.u.def.section;
5378 	  if (sec->output_section)
5379 	    symbol = (h->root.root.u.def.value
5380 		      + sec->output_section->vma
5381 		      + sec->output_offset);
5382 	  else
5383 	    symbol = h->root.root.u.def.value;
5384 	}
5385       else if (h->root.root.type == bfd_link_hash_undefweak)
5386 	/* We allow relocations against undefined weak symbols, giving
5387 	   it the value zero, so that you can undefined weak functions
5388 	   and check to see if they exist by looking at their
5389 	   addresses.  */
5390 	symbol = 0;
5391       else if (info->unresolved_syms_in_objects == RM_IGNORE
5392 	       && ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5393 	symbol = 0;
5394       else if (strcmp (*namep, SGI_COMPAT (input_bfd)
5395 		       ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING") == 0)
5396 	{
5397 	  /* If this is a dynamic link, we should have created a
5398 	     _DYNAMIC_LINK symbol or _DYNAMIC_LINKING(for normal mips) symbol
5399 	     in in _bfd_mips_elf_create_dynamic_sections.
5400 	     Otherwise, we should define the symbol with a value of 0.
5401 	     FIXME: It should probably get into the symbol table
5402 	     somehow as well.  */
5403 	  BFD_ASSERT (! info->shared);
5404 	  BFD_ASSERT (bfd_get_section_by_name (abfd, ".dynamic") == NULL);
5405 	  symbol = 0;
5406 	}
5407       else if (ELF_MIPS_IS_OPTIONAL (h->root.other))
5408 	{
5409 	  /* This is an optional symbol - an Irix specific extension to the
5410 	     ELF spec.  Ignore it for now.
5411 	     XXX - FIXME - there is more to the spec for OPTIONAL symbols
5412 	     than simply ignoring them, but we do not handle this for now.
5413 	     For information see the "64-bit ELF Object File Specification"
5414 	     which is available from here:
5415 	     http://techpubs.sgi.com/library/manuals/4000/007-4658-001/pdf/007-4658-001.pdf  */
5416 	  symbol = 0;
5417 	}
5418       else if ((*info->callbacks->undefined_symbol)
5419 	       (info, h->root.root.root.string, input_bfd,
5420 		input_section, relocation->r_offset,
5421 		(info->unresolved_syms_in_objects == RM_GENERATE_ERROR)
5422 		 || ELF_ST_VISIBILITY (h->root.other)))
5423 	{
5424 	  return bfd_reloc_undefined;
5425 	}
5426       else
5427 	{
5428 	  return bfd_reloc_notsupported;
5429 	}
5430 
5431       target_is_16_bit_code_p = ELF_ST_IS_MIPS16 (h->root.other);
5432       target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (h->root.other);
5433     }
5434 
5435   /* If this is a reference to a 16-bit function with a stub, we need
5436      to redirect the relocation to the stub unless:
5437 
5438      (a) the relocation is for a MIPS16 JAL;
5439 
5440      (b) the relocation is for a MIPS16 PIC call, and there are no
5441 	 non-MIPS16 uses of the GOT slot; or
5442 
5443      (c) the section allows direct references to MIPS16 functions.  */
5444   if (r_type != R_MIPS16_26
5445       && !info->relocatable
5446       && ((h != NULL
5447 	   && h->fn_stub != NULL
5448 	   && (r_type != R_MIPS16_CALL16 || h->need_fn_stub))
5449 	  || (local_p
5450 	      && mips_elf_tdata (input_bfd)->local_stubs != NULL
5451 	      && mips_elf_tdata (input_bfd)->local_stubs[r_symndx] != NULL))
5452       && !section_allows_mips16_refs_p (input_section))
5453     {
5454       /* This is a 32- or 64-bit call to a 16-bit function.  We should
5455 	 have already noticed that we were going to need the
5456 	 stub.  */
5457       if (local_p)
5458 	{
5459 	  sec = mips_elf_tdata (input_bfd)->local_stubs[r_symndx];
5460 	  value = 0;
5461 	}
5462       else
5463 	{
5464 	  BFD_ASSERT (h->need_fn_stub);
5465 	  if (h->la25_stub)
5466 	    {
5467 	      /* If a LA25 header for the stub itself exists, point to the
5468 		 prepended LUI/ADDIU sequence.  */
5469 	      sec = h->la25_stub->stub_section;
5470 	      value = h->la25_stub->offset;
5471 	    }
5472 	  else
5473 	    {
5474 	      sec = h->fn_stub;
5475 	      value = 0;
5476 	    }
5477 	}
5478 
5479       symbol = sec->output_section->vma + sec->output_offset + value;
5480       /* The target is 16-bit, but the stub isn't.  */
5481       target_is_16_bit_code_p = FALSE;
5482     }
5483   /* If this is a MIPS16 call with a stub, that is made through the PLT or
5484      to a standard MIPS function, we need to redirect the call to the stub.
5485      Note that we specifically exclude R_MIPS16_CALL16 from this behavior;
5486      indirect calls should use an indirect stub instead.  */
5487   else if (r_type == R_MIPS16_26 && !info->relocatable
5488 	   && ((h != NULL && (h->call_stub != NULL || h->call_fp_stub != NULL))
5489 	       || (local_p
5490 		   && mips_elf_tdata (input_bfd)->local_call_stubs != NULL
5491 		   && mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx] != NULL))
5492 	   && ((h != NULL && h->use_plt_entry) || !target_is_16_bit_code_p))
5493     {
5494       if (local_p)
5495 	sec = mips_elf_tdata (input_bfd)->local_call_stubs[r_symndx];
5496       else
5497 	{
5498 	  /* If both call_stub and call_fp_stub are defined, we can figure
5499 	     out which one to use by checking which one appears in the input
5500 	     file.  */
5501 	  if (h->call_stub != NULL && h->call_fp_stub != NULL)
5502 	    {
5503 	      asection *o;
5504 
5505 	      sec = NULL;
5506 	      for (o = input_bfd->sections; o != NULL; o = o->next)
5507 		{
5508 		  if (CALL_FP_STUB_P (bfd_get_section_name (input_bfd, o)))
5509 		    {
5510 		      sec = h->call_fp_stub;
5511 		      break;
5512 		    }
5513 		}
5514 	      if (sec == NULL)
5515 		sec = h->call_stub;
5516 	    }
5517 	  else if (h->call_stub != NULL)
5518 	    sec = h->call_stub;
5519 	  else
5520 	    sec = h->call_fp_stub;
5521   	}
5522 
5523       BFD_ASSERT (sec->size > 0);
5524       symbol = sec->output_section->vma + sec->output_offset;
5525     }
5526   /* If this is a direct call to a PIC function, redirect to the
5527      non-PIC stub.  */
5528   else if (h != NULL && h->la25_stub
5529 	   && mips_elf_relocation_needs_la25_stub (input_bfd, r_type,
5530 						   target_is_16_bit_code_p))
5531     symbol = (h->la25_stub->stub_section->output_section->vma
5532 	      + h->la25_stub->stub_section->output_offset
5533 	      + h->la25_stub->offset);
5534   /* For direct MIPS16 and microMIPS calls make sure the compressed PLT
5535      entry is used if a standard PLT entry has also been made.  In this
5536      case the symbol will have been set by mips_elf_set_plt_sym_value
5537      to point to the standard PLT entry, so redirect to the compressed
5538      one.  */
5539   else if ((r_type == R_MIPS16_26 || r_type == R_MICROMIPS_26_S1)
5540 	   && !info->relocatable
5541 	   && h != NULL
5542 	   && h->use_plt_entry
5543 	   && h->root.plt.plist->comp_offset != MINUS_ONE
5544 	   && h->root.plt.plist->mips_offset != MINUS_ONE)
5545     {
5546       bfd_boolean micromips_p = MICROMIPS_P (abfd);
5547 
5548       sec = htab->splt;
5549       symbol = (sec->output_section->vma
5550 		+ sec->output_offset
5551 		+ htab->plt_header_size
5552 		+ htab->plt_mips_offset
5553 		+ h->root.plt.plist->comp_offset
5554 		+ 1);
5555 
5556       target_is_16_bit_code_p = !micromips_p;
5557       target_is_micromips_code_p = micromips_p;
5558     }
5559 
5560   /* Make sure MIPS16 and microMIPS are not used together.  */
5561   if ((r_type == R_MIPS16_26 && target_is_micromips_code_p)
5562       || (micromips_branch_reloc_p (r_type) && target_is_16_bit_code_p))
5563    {
5564       (*_bfd_error_handler)
5565 	(_("MIPS16 and microMIPS functions cannot call each other"));
5566       return bfd_reloc_notsupported;
5567    }
5568 
5569   /* Calls from 16-bit code to 32-bit code and vice versa require the
5570      mode change.  However, we can ignore calls to undefined weak symbols,
5571      which should never be executed at runtime.  This exception is important
5572      because the assembly writer may have "known" that any definition of the
5573      symbol would be 16-bit code, and that direct jumps were therefore
5574      acceptable.  */
5575   *cross_mode_jump_p = (!info->relocatable
5576 			&& !(h && h->root.root.type == bfd_link_hash_undefweak)
5577 			&& ((r_type == R_MIPS16_26 && !target_is_16_bit_code_p)
5578 			    || (r_type == R_MICROMIPS_26_S1
5579 				&& !target_is_micromips_code_p)
5580 			    || ((r_type == R_MIPS_26 || r_type == R_MIPS_JALR)
5581 				&& (target_is_16_bit_code_p
5582 				    || target_is_micromips_code_p))));
5583 
5584   local_p = (h == NULL || mips_use_local_got_p (info, h));
5585 
5586   gp0 = _bfd_get_gp_value (input_bfd);
5587   gp = _bfd_get_gp_value (abfd);
5588   if (htab->got_info)
5589     gp += mips_elf_adjust_gp (abfd, htab->got_info, input_bfd);
5590 
5591   if (gnu_local_gp_p)
5592     symbol = gp;
5593 
5594   /* Global R_MIPS_GOT_PAGE/R_MICROMIPS_GOT_PAGE relocations are equivalent
5595      to R_MIPS_GOT_DISP/R_MICROMIPS_GOT_DISP.  The addend is applied by the
5596      corresponding R_MIPS_GOT_OFST/R_MICROMIPS_GOT_OFST.  */
5597   if (got_page_reloc_p (r_type) && !local_p)
5598     {
5599       r_type = (micromips_reloc_p (r_type)
5600 		? R_MICROMIPS_GOT_DISP : R_MIPS_GOT_DISP);
5601       addend = 0;
5602     }
5603 
5604   /* If we haven't already determined the GOT offset, and we're going
5605      to need it, get it now.  */
5606   switch (r_type)
5607     {
5608     case R_MIPS16_CALL16:
5609     case R_MIPS16_GOT16:
5610     case R_MIPS_CALL16:
5611     case R_MIPS_GOT16:
5612     case R_MIPS_GOT_DISP:
5613     case R_MIPS_GOT_HI16:
5614     case R_MIPS_CALL_HI16:
5615     case R_MIPS_GOT_LO16:
5616     case R_MIPS_CALL_LO16:
5617     case R_MICROMIPS_CALL16:
5618     case R_MICROMIPS_GOT16:
5619     case R_MICROMIPS_GOT_DISP:
5620     case R_MICROMIPS_GOT_HI16:
5621     case R_MICROMIPS_CALL_HI16:
5622     case R_MICROMIPS_GOT_LO16:
5623     case R_MICROMIPS_CALL_LO16:
5624     case R_MIPS_TLS_GD:
5625     case R_MIPS_TLS_GOTTPREL:
5626     case R_MIPS_TLS_LDM:
5627     case R_MIPS16_TLS_GD:
5628     case R_MIPS16_TLS_GOTTPREL:
5629     case R_MIPS16_TLS_LDM:
5630     case R_MICROMIPS_TLS_GD:
5631     case R_MICROMIPS_TLS_GOTTPREL:
5632     case R_MICROMIPS_TLS_LDM:
5633       /* Find the index into the GOT where this value is located.  */
5634       if (tls_ldm_reloc_p (r_type))
5635 	{
5636 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5637 					0, 0, NULL, r_type);
5638 	  if (g == MINUS_ONE)
5639 	    return bfd_reloc_outofrange;
5640 	}
5641       else if (!local_p)
5642 	{
5643 	  /* On VxWorks, CALL relocations should refer to the .got.plt
5644 	     entry, which is initialized to point at the PLT stub.  */
5645 	  if (htab->is_vxworks
5646 	      && (call_hi16_reloc_p (r_type)
5647 		  || call_lo16_reloc_p (r_type)
5648 		  || call16_reloc_p (r_type)))
5649 	    {
5650 	      BFD_ASSERT (addend == 0);
5651 	      BFD_ASSERT (h->root.needs_plt);
5652 	      g = mips_elf_gotplt_index (info, &h->root);
5653 	    }
5654 	  else
5655 	    {
5656 	      BFD_ASSERT (addend == 0);
5657 	      g = mips_elf_global_got_index (abfd, info, input_bfd,
5658 					     &h->root, r_type);
5659 	      if (!TLS_RELOC_P (r_type)
5660 		  && !elf_hash_table (info)->dynamic_sections_created)
5661 		/* This is a static link.  We must initialize the GOT entry.  */
5662 		MIPS_ELF_PUT_WORD (dynobj, symbol, htab->sgot->contents + g);
5663 	    }
5664 	}
5665       else if (!htab->is_vxworks
5666 	       && (call16_reloc_p (r_type) || got16_reloc_p (r_type)))
5667 	/* The calculation below does not involve "g".  */
5668 	break;
5669       else
5670 	{
5671 	  g = mips_elf_local_got_index (abfd, input_bfd, info,
5672 					symbol + addend, r_symndx, h, r_type);
5673 	  if (g == MINUS_ONE)
5674 	    return bfd_reloc_outofrange;
5675 	}
5676 
5677       /* Convert GOT indices to actual offsets.  */
5678       g = mips_elf_got_offset_from_index (info, abfd, input_bfd, g);
5679       break;
5680     }
5681 
5682   /* Relocations against the VxWorks __GOTT_BASE__ and __GOTT_INDEX__
5683      symbols are resolved by the loader.  Add them to .rela.dyn.  */
5684   if (h != NULL && is_gott_symbol (info, &h->root))
5685     {
5686       Elf_Internal_Rela outrel;
5687       bfd_byte *loc;
5688       asection *s;
5689 
5690       s = mips_elf_rel_dyn_section (info, FALSE);
5691       loc = s->contents + s->reloc_count++ * sizeof (Elf32_External_Rela);
5692 
5693       outrel.r_offset = (input_section->output_section->vma
5694 			 + input_section->output_offset
5695 			 + relocation->r_offset);
5696       outrel.r_info = ELF32_R_INFO (h->root.dynindx, r_type);
5697       outrel.r_addend = addend;
5698       bfd_elf32_swap_reloca_out (abfd, &outrel, loc);
5699 
5700       /* If we've written this relocation for a readonly section,
5701 	 we need to set DF_TEXTREL again, so that we do not delete the
5702 	 DT_TEXTREL tag.  */
5703       if (MIPS_ELF_READONLY_SECTION (input_section))
5704 	info->flags |= DF_TEXTREL;
5705 
5706       *valuep = 0;
5707       return bfd_reloc_ok;
5708     }
5709 
5710   /* Figure out what kind of relocation is being performed.  */
5711   switch (r_type)
5712     {
5713     case R_MIPS_NONE:
5714       return bfd_reloc_continue;
5715 
5716     case R_MIPS_16:
5717       if (howto->partial_inplace)
5718 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5719       value = symbol + addend;
5720       overflowed_p = mips_elf_overflow_p (value, 16);
5721       break;
5722 
5723     case R_MIPS_32:
5724     case R_MIPS_REL32:
5725     case R_MIPS_64:
5726       if ((info->shared
5727 	   || (htab->root.dynamic_sections_created
5728 	       && h != NULL
5729 	       && h->root.def_dynamic
5730 	       && !h->root.def_regular
5731 	       && !h->has_static_relocs))
5732 	  && r_symndx != STN_UNDEF
5733 	  && (h == NULL
5734 	      || h->root.root.type != bfd_link_hash_undefweak
5735 	      || ELF_ST_VISIBILITY (h->root.other) == STV_DEFAULT)
5736 	  && (input_section->flags & SEC_ALLOC) != 0)
5737 	{
5738 	  /* If we're creating a shared library, then we can't know
5739 	     where the symbol will end up.  So, we create a relocation
5740 	     record in the output, and leave the job up to the dynamic
5741 	     linker.  We must do the same for executable references to
5742 	     shared library symbols, unless we've decided to use copy
5743 	     relocs or PLTs instead.  */
5744 	  value = addend;
5745 	  if (!mips_elf_create_dynamic_relocation (abfd,
5746 						   info,
5747 						   relocation,
5748 						   h,
5749 						   sec,
5750 						   symbol,
5751 						   &value,
5752 						   input_section))
5753 	    return bfd_reloc_undefined;
5754 	}
5755       else
5756 	{
5757 	  if (r_type != R_MIPS_REL32)
5758 	    value = symbol + addend;
5759 	  else
5760 	    value = addend;
5761 	}
5762       value &= howto->dst_mask;
5763       break;
5764 
5765     case R_MIPS_PC32:
5766       value = symbol + addend - p;
5767       value &= howto->dst_mask;
5768       break;
5769 
5770     case R_MIPS16_26:
5771       /* The calculation for R_MIPS16_26 is just the same as for an
5772 	 R_MIPS_26.  It's only the storage of the relocated field into
5773 	 the output file that's different.  That's handled in
5774 	 mips_elf_perform_relocation.  So, we just fall through to the
5775 	 R_MIPS_26 case here.  */
5776     case R_MIPS_26:
5777     case R_MICROMIPS_26_S1:
5778       {
5779 	unsigned int shift;
5780 
5781 	/* Make sure the target of JALX is word-aligned.  Bit 0 must be
5782 	   the correct ISA mode selector and bit 1 must be 0.  */
5783 	if (*cross_mode_jump_p && (symbol & 3) != (r_type == R_MIPS_26))
5784 	  return bfd_reloc_outofrange;
5785 
5786 	/* Shift is 2, unusually, for microMIPS JALX.  */
5787 	shift = (!*cross_mode_jump_p && r_type == R_MICROMIPS_26_S1) ? 1 : 2;
5788 
5789 	if (was_local_p)
5790 	  value = addend | ((p + 4) & (0xfc000000 << shift));
5791 	else if (howto->partial_inplace)
5792 	  value = _bfd_mips_elf_sign_extend (addend, 26 + shift);
5793 	else
5794 	  value = addend;
5795 	value = (value + symbol) >> shift;
5796 	if (!was_local_p && h->root.root.type != bfd_link_hash_undefweak)
5797 	  overflowed_p = (value >> 26) != ((p + 4) >> (26 + shift));
5798 	value &= howto->dst_mask;
5799       }
5800       break;
5801 
5802     case R_MIPS_TLS_DTPREL_HI16:
5803     case R_MIPS16_TLS_DTPREL_HI16:
5804     case R_MICROMIPS_TLS_DTPREL_HI16:
5805       value = (mips_elf_high (addend + symbol - dtprel_base (info))
5806 	       & howto->dst_mask);
5807       break;
5808 
5809     case R_MIPS_TLS_DTPREL_LO16:
5810     case R_MIPS_TLS_DTPREL32:
5811     case R_MIPS_TLS_DTPREL64:
5812     case R_MIPS16_TLS_DTPREL_LO16:
5813     case R_MICROMIPS_TLS_DTPREL_LO16:
5814       value = (symbol + addend - dtprel_base (info)) & howto->dst_mask;
5815       break;
5816 
5817     case R_MIPS_TLS_TPREL_HI16:
5818     case R_MIPS16_TLS_TPREL_HI16:
5819     case R_MICROMIPS_TLS_TPREL_HI16:
5820       value = (mips_elf_high (addend + symbol - tprel_base (info))
5821 	       & howto->dst_mask);
5822       break;
5823 
5824     case R_MIPS_TLS_TPREL_LO16:
5825     case R_MIPS_TLS_TPREL32:
5826     case R_MIPS_TLS_TPREL64:
5827     case R_MIPS16_TLS_TPREL_LO16:
5828     case R_MICROMIPS_TLS_TPREL_LO16:
5829       value = (symbol + addend - tprel_base (info)) & howto->dst_mask;
5830       break;
5831 
5832     case R_MIPS_HI16:
5833     case R_MIPS16_HI16:
5834     case R_MICROMIPS_HI16:
5835       if (!gp_disp_p)
5836 	{
5837 	  value = mips_elf_high (addend + symbol);
5838 	  value &= howto->dst_mask;
5839 	}
5840       else
5841 	{
5842 	  /* For MIPS16 ABI code we generate this sequence
5843 	        0: li      $v0,%hi(_gp_disp)
5844 	        4: addiupc $v1,%lo(_gp_disp)
5845 	        8: sll     $v0,16
5846 	       12: addu    $v0,$v1
5847 	       14: move    $gp,$v0
5848 	     So the offsets of hi and lo relocs are the same, but the
5849 	     base $pc is that used by the ADDIUPC instruction at $t9 + 4.
5850 	     ADDIUPC clears the low two bits of the instruction address,
5851 	     so the base is ($t9 + 4) & ~3.  */
5852 	  if (r_type == R_MIPS16_HI16)
5853 	    value = mips_elf_high (addend + gp - ((p + 4) & ~(bfd_vma) 0x3));
5854 	  /* The microMIPS .cpload sequence uses the same assembly
5855 	     instructions as the traditional psABI version, but the
5856 	     incoming $t9 has the low bit set.  */
5857 	  else if (r_type == R_MICROMIPS_HI16)
5858 	    value = mips_elf_high (addend + gp - p - 1);
5859 	  else
5860 	    value = mips_elf_high (addend + gp - p);
5861 	  overflowed_p = mips_elf_overflow_p (value, 16);
5862 	}
5863       break;
5864 
5865     case R_MIPS_LO16:
5866     case R_MIPS16_LO16:
5867     case R_MICROMIPS_LO16:
5868     case R_MICROMIPS_HI0_LO16:
5869       if (!gp_disp_p)
5870 	value = (symbol + addend) & howto->dst_mask;
5871       else
5872 	{
5873 	  /* See the comment for R_MIPS16_HI16 above for the reason
5874 	     for this conditional.  */
5875 	  if (r_type == R_MIPS16_LO16)
5876 	    value = addend + gp - (p & ~(bfd_vma) 0x3);
5877 	  else if (r_type == R_MICROMIPS_LO16
5878 		   || r_type == R_MICROMIPS_HI0_LO16)
5879 	    value = addend + gp - p + 3;
5880 	  else
5881 	    value = addend + gp - p + 4;
5882 	  /* The MIPS ABI requires checking the R_MIPS_LO16 relocation
5883 	     for overflow.  But, on, say, IRIX5, relocations against
5884 	     _gp_disp are normally generated from the .cpload
5885 	     pseudo-op.  It generates code that normally looks like
5886 	     this:
5887 
5888 	       lui    $gp,%hi(_gp_disp)
5889 	       addiu  $gp,$gp,%lo(_gp_disp)
5890 	       addu   $gp,$gp,$t9
5891 
5892 	     Here $t9 holds the address of the function being called,
5893 	     as required by the MIPS ELF ABI.  The R_MIPS_LO16
5894 	     relocation can easily overflow in this situation, but the
5895 	     R_MIPS_HI16 relocation will handle the overflow.
5896 	     Therefore, we consider this a bug in the MIPS ABI, and do
5897 	     not check for overflow here.  */
5898 	}
5899       break;
5900 
5901     case R_MIPS_LITERAL:
5902     case R_MICROMIPS_LITERAL:
5903       /* Because we don't merge literal sections, we can handle this
5904 	 just like R_MIPS_GPREL16.  In the long run, we should merge
5905 	 shared literals, and then we will need to additional work
5906 	 here.  */
5907 
5908       /* Fall through.  */
5909 
5910     case R_MIPS16_GPREL:
5911       /* The R_MIPS16_GPREL performs the same calculation as
5912 	 R_MIPS_GPREL16, but stores the relocated bits in a different
5913 	 order.  We don't need to do anything special here; the
5914 	 differences are handled in mips_elf_perform_relocation.  */
5915     case R_MIPS_GPREL16:
5916     case R_MICROMIPS_GPREL7_S2:
5917     case R_MICROMIPS_GPREL16:
5918       /* Only sign-extend the addend if it was extracted from the
5919 	 instruction.  If the addend was separate, leave it alone,
5920 	 otherwise we may lose significant bits.  */
5921       if (howto->partial_inplace)
5922 	addend = _bfd_mips_elf_sign_extend (addend, 16);
5923       value = symbol + addend - gp;
5924       /* If the symbol was local, any earlier relocatable links will
5925 	 have adjusted its addend with the gp offset, so compensate
5926 	 for that now.  Don't do it for symbols forced local in this
5927 	 link, though, since they won't have had the gp offset applied
5928 	 to them before.  */
5929       if (was_local_p)
5930 	value += gp0;
5931       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5932 	overflowed_p = mips_elf_overflow_p (value, 16);
5933       break;
5934 
5935     case R_MIPS16_GOT16:
5936     case R_MIPS16_CALL16:
5937     case R_MIPS_GOT16:
5938     case R_MIPS_CALL16:
5939     case R_MICROMIPS_GOT16:
5940     case R_MICROMIPS_CALL16:
5941       /* VxWorks does not have separate local and global semantics for
5942 	 R_MIPS*_GOT16; every relocation evaluates to "G".  */
5943       if (!htab->is_vxworks && local_p)
5944 	{
5945 	  value = mips_elf_got16_entry (abfd, input_bfd, info,
5946 					symbol + addend, !was_local_p);
5947 	  if (value == MINUS_ONE)
5948 	    return bfd_reloc_outofrange;
5949 	  value
5950 	    = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
5951 	  overflowed_p = mips_elf_overflow_p (value, 16);
5952 	  break;
5953 	}
5954 
5955       /* Fall through.  */
5956 
5957     case R_MIPS_TLS_GD:
5958     case R_MIPS_TLS_GOTTPREL:
5959     case R_MIPS_TLS_LDM:
5960     case R_MIPS_GOT_DISP:
5961     case R_MIPS16_TLS_GD:
5962     case R_MIPS16_TLS_GOTTPREL:
5963     case R_MIPS16_TLS_LDM:
5964     case R_MICROMIPS_TLS_GD:
5965     case R_MICROMIPS_TLS_GOTTPREL:
5966     case R_MICROMIPS_TLS_LDM:
5967     case R_MICROMIPS_GOT_DISP:
5968       value = g;
5969       overflowed_p = mips_elf_overflow_p (value, 16);
5970       break;
5971 
5972     case R_MIPS_GPREL32:
5973       value = (addend + symbol + gp0 - gp);
5974       if (!save_addend)
5975 	value &= howto->dst_mask;
5976       break;
5977 
5978     case R_MIPS_PC16:
5979     case R_MIPS_GNU_REL16_S2:
5980       if (howto->partial_inplace)
5981 	addend = _bfd_mips_elf_sign_extend (addend, 18);
5982 
5983       if ((symbol + addend) & 3)
5984 	return bfd_reloc_outofrange;
5985 
5986       value = symbol + addend - p;
5987       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
5988 	overflowed_p = mips_elf_overflow_p (value, 18);
5989       value >>= howto->rightshift;
5990       value &= howto->dst_mask;
5991       break;
5992 
5993     case R_MIPS_PC21_S2:
5994       if (howto->partial_inplace)
5995 	addend = _bfd_mips_elf_sign_extend (addend, 23);
5996 
5997       if ((symbol + addend) & 3)
5998 	return bfd_reloc_outofrange;
5999 
6000       value = symbol + addend - p;
6001       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6002 	overflowed_p = mips_elf_overflow_p (value, 23);
6003       value >>= howto->rightshift;
6004       value &= howto->dst_mask;
6005       break;
6006 
6007     case R_MIPS_PC26_S2:
6008       if (howto->partial_inplace)
6009 	addend = _bfd_mips_elf_sign_extend (addend, 28);
6010 
6011       if ((symbol + addend) & 3)
6012 	return bfd_reloc_outofrange;
6013 
6014       value = symbol + addend - p;
6015       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6016 	overflowed_p = mips_elf_overflow_p (value, 28);
6017       value >>= howto->rightshift;
6018       value &= howto->dst_mask;
6019       break;
6020 
6021     case R_MIPS_PC18_S3:
6022       if (howto->partial_inplace)
6023 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6024 
6025       if ((symbol + addend) & 7)
6026 	return bfd_reloc_outofrange;
6027 
6028       value = symbol + addend - ((p | 7) ^ 7);
6029       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6030 	overflowed_p = mips_elf_overflow_p (value, 21);
6031       value >>= howto->rightshift;
6032       value &= howto->dst_mask;
6033       break;
6034 
6035     case R_MIPS_PC19_S2:
6036       if (howto->partial_inplace)
6037 	addend = _bfd_mips_elf_sign_extend (addend, 21);
6038 
6039       if ((symbol + addend) & 3)
6040 	return bfd_reloc_outofrange;
6041 
6042       value = symbol + addend - p;
6043       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6044 	overflowed_p = mips_elf_overflow_p (value, 21);
6045       value >>= howto->rightshift;
6046       value &= howto->dst_mask;
6047       break;
6048 
6049     case R_MIPS_PCHI16:
6050       value = mips_elf_high (symbol + addend - p);
6051       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6052 	overflowed_p = mips_elf_overflow_p (value, 16);
6053       value &= howto->dst_mask;
6054       break;
6055 
6056     case R_MIPS_PCLO16:
6057       if (howto->partial_inplace)
6058 	addend = _bfd_mips_elf_sign_extend (addend, 16);
6059       value = symbol + addend - p;
6060       value &= howto->dst_mask;
6061       break;
6062 
6063     case R_MICROMIPS_PC7_S1:
6064       if (howto->partial_inplace)
6065 	addend = _bfd_mips_elf_sign_extend (addend, 8);
6066       value = symbol + addend - p;
6067       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6068 	overflowed_p = mips_elf_overflow_p (value, 8);
6069       value >>= howto->rightshift;
6070       value &= howto->dst_mask;
6071       break;
6072 
6073     case R_MICROMIPS_PC10_S1:
6074       if (howto->partial_inplace)
6075 	addend = _bfd_mips_elf_sign_extend (addend, 11);
6076       value = symbol + addend - p;
6077       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6078 	overflowed_p = mips_elf_overflow_p (value, 11);
6079       value >>= howto->rightshift;
6080       value &= howto->dst_mask;
6081       break;
6082 
6083     case R_MICROMIPS_PC16_S1:
6084       if (howto->partial_inplace)
6085 	addend = _bfd_mips_elf_sign_extend (addend, 17);
6086       value = symbol + addend - p;
6087       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6088 	overflowed_p = mips_elf_overflow_p (value, 17);
6089       value >>= howto->rightshift;
6090       value &= howto->dst_mask;
6091       break;
6092 
6093     case R_MICROMIPS_PC23_S2:
6094       if (howto->partial_inplace)
6095 	addend = _bfd_mips_elf_sign_extend (addend, 25);
6096       value = symbol + addend - ((p | 3) ^ 3);
6097       if (was_local_p || h->root.root.type != bfd_link_hash_undefweak)
6098 	overflowed_p = mips_elf_overflow_p (value, 25);
6099       value >>= howto->rightshift;
6100       value &= howto->dst_mask;
6101       break;
6102 
6103     case R_MIPS_GOT_HI16:
6104     case R_MIPS_CALL_HI16:
6105     case R_MICROMIPS_GOT_HI16:
6106     case R_MICROMIPS_CALL_HI16:
6107       /* We're allowed to handle these two relocations identically.
6108 	 The dynamic linker is allowed to handle the CALL relocations
6109 	 differently by creating a lazy evaluation stub.  */
6110       value = g;
6111       value = mips_elf_high (value);
6112       value &= howto->dst_mask;
6113       break;
6114 
6115     case R_MIPS_GOT_LO16:
6116     case R_MIPS_CALL_LO16:
6117     case R_MICROMIPS_GOT_LO16:
6118     case R_MICROMIPS_CALL_LO16:
6119       value = g & howto->dst_mask;
6120       break;
6121 
6122     case R_MIPS_GOT_PAGE:
6123     case R_MICROMIPS_GOT_PAGE:
6124       value = mips_elf_got_page (abfd, input_bfd, info, symbol + addend, NULL);
6125       if (value == MINUS_ONE)
6126 	return bfd_reloc_outofrange;
6127       value = mips_elf_got_offset_from_index (info, abfd, input_bfd, value);
6128       overflowed_p = mips_elf_overflow_p (value, 16);
6129       break;
6130 
6131     case R_MIPS_GOT_OFST:
6132     case R_MICROMIPS_GOT_OFST:
6133       if (local_p)
6134 	mips_elf_got_page (abfd, input_bfd, info, symbol + addend, &value);
6135       else
6136 	value = addend;
6137       overflowed_p = mips_elf_overflow_p (value, 16);
6138       break;
6139 
6140     case R_MIPS_SUB:
6141     case R_MICROMIPS_SUB:
6142       value = symbol - addend;
6143       value &= howto->dst_mask;
6144       break;
6145 
6146     case R_MIPS_HIGHER:
6147     case R_MICROMIPS_HIGHER:
6148       value = mips_elf_higher (addend + symbol);
6149       value &= howto->dst_mask;
6150       break;
6151 
6152     case R_MIPS_HIGHEST:
6153     case R_MICROMIPS_HIGHEST:
6154       value = mips_elf_highest (addend + symbol);
6155       value &= howto->dst_mask;
6156       break;
6157 
6158     case R_MIPS_SCN_DISP:
6159     case R_MICROMIPS_SCN_DISP:
6160       value = symbol + addend - sec->output_offset;
6161       value &= howto->dst_mask;
6162       break;
6163 
6164     case R_MIPS_JALR:
6165     case R_MICROMIPS_JALR:
6166       /* This relocation is only a hint.  In some cases, we optimize
6167 	 it into a bal instruction.  But we don't try to optimize
6168 	 when the symbol does not resolve locally.  */
6169       if (h != NULL && !SYMBOL_CALLS_LOCAL (info, &h->root))
6170 	return bfd_reloc_continue;
6171       value = symbol + addend;
6172       break;
6173 
6174     case R_MIPS_PJUMP:
6175     case R_MIPS_GNU_VTINHERIT:
6176     case R_MIPS_GNU_VTENTRY:
6177       /* We don't do anything with these at present.  */
6178       return bfd_reloc_continue;
6179 
6180     default:
6181       /* An unrecognized relocation type.  */
6182       return bfd_reloc_notsupported;
6183     }
6184 
6185   /* Store the VALUE for our caller.  */
6186   *valuep = value;
6187   return overflowed_p ? bfd_reloc_overflow : bfd_reloc_ok;
6188 }
6189 
6190 /* Obtain the field relocated by RELOCATION.  */
6191 
6192 static bfd_vma
6193 mips_elf_obtain_contents (reloc_howto_type *howto,
6194 			  const Elf_Internal_Rela *relocation,
6195 			  bfd *input_bfd, bfd_byte *contents)
6196 {
6197   bfd_vma x;
6198   bfd_byte *location = contents + relocation->r_offset;
6199 
6200   /* Obtain the bytes.  */
6201   x = bfd_get ((8 * bfd_get_reloc_size (howto)), input_bfd, location);
6202 
6203   return x;
6204 }
6205 
6206 /* It has been determined that the result of the RELOCATION is the
6207    VALUE.  Use HOWTO to place VALUE into the output file at the
6208    appropriate position.  The SECTION is the section to which the
6209    relocation applies.
6210    CROSS_MODE_JUMP_P is true if the relocation field
6211    is a MIPS16 or microMIPS jump to standard MIPS code, or vice versa.
6212 
6213    Returns FALSE if anything goes wrong.  */
6214 
6215 static bfd_boolean
6216 mips_elf_perform_relocation (struct bfd_link_info *info,
6217 			     reloc_howto_type *howto,
6218 			     const Elf_Internal_Rela *relocation,
6219 			     bfd_vma value, bfd *input_bfd,
6220 			     asection *input_section, bfd_byte *contents,
6221 			     bfd_boolean cross_mode_jump_p)
6222 {
6223   bfd_vma x;
6224   bfd_byte *location;
6225   int r_type = ELF_R_TYPE (input_bfd, relocation->r_info);
6226 
6227   /* Figure out where the relocation is occurring.  */
6228   location = contents + relocation->r_offset;
6229 
6230   _bfd_mips_elf_reloc_unshuffle (input_bfd, r_type, FALSE, location);
6231 
6232   /* Obtain the current value.  */
6233   x = mips_elf_obtain_contents (howto, relocation, input_bfd, contents);
6234 
6235   /* Clear the field we are setting.  */
6236   x &= ~howto->dst_mask;
6237 
6238   /* Set the field.  */
6239   x |= (value & howto->dst_mask);
6240 
6241   /* If required, turn JAL into JALX.  */
6242   if (cross_mode_jump_p && jal_reloc_p (r_type))
6243     {
6244       bfd_boolean ok;
6245       bfd_vma opcode = x >> 26;
6246       bfd_vma jalx_opcode;
6247 
6248       /* Check to see if the opcode is already JAL or JALX.  */
6249       if (r_type == R_MIPS16_26)
6250 	{
6251 	  ok = ((opcode == 0x6) || (opcode == 0x7));
6252 	  jalx_opcode = 0x7;
6253 	}
6254       else if (r_type == R_MICROMIPS_26_S1)
6255 	{
6256 	  ok = ((opcode == 0x3d) || (opcode == 0x3c));
6257 	  jalx_opcode = 0x3c;
6258 	}
6259       else
6260 	{
6261 	  ok = ((opcode == 0x3) || (opcode == 0x1d));
6262 	  jalx_opcode = 0x1d;
6263 	}
6264 
6265       /* If the opcode is not JAL or JALX, there's a problem.  We cannot
6266          convert J or JALS to JALX.  */
6267       if (!ok)
6268 	{
6269 	  (*_bfd_error_handler)
6270 	    (_("%B: %A+0x%lx: Unsupported jump between ISA modes; consider recompiling with interlinking enabled."),
6271 	     input_bfd,
6272 	     input_section,
6273 	     (unsigned long) relocation->r_offset);
6274 	  bfd_set_error (bfd_error_bad_value);
6275 	  return FALSE;
6276 	}
6277 
6278       /* Make this the JALX opcode.  */
6279       x = (x & ~(0x3f << 26)) | (jalx_opcode << 26);
6280     }
6281 
6282   /* Try converting JAL to BAL and J(AL)R to B(AL), if the target is in
6283      range.  */
6284   if (!info->relocatable
6285       && !cross_mode_jump_p
6286       && ((JAL_TO_BAL_P (input_bfd)
6287 	   && r_type == R_MIPS_26
6288 	   && (x >> 26) == 0x3)		/* jal addr */
6289 	  || (JALR_TO_BAL_P (input_bfd)
6290 	      && r_type == R_MIPS_JALR
6291 	      && x == 0x0320f809)	/* jalr t9 */
6292 	  || (JR_TO_B_P (input_bfd)
6293 	      && r_type == R_MIPS_JALR
6294 	      && x == 0x03200008)))	/* jr t9 */
6295     {
6296       bfd_vma addr;
6297       bfd_vma dest;
6298       bfd_signed_vma off;
6299 
6300       addr = (input_section->output_section->vma
6301 	      + input_section->output_offset
6302 	      + relocation->r_offset
6303 	      + 4);
6304       if (r_type == R_MIPS_26)
6305 	dest = (value << 2) | ((addr >> 28) << 28);
6306       else
6307 	dest = value;
6308       off = dest - addr;
6309       if (off <= 0x1ffff && off >= -0x20000)
6310 	{
6311 	  if (x == 0x03200008)	/* jr t9 */
6312 	    x = 0x10000000 | (((bfd_vma) off >> 2) & 0xffff);   /* b addr */
6313 	  else
6314 	    x = 0x04110000 | (((bfd_vma) off >> 2) & 0xffff);   /* bal addr */
6315 	}
6316     }
6317 
6318   /* Put the value into the output.  */
6319   bfd_put (8 * bfd_get_reloc_size (howto), input_bfd, x, location);
6320 
6321   _bfd_mips_elf_reloc_shuffle (input_bfd, r_type, !info->relocatable,
6322 			       location);
6323 
6324   return TRUE;
6325 }
6326 
6327 /* Create a rel.dyn relocation for the dynamic linker to resolve.  REL
6328    is the original relocation, which is now being transformed into a
6329    dynamic relocation.  The ADDENDP is adjusted if necessary; the
6330    caller should store the result in place of the original addend.  */
6331 
6332 static bfd_boolean
6333 mips_elf_create_dynamic_relocation (bfd *output_bfd,
6334 				    struct bfd_link_info *info,
6335 				    const Elf_Internal_Rela *rel,
6336 				    struct mips_elf_link_hash_entry *h,
6337 				    asection *sec, bfd_vma symbol,
6338 				    bfd_vma *addendp, asection *input_section)
6339 {
6340   Elf_Internal_Rela outrel[3];
6341   asection *sreloc;
6342   bfd *dynobj;
6343   int r_type;
6344   long indx;
6345   bfd_boolean defined_p;
6346   struct mips_elf_link_hash_table *htab;
6347 
6348   htab = mips_elf_hash_table (info);
6349   BFD_ASSERT (htab != NULL);
6350 
6351   r_type = ELF_R_TYPE (output_bfd, rel->r_info);
6352   dynobj = elf_hash_table (info)->dynobj;
6353   sreloc = mips_elf_rel_dyn_section (info, FALSE);
6354   BFD_ASSERT (sreloc != NULL);
6355   BFD_ASSERT (sreloc->contents != NULL);
6356   BFD_ASSERT (sreloc->reloc_count * MIPS_ELF_REL_SIZE (output_bfd)
6357 	      < sreloc->size);
6358 
6359   outrel[0].r_offset =
6360     _bfd_elf_section_offset (output_bfd, info, input_section, rel[0].r_offset);
6361   if (ABI_64_P (output_bfd))
6362     {
6363       outrel[1].r_offset =
6364 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[1].r_offset);
6365       outrel[2].r_offset =
6366 	_bfd_elf_section_offset (output_bfd, info, input_section, rel[2].r_offset);
6367     }
6368 
6369   if (outrel[0].r_offset == MINUS_ONE)
6370     /* The relocation field has been deleted.  */
6371     return TRUE;
6372 
6373   if (outrel[0].r_offset == MINUS_TWO)
6374     {
6375       /* The relocation field has been converted into a relative value of
6376 	 some sort.  Functions like _bfd_elf_write_section_eh_frame expect
6377 	 the field to be fully relocated, so add in the symbol's value.  */
6378       *addendp += symbol;
6379       return TRUE;
6380     }
6381 
6382   /* We must now calculate the dynamic symbol table index to use
6383      in the relocation.  */
6384   if (h != NULL && ! SYMBOL_REFERENCES_LOCAL (info, &h->root))
6385     {
6386       BFD_ASSERT (htab->is_vxworks || h->global_got_area != GGA_NONE);
6387       indx = h->root.dynindx;
6388       if (SGI_COMPAT (output_bfd))
6389 	defined_p = h->root.def_regular;
6390       else
6391 	/* ??? glibc's ld.so just adds the final GOT entry to the
6392 	   relocation field.  It therefore treats relocs against
6393 	   defined symbols in the same way as relocs against
6394 	   undefined symbols.  */
6395 	defined_p = FALSE;
6396     }
6397   else
6398     {
6399       if (sec != NULL && bfd_is_abs_section (sec))
6400 	indx = 0;
6401       else if (sec == NULL || sec->owner == NULL)
6402 	{
6403 	  bfd_set_error (bfd_error_bad_value);
6404 	  return FALSE;
6405 	}
6406       else
6407 	{
6408 	  indx = elf_section_data (sec->output_section)->dynindx;
6409 	  if (indx == 0)
6410 	    {
6411 	      asection *osec = htab->root.text_index_section;
6412 	      indx = elf_section_data (osec)->dynindx;
6413 	    }
6414 	  if (indx == 0)
6415 	    abort ();
6416 	}
6417 
6418       /* Instead of generating a relocation using the section
6419 	 symbol, we may as well make it a fully relative
6420 	 relocation.  We want to avoid generating relocations to
6421 	 local symbols because we used to generate them
6422 	 incorrectly, without adding the original symbol value,
6423 	 which is mandated by the ABI for section symbols.  In
6424 	 order to give dynamic loaders and applications time to
6425 	 phase out the incorrect use, we refrain from emitting
6426 	 section-relative relocations.  It's not like they're
6427 	 useful, after all.  This should be a bit more efficient
6428 	 as well.  */
6429       /* ??? Although this behavior is compatible with glibc's ld.so,
6430 	 the ABI says that relocations against STN_UNDEF should have
6431 	 a symbol value of 0.  Irix rld honors this, so relocations
6432 	 against STN_UNDEF have no effect.  */
6433       if (!SGI_COMPAT (output_bfd))
6434 	indx = 0;
6435       defined_p = TRUE;
6436     }
6437 
6438   /* If the relocation was previously an absolute relocation and
6439      this symbol will not be referred to by the relocation, we must
6440      adjust it by the value we give it in the dynamic symbol table.
6441      Otherwise leave the job up to the dynamic linker.  */
6442   if (defined_p && r_type != R_MIPS_REL32)
6443     *addendp += symbol;
6444 
6445   if (htab->is_vxworks)
6446     /* VxWorks uses non-relative relocations for this.  */
6447     outrel[0].r_info = ELF32_R_INFO (indx, R_MIPS_32);
6448   else
6449     /* The relocation is always an REL32 relocation because we don't
6450        know where the shared library will wind up at load-time.  */
6451     outrel[0].r_info = ELF_R_INFO (output_bfd, (unsigned long) indx,
6452 				   R_MIPS_REL32);
6453 
6454   /* For strict adherence to the ABI specification, we should
6455      generate a R_MIPS_64 relocation record by itself before the
6456      _REL32/_64 record as well, such that the addend is read in as
6457      a 64-bit value (REL32 is a 32-bit relocation, after all).
6458      However, since none of the existing ELF64 MIPS dynamic
6459      loaders seems to care, we don't waste space with these
6460      artificial relocations.  If this turns out to not be true,
6461      mips_elf_allocate_dynamic_relocation() should be tweaked so
6462      as to make room for a pair of dynamic relocations per
6463      invocation if ABI_64_P, and here we should generate an
6464      additional relocation record with R_MIPS_64 by itself for a
6465      NULL symbol before this relocation record.  */
6466   outrel[1].r_info = ELF_R_INFO (output_bfd, 0,
6467 				 ABI_64_P (output_bfd)
6468 				 ? R_MIPS_64
6469 				 : R_MIPS_NONE);
6470   outrel[2].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_NONE);
6471 
6472   /* Adjust the output offset of the relocation to reference the
6473      correct location in the output file.  */
6474   outrel[0].r_offset += (input_section->output_section->vma
6475 			 + input_section->output_offset);
6476   outrel[1].r_offset += (input_section->output_section->vma
6477 			 + input_section->output_offset);
6478   outrel[2].r_offset += (input_section->output_section->vma
6479 			 + input_section->output_offset);
6480 
6481   /* Put the relocation back out.  We have to use the special
6482      relocation outputter in the 64-bit case since the 64-bit
6483      relocation format is non-standard.  */
6484   if (ABI_64_P (output_bfd))
6485     {
6486       (*get_elf_backend_data (output_bfd)->s->swap_reloc_out)
6487 	(output_bfd, &outrel[0],
6488 	 (sreloc->contents
6489 	  + sreloc->reloc_count * sizeof (Elf64_Mips_External_Rel)));
6490     }
6491   else if (htab->is_vxworks)
6492     {
6493       /* VxWorks uses RELA rather than REL dynamic relocations.  */
6494       outrel[0].r_addend = *addendp;
6495       bfd_elf32_swap_reloca_out
6496 	(output_bfd, &outrel[0],
6497 	 (sreloc->contents
6498 	  + sreloc->reloc_count * sizeof (Elf32_External_Rela)));
6499     }
6500   else
6501     bfd_elf32_swap_reloc_out
6502       (output_bfd, &outrel[0],
6503        (sreloc->contents + sreloc->reloc_count * sizeof (Elf32_External_Rel)));
6504 
6505   /* We've now added another relocation.  */
6506   ++sreloc->reloc_count;
6507 
6508   /* Make sure the output section is writable.  The dynamic linker
6509      will be writing to it.  */
6510   elf_section_data (input_section->output_section)->this_hdr.sh_flags
6511     |= SHF_WRITE;
6512 
6513   /* On IRIX5, make an entry of compact relocation info.  */
6514   if (IRIX_COMPAT (output_bfd) == ict_irix5)
6515     {
6516       asection *scpt = bfd_get_linker_section (dynobj, ".compact_rel");
6517       bfd_byte *cr;
6518 
6519       if (scpt)
6520 	{
6521 	  Elf32_crinfo cptrel;
6522 
6523 	  mips_elf_set_cr_format (cptrel, CRF_MIPS_LONG);
6524 	  cptrel.vaddr = (rel->r_offset
6525 			  + input_section->output_section->vma
6526 			  + input_section->output_offset);
6527 	  if (r_type == R_MIPS_REL32)
6528 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_REL32);
6529 	  else
6530 	    mips_elf_set_cr_type (cptrel, CRT_MIPS_WORD);
6531 	  mips_elf_set_cr_dist2to (cptrel, 0);
6532 	  cptrel.konst = *addendp;
6533 
6534 	  cr = (scpt->contents
6535 		+ sizeof (Elf32_External_compact_rel));
6536 	  mips_elf_set_cr_relvaddr (cptrel, 0);
6537 	  bfd_elf32_swap_crinfo_out (output_bfd, &cptrel,
6538 				     ((Elf32_External_crinfo *) cr
6539 				      + scpt->reloc_count));
6540 	  ++scpt->reloc_count;
6541 	}
6542     }
6543 
6544   /* If we've written this relocation for a readonly section,
6545      we need to set DF_TEXTREL again, so that we do not delete the
6546      DT_TEXTREL tag.  */
6547   if (MIPS_ELF_READONLY_SECTION (input_section))
6548     info->flags |= DF_TEXTREL;
6549 
6550   return TRUE;
6551 }
6552 
6553 /* Return the MACH for a MIPS e_flags value.  */
6554 
6555 unsigned long
6556 _bfd_elf_mips_mach (flagword flags)
6557 {
6558   switch (flags & EF_MIPS_MACH)
6559     {
6560     case E_MIPS_MACH_3900:
6561       return bfd_mach_mips3900;
6562 
6563     case E_MIPS_MACH_4010:
6564       return bfd_mach_mips4010;
6565 
6566     case E_MIPS_MACH_4100:
6567       return bfd_mach_mips4100;
6568 
6569     case E_MIPS_MACH_4111:
6570       return bfd_mach_mips4111;
6571 
6572     case E_MIPS_MACH_4120:
6573       return bfd_mach_mips4120;
6574 
6575     case E_MIPS_MACH_4650:
6576       return bfd_mach_mips4650;
6577 
6578     case E_MIPS_MACH_5400:
6579       return bfd_mach_mips5400;
6580 
6581     case E_MIPS_MACH_5500:
6582       return bfd_mach_mips5500;
6583 
6584     case E_MIPS_MACH_5900:
6585       return bfd_mach_mips5900;
6586 
6587     case E_MIPS_MACH_9000:
6588       return bfd_mach_mips9000;
6589 
6590     case E_MIPS_MACH_SB1:
6591       return bfd_mach_mips_sb1;
6592 
6593     case E_MIPS_MACH_LS2E:
6594       return bfd_mach_mips_loongson_2e;
6595 
6596     case E_MIPS_MACH_LS2F:
6597       return bfd_mach_mips_loongson_2f;
6598 
6599     case E_MIPS_MACH_LS3A:
6600       return bfd_mach_mips_loongson_3a;
6601 
6602     case E_MIPS_MACH_OCTEON3:
6603       return bfd_mach_mips_octeon3;
6604 
6605     case E_MIPS_MACH_OCTEON2:
6606       return bfd_mach_mips_octeon2;
6607 
6608     case E_MIPS_MACH_OCTEON:
6609       return bfd_mach_mips_octeon;
6610 
6611     case E_MIPS_MACH_XLR:
6612       return bfd_mach_mips_xlr;
6613 
6614     default:
6615       switch (flags & EF_MIPS_ARCH)
6616 	{
6617 	default:
6618 	case E_MIPS_ARCH_1:
6619 	  return bfd_mach_mips3000;
6620 
6621 	case E_MIPS_ARCH_2:
6622 	  return bfd_mach_mips6000;
6623 
6624 	case E_MIPS_ARCH_3:
6625 	  return bfd_mach_mips4000;
6626 
6627 	case E_MIPS_ARCH_4:
6628 	  return bfd_mach_mips8000;
6629 
6630 	case E_MIPS_ARCH_5:
6631 	  return bfd_mach_mips5;
6632 
6633 	case E_MIPS_ARCH_32:
6634 	  return bfd_mach_mipsisa32;
6635 
6636 	case E_MIPS_ARCH_64:
6637 	  return bfd_mach_mipsisa64;
6638 
6639 	case E_MIPS_ARCH_32R2:
6640 	  return bfd_mach_mipsisa32r2;
6641 
6642 	case E_MIPS_ARCH_64R2:
6643 	  return bfd_mach_mipsisa64r2;
6644 
6645 	case E_MIPS_ARCH_32R6:
6646 	  return bfd_mach_mipsisa32r6;
6647 
6648 	case E_MIPS_ARCH_64R6:
6649 	  return bfd_mach_mipsisa64r6;
6650 	}
6651     }
6652 
6653   return 0;
6654 }
6655 
6656 /* Return printable name for ABI.  */
6657 
6658 static INLINE char *
6659 elf_mips_abi_name (bfd *abfd)
6660 {
6661   flagword flags;
6662 
6663   flags = elf_elfheader (abfd)->e_flags;
6664   switch (flags & EF_MIPS_ABI)
6665     {
6666     case 0:
6667       if (ABI_N32_P (abfd))
6668 	return "N32";
6669       else if (ABI_64_P (abfd))
6670 	return "64";
6671       else
6672 	return "none";
6673     case E_MIPS_ABI_O32:
6674       return "O32";
6675     case E_MIPS_ABI_O64:
6676       return "O64";
6677     case E_MIPS_ABI_EABI32:
6678       return "EABI32";
6679     case E_MIPS_ABI_EABI64:
6680       return "EABI64";
6681     default:
6682       return "unknown abi";
6683     }
6684 }
6685 
6686 /* MIPS ELF uses two common sections.  One is the usual one, and the
6687    other is for small objects.  All the small objects are kept
6688    together, and then referenced via the gp pointer, which yields
6689    faster assembler code.  This is what we use for the small common
6690    section.  This approach is copied from ecoff.c.  */
6691 static asection mips_elf_scom_section;
6692 static asymbol mips_elf_scom_symbol;
6693 static asymbol *mips_elf_scom_symbol_ptr;
6694 
6695 /* MIPS ELF also uses an acommon section, which represents an
6696    allocated common symbol which may be overridden by a
6697    definition in a shared library.  */
6698 static asection mips_elf_acom_section;
6699 static asymbol mips_elf_acom_symbol;
6700 static asymbol *mips_elf_acom_symbol_ptr;
6701 
6702 /* This is used for both the 32-bit and the 64-bit ABI.  */
6703 
6704 void
6705 _bfd_mips_elf_symbol_processing (bfd *abfd, asymbol *asym)
6706 {
6707   elf_symbol_type *elfsym;
6708 
6709   /* Handle the special MIPS section numbers that a symbol may use.  */
6710   elfsym = (elf_symbol_type *) asym;
6711   switch (elfsym->internal_elf_sym.st_shndx)
6712     {
6713     case SHN_MIPS_ACOMMON:
6714       /* This section is used in a dynamically linked executable file.
6715 	 It is an allocated common section.  The dynamic linker can
6716 	 either resolve these symbols to something in a shared
6717 	 library, or it can just leave them here.  For our purposes,
6718 	 we can consider these symbols to be in a new section.  */
6719       if (mips_elf_acom_section.name == NULL)
6720 	{
6721 	  /* Initialize the acommon section.  */
6722 	  mips_elf_acom_section.name = ".acommon";
6723 	  mips_elf_acom_section.flags = SEC_ALLOC;
6724 	  mips_elf_acom_section.output_section = &mips_elf_acom_section;
6725 	  mips_elf_acom_section.symbol = &mips_elf_acom_symbol;
6726 	  mips_elf_acom_section.symbol_ptr_ptr = &mips_elf_acom_symbol_ptr;
6727 	  mips_elf_acom_symbol.name = ".acommon";
6728 	  mips_elf_acom_symbol.flags = BSF_SECTION_SYM;
6729 	  mips_elf_acom_symbol.section = &mips_elf_acom_section;
6730 	  mips_elf_acom_symbol_ptr = &mips_elf_acom_symbol;
6731 	}
6732       asym->section = &mips_elf_acom_section;
6733       break;
6734 
6735     case SHN_COMMON:
6736       /* Common symbols less than the GP size are automatically
6737 	 treated as SHN_MIPS_SCOMMON symbols on IRIX5.  */
6738       if (asym->value > elf_gp_size (abfd)
6739 	  || ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_TLS
6740 	  || IRIX_COMPAT (abfd) == ict_irix6)
6741 	break;
6742       /* Fall through.  */
6743     case SHN_MIPS_SCOMMON:
6744       if (mips_elf_scom_section.name == NULL)
6745 	{
6746 	  /* Initialize the small common section.  */
6747 	  mips_elf_scom_section.name = ".scommon";
6748 	  mips_elf_scom_section.flags = SEC_IS_COMMON;
6749 	  mips_elf_scom_section.output_section = &mips_elf_scom_section;
6750 	  mips_elf_scom_section.symbol = &mips_elf_scom_symbol;
6751 	  mips_elf_scom_section.symbol_ptr_ptr = &mips_elf_scom_symbol_ptr;
6752 	  mips_elf_scom_symbol.name = ".scommon";
6753 	  mips_elf_scom_symbol.flags = BSF_SECTION_SYM;
6754 	  mips_elf_scom_symbol.section = &mips_elf_scom_section;
6755 	  mips_elf_scom_symbol_ptr = &mips_elf_scom_symbol;
6756 	}
6757       asym->section = &mips_elf_scom_section;
6758       asym->value = elfsym->internal_elf_sym.st_size;
6759       break;
6760 
6761     case SHN_MIPS_SUNDEFINED:
6762       asym->section = bfd_und_section_ptr;
6763       break;
6764 
6765     case SHN_MIPS_TEXT:
6766       {
6767 	asection *section = bfd_get_section_by_name (abfd, ".text");
6768 
6769 	if (section != NULL)
6770 	  {
6771 	    asym->section = section;
6772 	    /* MIPS_TEXT is a bit special, the address is not an offset
6773 	       to the base of the .text section.  So substract the section
6774 	       base address to make it an offset.  */
6775 	    asym->value -= section->vma;
6776 	  }
6777       }
6778       break;
6779 
6780     case SHN_MIPS_DATA:
6781       {
6782 	asection *section = bfd_get_section_by_name (abfd, ".data");
6783 
6784 	if (section != NULL)
6785 	  {
6786 	    asym->section = section;
6787 	    /* MIPS_DATA is a bit special, the address is not an offset
6788 	       to the base of the .data section.  So substract the section
6789 	       base address to make it an offset.  */
6790 	    asym->value -= section->vma;
6791 	  }
6792       }
6793       break;
6794     }
6795 
6796   /* If this is an odd-valued function symbol, assume it's a MIPS16
6797      or microMIPS one.  */
6798   if (ELF_ST_TYPE (elfsym->internal_elf_sym.st_info) == STT_FUNC
6799       && (asym->value & 1) != 0)
6800     {
6801       asym->value--;
6802       if (MICROMIPS_P (abfd))
6803 	elfsym->internal_elf_sym.st_other
6804 	  = ELF_ST_SET_MICROMIPS (elfsym->internal_elf_sym.st_other);
6805       else
6806 	elfsym->internal_elf_sym.st_other
6807 	  = ELF_ST_SET_MIPS16 (elfsym->internal_elf_sym.st_other);
6808     }
6809 }
6810 
6811 /* Implement elf_backend_eh_frame_address_size.  This differs from
6812    the default in the way it handles EABI64.
6813 
6814    EABI64 was originally specified as an LP64 ABI, and that is what
6815    -mabi=eabi normally gives on a 64-bit target.  However, gcc has
6816    historically accepted the combination of -mabi=eabi and -mlong32,
6817    and this ILP32 variation has become semi-official over time.
6818    Both forms use elf32 and have pointer-sized FDE addresses.
6819 
6820    If an EABI object was generated by GCC 4.0 or above, it will have
6821    an empty .gcc_compiled_longXX section, where XX is the size of longs
6822    in bits.  Unfortunately, ILP32 objects generated by earlier compilers
6823    have no special marking to distinguish them from LP64 objects.
6824 
6825    We don't want users of the official LP64 ABI to be punished for the
6826    existence of the ILP32 variant, but at the same time, we don't want
6827    to mistakenly interpret pre-4.0 ILP32 objects as being LP64 objects.
6828    We therefore take the following approach:
6829 
6830       - If ABFD contains a .gcc_compiled_longXX section, use it to
6831         determine the pointer size.
6832 
6833       - Otherwise check the type of the first relocation.  Assume that
6834         the LP64 ABI is being used if the relocation is of type R_MIPS_64.
6835 
6836       - Otherwise punt.
6837 
6838    The second check is enough to detect LP64 objects generated by pre-4.0
6839    compilers because, in the kind of output generated by those compilers,
6840    the first relocation will be associated with either a CIE personality
6841    routine or an FDE start address.  Furthermore, the compilers never
6842    used a special (non-pointer) encoding for this ABI.
6843 
6844    Checking the relocation type should also be safe because there is no
6845    reason to use R_MIPS_64 in an ILP32 object.  Pre-4.0 compilers never
6846    did so.  */
6847 
6848 unsigned int
6849 _bfd_mips_elf_eh_frame_address_size (bfd *abfd, asection *sec)
6850 {
6851   if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
6852     return 8;
6853   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
6854     {
6855       bfd_boolean long32_p, long64_p;
6856 
6857       long32_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long32") != 0;
6858       long64_p = bfd_get_section_by_name (abfd, ".gcc_compiled_long64") != 0;
6859       if (long32_p && long64_p)
6860 	return 0;
6861       if (long32_p)
6862 	return 4;
6863       if (long64_p)
6864 	return 8;
6865 
6866       if (sec->reloc_count > 0
6867 	  && elf_section_data (sec)->relocs != NULL
6868 	  && (ELF32_R_TYPE (elf_section_data (sec)->relocs[0].r_info)
6869 	      == R_MIPS_64))
6870 	return 8;
6871 
6872       return 0;
6873     }
6874   return 4;
6875 }
6876 
6877 /* There appears to be a bug in the MIPSpro linker that causes GOT_DISP
6878    relocations against two unnamed section symbols to resolve to the
6879    same address.  For example, if we have code like:
6880 
6881 	lw	$4,%got_disp(.data)($gp)
6882 	lw	$25,%got_disp(.text)($gp)
6883 	jalr	$25
6884 
6885    then the linker will resolve both relocations to .data and the program
6886    will jump there rather than to .text.
6887 
6888    We can work around this problem by giving names to local section symbols.
6889    This is also what the MIPSpro tools do.  */
6890 
6891 bfd_boolean
6892 _bfd_mips_elf_name_local_section_symbols (bfd *abfd)
6893 {
6894   return SGI_COMPAT (abfd);
6895 }
6896 
6897 /* Work over a section just before writing it out.  This routine is
6898    used by both the 32-bit and the 64-bit ABI.  FIXME: We recognize
6899    sections that need the SHF_MIPS_GPREL flag by name; there has to be
6900    a better way.  */
6901 
6902 bfd_boolean
6903 _bfd_mips_elf_section_processing (bfd *abfd, Elf_Internal_Shdr *hdr)
6904 {
6905   if (hdr->sh_type == SHT_MIPS_REGINFO
6906       && hdr->sh_size > 0)
6907     {
6908       bfd_byte buf[4];
6909 
6910       BFD_ASSERT (hdr->sh_size == sizeof (Elf32_External_RegInfo));
6911       BFD_ASSERT (hdr->contents == NULL);
6912 
6913       if (bfd_seek (abfd,
6914 		    hdr->sh_offset + sizeof (Elf32_External_RegInfo) - 4,
6915 		    SEEK_SET) != 0)
6916 	return FALSE;
6917       H_PUT_32 (abfd, elf_gp (abfd), buf);
6918       if (bfd_bwrite (buf, 4, abfd) != 4)
6919 	return FALSE;
6920     }
6921 
6922   if (hdr->sh_type == SHT_MIPS_OPTIONS
6923       && hdr->bfd_section != NULL
6924       && mips_elf_section_data (hdr->bfd_section) != NULL
6925       && mips_elf_section_data (hdr->bfd_section)->u.tdata != NULL)
6926     {
6927       bfd_byte *contents, *l, *lend;
6928 
6929       /* We stored the section contents in the tdata field in the
6930 	 set_section_contents routine.  We save the section contents
6931 	 so that we don't have to read them again.
6932 	 At this point we know that elf_gp is set, so we can look
6933 	 through the section contents to see if there is an
6934 	 ODK_REGINFO structure.  */
6935 
6936       contents = mips_elf_section_data (hdr->bfd_section)->u.tdata;
6937       l = contents;
6938       lend = contents + hdr->sh_size;
6939       while (l + sizeof (Elf_External_Options) <= lend)
6940 	{
6941 	  Elf_Internal_Options intopt;
6942 
6943 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
6944 					&intopt);
6945 	  if (intopt.size < sizeof (Elf_External_Options))
6946 	    {
6947 	      (*_bfd_error_handler)
6948 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
6949 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
6950 	      break;
6951 	    }
6952 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
6953 	    {
6954 	      bfd_byte buf[8];
6955 
6956 	      if (bfd_seek (abfd,
6957 			    (hdr->sh_offset
6958 			     + (l - contents)
6959 			     + sizeof (Elf_External_Options)
6960 			     + (sizeof (Elf64_External_RegInfo) - 8)),
6961 			     SEEK_SET) != 0)
6962 		return FALSE;
6963 	      H_PUT_64 (abfd, elf_gp (abfd), buf);
6964 	      if (bfd_bwrite (buf, 8, abfd) != 8)
6965 		return FALSE;
6966 	    }
6967 	  else if (intopt.kind == ODK_REGINFO)
6968 	    {
6969 	      bfd_byte buf[4];
6970 
6971 	      if (bfd_seek (abfd,
6972 			    (hdr->sh_offset
6973 			     + (l - contents)
6974 			     + sizeof (Elf_External_Options)
6975 			     + (sizeof (Elf32_External_RegInfo) - 4)),
6976 			    SEEK_SET) != 0)
6977 		return FALSE;
6978 	      H_PUT_32 (abfd, elf_gp (abfd), buf);
6979 	      if (bfd_bwrite (buf, 4, abfd) != 4)
6980 		return FALSE;
6981 	    }
6982 	  l += intopt.size;
6983 	}
6984     }
6985 
6986   if (hdr->bfd_section != NULL)
6987     {
6988       const char *name = bfd_get_section_name (abfd, hdr->bfd_section);
6989 
6990       /* .sbss is not handled specially here because the GNU/Linux
6991 	 prelinker can convert .sbss from NOBITS to PROGBITS and
6992 	 changing it back to NOBITS breaks the binary.  The entry in
6993 	 _bfd_mips_elf_special_sections will ensure the correct flags
6994 	 are set on .sbss if BFD creates it without reading it from an
6995 	 input file, and without special handling here the flags set
6996 	 on it in an input file will be followed.  */
6997       if (strcmp (name, ".sdata") == 0
6998 	  || strcmp (name, ".lit8") == 0
6999 	  || strcmp (name, ".lit4") == 0)
7000 	hdr->sh_flags |= SHF_ALLOC | SHF_WRITE | SHF_MIPS_GPREL;
7001       else if (strcmp (name, ".srdata") == 0)
7002 	hdr->sh_flags |= SHF_ALLOC | SHF_MIPS_GPREL;
7003       else if (strcmp (name, ".compact_rel") == 0)
7004 	hdr->sh_flags = 0;
7005       else if (strcmp (name, ".rtproc") == 0)
7006 	{
7007 	  if (hdr->sh_addralign != 0 && hdr->sh_entsize == 0)
7008 	    {
7009 	      unsigned int adjust;
7010 
7011 	      adjust = hdr->sh_size % hdr->sh_addralign;
7012 	      if (adjust != 0)
7013 		hdr->sh_size += hdr->sh_addralign - adjust;
7014 	    }
7015 	}
7016     }
7017 
7018   return TRUE;
7019 }
7020 
7021 /* Handle a MIPS specific section when reading an object file.  This
7022    is called when elfcode.h finds a section with an unknown type.
7023    This routine supports both the 32-bit and 64-bit ELF ABI.
7024 
7025    FIXME: We need to handle the SHF_MIPS_GPREL flag, but I'm not sure
7026    how to.  */
7027 
7028 bfd_boolean
7029 _bfd_mips_elf_section_from_shdr (bfd *abfd,
7030 				 Elf_Internal_Shdr *hdr,
7031 				 const char *name,
7032 				 int shindex)
7033 {
7034   flagword flags = 0;
7035 
7036   /* There ought to be a place to keep ELF backend specific flags, but
7037      at the moment there isn't one.  We just keep track of the
7038      sections by their name, instead.  Fortunately, the ABI gives
7039      suggested names for all the MIPS specific sections, so we will
7040      probably get away with this.  */
7041   switch (hdr->sh_type)
7042     {
7043     case SHT_MIPS_LIBLIST:
7044       if (strcmp (name, ".liblist") != 0)
7045 	return FALSE;
7046       break;
7047     case SHT_MIPS_MSYM:
7048       if (strcmp (name, ".msym") != 0)
7049 	return FALSE;
7050       break;
7051     case SHT_MIPS_CONFLICT:
7052       if (strcmp (name, ".conflict") != 0)
7053 	return FALSE;
7054       break;
7055     case SHT_MIPS_GPTAB:
7056       if (! CONST_STRNEQ (name, ".gptab."))
7057 	return FALSE;
7058       break;
7059     case SHT_MIPS_UCODE:
7060       if (strcmp (name, ".ucode") != 0)
7061 	return FALSE;
7062       break;
7063     case SHT_MIPS_DEBUG:
7064       if (strcmp (name, ".mdebug") != 0)
7065 	return FALSE;
7066       flags = SEC_DEBUGGING;
7067       break;
7068     case SHT_MIPS_REGINFO:
7069       if (strcmp (name, ".reginfo") != 0
7070 	  || hdr->sh_size != sizeof (Elf32_External_RegInfo))
7071 	return FALSE;
7072       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7073       break;
7074     case SHT_MIPS_IFACE:
7075       if (strcmp (name, ".MIPS.interfaces") != 0)
7076 	return FALSE;
7077       break;
7078     case SHT_MIPS_CONTENT:
7079       if (! CONST_STRNEQ (name, ".MIPS.content"))
7080 	return FALSE;
7081       break;
7082     case SHT_MIPS_OPTIONS:
7083       if (!MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7084 	return FALSE;
7085       break;
7086     case SHT_MIPS_ABIFLAGS:
7087       if (!MIPS_ELF_ABIFLAGS_SECTION_NAME_P (name))
7088 	return FALSE;
7089       flags = (SEC_LINK_ONCE | SEC_LINK_DUPLICATES_SAME_SIZE);
7090       break;
7091     case SHT_MIPS_DWARF:
7092       if (! CONST_STRNEQ (name, ".debug_")
7093           && ! CONST_STRNEQ (name, ".zdebug_"))
7094 	return FALSE;
7095       break;
7096     case SHT_MIPS_SYMBOL_LIB:
7097       if (strcmp (name, ".MIPS.symlib") != 0)
7098 	return FALSE;
7099       break;
7100     case SHT_MIPS_EVENTS:
7101       if (! CONST_STRNEQ (name, ".MIPS.events")
7102 	  && ! CONST_STRNEQ (name, ".MIPS.post_rel"))
7103 	return FALSE;
7104       break;
7105     default:
7106       break;
7107     }
7108 
7109   if (! _bfd_elf_make_section_from_shdr (abfd, hdr, name, shindex))
7110     return FALSE;
7111 
7112   if (flags)
7113     {
7114       if (! bfd_set_section_flags (abfd, hdr->bfd_section,
7115 				   (bfd_get_section_flags (abfd,
7116 							   hdr->bfd_section)
7117 				    | flags)))
7118 	return FALSE;
7119     }
7120 
7121   if (hdr->sh_type == SHT_MIPS_ABIFLAGS)
7122     {
7123       Elf_External_ABIFlags_v0 ext;
7124 
7125       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7126 				      &ext, 0, sizeof ext))
7127 	return FALSE;
7128       bfd_mips_elf_swap_abiflags_v0_in (abfd, &ext,
7129 					&mips_elf_tdata (abfd)->abiflags);
7130       if (mips_elf_tdata (abfd)->abiflags.version != 0)
7131 	return FALSE;
7132       mips_elf_tdata (abfd)->abiflags_valid = TRUE;
7133     }
7134 
7135   /* FIXME: We should record sh_info for a .gptab section.  */
7136 
7137   /* For a .reginfo section, set the gp value in the tdata information
7138      from the contents of this section.  We need the gp value while
7139      processing relocs, so we just get it now.  The .reginfo section
7140      is not used in the 64-bit MIPS ELF ABI.  */
7141   if (hdr->sh_type == SHT_MIPS_REGINFO)
7142     {
7143       Elf32_External_RegInfo ext;
7144       Elf32_RegInfo s;
7145 
7146       if (! bfd_get_section_contents (abfd, hdr->bfd_section,
7147 				      &ext, 0, sizeof ext))
7148 	return FALSE;
7149       bfd_mips_elf32_swap_reginfo_in (abfd, &ext, &s);
7150       elf_gp (abfd) = s.ri_gp_value;
7151     }
7152 
7153   /* For a SHT_MIPS_OPTIONS section, look for a ODK_REGINFO entry, and
7154      set the gp value based on what we find.  We may see both
7155      SHT_MIPS_REGINFO and SHT_MIPS_OPTIONS/ODK_REGINFO; in that case,
7156      they should agree.  */
7157   if (hdr->sh_type == SHT_MIPS_OPTIONS)
7158     {
7159       bfd_byte *contents, *l, *lend;
7160 
7161       contents = bfd_malloc (hdr->sh_size);
7162       if (contents == NULL)
7163 	return FALSE;
7164       if (! bfd_get_section_contents (abfd, hdr->bfd_section, contents,
7165 				      0, hdr->sh_size))
7166 	{
7167 	  free (contents);
7168 	  return FALSE;
7169 	}
7170       l = contents;
7171       lend = contents + hdr->sh_size;
7172       while (l + sizeof (Elf_External_Options) <= lend)
7173 	{
7174 	  Elf_Internal_Options intopt;
7175 
7176 	  bfd_mips_elf_swap_options_in (abfd, (Elf_External_Options *) l,
7177 					&intopt);
7178 	  if (intopt.size < sizeof (Elf_External_Options))
7179 	    {
7180 	      (*_bfd_error_handler)
7181 		(_("%B: Warning: bad `%s' option size %u smaller than its header"),
7182 		abfd, MIPS_ELF_OPTIONS_SECTION_NAME (abfd), intopt.size);
7183 	      break;
7184 	    }
7185 	  if (ABI_64_P (abfd) && intopt.kind == ODK_REGINFO)
7186 	    {
7187 	      Elf64_Internal_RegInfo intreg;
7188 
7189 	      bfd_mips_elf64_swap_reginfo_in
7190 		(abfd,
7191 		 ((Elf64_External_RegInfo *)
7192 		  (l + sizeof (Elf_External_Options))),
7193 		 &intreg);
7194 	      elf_gp (abfd) = intreg.ri_gp_value;
7195 	    }
7196 	  else if (intopt.kind == ODK_REGINFO)
7197 	    {
7198 	      Elf32_RegInfo intreg;
7199 
7200 	      bfd_mips_elf32_swap_reginfo_in
7201 		(abfd,
7202 		 ((Elf32_External_RegInfo *)
7203 		  (l + sizeof (Elf_External_Options))),
7204 		 &intreg);
7205 	      elf_gp (abfd) = intreg.ri_gp_value;
7206 	    }
7207 	  l += intopt.size;
7208 	}
7209       free (contents);
7210     }
7211 
7212   return TRUE;
7213 }
7214 
7215 /* Set the correct type for a MIPS ELF section.  We do this by the
7216    section name, which is a hack, but ought to work.  This routine is
7217    used by both the 32-bit and the 64-bit ABI.  */
7218 
7219 bfd_boolean
7220 _bfd_mips_elf_fake_sections (bfd *abfd, Elf_Internal_Shdr *hdr, asection *sec)
7221 {
7222   const char *name = bfd_get_section_name (abfd, sec);
7223 
7224   if (strcmp (name, ".liblist") == 0)
7225     {
7226       hdr->sh_type = SHT_MIPS_LIBLIST;
7227       hdr->sh_info = sec->size / sizeof (Elf32_Lib);
7228       /* The sh_link field is set in final_write_processing.  */
7229     }
7230   else if (strcmp (name, ".conflict") == 0)
7231     hdr->sh_type = SHT_MIPS_CONFLICT;
7232   else if (CONST_STRNEQ (name, ".gptab."))
7233     {
7234       hdr->sh_type = SHT_MIPS_GPTAB;
7235       hdr->sh_entsize = sizeof (Elf32_External_gptab);
7236       /* The sh_info field is set in final_write_processing.  */
7237     }
7238   else if (strcmp (name, ".ucode") == 0)
7239     hdr->sh_type = SHT_MIPS_UCODE;
7240   else if (strcmp (name, ".mdebug") == 0)
7241     {
7242       hdr->sh_type = SHT_MIPS_DEBUG;
7243       /* In a shared object on IRIX 5.3, the .mdebug section has an
7244          entsize of 0.  FIXME: Does this matter?  */
7245       if (SGI_COMPAT (abfd) && (abfd->flags & DYNAMIC) != 0)
7246 	hdr->sh_entsize = 0;
7247       else
7248 	hdr->sh_entsize = 1;
7249     }
7250   else if (strcmp (name, ".reginfo") == 0)
7251     {
7252       hdr->sh_type = SHT_MIPS_REGINFO;
7253       /* In a shared object on IRIX 5.3, the .reginfo section has an
7254          entsize of 0x18.  FIXME: Does this matter?  */
7255       if (SGI_COMPAT (abfd))
7256 	{
7257 	  if ((abfd->flags & DYNAMIC) != 0)
7258 	    hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7259 	  else
7260 	    hdr->sh_entsize = 1;
7261 	}
7262       else
7263 	hdr->sh_entsize = sizeof (Elf32_External_RegInfo);
7264     }
7265   else if (SGI_COMPAT (abfd)
7266 	   && (strcmp (name, ".hash") == 0
7267 	       || strcmp (name, ".dynamic") == 0
7268 	       || strcmp (name, ".dynstr") == 0))
7269     {
7270       if (SGI_COMPAT (abfd))
7271 	hdr->sh_entsize = 0;
7272 #if 0
7273       /* This isn't how the IRIX6 linker behaves.  */
7274       hdr->sh_info = SIZEOF_MIPS_DYNSYM_SECNAMES;
7275 #endif
7276     }
7277   else if (strcmp (name, ".got") == 0
7278 	   || strcmp (name, ".srdata") == 0
7279 	   || strcmp (name, ".sdata") == 0
7280 	   || strcmp (name, ".sbss") == 0
7281 	   || strcmp (name, ".lit4") == 0
7282 	   || strcmp (name, ".lit8") == 0)
7283     hdr->sh_flags |= SHF_MIPS_GPREL;
7284   else if (strcmp (name, ".MIPS.interfaces") == 0)
7285     {
7286       hdr->sh_type = SHT_MIPS_IFACE;
7287       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7288     }
7289   else if (CONST_STRNEQ (name, ".MIPS.content"))
7290     {
7291       hdr->sh_type = SHT_MIPS_CONTENT;
7292       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7293       /* The sh_info field is set in final_write_processing.  */
7294     }
7295   else if (MIPS_ELF_OPTIONS_SECTION_NAME_P (name))
7296     {
7297       hdr->sh_type = SHT_MIPS_OPTIONS;
7298       hdr->sh_entsize = 1;
7299       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7300     }
7301   else if (CONST_STRNEQ (name, ".MIPS.abiflags"))
7302     {
7303       hdr->sh_type = SHT_MIPS_ABIFLAGS;
7304       hdr->sh_entsize = sizeof (Elf_External_ABIFlags_v0);
7305     }
7306   else if (CONST_STRNEQ (name, ".debug_")
7307            || CONST_STRNEQ (name, ".zdebug_"))
7308     {
7309       hdr->sh_type = SHT_MIPS_DWARF;
7310 
7311       /* Irix facilities such as libexc expect a single .debug_frame
7312 	 per executable, the system ones have NOSTRIP set and the linker
7313 	 doesn't merge sections with different flags so ...  */
7314       if (SGI_COMPAT (abfd) && CONST_STRNEQ (name, ".debug_frame"))
7315 	hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7316     }
7317   else if (strcmp (name, ".MIPS.symlib") == 0)
7318     {
7319       hdr->sh_type = SHT_MIPS_SYMBOL_LIB;
7320       /* The sh_link and sh_info fields are set in
7321          final_write_processing.  */
7322     }
7323   else if (CONST_STRNEQ (name, ".MIPS.events")
7324 	   || CONST_STRNEQ (name, ".MIPS.post_rel"))
7325     {
7326       hdr->sh_type = SHT_MIPS_EVENTS;
7327       hdr->sh_flags |= SHF_MIPS_NOSTRIP;
7328       /* The sh_link field is set in final_write_processing.  */
7329     }
7330   else if (strcmp (name, ".msym") == 0)
7331     {
7332       hdr->sh_type = SHT_MIPS_MSYM;
7333       hdr->sh_flags |= SHF_ALLOC;
7334       hdr->sh_entsize = 8;
7335     }
7336 
7337   /* The generic elf_fake_sections will set up REL_HDR using the default
7338    kind of relocations.  We used to set up a second header for the
7339    non-default kind of relocations here, but only NewABI would use
7340    these, and the IRIX ld doesn't like resulting empty RELA sections.
7341    Thus we create those header only on demand now.  */
7342 
7343   return TRUE;
7344 }
7345 
7346 /* Given a BFD section, try to locate the corresponding ELF section
7347    index.  This is used by both the 32-bit and the 64-bit ABI.
7348    Actually, it's not clear to me that the 64-bit ABI supports these,
7349    but for non-PIC objects we will certainly want support for at least
7350    the .scommon section.  */
7351 
7352 bfd_boolean
7353 _bfd_mips_elf_section_from_bfd_section (bfd *abfd ATTRIBUTE_UNUSED,
7354 					asection *sec, int *retval)
7355 {
7356   if (strcmp (bfd_get_section_name (abfd, sec), ".scommon") == 0)
7357     {
7358       *retval = SHN_MIPS_SCOMMON;
7359       return TRUE;
7360     }
7361   if (strcmp (bfd_get_section_name (abfd, sec), ".acommon") == 0)
7362     {
7363       *retval = SHN_MIPS_ACOMMON;
7364       return TRUE;
7365     }
7366   return FALSE;
7367 }
7368 
7369 /* Hook called by the linker routine which adds symbols from an object
7370    file.  We must handle the special MIPS section numbers here.  */
7371 
7372 bfd_boolean
7373 _bfd_mips_elf_add_symbol_hook (bfd *abfd, struct bfd_link_info *info,
7374 			       Elf_Internal_Sym *sym, const char **namep,
7375 			       flagword *flagsp ATTRIBUTE_UNUSED,
7376 			       asection **secp, bfd_vma *valp)
7377 {
7378   if (SGI_COMPAT (abfd)
7379       && (abfd->flags & DYNAMIC) != 0
7380       && strcmp (*namep, "_rld_new_interface") == 0)
7381     {
7382       /* Skip IRIX5 rld entry name.  */
7383       *namep = NULL;
7384       return TRUE;
7385     }
7386 
7387   /* Shared objects may have a dynamic symbol '_gp_disp' defined as
7388      a SECTION *ABS*.  This causes ld to think it can resolve _gp_disp
7389      by setting a DT_NEEDED for the shared object.  Since _gp_disp is
7390      a magic symbol resolved by the linker, we ignore this bogus definition
7391      of _gp_disp.  New ABI objects do not suffer from this problem so this
7392      is not done for them. */
7393   if (!NEWABI_P(abfd)
7394       && (sym->st_shndx == SHN_ABS)
7395       && (strcmp (*namep, "_gp_disp") == 0))
7396     {
7397       *namep = NULL;
7398       return TRUE;
7399     }
7400 
7401   switch (sym->st_shndx)
7402     {
7403     case SHN_COMMON:
7404       /* Common symbols less than the GP size are automatically
7405 	 treated as SHN_MIPS_SCOMMON symbols.  */
7406       if (sym->st_size > elf_gp_size (abfd)
7407 	  || ELF_ST_TYPE (sym->st_info) == STT_TLS
7408 	  || IRIX_COMPAT (abfd) == ict_irix6)
7409 	break;
7410       /* Fall through.  */
7411     case SHN_MIPS_SCOMMON:
7412       *secp = bfd_make_section_old_way (abfd, ".scommon");
7413       (*secp)->flags |= SEC_IS_COMMON;
7414       *valp = sym->st_size;
7415       break;
7416 
7417     case SHN_MIPS_TEXT:
7418       /* This section is used in a shared object.  */
7419       if (mips_elf_tdata (abfd)->elf_text_section == NULL)
7420 	{
7421 	  asymbol *elf_text_symbol;
7422 	  asection *elf_text_section;
7423 	  bfd_size_type amt = sizeof (asection);
7424 
7425 	  elf_text_section = bfd_zalloc (abfd, amt);
7426 	  if (elf_text_section == NULL)
7427 	    return FALSE;
7428 
7429 	  amt = sizeof (asymbol);
7430 	  elf_text_symbol = bfd_zalloc (abfd, amt);
7431 	  if (elf_text_symbol == NULL)
7432 	    return FALSE;
7433 
7434 	  /* Initialize the section.  */
7435 
7436 	  mips_elf_tdata (abfd)->elf_text_section = elf_text_section;
7437 	  mips_elf_tdata (abfd)->elf_text_symbol = elf_text_symbol;
7438 
7439 	  elf_text_section->symbol = elf_text_symbol;
7440 	  elf_text_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_text_symbol;
7441 
7442 	  elf_text_section->name = ".text";
7443 	  elf_text_section->flags = SEC_NO_FLAGS;
7444 	  elf_text_section->output_section = NULL;
7445 	  elf_text_section->owner = abfd;
7446 	  elf_text_symbol->name = ".text";
7447 	  elf_text_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7448 	  elf_text_symbol->section = elf_text_section;
7449 	}
7450       /* This code used to do *secp = bfd_und_section_ptr if
7451          info->shared.  I don't know why, and that doesn't make sense,
7452          so I took it out.  */
7453       *secp = mips_elf_tdata (abfd)->elf_text_section;
7454       break;
7455 
7456     case SHN_MIPS_ACOMMON:
7457       /* Fall through. XXX Can we treat this as allocated data?  */
7458     case SHN_MIPS_DATA:
7459       /* This section is used in a shared object.  */
7460       if (mips_elf_tdata (abfd)->elf_data_section == NULL)
7461 	{
7462 	  asymbol *elf_data_symbol;
7463 	  asection *elf_data_section;
7464 	  bfd_size_type amt = sizeof (asection);
7465 
7466 	  elf_data_section = bfd_zalloc (abfd, amt);
7467 	  if (elf_data_section == NULL)
7468 	    return FALSE;
7469 
7470 	  amt = sizeof (asymbol);
7471 	  elf_data_symbol = bfd_zalloc (abfd, amt);
7472 	  if (elf_data_symbol == NULL)
7473 	    return FALSE;
7474 
7475 	  /* Initialize the section.  */
7476 
7477 	  mips_elf_tdata (abfd)->elf_data_section = elf_data_section;
7478 	  mips_elf_tdata (abfd)->elf_data_symbol = elf_data_symbol;
7479 
7480 	  elf_data_section->symbol = elf_data_symbol;
7481 	  elf_data_section->symbol_ptr_ptr = &mips_elf_tdata (abfd)->elf_data_symbol;
7482 
7483 	  elf_data_section->name = ".data";
7484 	  elf_data_section->flags = SEC_NO_FLAGS;
7485 	  elf_data_section->output_section = NULL;
7486 	  elf_data_section->owner = abfd;
7487 	  elf_data_symbol->name = ".data";
7488 	  elf_data_symbol->flags = BSF_SECTION_SYM | BSF_DYNAMIC;
7489 	  elf_data_symbol->section = elf_data_section;
7490 	}
7491       /* This code used to do *secp = bfd_und_section_ptr if
7492          info->shared.  I don't know why, and that doesn't make sense,
7493          so I took it out.  */
7494       *secp = mips_elf_tdata (abfd)->elf_data_section;
7495       break;
7496 
7497     case SHN_MIPS_SUNDEFINED:
7498       *secp = bfd_und_section_ptr;
7499       break;
7500     }
7501 
7502   if (SGI_COMPAT (abfd)
7503       && ! info->shared
7504       && info->output_bfd->xvec == abfd->xvec
7505       && strcmp (*namep, "__rld_obj_head") == 0)
7506     {
7507       struct elf_link_hash_entry *h;
7508       struct bfd_link_hash_entry *bh;
7509 
7510       /* Mark __rld_obj_head as dynamic.  */
7511       bh = NULL;
7512       if (! (_bfd_generic_link_add_one_symbol
7513 	     (info, abfd, *namep, BSF_GLOBAL, *secp, *valp, NULL, FALSE,
7514 	      get_elf_backend_data (abfd)->collect, &bh)))
7515 	return FALSE;
7516 
7517       h = (struct elf_link_hash_entry *) bh;
7518       h->non_elf = 0;
7519       h->def_regular = 1;
7520       h->type = STT_OBJECT;
7521 
7522       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7523 	return FALSE;
7524 
7525       mips_elf_hash_table (info)->use_rld_obj_head = TRUE;
7526       mips_elf_hash_table (info)->rld_symbol = h;
7527     }
7528 
7529   /* If this is a mips16 text symbol, add 1 to the value to make it
7530      odd.  This will cause something like .word SYM to come up with
7531      the right value when it is loaded into the PC.  */
7532   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7533     ++*valp;
7534 
7535   return TRUE;
7536 }
7537 
7538 /* This hook function is called before the linker writes out a global
7539    symbol.  We mark symbols as small common if appropriate.  This is
7540    also where we undo the increment of the value for a mips16 symbol.  */
7541 
7542 int
7543 _bfd_mips_elf_link_output_symbol_hook
7544   (struct bfd_link_info *info ATTRIBUTE_UNUSED,
7545    const char *name ATTRIBUTE_UNUSED, Elf_Internal_Sym *sym,
7546    asection *input_sec, struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
7547 {
7548   /* If we see a common symbol, which implies a relocatable link, then
7549      if a symbol was small common in an input file, mark it as small
7550      common in the output file.  */
7551   if (sym->st_shndx == SHN_COMMON
7552       && strcmp (input_sec->name, ".scommon") == 0)
7553     sym->st_shndx = SHN_MIPS_SCOMMON;
7554 
7555   if (ELF_ST_IS_COMPRESSED (sym->st_other))
7556     sym->st_value &= ~1;
7557 
7558   return 1;
7559 }
7560 
7561 /* Functions for the dynamic linker.  */
7562 
7563 /* Create dynamic sections when linking against a dynamic object.  */
7564 
7565 bfd_boolean
7566 _bfd_mips_elf_create_dynamic_sections (bfd *abfd, struct bfd_link_info *info)
7567 {
7568   struct elf_link_hash_entry *h;
7569   struct bfd_link_hash_entry *bh;
7570   flagword flags;
7571   register asection *s;
7572   const char * const *namep;
7573   struct mips_elf_link_hash_table *htab;
7574 
7575   htab = mips_elf_hash_table (info);
7576   BFD_ASSERT (htab != NULL);
7577 
7578   flags = (SEC_ALLOC | SEC_LOAD | SEC_HAS_CONTENTS | SEC_IN_MEMORY
7579 	   | SEC_LINKER_CREATED | SEC_READONLY);
7580 
7581   /* The psABI requires a read-only .dynamic section, but the VxWorks
7582      EABI doesn't.  */
7583   if (!htab->is_vxworks)
7584     {
7585       s = bfd_get_linker_section (abfd, ".dynamic");
7586       if (s != NULL)
7587 	{
7588 	  if (! bfd_set_section_flags (abfd, s, flags))
7589 	    return FALSE;
7590 	}
7591     }
7592 
7593   /* We need to create .got section.  */
7594   if (!mips_elf_create_got_section (abfd, info))
7595     return FALSE;
7596 
7597   if (! mips_elf_rel_dyn_section (info, TRUE))
7598     return FALSE;
7599 
7600   /* Create .stub section.  */
7601   s = bfd_make_section_anyway_with_flags (abfd,
7602 					  MIPS_ELF_STUB_SECTION_NAME (abfd),
7603 					  flags | SEC_CODE);
7604   if (s == NULL
7605       || ! bfd_set_section_alignment (abfd, s,
7606 				      MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7607     return FALSE;
7608   htab->sstubs = s;
7609 
7610   if (!mips_elf_hash_table (info)->use_rld_obj_head
7611       && !info->shared
7612       && bfd_get_linker_section (abfd, ".rld_map") == NULL)
7613     {
7614       s = bfd_make_section_anyway_with_flags (abfd, ".rld_map",
7615 					      flags &~ (flagword) SEC_READONLY);
7616       if (s == NULL
7617 	  || ! bfd_set_section_alignment (abfd, s,
7618 					  MIPS_ELF_LOG_FILE_ALIGN (abfd)))
7619 	return FALSE;
7620     }
7621 
7622   /* On IRIX5, we adjust add some additional symbols and change the
7623      alignments of several sections.  There is no ABI documentation
7624      indicating that this is necessary on IRIX6, nor any evidence that
7625      the linker takes such action.  */
7626   if (IRIX_COMPAT (abfd) == ict_irix5)
7627     {
7628       for (namep = mips_elf_dynsym_rtproc_names; *namep != NULL; namep++)
7629 	{
7630 	  bh = NULL;
7631 	  if (! (_bfd_generic_link_add_one_symbol
7632 		 (info, abfd, *namep, BSF_GLOBAL, bfd_und_section_ptr, 0,
7633 		  NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7634 	    return FALSE;
7635 
7636 	  h = (struct elf_link_hash_entry *) bh;
7637 	  h->non_elf = 0;
7638 	  h->def_regular = 1;
7639 	  h->type = STT_SECTION;
7640 
7641 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7642 	    return FALSE;
7643 	}
7644 
7645       /* We need to create a .compact_rel section.  */
7646       if (SGI_COMPAT (abfd))
7647 	{
7648 	  if (!mips_elf_create_compact_rel_section (abfd, info))
7649 	    return FALSE;
7650 	}
7651 
7652       /* Change alignments of some sections.  */
7653       s = bfd_get_linker_section (abfd, ".hash");
7654       if (s != NULL)
7655 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7656 
7657       s = bfd_get_linker_section (abfd, ".dynsym");
7658       if (s != NULL)
7659 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7660 
7661       s = bfd_get_linker_section (abfd, ".dynstr");
7662       if (s != NULL)
7663 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7664 
7665       /* ??? */
7666       s = bfd_get_section_by_name (abfd, ".reginfo");
7667       if (s != NULL)
7668 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7669 
7670       s = bfd_get_linker_section (abfd, ".dynamic");
7671       if (s != NULL)
7672 	(void) bfd_set_section_alignment (abfd, s, MIPS_ELF_LOG_FILE_ALIGN (abfd));
7673     }
7674 
7675   if (!info->shared)
7676     {
7677       const char *name;
7678 
7679       name = SGI_COMPAT (abfd) ? "_DYNAMIC_LINK" : "_DYNAMIC_LINKING";
7680       bh = NULL;
7681       if (!(_bfd_generic_link_add_one_symbol
7682 	    (info, abfd, name, BSF_GLOBAL, bfd_abs_section_ptr, 0,
7683 	     NULL, FALSE, get_elf_backend_data (abfd)->collect, &bh)))
7684 	return FALSE;
7685 
7686       h = (struct elf_link_hash_entry *) bh;
7687       h->non_elf = 0;
7688       h->def_regular = 1;
7689       h->type = STT_SECTION;
7690 
7691       if (! bfd_elf_link_record_dynamic_symbol (info, h))
7692 	return FALSE;
7693 
7694       if (! mips_elf_hash_table (info)->use_rld_obj_head)
7695 	{
7696 	  /* __rld_map is a four byte word located in the .data section
7697 	     and is filled in by the rtld to contain a pointer to
7698 	     the _r_debug structure. Its symbol value will be set in
7699 	     _bfd_mips_elf_finish_dynamic_symbol.  */
7700 	  s = bfd_get_linker_section (abfd, ".rld_map");
7701 	  BFD_ASSERT (s != NULL);
7702 
7703 	  name = SGI_COMPAT (abfd) ? "__rld_map" : "__RLD_MAP";
7704 	  bh = NULL;
7705 	  if (!(_bfd_generic_link_add_one_symbol
7706 		(info, abfd, name, BSF_GLOBAL, s, 0, NULL, FALSE,
7707 		 get_elf_backend_data (abfd)->collect, &bh)))
7708 	    return FALSE;
7709 
7710 	  h = (struct elf_link_hash_entry *) bh;
7711 	  h->non_elf = 0;
7712 	  h->def_regular = 1;
7713 	  h->type = STT_OBJECT;
7714 
7715 	  if (! bfd_elf_link_record_dynamic_symbol (info, h))
7716 	    return FALSE;
7717 	  mips_elf_hash_table (info)->rld_symbol = h;
7718 	}
7719     }
7720 
7721   /* Create the .plt, .rel(a).plt, .dynbss and .rel(a).bss sections.
7722      Also, on VxWorks, create the _PROCEDURE_LINKAGE_TABLE_ symbol.  */
7723   if (!_bfd_elf_create_dynamic_sections (abfd, info))
7724     return FALSE;
7725 
7726   /* Cache the sections created above.  */
7727   htab->splt = bfd_get_linker_section (abfd, ".plt");
7728   htab->sdynbss = bfd_get_linker_section (abfd, ".dynbss");
7729   if (htab->is_vxworks)
7730     {
7731       htab->srelbss = bfd_get_linker_section (abfd, ".rela.bss");
7732       htab->srelplt = bfd_get_linker_section (abfd, ".rela.plt");
7733     }
7734   else
7735     htab->srelplt = bfd_get_linker_section (abfd, ".rel.plt");
7736   if (!htab->sdynbss
7737       || (htab->is_vxworks && !htab->srelbss && !info->shared)
7738       || !htab->srelplt
7739       || !htab->splt)
7740     abort ();
7741 
7742   /* Do the usual VxWorks handling.  */
7743   if (htab->is_vxworks
7744       && !elf_vxworks_create_dynamic_sections (abfd, info, &htab->srelplt2))
7745     return FALSE;
7746 
7747   return TRUE;
7748 }
7749 
7750 /* Return true if relocation REL against section SEC is a REL rather than
7751    RELA relocation.  RELOCS is the first relocation in the section and
7752    ABFD is the bfd that contains SEC.  */
7753 
7754 static bfd_boolean
7755 mips_elf_rel_relocation_p (bfd *abfd, asection *sec,
7756 			   const Elf_Internal_Rela *relocs,
7757 			   const Elf_Internal_Rela *rel)
7758 {
7759   Elf_Internal_Shdr *rel_hdr;
7760   const struct elf_backend_data *bed;
7761 
7762   /* To determine which flavor of relocation this is, we depend on the
7763      fact that the INPUT_SECTION's REL_HDR is read before RELA_HDR.  */
7764   rel_hdr = elf_section_data (sec)->rel.hdr;
7765   if (rel_hdr == NULL)
7766     return FALSE;
7767   bed = get_elf_backend_data (abfd);
7768   return ((size_t) (rel - relocs)
7769 	  < NUM_SHDR_ENTRIES (rel_hdr) * bed->s->int_rels_per_ext_rel);
7770 }
7771 
7772 /* Read the addend for REL relocation REL, which belongs to bfd ABFD.
7773    HOWTO is the relocation's howto and CONTENTS points to the contents
7774    of the section that REL is against.  */
7775 
7776 static bfd_vma
7777 mips_elf_read_rel_addend (bfd *abfd, const Elf_Internal_Rela *rel,
7778 			  reloc_howto_type *howto, bfd_byte *contents)
7779 {
7780   bfd_byte *location;
7781   unsigned int r_type;
7782   bfd_vma addend;
7783 
7784   r_type = ELF_R_TYPE (abfd, rel->r_info);
7785   location = contents + rel->r_offset;
7786 
7787   /* Get the addend, which is stored in the input file.  */
7788   _bfd_mips_elf_reloc_unshuffle (abfd, r_type, FALSE, location);
7789   addend = mips_elf_obtain_contents (howto, rel, abfd, contents);
7790   _bfd_mips_elf_reloc_shuffle (abfd, r_type, FALSE, location);
7791 
7792   return addend & howto->src_mask;
7793 }
7794 
7795 /* REL is a relocation in ABFD that needs a partnering LO16 relocation
7796    and *ADDEND is the addend for REL itself.  Look for the LO16 relocation
7797    and update *ADDEND with the final addend.  Return true on success
7798    or false if the LO16 could not be found.  RELEND is the exclusive
7799    upper bound on the relocations for REL's section.  */
7800 
7801 static bfd_boolean
7802 mips_elf_add_lo16_rel_addend (bfd *abfd,
7803 			      const Elf_Internal_Rela *rel,
7804 			      const Elf_Internal_Rela *relend,
7805 			      bfd_byte *contents, bfd_vma *addend)
7806 {
7807   unsigned int r_type, lo16_type;
7808   const Elf_Internal_Rela *lo16_relocation;
7809   reloc_howto_type *lo16_howto;
7810   bfd_vma l;
7811 
7812   r_type = ELF_R_TYPE (abfd, rel->r_info);
7813   if (mips16_reloc_p (r_type))
7814     lo16_type = R_MIPS16_LO16;
7815   else if (micromips_reloc_p (r_type))
7816     lo16_type = R_MICROMIPS_LO16;
7817   else if (r_type == R_MIPS_PCHI16)
7818     lo16_type = R_MIPS_PCLO16;
7819   else
7820     lo16_type = R_MIPS_LO16;
7821 
7822   /* The combined value is the sum of the HI16 addend, left-shifted by
7823      sixteen bits, and the LO16 addend, sign extended.  (Usually, the
7824      code does a `lui' of the HI16 value, and then an `addiu' of the
7825      LO16 value.)
7826 
7827      Scan ahead to find a matching LO16 relocation.
7828 
7829      According to the MIPS ELF ABI, the R_MIPS_LO16 relocation must
7830      be immediately following.  However, for the IRIX6 ABI, the next
7831      relocation may be a composed relocation consisting of several
7832      relocations for the same address.  In that case, the R_MIPS_LO16
7833      relocation may occur as one of these.  We permit a similar
7834      extension in general, as that is useful for GCC.
7835 
7836      In some cases GCC dead code elimination removes the LO16 but keeps
7837      the corresponding HI16.  This is strictly speaking a violation of
7838      the ABI but not immediately harmful.  */
7839   lo16_relocation = mips_elf_next_relocation (abfd, lo16_type, rel, relend);
7840   if (lo16_relocation == NULL)
7841     return FALSE;
7842 
7843   /* Obtain the addend kept there.  */
7844   lo16_howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, lo16_type, FALSE);
7845   l = mips_elf_read_rel_addend (abfd, lo16_relocation, lo16_howto, contents);
7846 
7847   l <<= lo16_howto->rightshift;
7848   l = _bfd_mips_elf_sign_extend (l, 16);
7849 
7850   *addend <<= 16;
7851   *addend += l;
7852   return TRUE;
7853 }
7854 
7855 /* Try to read the contents of section SEC in bfd ABFD.  Return true and
7856    store the contents in *CONTENTS on success.  Assume that *CONTENTS
7857    already holds the contents if it is nonull on entry.  */
7858 
7859 static bfd_boolean
7860 mips_elf_get_section_contents (bfd *abfd, asection *sec, bfd_byte **contents)
7861 {
7862   if (*contents)
7863     return TRUE;
7864 
7865   /* Get cached copy if it exists.  */
7866   if (elf_section_data (sec)->this_hdr.contents != NULL)
7867     {
7868       *contents = elf_section_data (sec)->this_hdr.contents;
7869       return TRUE;
7870     }
7871 
7872   return bfd_malloc_and_get_section (abfd, sec, contents);
7873 }
7874 
7875 /* Make a new PLT record to keep internal data.  */
7876 
7877 static struct plt_entry *
7878 mips_elf_make_plt_record (bfd *abfd)
7879 {
7880   struct plt_entry *entry;
7881 
7882   entry = bfd_zalloc (abfd, sizeof (*entry));
7883   if (entry == NULL)
7884     return NULL;
7885 
7886   entry->stub_offset = MINUS_ONE;
7887   entry->mips_offset = MINUS_ONE;
7888   entry->comp_offset = MINUS_ONE;
7889   entry->gotplt_index = MINUS_ONE;
7890   return entry;
7891 }
7892 
7893 /* Look through the relocs for a section during the first phase, and
7894    allocate space in the global offset table and record the need for
7895    standard MIPS and compressed procedure linkage table entries.  */
7896 
7897 bfd_boolean
7898 _bfd_mips_elf_check_relocs (bfd *abfd, struct bfd_link_info *info,
7899 			    asection *sec, const Elf_Internal_Rela *relocs)
7900 {
7901   const char *name;
7902   bfd *dynobj;
7903   Elf_Internal_Shdr *symtab_hdr;
7904   struct elf_link_hash_entry **sym_hashes;
7905   size_t extsymoff;
7906   const Elf_Internal_Rela *rel;
7907   const Elf_Internal_Rela *rel_end;
7908   asection *sreloc;
7909   const struct elf_backend_data *bed;
7910   struct mips_elf_link_hash_table *htab;
7911   bfd_byte *contents;
7912   bfd_vma addend;
7913   reloc_howto_type *howto;
7914 
7915   if (info->relocatable)
7916     return TRUE;
7917 
7918   htab = mips_elf_hash_table (info);
7919   BFD_ASSERT (htab != NULL);
7920 
7921   dynobj = elf_hash_table (info)->dynobj;
7922   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
7923   sym_hashes = elf_sym_hashes (abfd);
7924   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
7925 
7926   bed = get_elf_backend_data (abfd);
7927   rel_end = relocs + sec->reloc_count * bed->s->int_rels_per_ext_rel;
7928 
7929   /* Check for the mips16 stub sections.  */
7930 
7931   name = bfd_get_section_name (abfd, sec);
7932   if (FN_STUB_P (name))
7933     {
7934       unsigned long r_symndx;
7935 
7936       /* Look at the relocation information to figure out which symbol
7937          this is for.  */
7938 
7939       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
7940       if (r_symndx == 0)
7941 	{
7942 	  (*_bfd_error_handler)
7943 	    (_("%B: Warning: cannot determine the target function for"
7944 	       " stub section `%s'"),
7945 	     abfd, name);
7946 	  bfd_set_error (bfd_error_bad_value);
7947 	  return FALSE;
7948 	}
7949 
7950       if (r_symndx < extsymoff
7951 	  || sym_hashes[r_symndx - extsymoff] == NULL)
7952 	{
7953 	  asection *o;
7954 
7955 	  /* This stub is for a local symbol.  This stub will only be
7956              needed if there is some relocation in this BFD, other
7957              than a 16 bit function call, which refers to this symbol.  */
7958 	  for (o = abfd->sections; o != NULL; o = o->next)
7959 	    {
7960 	      Elf_Internal_Rela *sec_relocs;
7961 	      const Elf_Internal_Rela *r, *rend;
7962 
7963 	      /* We can ignore stub sections when looking for relocs.  */
7964 	      if ((o->flags & SEC_RELOC) == 0
7965 		  || o->reloc_count == 0
7966 		  || section_allows_mips16_refs_p (o))
7967 		continue;
7968 
7969 	      sec_relocs
7970 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
7971 					     info->keep_memory);
7972 	      if (sec_relocs == NULL)
7973 		return FALSE;
7974 
7975 	      rend = sec_relocs + o->reloc_count;
7976 	      for (r = sec_relocs; r < rend; r++)
7977 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
7978 		    && !mips16_call_reloc_p (ELF_R_TYPE (abfd, r->r_info)))
7979 		  break;
7980 
7981 	      if (elf_section_data (o)->relocs != sec_relocs)
7982 		free (sec_relocs);
7983 
7984 	      if (r < rend)
7985 		break;
7986 	    }
7987 
7988 	  if (o == NULL)
7989 	    {
7990 	      /* There is no non-call reloc for this stub, so we do
7991                  not need it.  Since this function is called before
7992                  the linker maps input sections to output sections, we
7993                  can easily discard it by setting the SEC_EXCLUDE
7994                  flag.  */
7995 	      sec->flags |= SEC_EXCLUDE;
7996 	      return TRUE;
7997 	    }
7998 
7999 	  /* Record this stub in an array of local symbol stubs for
8000              this BFD.  */
8001 	  if (mips_elf_tdata (abfd)->local_stubs == NULL)
8002 	    {
8003 	      unsigned long symcount;
8004 	      asection **n;
8005 	      bfd_size_type amt;
8006 
8007 	      if (elf_bad_symtab (abfd))
8008 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8009 	      else
8010 		symcount = symtab_hdr->sh_info;
8011 	      amt = symcount * sizeof (asection *);
8012 	      n = bfd_zalloc (abfd, amt);
8013 	      if (n == NULL)
8014 		return FALSE;
8015 	      mips_elf_tdata (abfd)->local_stubs = n;
8016 	    }
8017 
8018 	  sec->flags |= SEC_KEEP;
8019 	  mips_elf_tdata (abfd)->local_stubs[r_symndx] = sec;
8020 
8021 	  /* We don't need to set mips16_stubs_seen in this case.
8022              That flag is used to see whether we need to look through
8023              the global symbol table for stubs.  We don't need to set
8024              it here, because we just have a local stub.  */
8025 	}
8026       else
8027 	{
8028 	  struct mips_elf_link_hash_entry *h;
8029 
8030 	  h = ((struct mips_elf_link_hash_entry *)
8031 	       sym_hashes[r_symndx - extsymoff]);
8032 
8033 	  while (h->root.root.type == bfd_link_hash_indirect
8034 		 || h->root.root.type == bfd_link_hash_warning)
8035 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8036 
8037 	  /* H is the symbol this stub is for.  */
8038 
8039 	  /* If we already have an appropriate stub for this function, we
8040 	     don't need another one, so we can discard this one.  Since
8041 	     this function is called before the linker maps input sections
8042 	     to output sections, we can easily discard it by setting the
8043 	     SEC_EXCLUDE flag.  */
8044 	  if (h->fn_stub != NULL)
8045 	    {
8046 	      sec->flags |= SEC_EXCLUDE;
8047 	      return TRUE;
8048 	    }
8049 
8050 	  sec->flags |= SEC_KEEP;
8051 	  h->fn_stub = sec;
8052 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8053 	}
8054     }
8055   else if (CALL_STUB_P (name) || CALL_FP_STUB_P (name))
8056     {
8057       unsigned long r_symndx;
8058       struct mips_elf_link_hash_entry *h;
8059       asection **loc;
8060 
8061       /* Look at the relocation information to figure out which symbol
8062          this is for.  */
8063 
8064       r_symndx = mips16_stub_symndx (bed, sec, relocs, rel_end);
8065       if (r_symndx == 0)
8066 	{
8067 	  (*_bfd_error_handler)
8068 	    (_("%B: Warning: cannot determine the target function for"
8069 	       " stub section `%s'"),
8070 	     abfd, name);
8071 	  bfd_set_error (bfd_error_bad_value);
8072 	  return FALSE;
8073 	}
8074 
8075       if (r_symndx < extsymoff
8076 	  || sym_hashes[r_symndx - extsymoff] == NULL)
8077 	{
8078 	  asection *o;
8079 
8080 	  /* This stub is for a local symbol.  This stub will only be
8081              needed if there is some relocation (R_MIPS16_26) in this BFD
8082              that refers to this symbol.  */
8083 	  for (o = abfd->sections; o != NULL; o = o->next)
8084 	    {
8085 	      Elf_Internal_Rela *sec_relocs;
8086 	      const Elf_Internal_Rela *r, *rend;
8087 
8088 	      /* We can ignore stub sections when looking for relocs.  */
8089 	      if ((o->flags & SEC_RELOC) == 0
8090 		  || o->reloc_count == 0
8091 		  || section_allows_mips16_refs_p (o))
8092 		continue;
8093 
8094 	      sec_relocs
8095 		= _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
8096 					     info->keep_memory);
8097 	      if (sec_relocs == NULL)
8098 		return FALSE;
8099 
8100 	      rend = sec_relocs + o->reloc_count;
8101 	      for (r = sec_relocs; r < rend; r++)
8102 		if (ELF_R_SYM (abfd, r->r_info) == r_symndx
8103 		    && ELF_R_TYPE (abfd, r->r_info) == R_MIPS16_26)
8104 		    break;
8105 
8106 	      if (elf_section_data (o)->relocs != sec_relocs)
8107 		free (sec_relocs);
8108 
8109 	      if (r < rend)
8110 		break;
8111 	    }
8112 
8113 	  if (o == NULL)
8114 	    {
8115 	      /* There is no non-call reloc for this stub, so we do
8116                  not need it.  Since this function is called before
8117                  the linker maps input sections to output sections, we
8118                  can easily discard it by setting the SEC_EXCLUDE
8119                  flag.  */
8120 	      sec->flags |= SEC_EXCLUDE;
8121 	      return TRUE;
8122 	    }
8123 
8124 	  /* Record this stub in an array of local symbol call_stubs for
8125              this BFD.  */
8126 	  if (mips_elf_tdata (abfd)->local_call_stubs == NULL)
8127 	    {
8128 	      unsigned long symcount;
8129 	      asection **n;
8130 	      bfd_size_type amt;
8131 
8132 	      if (elf_bad_symtab (abfd))
8133 		symcount = NUM_SHDR_ENTRIES (symtab_hdr);
8134 	      else
8135 		symcount = symtab_hdr->sh_info;
8136 	      amt = symcount * sizeof (asection *);
8137 	      n = bfd_zalloc (abfd, amt);
8138 	      if (n == NULL)
8139 		return FALSE;
8140 	      mips_elf_tdata (abfd)->local_call_stubs = n;
8141 	    }
8142 
8143 	  sec->flags |= SEC_KEEP;
8144 	  mips_elf_tdata (abfd)->local_call_stubs[r_symndx] = sec;
8145 
8146 	  /* We don't need to set mips16_stubs_seen in this case.
8147              That flag is used to see whether we need to look through
8148              the global symbol table for stubs.  We don't need to set
8149              it here, because we just have a local stub.  */
8150 	}
8151       else
8152 	{
8153 	  h = ((struct mips_elf_link_hash_entry *)
8154 	       sym_hashes[r_symndx - extsymoff]);
8155 
8156 	  /* H is the symbol this stub is for.  */
8157 
8158 	  if (CALL_FP_STUB_P (name))
8159 	    loc = &h->call_fp_stub;
8160 	  else
8161 	    loc = &h->call_stub;
8162 
8163 	  /* If we already have an appropriate stub for this function, we
8164 	     don't need another one, so we can discard this one.  Since
8165 	     this function is called before the linker maps input sections
8166 	     to output sections, we can easily discard it by setting the
8167 	     SEC_EXCLUDE flag.  */
8168 	  if (*loc != NULL)
8169 	    {
8170 	      sec->flags |= SEC_EXCLUDE;
8171 	      return TRUE;
8172 	    }
8173 
8174 	  sec->flags |= SEC_KEEP;
8175 	  *loc = sec;
8176 	  mips_elf_hash_table (info)->mips16_stubs_seen = TRUE;
8177 	}
8178     }
8179 
8180   sreloc = NULL;
8181   contents = NULL;
8182   for (rel = relocs; rel < rel_end; ++rel)
8183     {
8184       unsigned long r_symndx;
8185       unsigned int r_type;
8186       struct elf_link_hash_entry *h;
8187       bfd_boolean can_make_dynamic_p;
8188       bfd_boolean call_reloc_p;
8189       bfd_boolean constrain_symbol_p;
8190 
8191       r_symndx = ELF_R_SYM (abfd, rel->r_info);
8192       r_type = ELF_R_TYPE (abfd, rel->r_info);
8193 
8194       if (r_symndx < extsymoff)
8195 	h = NULL;
8196       else if (r_symndx >= extsymoff + NUM_SHDR_ENTRIES (symtab_hdr))
8197 	{
8198 	  (*_bfd_error_handler)
8199 	    (_("%B: Malformed reloc detected for section %s"),
8200 	     abfd, name);
8201 	  bfd_set_error (bfd_error_bad_value);
8202 	  return FALSE;
8203 	}
8204       else
8205 	{
8206 	  h = sym_hashes[r_symndx - extsymoff];
8207 	  if (h != NULL)
8208 	    {
8209 	      while (h->root.type == bfd_link_hash_indirect
8210 		     || h->root.type == bfd_link_hash_warning)
8211 		h = (struct elf_link_hash_entry *) h->root.u.i.link;
8212 
8213 	      /* PR15323, ref flags aren't set for references in the
8214 		 same object.  */
8215 	      h->root.non_ir_ref = 1;
8216 	    }
8217 	}
8218 
8219       /* Set CAN_MAKE_DYNAMIC_P to true if we can convert this
8220 	 relocation into a dynamic one.  */
8221       can_make_dynamic_p = FALSE;
8222 
8223       /* Set CALL_RELOC_P to true if the relocation is for a call,
8224 	 and if pointer equality therefore doesn't matter.  */
8225       call_reloc_p = FALSE;
8226 
8227       /* Set CONSTRAIN_SYMBOL_P if we need to take the relocation
8228 	 into account when deciding how to define the symbol.
8229 	 Relocations in nonallocatable sections such as .pdr and
8230 	 .debug* should have no effect.  */
8231       constrain_symbol_p = ((sec->flags & SEC_ALLOC) != 0);
8232 
8233       switch (r_type)
8234 	{
8235 	case R_MIPS_CALL16:
8236 	case R_MIPS_CALL_HI16:
8237 	case R_MIPS_CALL_LO16:
8238 	case R_MIPS16_CALL16:
8239 	case R_MICROMIPS_CALL16:
8240 	case R_MICROMIPS_CALL_HI16:
8241 	case R_MICROMIPS_CALL_LO16:
8242 	  call_reloc_p = TRUE;
8243 	  /* Fall through.  */
8244 
8245 	case R_MIPS_GOT16:
8246 	case R_MIPS_GOT_HI16:
8247 	case R_MIPS_GOT_LO16:
8248 	case R_MIPS_GOT_PAGE:
8249 	case R_MIPS_GOT_OFST:
8250 	case R_MIPS_GOT_DISP:
8251 	case R_MIPS_TLS_GOTTPREL:
8252 	case R_MIPS_TLS_GD:
8253 	case R_MIPS_TLS_LDM:
8254 	case R_MIPS16_GOT16:
8255 	case R_MIPS16_TLS_GOTTPREL:
8256 	case R_MIPS16_TLS_GD:
8257 	case R_MIPS16_TLS_LDM:
8258 	case R_MICROMIPS_GOT16:
8259 	case R_MICROMIPS_GOT_HI16:
8260 	case R_MICROMIPS_GOT_LO16:
8261 	case R_MICROMIPS_GOT_PAGE:
8262 	case R_MICROMIPS_GOT_OFST:
8263 	case R_MICROMIPS_GOT_DISP:
8264 	case R_MICROMIPS_TLS_GOTTPREL:
8265 	case R_MICROMIPS_TLS_GD:
8266 	case R_MICROMIPS_TLS_LDM:
8267 	  if (dynobj == NULL)
8268 	    elf_hash_table (info)->dynobj = dynobj = abfd;
8269 	  if (!mips_elf_create_got_section (dynobj, info))
8270 	    return FALSE;
8271 	  if (htab->is_vxworks && !info->shared)
8272 	    {
8273 	      (*_bfd_error_handler)
8274 		(_("%B: GOT reloc at 0x%lx not expected in executables"),
8275 		 abfd, (unsigned long) rel->r_offset);
8276 	      bfd_set_error (bfd_error_bad_value);
8277 	      return FALSE;
8278 	    }
8279 	  can_make_dynamic_p = TRUE;
8280 	  break;
8281 
8282 	case R_MIPS_NONE:
8283 	case R_MIPS_JALR:
8284 	case R_MICROMIPS_JALR:
8285 	  /* These relocations have empty fields and are purely there to
8286 	     provide link information.  The symbol value doesn't matter.  */
8287 	  constrain_symbol_p = FALSE;
8288 	  break;
8289 
8290 	case R_MIPS_GPREL16:
8291 	case R_MIPS_GPREL32:
8292 	case R_MIPS16_GPREL:
8293 	case R_MICROMIPS_GPREL16:
8294 	  /* GP-relative relocations always resolve to a definition in a
8295 	     regular input file, ignoring the one-definition rule.  This is
8296 	     important for the GP setup sequence in NewABI code, which
8297 	     always resolves to a local function even if other relocations
8298 	     against the symbol wouldn't.  */
8299 	  constrain_symbol_p = FALSE;
8300 	  break;
8301 
8302 	case R_MIPS_32:
8303 	case R_MIPS_REL32:
8304 	case R_MIPS_64:
8305 	  /* In VxWorks executables, references to external symbols
8306 	     must be handled using copy relocs or PLT entries; it is not
8307 	     possible to convert this relocation into a dynamic one.
8308 
8309 	     For executables that use PLTs and copy-relocs, we have a
8310 	     choice between converting the relocation into a dynamic
8311 	     one or using copy relocations or PLT entries.  It is
8312 	     usually better to do the former, unless the relocation is
8313 	     against a read-only section.  */
8314 	  if ((info->shared
8315 	       || (h != NULL
8316 		   && !htab->is_vxworks
8317 		   && strcmp (h->root.root.string, "__gnu_local_gp") != 0
8318 		   && !(!info->nocopyreloc
8319 			&& !PIC_OBJECT_P (abfd)
8320 			&& MIPS_ELF_READONLY_SECTION (sec))))
8321 	      && (sec->flags & SEC_ALLOC) != 0)
8322 	    {
8323 	      can_make_dynamic_p = TRUE;
8324 	      if (dynobj == NULL)
8325 		elf_hash_table (info)->dynobj = dynobj = abfd;
8326 	    }
8327 	  break;
8328 
8329 	case R_MIPS_26:
8330 	case R_MIPS_PC16:
8331 	case R_MIPS_PC21_S2:
8332 	case R_MIPS_PC26_S2:
8333 	case R_MIPS16_26:
8334 	case R_MICROMIPS_26_S1:
8335 	case R_MICROMIPS_PC7_S1:
8336 	case R_MICROMIPS_PC10_S1:
8337 	case R_MICROMIPS_PC16_S1:
8338 	case R_MICROMIPS_PC23_S2:
8339 	  call_reloc_p = TRUE;
8340 	  break;
8341 	}
8342 
8343       if (h)
8344 	{
8345 	  if (constrain_symbol_p)
8346 	    {
8347 	      if (!can_make_dynamic_p)
8348 		((struct mips_elf_link_hash_entry *) h)->has_static_relocs = 1;
8349 
8350 	      if (!call_reloc_p)
8351 		h->pointer_equality_needed = 1;
8352 
8353 	      /* We must not create a stub for a symbol that has
8354 		 relocations related to taking the function's address.
8355 		 This doesn't apply to VxWorks, where CALL relocs refer
8356 		 to a .got.plt entry instead of a normal .got entry.  */
8357 	      if (!htab->is_vxworks && (!can_make_dynamic_p || !call_reloc_p))
8358 		((struct mips_elf_link_hash_entry *) h)->no_fn_stub = TRUE;
8359 	    }
8360 
8361 	  /* Relocations against the special VxWorks __GOTT_BASE__ and
8362 	     __GOTT_INDEX__ symbols must be left to the loader.  Allocate
8363 	     room for them in .rela.dyn.  */
8364 	  if (is_gott_symbol (info, h))
8365 	    {
8366 	      if (sreloc == NULL)
8367 		{
8368 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8369 		  if (sreloc == NULL)
8370 		    return FALSE;
8371 		}
8372 	      mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8373 	      if (MIPS_ELF_READONLY_SECTION (sec))
8374 		/* We tell the dynamic linker that there are
8375 		   relocations against the text segment.  */
8376 		info->flags |= DF_TEXTREL;
8377 	    }
8378 	}
8379       else if (call_lo16_reloc_p (r_type)
8380 	       || got_lo16_reloc_p (r_type)
8381 	       || got_disp_reloc_p (r_type)
8382 	       || (got16_reloc_p (r_type) && htab->is_vxworks))
8383 	{
8384 	  /* We may need a local GOT entry for this relocation.  We
8385 	     don't count R_MIPS_GOT_PAGE because we can estimate the
8386 	     maximum number of pages needed by looking at the size of
8387 	     the segment.  Similar comments apply to R_MIPS*_GOT16 and
8388 	     R_MIPS*_CALL16, except on VxWorks, where GOT relocations
8389 	     always evaluate to "G".  We don't count R_MIPS_GOT_HI16, or
8390 	     R_MIPS_CALL_HI16 because these are always followed by an
8391 	     R_MIPS_GOT_LO16 or R_MIPS_CALL_LO16.  */
8392 	  if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8393 						 rel->r_addend, info, r_type))
8394 	    return FALSE;
8395 	}
8396 
8397       if (h != NULL
8398 	  && mips_elf_relocation_needs_la25_stub (abfd, r_type,
8399 						  ELF_ST_IS_MIPS16 (h->other)))
8400 	((struct mips_elf_link_hash_entry *) h)->has_nonpic_branches = TRUE;
8401 
8402       switch (r_type)
8403 	{
8404 	case R_MIPS_CALL16:
8405 	case R_MIPS16_CALL16:
8406 	case R_MICROMIPS_CALL16:
8407 	  if (h == NULL)
8408 	    {
8409 	      (*_bfd_error_handler)
8410 		(_("%B: CALL16 reloc at 0x%lx not against global symbol"),
8411 		 abfd, (unsigned long) rel->r_offset);
8412 	      bfd_set_error (bfd_error_bad_value);
8413 	      return FALSE;
8414 	    }
8415 	  /* Fall through.  */
8416 
8417 	case R_MIPS_CALL_HI16:
8418 	case R_MIPS_CALL_LO16:
8419 	case R_MICROMIPS_CALL_HI16:
8420 	case R_MICROMIPS_CALL_LO16:
8421 	  if (h != NULL)
8422 	    {
8423 	      /* Make sure there is room in the regular GOT to hold the
8424 		 function's address.  We may eliminate it in favour of
8425 		 a .got.plt entry later; see mips_elf_count_got_symbols.  */
8426 	      if (!mips_elf_record_global_got_symbol (h, abfd, info, TRUE,
8427 						      r_type))
8428 		return FALSE;
8429 
8430 	      /* We need a stub, not a plt entry for the undefined
8431 		 function.  But we record it as if it needs plt.  See
8432 		 _bfd_elf_adjust_dynamic_symbol.  */
8433 	      h->needs_plt = 1;
8434 	      h->type = STT_FUNC;
8435 	    }
8436 	  break;
8437 
8438 	case R_MIPS_GOT_PAGE:
8439 	case R_MICROMIPS_GOT_PAGE:
8440 	case R_MIPS16_GOT16:
8441 	case R_MIPS_GOT16:
8442 	case R_MIPS_GOT_HI16:
8443 	case R_MIPS_GOT_LO16:
8444 	case R_MICROMIPS_GOT16:
8445 	case R_MICROMIPS_GOT_HI16:
8446 	case R_MICROMIPS_GOT_LO16:
8447 	  if (!h || got_page_reloc_p (r_type))
8448 	    {
8449 	      /* This relocation needs (or may need, if h != NULL) a
8450 		 page entry in the GOT.  For R_MIPS_GOT_PAGE we do not
8451 		 know for sure until we know whether the symbol is
8452 		 preemptible.  */
8453 	      if (mips_elf_rel_relocation_p (abfd, sec, relocs, rel))
8454 		{
8455 		  if (!mips_elf_get_section_contents (abfd, sec, &contents))
8456 		    return FALSE;
8457 		  howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8458 		  addend = mips_elf_read_rel_addend (abfd, rel,
8459 						     howto, contents);
8460 		  if (got16_reloc_p (r_type))
8461 		    mips_elf_add_lo16_rel_addend (abfd, rel, rel_end,
8462 						  contents, &addend);
8463 		  else
8464 		    addend <<= howto->rightshift;
8465 		}
8466 	      else
8467 		addend = rel->r_addend;
8468 	      if (!mips_elf_record_got_page_ref (info, abfd, r_symndx,
8469 						 h, addend))
8470 		return FALSE;
8471 
8472 	      if (h)
8473 		{
8474 		  struct mips_elf_link_hash_entry *hmips =
8475 		    (struct mips_elf_link_hash_entry *) h;
8476 
8477 		  /* This symbol is definitely not overridable.  */
8478 		  if (hmips->root.def_regular
8479 		      && ! (info->shared && ! info->symbolic
8480 			    && ! hmips->root.forced_local))
8481 		    h = NULL;
8482 		}
8483 	    }
8484 	  /* If this is a global, overridable symbol, GOT_PAGE will
8485 	     decay to GOT_DISP, so we'll need a GOT entry for it.  */
8486 	  /* Fall through.  */
8487 
8488 	case R_MIPS_GOT_DISP:
8489 	case R_MICROMIPS_GOT_DISP:
8490 	  if (h && !mips_elf_record_global_got_symbol (h, abfd, info,
8491 						       FALSE, r_type))
8492 	    return FALSE;
8493 	  break;
8494 
8495 	case R_MIPS_TLS_GOTTPREL:
8496 	case R_MIPS16_TLS_GOTTPREL:
8497 	case R_MICROMIPS_TLS_GOTTPREL:
8498 	  if (info->shared)
8499 	    info->flags |= DF_STATIC_TLS;
8500 	  /* Fall through */
8501 
8502 	case R_MIPS_TLS_LDM:
8503 	case R_MIPS16_TLS_LDM:
8504 	case R_MICROMIPS_TLS_LDM:
8505 	  if (tls_ldm_reloc_p (r_type))
8506 	    {
8507 	      r_symndx = STN_UNDEF;
8508 	      h = NULL;
8509 	    }
8510 	  /* Fall through */
8511 
8512 	case R_MIPS_TLS_GD:
8513 	case R_MIPS16_TLS_GD:
8514 	case R_MICROMIPS_TLS_GD:
8515 	  /* This symbol requires a global offset table entry, or two
8516 	     for TLS GD relocations.  */
8517 	  if (h != NULL)
8518 	    {
8519 	      if (!mips_elf_record_global_got_symbol (h, abfd, info,
8520 						      FALSE, r_type))
8521 		return FALSE;
8522 	    }
8523 	  else
8524 	    {
8525 	      if (!mips_elf_record_local_got_symbol (abfd, r_symndx,
8526 						     rel->r_addend,
8527 						     info, r_type))
8528 		return FALSE;
8529 	    }
8530 	  break;
8531 
8532 	case R_MIPS_32:
8533 	case R_MIPS_REL32:
8534 	case R_MIPS_64:
8535 	  /* In VxWorks executables, references to external symbols
8536 	     are handled using copy relocs or PLT stubs, so there's
8537 	     no need to add a .rela.dyn entry for this relocation.  */
8538 	  if (can_make_dynamic_p)
8539 	    {
8540 	      if (sreloc == NULL)
8541 		{
8542 		  sreloc = mips_elf_rel_dyn_section (info, TRUE);
8543 		  if (sreloc == NULL)
8544 		    return FALSE;
8545 		}
8546 	      if (info->shared && h == NULL)
8547 		{
8548 		  /* When creating a shared object, we must copy these
8549 		     reloc types into the output file as R_MIPS_REL32
8550 		     relocs.  Make room for this reloc in .rel(a).dyn.  */
8551 		  mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
8552 		  if (MIPS_ELF_READONLY_SECTION (sec))
8553 		    /* We tell the dynamic linker that there are
8554 		       relocations against the text segment.  */
8555 		    info->flags |= DF_TEXTREL;
8556 		}
8557 	      else
8558 		{
8559 		  struct mips_elf_link_hash_entry *hmips;
8560 
8561 		  /* For a shared object, we must copy this relocation
8562 		     unless the symbol turns out to be undefined and
8563 		     weak with non-default visibility, in which case
8564 		     it will be left as zero.
8565 
8566 		     We could elide R_MIPS_REL32 for locally binding symbols
8567 		     in shared libraries, but do not yet do so.
8568 
8569 		     For an executable, we only need to copy this
8570 		     reloc if the symbol is defined in a dynamic
8571 		     object.  */
8572 		  hmips = (struct mips_elf_link_hash_entry *) h;
8573 		  ++hmips->possibly_dynamic_relocs;
8574 		  if (MIPS_ELF_READONLY_SECTION (sec))
8575 		    /* We need it to tell the dynamic linker if there
8576 		       are relocations against the text segment.  */
8577 		    hmips->readonly_reloc = TRUE;
8578 		}
8579 	    }
8580 
8581 	  if (SGI_COMPAT (abfd))
8582 	    mips_elf_hash_table (info)->compact_rel_size +=
8583 	      sizeof (Elf32_External_crinfo);
8584 	  break;
8585 
8586 	case R_MIPS_26:
8587 	case R_MIPS_GPREL16:
8588 	case R_MIPS_LITERAL:
8589 	case R_MIPS_GPREL32:
8590 	case R_MICROMIPS_26_S1:
8591 	case R_MICROMIPS_GPREL16:
8592 	case R_MICROMIPS_LITERAL:
8593 	case R_MICROMIPS_GPREL7_S2:
8594 	  if (SGI_COMPAT (abfd))
8595 	    mips_elf_hash_table (info)->compact_rel_size +=
8596 	      sizeof (Elf32_External_crinfo);
8597 	  break;
8598 
8599 	  /* This relocation describes the C++ object vtable hierarchy.
8600 	     Reconstruct it for later use during GC.  */
8601 	case R_MIPS_GNU_VTINHERIT:
8602 	  if (!bfd_elf_gc_record_vtinherit (abfd, sec, h, rel->r_offset))
8603 	    return FALSE;
8604 	  break;
8605 
8606 	  /* This relocation describes which C++ vtable entries are actually
8607 	     used.  Record for later use during GC.  */
8608 	case R_MIPS_GNU_VTENTRY:
8609 	  BFD_ASSERT (h != NULL);
8610 	  if (h != NULL
8611 	      && !bfd_elf_gc_record_vtentry (abfd, sec, h, rel->r_offset))
8612 	    return FALSE;
8613 	  break;
8614 
8615 	default:
8616 	  break;
8617 	}
8618 
8619       /* Record the need for a PLT entry.  At this point we don't know
8620          yet if we are going to create a PLT in the first place, but
8621          we only record whether the relocation requires a standard MIPS
8622          or a compressed code entry anyway.  If we don't make a PLT after
8623          all, then we'll just ignore these arrangements.  Likewise if
8624          a PLT entry is not created because the symbol is satisfied
8625          locally.  */
8626       if (h != NULL
8627 	  && jal_reloc_p (r_type)
8628 	  && !SYMBOL_CALLS_LOCAL (info, h))
8629 	{
8630 	  if (h->plt.plist == NULL)
8631 	    h->plt.plist = mips_elf_make_plt_record (abfd);
8632 	  if (h->plt.plist == NULL)
8633 	    return FALSE;
8634 
8635 	  if (r_type == R_MIPS_26)
8636 	    h->plt.plist->need_mips = TRUE;
8637 	  else
8638 	    h->plt.plist->need_comp = TRUE;
8639 	}
8640 
8641       /* See if this reloc would need to refer to a MIPS16 hard-float stub,
8642 	 if there is one.  We only need to handle global symbols here;
8643 	 we decide whether to keep or delete stubs for local symbols
8644 	 when processing the stub's relocations.  */
8645       if (h != NULL
8646 	  && !mips16_call_reloc_p (r_type)
8647 	  && !section_allows_mips16_refs_p (sec))
8648 	{
8649 	  struct mips_elf_link_hash_entry *mh;
8650 
8651 	  mh = (struct mips_elf_link_hash_entry *) h;
8652 	  mh->need_fn_stub = TRUE;
8653 	}
8654 
8655       /* Refuse some position-dependent relocations when creating a
8656 	 shared library.  Do not refuse R_MIPS_32 / R_MIPS_64; they're
8657 	 not PIC, but we can create dynamic relocations and the result
8658 	 will be fine.  Also do not refuse R_MIPS_LO16, which can be
8659 	 combined with R_MIPS_GOT16.  */
8660       if (info->shared)
8661 	{
8662 	  switch (r_type)
8663 	    {
8664 	    case R_MIPS16_HI16:
8665 	    case R_MIPS_HI16:
8666 	    case R_MIPS_HIGHER:
8667 	    case R_MIPS_HIGHEST:
8668 	    case R_MICROMIPS_HI16:
8669 	    case R_MICROMIPS_HIGHER:
8670 	    case R_MICROMIPS_HIGHEST:
8671 	      /* Don't refuse a high part relocation if it's against
8672 		 no symbol (e.g. part of a compound relocation).  */
8673 	      if (r_symndx == STN_UNDEF)
8674 		break;
8675 
8676 	      /* R_MIPS_HI16 against _gp_disp is used for $gp setup,
8677 		 and has a special meaning.  */
8678 	      if (!NEWABI_P (abfd) && h != NULL
8679 		  && strcmp (h->root.root.string, "_gp_disp") == 0)
8680 		break;
8681 
8682 	      /* Likewise __GOTT_BASE__ and __GOTT_INDEX__ on VxWorks.  */
8683 	      if (is_gott_symbol (info, h))
8684 		break;
8685 
8686 	      /* FALLTHROUGH */
8687 
8688 	    case R_MIPS16_26:
8689 	    case R_MIPS_26:
8690 	    case R_MICROMIPS_26_S1:
8691 	      howto = MIPS_ELF_RTYPE_TO_HOWTO (abfd, r_type, FALSE);
8692 	      (*_bfd_error_handler)
8693 		(_("%B: relocation %s against `%s' can not be used when making a shared object; recompile with -fPIC"),
8694 		 abfd, howto->name,
8695 		 (h) ? h->root.root.string : "a local symbol");
8696 	      bfd_set_error (bfd_error_bad_value);
8697 	      return FALSE;
8698 	    default:
8699 	      break;
8700 	    }
8701 	}
8702     }
8703 
8704   return TRUE;
8705 }
8706 
8707 bfd_boolean
8708 _bfd_mips_relax_section (bfd *abfd, asection *sec,
8709 			 struct bfd_link_info *link_info,
8710 			 bfd_boolean *again)
8711 {
8712   Elf_Internal_Rela *internal_relocs;
8713   Elf_Internal_Rela *irel, *irelend;
8714   Elf_Internal_Shdr *symtab_hdr;
8715   bfd_byte *contents = NULL;
8716   size_t extsymoff;
8717   bfd_boolean changed_contents = FALSE;
8718   bfd_vma sec_start = sec->output_section->vma + sec->output_offset;
8719   Elf_Internal_Sym *isymbuf = NULL;
8720 
8721   /* We are not currently changing any sizes, so only one pass.  */
8722   *again = FALSE;
8723 
8724   if (link_info->relocatable)
8725     return TRUE;
8726 
8727   internal_relocs = _bfd_elf_link_read_relocs (abfd, sec, NULL, NULL,
8728 					       link_info->keep_memory);
8729   if (internal_relocs == NULL)
8730     return TRUE;
8731 
8732   irelend = internal_relocs + sec->reloc_count
8733     * get_elf_backend_data (abfd)->s->int_rels_per_ext_rel;
8734   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
8735   extsymoff = (elf_bad_symtab (abfd)) ? 0 : symtab_hdr->sh_info;
8736 
8737   for (irel = internal_relocs; irel < irelend; irel++)
8738     {
8739       bfd_vma symval;
8740       bfd_signed_vma sym_offset;
8741       unsigned int r_type;
8742       unsigned long r_symndx;
8743       asection *sym_sec;
8744       unsigned long instruction;
8745 
8746       /* Turn jalr into bgezal, and jr into beq, if they're marked
8747 	 with a JALR relocation, that indicate where they jump to.
8748 	 This saves some pipeline bubbles.  */
8749       r_type = ELF_R_TYPE (abfd, irel->r_info);
8750       if (r_type != R_MIPS_JALR)
8751 	continue;
8752 
8753       r_symndx = ELF_R_SYM (abfd, irel->r_info);
8754       /* Compute the address of the jump target.  */
8755       if (r_symndx >= extsymoff)
8756 	{
8757 	  struct mips_elf_link_hash_entry *h
8758 	    = ((struct mips_elf_link_hash_entry *)
8759 	       elf_sym_hashes (abfd) [r_symndx - extsymoff]);
8760 
8761 	  while (h->root.root.type == bfd_link_hash_indirect
8762 		 || h->root.root.type == bfd_link_hash_warning)
8763 	    h = (struct mips_elf_link_hash_entry *) h->root.root.u.i.link;
8764 
8765 	  /* If a symbol is undefined, or if it may be overridden,
8766 	     skip it.  */
8767 	  if (! ((h->root.root.type == bfd_link_hash_defined
8768 		  || h->root.root.type == bfd_link_hash_defweak)
8769 		 && h->root.root.u.def.section)
8770 	      || (link_info->shared && ! link_info->symbolic
8771 		  && !h->root.forced_local))
8772 	    continue;
8773 
8774 	  sym_sec = h->root.root.u.def.section;
8775 	  if (sym_sec->output_section)
8776 	    symval = (h->root.root.u.def.value
8777 		      + sym_sec->output_section->vma
8778 		      + sym_sec->output_offset);
8779 	  else
8780 	    symval = h->root.root.u.def.value;
8781 	}
8782       else
8783 	{
8784 	  Elf_Internal_Sym *isym;
8785 
8786 	  /* Read this BFD's symbols if we haven't done so already.  */
8787 	  if (isymbuf == NULL && symtab_hdr->sh_info != 0)
8788 	    {
8789 	      isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
8790 	      if (isymbuf == NULL)
8791 		isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
8792 						symtab_hdr->sh_info, 0,
8793 						NULL, NULL, NULL);
8794 	      if (isymbuf == NULL)
8795 		goto relax_return;
8796 	    }
8797 
8798 	  isym = isymbuf + r_symndx;
8799 	  if (isym->st_shndx == SHN_UNDEF)
8800 	    continue;
8801 	  else if (isym->st_shndx == SHN_ABS)
8802 	    sym_sec = bfd_abs_section_ptr;
8803 	  else if (isym->st_shndx == SHN_COMMON)
8804 	    sym_sec = bfd_com_section_ptr;
8805 	  else
8806 	    sym_sec
8807 	      = bfd_section_from_elf_index (abfd, isym->st_shndx);
8808 	  symval = isym->st_value
8809 	    + sym_sec->output_section->vma
8810 	    + sym_sec->output_offset;
8811 	}
8812 
8813       /* Compute branch offset, from delay slot of the jump to the
8814 	 branch target.  */
8815       sym_offset = (symval + irel->r_addend)
8816 	- (sec_start + irel->r_offset + 4);
8817 
8818       /* Branch offset must be properly aligned.  */
8819       if ((sym_offset & 3) != 0)
8820 	continue;
8821 
8822       sym_offset >>= 2;
8823 
8824       /* Check that it's in range.  */
8825       if (sym_offset < -0x8000 || sym_offset >= 0x8000)
8826 	continue;
8827 
8828       /* Get the section contents if we haven't done so already.  */
8829       if (!mips_elf_get_section_contents (abfd, sec, &contents))
8830 	goto relax_return;
8831 
8832       instruction = bfd_get_32 (abfd, contents + irel->r_offset);
8833 
8834       /* If it was jalr <reg>, turn it into bgezal $zero, <target>.  */
8835       if ((instruction & 0xfc1fffff) == 0x0000f809)
8836 	instruction = 0x04110000;
8837       /* If it was jr <reg>, turn it into b <target>.  */
8838       else if ((instruction & 0xfc1fffff) == 0x00000008)
8839 	instruction = 0x10000000;
8840       else
8841 	continue;
8842 
8843       instruction |= (sym_offset & 0xffff);
8844       bfd_put_32 (abfd, instruction, contents + irel->r_offset);
8845       changed_contents = TRUE;
8846     }
8847 
8848   if (contents != NULL
8849       && elf_section_data (sec)->this_hdr.contents != contents)
8850     {
8851       if (!changed_contents && !link_info->keep_memory)
8852         free (contents);
8853       else
8854         {
8855           /* Cache the section contents for elf_link_input_bfd.  */
8856           elf_section_data (sec)->this_hdr.contents = contents;
8857         }
8858     }
8859   return TRUE;
8860 
8861  relax_return:
8862   if (contents != NULL
8863       && elf_section_data (sec)->this_hdr.contents != contents)
8864     free (contents);
8865   return FALSE;
8866 }
8867 
8868 /* Allocate space for global sym dynamic relocs.  */
8869 
8870 static bfd_boolean
8871 allocate_dynrelocs (struct elf_link_hash_entry *h, void *inf)
8872 {
8873   struct bfd_link_info *info = inf;
8874   bfd *dynobj;
8875   struct mips_elf_link_hash_entry *hmips;
8876   struct mips_elf_link_hash_table *htab;
8877 
8878   htab = mips_elf_hash_table (info);
8879   BFD_ASSERT (htab != NULL);
8880 
8881   dynobj = elf_hash_table (info)->dynobj;
8882   hmips = (struct mips_elf_link_hash_entry *) h;
8883 
8884   /* VxWorks executables are handled elsewhere; we only need to
8885      allocate relocations in shared objects.  */
8886   if (htab->is_vxworks && !info->shared)
8887     return TRUE;
8888 
8889   /* Ignore indirect symbols.  All relocations against such symbols
8890      will be redirected to the target symbol.  */
8891   if (h->root.type == bfd_link_hash_indirect)
8892     return TRUE;
8893 
8894   /* If this symbol is defined in a dynamic object, or we are creating
8895      a shared library, we will need to copy any R_MIPS_32 or
8896      R_MIPS_REL32 relocs against it into the output file.  */
8897   if (! info->relocatable
8898       && hmips->possibly_dynamic_relocs != 0
8899       && (h->root.type == bfd_link_hash_defweak
8900 	  || (!h->def_regular && !ELF_COMMON_DEF_P (h))
8901 	  || info->shared))
8902     {
8903       bfd_boolean do_copy = TRUE;
8904 
8905       if (h->root.type == bfd_link_hash_undefweak)
8906 	{
8907 	  /* Do not copy relocations for undefined weak symbols with
8908 	     non-default visibility.  */
8909 	  if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT)
8910 	    do_copy = FALSE;
8911 
8912 	  /* Make sure undefined weak symbols are output as a dynamic
8913 	     symbol in PIEs.  */
8914 	  else if (h->dynindx == -1 && !h->forced_local)
8915 	    {
8916 	      if (! bfd_elf_link_record_dynamic_symbol (info, h))
8917 		return FALSE;
8918 	    }
8919 	}
8920 
8921       if (do_copy)
8922 	{
8923 	  /* Even though we don't directly need a GOT entry for this symbol,
8924 	     the SVR4 psABI requires it to have a dynamic symbol table
8925 	     index greater that DT_MIPS_GOTSYM if there are dynamic
8926 	     relocations against it.
8927 
8928 	     VxWorks does not enforce the same mapping between the GOT
8929 	     and the symbol table, so the same requirement does not
8930 	     apply there.  */
8931 	  if (!htab->is_vxworks)
8932 	    {
8933 	      if (hmips->global_got_area > GGA_RELOC_ONLY)
8934 		hmips->global_got_area = GGA_RELOC_ONLY;
8935 	      hmips->got_only_for_calls = FALSE;
8936 	    }
8937 
8938 	  mips_elf_allocate_dynamic_relocations
8939 	    (dynobj, info, hmips->possibly_dynamic_relocs);
8940 	  if (hmips->readonly_reloc)
8941 	    /* We tell the dynamic linker that there are relocations
8942 	       against the text segment.  */
8943 	    info->flags |= DF_TEXTREL;
8944 	}
8945     }
8946 
8947   return TRUE;
8948 }
8949 
8950 /* Adjust a symbol defined by a dynamic object and referenced by a
8951    regular object.  The current definition is in some section of the
8952    dynamic object, but we're not including those sections.  We have to
8953    change the definition to something the rest of the link can
8954    understand.  */
8955 
8956 bfd_boolean
8957 _bfd_mips_elf_adjust_dynamic_symbol (struct bfd_link_info *info,
8958 				     struct elf_link_hash_entry *h)
8959 {
8960   bfd *dynobj;
8961   struct mips_elf_link_hash_entry *hmips;
8962   struct mips_elf_link_hash_table *htab;
8963 
8964   htab = mips_elf_hash_table (info);
8965   BFD_ASSERT (htab != NULL);
8966 
8967   dynobj = elf_hash_table (info)->dynobj;
8968   hmips = (struct mips_elf_link_hash_entry *) h;
8969 
8970   /* Make sure we know what is going on here.  */
8971   BFD_ASSERT (dynobj != NULL
8972 	      && (h->needs_plt
8973 		  || h->u.weakdef != NULL
8974 		  || (h->def_dynamic
8975 		      && h->ref_regular
8976 		      && !h->def_regular)));
8977 
8978   hmips = (struct mips_elf_link_hash_entry *) h;
8979 
8980   /* If there are call relocations against an externally-defined symbol,
8981      see whether we can create a MIPS lazy-binding stub for it.  We can
8982      only do this if all references to the function are through call
8983      relocations, and in that case, the traditional lazy-binding stubs
8984      are much more efficient than PLT entries.
8985 
8986      Traditional stubs are only available on SVR4 psABI-based systems;
8987      VxWorks always uses PLTs instead.  */
8988   if (!htab->is_vxworks && h->needs_plt && !hmips->no_fn_stub)
8989     {
8990       if (! elf_hash_table (info)->dynamic_sections_created)
8991 	return TRUE;
8992 
8993       /* If this symbol is not defined in a regular file, then set
8994 	 the symbol to the stub location.  This is required to make
8995 	 function pointers compare as equal between the normal
8996 	 executable and the shared library.  */
8997       if (!h->def_regular)
8998 	{
8999 	  hmips->needs_lazy_stub = TRUE;
9000 	  htab->lazy_stub_count++;
9001 	  return TRUE;
9002 	}
9003     }
9004   /* As above, VxWorks requires PLT entries for externally-defined
9005      functions that are only accessed through call relocations.
9006 
9007      Both VxWorks and non-VxWorks targets also need PLT entries if there
9008      are static-only relocations against an externally-defined function.
9009      This can technically occur for shared libraries if there are
9010      branches to the symbol, although it is unlikely that this will be
9011      used in practice due to the short ranges involved.  It can occur
9012      for any relative or absolute relocation in executables; in that
9013      case, the PLT entry becomes the function's canonical address.  */
9014   else if (((h->needs_plt && !hmips->no_fn_stub)
9015 	    || (h->type == STT_FUNC && hmips->has_static_relocs))
9016 	   && htab->use_plts_and_copy_relocs
9017 	   && !SYMBOL_CALLS_LOCAL (info, h)
9018 	   && !(ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
9019 		&& h->root.type == bfd_link_hash_undefweak))
9020     {
9021       bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9022       bfd_boolean newabi_p = NEWABI_P (info->output_bfd);
9023 
9024       /* If this is the first symbol to need a PLT entry, then make some
9025          basic setup.  Also work out PLT entry sizes.  We'll need them
9026          for PLT offset calculations.  */
9027       if (htab->plt_mips_offset + htab->plt_comp_offset == 0)
9028 	{
9029 	  BFD_ASSERT (htab->sgotplt->size == 0);
9030 	  BFD_ASSERT (htab->plt_got_index == 0);
9031 
9032 	  /* If we're using the PLT additions to the psABI, each PLT
9033 	     entry is 16 bytes and the PLT0 entry is 32 bytes.
9034 	     Encourage better cache usage by aligning.  We do this
9035 	     lazily to avoid pessimizing traditional objects.  */
9036 	  if (!htab->is_vxworks
9037 	      && !bfd_set_section_alignment (dynobj, htab->splt, 5))
9038 	    return FALSE;
9039 
9040 	  /* Make sure that .got.plt is word-aligned.  We do this lazily
9041 	     for the same reason as above.  */
9042 	  if (!bfd_set_section_alignment (dynobj, htab->sgotplt,
9043 					  MIPS_ELF_LOG_FILE_ALIGN (dynobj)))
9044 	    return FALSE;
9045 
9046 	  /* On non-VxWorks targets, the first two entries in .got.plt
9047 	     are reserved.  */
9048 	  if (!htab->is_vxworks)
9049 	    htab->plt_got_index
9050 	      += (get_elf_backend_data (dynobj)->got_header_size
9051 		  / MIPS_ELF_GOT_SIZE (dynobj));
9052 
9053 	  /* On VxWorks, also allocate room for the header's
9054 	     .rela.plt.unloaded entries.  */
9055 	  if (htab->is_vxworks && !info->shared)
9056 	    htab->srelplt2->size += 2 * sizeof (Elf32_External_Rela);
9057 
9058 	  /* Now work out the sizes of individual PLT entries.  */
9059 	  if (htab->is_vxworks && info->shared)
9060 	    htab->plt_mips_entry_size
9061 	      = 4 * ARRAY_SIZE (mips_vxworks_shared_plt_entry);
9062 	  else if (htab->is_vxworks)
9063 	    htab->plt_mips_entry_size
9064 	      = 4 * ARRAY_SIZE (mips_vxworks_exec_plt_entry);
9065 	  else if (newabi_p)
9066 	    htab->plt_mips_entry_size
9067 	      = 4 * ARRAY_SIZE (mips_exec_plt_entry);
9068 	  else if (!micromips_p)
9069 	    {
9070 	      htab->plt_mips_entry_size
9071 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9072 	      htab->plt_comp_entry_size
9073 		= 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
9074 	    }
9075 	  else if (htab->insn32)
9076 	    {
9077 	      htab->plt_mips_entry_size
9078 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9079 	      htab->plt_comp_entry_size
9080 		= 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
9081 	    }
9082 	  else
9083 	    {
9084 	      htab->plt_mips_entry_size
9085 		= 4 * ARRAY_SIZE (mips_exec_plt_entry);
9086 	      htab->plt_comp_entry_size
9087 		= 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
9088 	    }
9089 	}
9090 
9091       if (h->plt.plist == NULL)
9092 	h->plt.plist = mips_elf_make_plt_record (dynobj);
9093       if (h->plt.plist == NULL)
9094 	return FALSE;
9095 
9096       /* There are no defined MIPS16 or microMIPS PLT entries for VxWorks,
9097          n32 or n64, so always use a standard entry there.
9098 
9099          If the symbol has a MIPS16 call stub and gets a PLT entry, then
9100          all MIPS16 calls will go via that stub, and there is no benefit
9101          to having a MIPS16 entry.  And in the case of call_stub a
9102          standard entry actually has to be used as the stub ends with a J
9103          instruction.  */
9104       if (newabi_p
9105 	  || htab->is_vxworks
9106 	  || hmips->call_stub
9107 	  || hmips->call_fp_stub)
9108 	{
9109 	  h->plt.plist->need_mips = TRUE;
9110 	  h->plt.plist->need_comp = FALSE;
9111 	}
9112 
9113       /* Otherwise, if there are no direct calls to the function, we
9114          have a free choice of whether to use standard or compressed
9115          entries.  Prefer microMIPS entries if the object is known to
9116          contain microMIPS code, so that it becomes possible to create
9117          pure microMIPS binaries.  Prefer standard entries otherwise,
9118          because MIPS16 ones are no smaller and are usually slower.  */
9119       if (!h->plt.plist->need_mips && !h->plt.plist->need_comp)
9120 	{
9121 	  if (micromips_p)
9122 	    h->plt.plist->need_comp = TRUE;
9123 	  else
9124 	    h->plt.plist->need_mips = TRUE;
9125 	}
9126 
9127       if (h->plt.plist->need_mips)
9128 	{
9129 	  h->plt.plist->mips_offset = htab->plt_mips_offset;
9130 	  htab->plt_mips_offset += htab->plt_mips_entry_size;
9131 	}
9132       if (h->plt.plist->need_comp)
9133 	{
9134 	  h->plt.plist->comp_offset = htab->plt_comp_offset;
9135 	  htab->plt_comp_offset += htab->plt_comp_entry_size;
9136 	}
9137 
9138       /* Reserve the corresponding .got.plt entry now too.  */
9139       h->plt.plist->gotplt_index = htab->plt_got_index++;
9140 
9141       /* If the output file has no definition of the symbol, set the
9142 	 symbol's value to the address of the stub.  */
9143       if (!info->shared && !h->def_regular)
9144 	hmips->use_plt_entry = TRUE;
9145 
9146       /* Make room for the R_MIPS_JUMP_SLOT relocation.  */
9147       htab->srelplt->size += (htab->is_vxworks
9148 			      ? MIPS_ELF_RELA_SIZE (dynobj)
9149 			      : MIPS_ELF_REL_SIZE (dynobj));
9150 
9151       /* Make room for the .rela.plt.unloaded relocations.  */
9152       if (htab->is_vxworks && !info->shared)
9153 	htab->srelplt2->size += 3 * sizeof (Elf32_External_Rela);
9154 
9155       /* All relocations against this symbol that could have been made
9156 	 dynamic will now refer to the PLT entry instead.  */
9157       hmips->possibly_dynamic_relocs = 0;
9158 
9159       return TRUE;
9160     }
9161 
9162   /* If this is a weak symbol, and there is a real definition, the
9163      processor independent code will have arranged for us to see the
9164      real definition first, and we can just use the same value.  */
9165   if (h->u.weakdef != NULL)
9166     {
9167       BFD_ASSERT (h->u.weakdef->root.type == bfd_link_hash_defined
9168 		  || h->u.weakdef->root.type == bfd_link_hash_defweak);
9169       h->root.u.def.section = h->u.weakdef->root.u.def.section;
9170       h->root.u.def.value = h->u.weakdef->root.u.def.value;
9171       return TRUE;
9172     }
9173 
9174   /* Otherwise, there is nothing further to do for symbols defined
9175      in regular objects.  */
9176   if (h->def_regular)
9177     return TRUE;
9178 
9179   /* There's also nothing more to do if we'll convert all relocations
9180      against this symbol into dynamic relocations.  */
9181   if (!hmips->has_static_relocs)
9182     return TRUE;
9183 
9184   /* We're now relying on copy relocations.  Complain if we have
9185      some that we can't convert.  */
9186   if (!htab->use_plts_and_copy_relocs || info->shared)
9187     {
9188       (*_bfd_error_handler) (_("non-dynamic relocations refer to "
9189 			       "dynamic symbol %s"),
9190 			     h->root.root.string);
9191       bfd_set_error (bfd_error_bad_value);
9192       return FALSE;
9193     }
9194 
9195   /* We must allocate the symbol in our .dynbss section, which will
9196      become part of the .bss section of the executable.  There will be
9197      an entry for this symbol in the .dynsym section.  The dynamic
9198      object will contain position independent code, so all references
9199      from the dynamic object to this symbol will go through the global
9200      offset table.  The dynamic linker will use the .dynsym entry to
9201      determine the address it must put in the global offset table, so
9202      both the dynamic object and the regular object will refer to the
9203      same memory location for the variable.  */
9204 
9205   if ((h->root.u.def.section->flags & SEC_ALLOC) != 0)
9206     {
9207       if (htab->is_vxworks)
9208 	htab->srelbss->size += sizeof (Elf32_External_Rela);
9209       else
9210 	mips_elf_allocate_dynamic_relocations (dynobj, info, 1);
9211       h->needs_copy = 1;
9212     }
9213 
9214   /* All relocations against this symbol that could have been made
9215      dynamic will now refer to the local copy instead.  */
9216   hmips->possibly_dynamic_relocs = 0;
9217 
9218   return _bfd_elf_adjust_dynamic_copy (info, h, htab->sdynbss);
9219 }
9220 
9221 /* This function is called after all the input files have been read,
9222    and the input sections have been assigned to output sections.  We
9223    check for any mips16 stub sections that we can discard.  */
9224 
9225 bfd_boolean
9226 _bfd_mips_elf_always_size_sections (bfd *output_bfd,
9227 				    struct bfd_link_info *info)
9228 {
9229   asection *sect;
9230   struct mips_elf_link_hash_table *htab;
9231   struct mips_htab_traverse_info hti;
9232 
9233   htab = mips_elf_hash_table (info);
9234   BFD_ASSERT (htab != NULL);
9235 
9236   /* The .reginfo section has a fixed size.  */
9237   sect = bfd_get_section_by_name (output_bfd, ".reginfo");
9238   if (sect != NULL)
9239     bfd_set_section_size (output_bfd, sect, sizeof (Elf32_External_RegInfo));
9240 
9241   /* The .MIPS.abiflags section has a fixed size.  */
9242   sect = bfd_get_section_by_name (output_bfd, ".MIPS.abiflags");
9243   if (sect != NULL)
9244     bfd_set_section_size (output_bfd, sect, sizeof (Elf_External_ABIFlags_v0));
9245 
9246   hti.info = info;
9247   hti.output_bfd = output_bfd;
9248   hti.error = FALSE;
9249   mips_elf_link_hash_traverse (mips_elf_hash_table (info),
9250 			       mips_elf_check_symbols, &hti);
9251   if (hti.error)
9252     return FALSE;
9253 
9254   return TRUE;
9255 }
9256 
9257 /* If the link uses a GOT, lay it out and work out its size.  */
9258 
9259 static bfd_boolean
9260 mips_elf_lay_out_got (bfd *output_bfd, struct bfd_link_info *info)
9261 {
9262   bfd *dynobj;
9263   asection *s;
9264   struct mips_got_info *g;
9265   bfd_size_type loadable_size = 0;
9266   bfd_size_type page_gotno;
9267   bfd *ibfd;
9268   struct mips_elf_traverse_got_arg tga;
9269   struct mips_elf_link_hash_table *htab;
9270 
9271   htab = mips_elf_hash_table (info);
9272   BFD_ASSERT (htab != NULL);
9273 
9274   s = htab->sgot;
9275   if (s == NULL)
9276     return TRUE;
9277 
9278   dynobj = elf_hash_table (info)->dynobj;
9279   g = htab->got_info;
9280 
9281   /* Allocate room for the reserved entries.  VxWorks always reserves
9282      3 entries; other objects only reserve 2 entries.  */
9283   BFD_ASSERT (g->assigned_low_gotno == 0);
9284   if (htab->is_vxworks)
9285     htab->reserved_gotno = 3;
9286   else
9287     htab->reserved_gotno = 2;
9288   g->local_gotno += htab->reserved_gotno;
9289   g->assigned_low_gotno = htab->reserved_gotno;
9290 
9291   /* Decide which symbols need to go in the global part of the GOT and
9292      count the number of reloc-only GOT symbols.  */
9293   mips_elf_link_hash_traverse (htab, mips_elf_count_got_symbols, info);
9294 
9295   if (!mips_elf_resolve_final_got_entries (info, g))
9296     return FALSE;
9297 
9298   /* Calculate the total loadable size of the output.  That
9299      will give us the maximum number of GOT_PAGE entries
9300      required.  */
9301   for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9302     {
9303       asection *subsection;
9304 
9305       for (subsection = ibfd->sections;
9306 	   subsection;
9307 	   subsection = subsection->next)
9308 	{
9309 	  if ((subsection->flags & SEC_ALLOC) == 0)
9310 	    continue;
9311 	  loadable_size += ((subsection->size + 0xf)
9312 			    &~ (bfd_size_type) 0xf);
9313 	}
9314     }
9315 
9316   if (htab->is_vxworks)
9317     /* There's no need to allocate page entries for VxWorks; R_MIPS*_GOT16
9318        relocations against local symbols evaluate to "G", and the EABI does
9319        not include R_MIPS_GOT_PAGE.  */
9320     page_gotno = 0;
9321   else
9322     /* Assume there are two loadable segments consisting of contiguous
9323        sections.  Is 5 enough?  */
9324     page_gotno = (loadable_size >> 16) + 5;
9325 
9326   /* Choose the smaller of the two page estimates; both are intended to be
9327      conservative.  */
9328   if (page_gotno > g->page_gotno)
9329     page_gotno = g->page_gotno;
9330 
9331   g->local_gotno += page_gotno;
9332   g->assigned_high_gotno = g->local_gotno - 1;
9333 
9334   s->size += g->local_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9335   s->size += g->global_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9336   s->size += g->tls_gotno * MIPS_ELF_GOT_SIZE (output_bfd);
9337 
9338   /* VxWorks does not support multiple GOTs.  It initializes $gp to
9339      __GOTT_BASE__[__GOTT_INDEX__], the value of which is set by the
9340      dynamic loader.  */
9341   if (!htab->is_vxworks && s->size > MIPS_ELF_GOT_MAX_SIZE (info))
9342     {
9343       if (!mips_elf_multi_got (output_bfd, info, s, page_gotno))
9344 	return FALSE;
9345     }
9346   else
9347     {
9348       /* Record that all bfds use G.  This also has the effect of freeing
9349 	 the per-bfd GOTs, which we no longer need.  */
9350       for (ibfd = info->input_bfds; ibfd; ibfd = ibfd->link.next)
9351 	if (mips_elf_bfd_got (ibfd, FALSE))
9352 	  mips_elf_replace_bfd_got (ibfd, g);
9353       mips_elf_replace_bfd_got (output_bfd, g);
9354 
9355       /* Set up TLS entries.  */
9356       g->tls_assigned_gotno = g->global_gotno + g->local_gotno;
9357       tga.info = info;
9358       tga.g = g;
9359       tga.value = MIPS_ELF_GOT_SIZE (output_bfd);
9360       htab_traverse (g->got_entries, mips_elf_initialize_tls_index, &tga);
9361       if (!tga.g)
9362 	return FALSE;
9363       BFD_ASSERT (g->tls_assigned_gotno
9364 		  == g->global_gotno + g->local_gotno + g->tls_gotno);
9365 
9366       /* Each VxWorks GOT entry needs an explicit relocation.  */
9367       if (htab->is_vxworks && info->shared)
9368 	g->relocs += g->global_gotno + g->local_gotno - htab->reserved_gotno;
9369 
9370       /* Allocate room for the TLS relocations.  */
9371       if (g->relocs)
9372 	mips_elf_allocate_dynamic_relocations (dynobj, info, g->relocs);
9373     }
9374 
9375   return TRUE;
9376 }
9377 
9378 /* Estimate the size of the .MIPS.stubs section.  */
9379 
9380 static void
9381 mips_elf_estimate_stub_size (bfd *output_bfd, struct bfd_link_info *info)
9382 {
9383   struct mips_elf_link_hash_table *htab;
9384   bfd_size_type dynsymcount;
9385 
9386   htab = mips_elf_hash_table (info);
9387   BFD_ASSERT (htab != NULL);
9388 
9389   if (htab->lazy_stub_count == 0)
9390     return;
9391 
9392   /* IRIX rld assumes that a function stub isn't at the end of the .text
9393      section, so add a dummy entry to the end.  */
9394   htab->lazy_stub_count++;
9395 
9396   /* Get a worst-case estimate of the number of dynamic symbols needed.
9397      At this point, dynsymcount does not account for section symbols
9398      and count_section_dynsyms may overestimate the number that will
9399      be needed.  */
9400   dynsymcount = (elf_hash_table (info)->dynsymcount
9401 		 + count_section_dynsyms (output_bfd, info));
9402 
9403   /* Determine the size of one stub entry.  There's no disadvantage
9404      from using microMIPS code here, so for the sake of pure-microMIPS
9405      binaries we prefer it whenever there's any microMIPS code in
9406      output produced at all.  This has a benefit of stubs being
9407      shorter by 4 bytes each too, unless in the insn32 mode.  */
9408   if (!MICROMIPS_P (output_bfd))
9409     htab->function_stub_size = (dynsymcount > 0x10000
9410 				? MIPS_FUNCTION_STUB_BIG_SIZE
9411 				: MIPS_FUNCTION_STUB_NORMAL_SIZE);
9412   else if (htab->insn32)
9413     htab->function_stub_size = (dynsymcount > 0x10000
9414 				? MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE
9415 				: MICROMIPS_INSN32_FUNCTION_STUB_NORMAL_SIZE);
9416   else
9417     htab->function_stub_size = (dynsymcount > 0x10000
9418 				? MICROMIPS_FUNCTION_STUB_BIG_SIZE
9419 				: MICROMIPS_FUNCTION_STUB_NORMAL_SIZE);
9420 
9421   htab->sstubs->size = htab->lazy_stub_count * htab->function_stub_size;
9422 }
9423 
9424 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9425    mips_htab_traverse_info.  If H needs a traditional MIPS lazy-binding
9426    stub, allocate an entry in the stubs section.  */
9427 
9428 static bfd_boolean
9429 mips_elf_allocate_lazy_stub (struct mips_elf_link_hash_entry *h, void *data)
9430 {
9431   struct mips_htab_traverse_info *hti = data;
9432   struct mips_elf_link_hash_table *htab;
9433   struct bfd_link_info *info;
9434   bfd *output_bfd;
9435 
9436   info = hti->info;
9437   output_bfd = hti->output_bfd;
9438   htab = mips_elf_hash_table (info);
9439   BFD_ASSERT (htab != NULL);
9440 
9441   if (h->needs_lazy_stub)
9442     {
9443       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9444       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9445       bfd_vma isa_bit = micromips_p;
9446 
9447       BFD_ASSERT (htab->root.dynobj != NULL);
9448       if (h->root.plt.plist == NULL)
9449 	h->root.plt.plist = mips_elf_make_plt_record (htab->sstubs->owner);
9450       if (h->root.plt.plist == NULL)
9451 	{
9452 	  hti->error = TRUE;
9453 	  return FALSE;
9454 	}
9455       h->root.root.u.def.section = htab->sstubs;
9456       h->root.root.u.def.value = htab->sstubs->size + isa_bit;
9457       h->root.plt.plist->stub_offset = htab->sstubs->size;
9458       h->root.other = other;
9459       htab->sstubs->size += htab->function_stub_size;
9460     }
9461   return TRUE;
9462 }
9463 
9464 /* Allocate offsets in the stubs section to each symbol that needs one.
9465    Set the final size of the .MIPS.stub section.  */
9466 
9467 static bfd_boolean
9468 mips_elf_lay_out_lazy_stubs (struct bfd_link_info *info)
9469 {
9470   bfd *output_bfd = info->output_bfd;
9471   bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
9472   unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9473   bfd_vma isa_bit = micromips_p;
9474   struct mips_elf_link_hash_table *htab;
9475   struct mips_htab_traverse_info hti;
9476   struct elf_link_hash_entry *h;
9477   bfd *dynobj;
9478 
9479   htab = mips_elf_hash_table (info);
9480   BFD_ASSERT (htab != NULL);
9481 
9482   if (htab->lazy_stub_count == 0)
9483     return TRUE;
9484 
9485   htab->sstubs->size = 0;
9486   hti.info = info;
9487   hti.output_bfd = output_bfd;
9488   hti.error = FALSE;
9489   mips_elf_link_hash_traverse (htab, mips_elf_allocate_lazy_stub, &hti);
9490   if (hti.error)
9491     return FALSE;
9492   htab->sstubs->size += htab->function_stub_size;
9493   BFD_ASSERT (htab->sstubs->size
9494 	      == htab->lazy_stub_count * htab->function_stub_size);
9495 
9496   dynobj = elf_hash_table (info)->dynobj;
9497   BFD_ASSERT (dynobj != NULL);
9498   h = _bfd_elf_define_linkage_sym (dynobj, info, htab->sstubs, "_MIPS_STUBS_");
9499   if (h == NULL)
9500     return FALSE;
9501   h->root.u.def.value = isa_bit;
9502   h->other = other;
9503   h->type = STT_FUNC;
9504 
9505   return TRUE;
9506 }
9507 
9508 /* A mips_elf_link_hash_traverse callback for which DATA points to a
9509    bfd_link_info.  If H uses the address of a PLT entry as the value
9510    of the symbol, then set the entry in the symbol table now.  Prefer
9511    a standard MIPS PLT entry.  */
9512 
9513 static bfd_boolean
9514 mips_elf_set_plt_sym_value (struct mips_elf_link_hash_entry *h, void *data)
9515 {
9516   struct bfd_link_info *info = data;
9517   bfd_boolean micromips_p = MICROMIPS_P (info->output_bfd);
9518   struct mips_elf_link_hash_table *htab;
9519   unsigned int other;
9520   bfd_vma isa_bit;
9521   bfd_vma val;
9522 
9523   htab = mips_elf_hash_table (info);
9524   BFD_ASSERT (htab != NULL);
9525 
9526   if (h->use_plt_entry)
9527     {
9528       BFD_ASSERT (h->root.plt.plist != NULL);
9529       BFD_ASSERT (h->root.plt.plist->mips_offset != MINUS_ONE
9530 		  || h->root.plt.plist->comp_offset != MINUS_ONE);
9531 
9532       val = htab->plt_header_size;
9533       if (h->root.plt.plist->mips_offset != MINUS_ONE)
9534 	{
9535 	  isa_bit = 0;
9536 	  val += h->root.plt.plist->mips_offset;
9537 	  other = 0;
9538 	}
9539       else
9540 	{
9541 	  isa_bit = 1;
9542 	  val += htab->plt_mips_offset + h->root.plt.plist->comp_offset;
9543 	  other = micromips_p ? STO_MICROMIPS : STO_MIPS16;
9544 	}
9545       val += isa_bit;
9546       /* For VxWorks, point at the PLT load stub rather than the lazy
9547          resolution stub; this stub will become the canonical function
9548          address.  */
9549       if (htab->is_vxworks)
9550 	val += 8;
9551 
9552       h->root.root.u.def.section = htab->splt;
9553       h->root.root.u.def.value = val;
9554       h->root.other = other;
9555     }
9556 
9557   return TRUE;
9558 }
9559 
9560 /* Set the sizes of the dynamic sections.  */
9561 
9562 bfd_boolean
9563 _bfd_mips_elf_size_dynamic_sections (bfd *output_bfd,
9564 				     struct bfd_link_info *info)
9565 {
9566   bfd *dynobj;
9567   asection *s, *sreldyn;
9568   bfd_boolean reltext;
9569   struct mips_elf_link_hash_table *htab;
9570 
9571   htab = mips_elf_hash_table (info);
9572   BFD_ASSERT (htab != NULL);
9573   dynobj = elf_hash_table (info)->dynobj;
9574   BFD_ASSERT (dynobj != NULL);
9575 
9576   if (elf_hash_table (info)->dynamic_sections_created)
9577     {
9578       /* Set the contents of the .interp section to the interpreter.  */
9579       if (info->executable)
9580 	{
9581 	  s = bfd_get_linker_section (dynobj, ".interp");
9582 	  BFD_ASSERT (s != NULL);
9583 	  s->size
9584 	    = strlen (ELF_DYNAMIC_INTERPRETER (output_bfd)) + 1;
9585 	  s->contents
9586 	    = (bfd_byte *) ELF_DYNAMIC_INTERPRETER (output_bfd);
9587 	}
9588 
9589       /* Figure out the size of the PLT header if we know that we
9590          are using it.  For the sake of cache alignment always use
9591          a standard header whenever any standard entries are present
9592          even if microMIPS entries are present as well.  This also
9593          lets the microMIPS header rely on the value of $v0 only set
9594          by microMIPS entries, for a small size reduction.
9595 
9596          Set symbol table entry values for symbols that use the
9597          address of their PLT entry now that we can calculate it.
9598 
9599          Also create the _PROCEDURE_LINKAGE_TABLE_ symbol if we
9600          haven't already in _bfd_elf_create_dynamic_sections.  */
9601       if (htab->splt && htab->plt_mips_offset + htab->plt_comp_offset != 0)
9602 	{
9603 	  bfd_boolean micromips_p = (MICROMIPS_P (output_bfd)
9604 				     && !htab->plt_mips_offset);
9605 	  unsigned int other = micromips_p ? STO_MICROMIPS : 0;
9606 	  bfd_vma isa_bit = micromips_p;
9607 	  struct elf_link_hash_entry *h;
9608 	  bfd_vma size;
9609 
9610 	  BFD_ASSERT (htab->use_plts_and_copy_relocs);
9611 	  BFD_ASSERT (htab->sgotplt->size == 0);
9612 	  BFD_ASSERT (htab->splt->size == 0);
9613 
9614 	  if (htab->is_vxworks && info->shared)
9615 	    size = 4 * ARRAY_SIZE (mips_vxworks_shared_plt0_entry);
9616 	  else if (htab->is_vxworks)
9617 	    size = 4 * ARRAY_SIZE (mips_vxworks_exec_plt0_entry);
9618 	  else if (ABI_64_P (output_bfd))
9619 	    size = 4 * ARRAY_SIZE (mips_n64_exec_plt0_entry);
9620 	  else if (ABI_N32_P (output_bfd))
9621 	    size = 4 * ARRAY_SIZE (mips_n32_exec_plt0_entry);
9622 	  else if (!micromips_p)
9623 	    size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
9624 	  else if (htab->insn32)
9625 	    size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
9626 	  else
9627 	    size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
9628 
9629 	  htab->plt_header_is_comp = micromips_p;
9630 	  htab->plt_header_size = size;
9631 	  htab->splt->size = (size
9632 			      + htab->plt_mips_offset
9633 			      + htab->plt_comp_offset);
9634 	  htab->sgotplt->size = (htab->plt_got_index
9635 				 * MIPS_ELF_GOT_SIZE (dynobj));
9636 
9637 	  mips_elf_link_hash_traverse (htab, mips_elf_set_plt_sym_value, info);
9638 
9639 	  if (htab->root.hplt == NULL)
9640 	    {
9641 	      h = _bfd_elf_define_linkage_sym (dynobj, info, htab->splt,
9642 					       "_PROCEDURE_LINKAGE_TABLE_");
9643 	      htab->root.hplt = h;
9644 	      if (h == NULL)
9645 		return FALSE;
9646 	    }
9647 
9648 	  h = htab->root.hplt;
9649 	  h->root.u.def.value = isa_bit;
9650 	  h->other = other;
9651 	  h->type = STT_FUNC;
9652 	}
9653     }
9654 
9655   /* Allocate space for global sym dynamic relocs.  */
9656   elf_link_hash_traverse (&htab->root, allocate_dynrelocs, info);
9657 
9658   mips_elf_estimate_stub_size (output_bfd, info);
9659 
9660   if (!mips_elf_lay_out_got (output_bfd, info))
9661     return FALSE;
9662 
9663   mips_elf_lay_out_lazy_stubs (info);
9664 
9665   /* The check_relocs and adjust_dynamic_symbol entry points have
9666      determined the sizes of the various dynamic sections.  Allocate
9667      memory for them.  */
9668   reltext = FALSE;
9669   for (s = dynobj->sections; s != NULL; s = s->next)
9670     {
9671       const char *name;
9672 
9673       /* It's OK to base decisions on the section name, because none
9674 	 of the dynobj section names depend upon the input files.  */
9675       name = bfd_get_section_name (dynobj, s);
9676 
9677       if ((s->flags & SEC_LINKER_CREATED) == 0)
9678 	continue;
9679 
9680       if (CONST_STRNEQ (name, ".rel"))
9681 	{
9682 	  if (s->size != 0)
9683 	    {
9684 	      const char *outname;
9685 	      asection *target;
9686 
9687 	      /* If this relocation section applies to a read only
9688                  section, then we probably need a DT_TEXTREL entry.
9689                  If the relocation section is .rel(a).dyn, we always
9690                  assert a DT_TEXTREL entry rather than testing whether
9691                  there exists a relocation to a read only section or
9692                  not.  */
9693 	      outname = bfd_get_section_name (output_bfd,
9694 					      s->output_section);
9695 	      target = bfd_get_section_by_name (output_bfd, outname + 4);
9696 	      if ((target != NULL
9697 		   && (target->flags & SEC_READONLY) != 0
9698 		   && (target->flags & SEC_ALLOC) != 0)
9699 		  || strcmp (outname, MIPS_ELF_REL_DYN_NAME (info)) == 0)
9700 		reltext = TRUE;
9701 
9702 	      /* We use the reloc_count field as a counter if we need
9703 		 to copy relocs into the output file.  */
9704 	      if (strcmp (name, MIPS_ELF_REL_DYN_NAME (info)) != 0)
9705 		s->reloc_count = 0;
9706 
9707 	      /* If combreloc is enabled, elf_link_sort_relocs() will
9708 		 sort relocations, but in a different way than we do,
9709 		 and before we're done creating relocations.  Also, it
9710 		 will move them around between input sections'
9711 		 relocation's contents, so our sorting would be
9712 		 broken, so don't let it run.  */
9713 	      info->combreloc = 0;
9714 	    }
9715 	}
9716       else if (! info->shared
9717 	       && ! mips_elf_hash_table (info)->use_rld_obj_head
9718 	       && CONST_STRNEQ (name, ".rld_map"))
9719 	{
9720 	  /* We add a room for __rld_map.  It will be filled in by the
9721 	     rtld to contain a pointer to the _r_debug structure.  */
9722 	  s->size += MIPS_ELF_RLD_MAP_SIZE (output_bfd);
9723 	}
9724       else if (SGI_COMPAT (output_bfd)
9725 	       && CONST_STRNEQ (name, ".compact_rel"))
9726 	s->size += mips_elf_hash_table (info)->compact_rel_size;
9727       else if (s == htab->splt)
9728 	{
9729 	  /* If the last PLT entry has a branch delay slot, allocate
9730 	     room for an extra nop to fill the delay slot.  This is
9731 	     for CPUs without load interlocking.  */
9732 	  if (! LOAD_INTERLOCKS_P (output_bfd)
9733 	      && ! htab->is_vxworks && s->size > 0)
9734 	    s->size += 4;
9735 	}
9736       else if (! CONST_STRNEQ (name, ".init")
9737 	       && s != htab->sgot
9738 	       && s != htab->sgotplt
9739 	       && s != htab->sstubs
9740 	       && s != htab->sdynbss)
9741 	{
9742 	  /* It's not one of our sections, so don't allocate space.  */
9743 	  continue;
9744 	}
9745 
9746       if (s->size == 0)
9747 	{
9748 	  s->flags |= SEC_EXCLUDE;
9749 	  continue;
9750 	}
9751 
9752       if ((s->flags & SEC_HAS_CONTENTS) == 0)
9753 	continue;
9754 
9755       /* Allocate memory for the section contents.  */
9756       s->contents = bfd_zalloc (dynobj, s->size);
9757       if (s->contents == NULL)
9758 	{
9759 	  bfd_set_error (bfd_error_no_memory);
9760 	  return FALSE;
9761 	}
9762     }
9763 
9764   if (elf_hash_table (info)->dynamic_sections_created)
9765     {
9766       /* Add some entries to the .dynamic section.  We fill in the
9767 	 values later, in _bfd_mips_elf_finish_dynamic_sections, but we
9768 	 must add the entries now so that we get the correct size for
9769 	 the .dynamic section.  */
9770 
9771       /* SGI object has the equivalence of DT_DEBUG in the
9772 	 DT_MIPS_RLD_MAP entry.  This must come first because glibc
9773 	 only fills in DT_MIPS_RLD_MAP (not DT_DEBUG) and some tools
9774 	 may only look at the first one they see.  */
9775       if (!info->shared
9776 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_MAP, 0))
9777 	return FALSE;
9778 
9779       /* The DT_DEBUG entry may be filled in by the dynamic linker and
9780 	 used by the debugger.  */
9781       if (info->executable
9782 	  && !SGI_COMPAT (output_bfd)
9783 	  && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_DEBUG, 0))
9784 	return FALSE;
9785 
9786       if (reltext && (SGI_COMPAT (output_bfd) || htab->is_vxworks))
9787 	info->flags |= DF_TEXTREL;
9788 
9789       if ((info->flags & DF_TEXTREL) != 0)
9790 	{
9791 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_TEXTREL, 0))
9792 	    return FALSE;
9793 
9794 	  /* Clear the DF_TEXTREL flag.  It will be set again if we
9795 	     write out an actual text relocation; we may not, because
9796 	     at this point we do not know whether e.g. any .eh_frame
9797 	     absolute relocations have been converted to PC-relative.  */
9798 	  info->flags &= ~DF_TEXTREL;
9799 	}
9800 
9801       if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTGOT, 0))
9802 	return FALSE;
9803 
9804       sreldyn = mips_elf_rel_dyn_section (info, FALSE);
9805       if (htab->is_vxworks)
9806 	{
9807 	  /* VxWorks uses .rela.dyn instead of .rel.dyn.  It does not
9808 	     use any of the DT_MIPS_* tags.  */
9809 	  if (sreldyn && sreldyn->size > 0)
9810 	    {
9811 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELA, 0))
9812 		return FALSE;
9813 
9814 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELASZ, 0))
9815 		return FALSE;
9816 
9817 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELAENT, 0))
9818 		return FALSE;
9819 	    }
9820 	}
9821       else
9822 	{
9823 	  if (sreldyn && sreldyn->size > 0)
9824 	    {
9825 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_REL, 0))
9826 		return FALSE;
9827 
9828 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELSZ, 0))
9829 		return FALSE;
9830 
9831 	      if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_RELENT, 0))
9832 		return FALSE;
9833 	    }
9834 
9835 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_RLD_VERSION, 0))
9836 	    return FALSE;
9837 
9838 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_FLAGS, 0))
9839 	    return FALSE;
9840 
9841 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_BASE_ADDRESS, 0))
9842 	    return FALSE;
9843 
9844 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_LOCAL_GOTNO, 0))
9845 	    return FALSE;
9846 
9847 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_SYMTABNO, 0))
9848 	    return FALSE;
9849 
9850 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_UNREFEXTNO, 0))
9851 	    return FALSE;
9852 
9853 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_GOTSYM, 0))
9854 	    return FALSE;
9855 
9856 	  if (IRIX_COMPAT (dynobj) == ict_irix5
9857 	      && ! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_HIPAGENO, 0))
9858 	    return FALSE;
9859 
9860 	  if (IRIX_COMPAT (dynobj) == ict_irix6
9861 	      && (bfd_get_section_by_name
9862 		  (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (dynobj)))
9863 	      && !MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_OPTIONS, 0))
9864 	    return FALSE;
9865 	}
9866       if (htab->splt->size > 0)
9867 	{
9868 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTREL, 0))
9869 	    return FALSE;
9870 
9871 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_JMPREL, 0))
9872 	    return FALSE;
9873 
9874 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_PLTRELSZ, 0))
9875 	    return FALSE;
9876 
9877 	  if (! MIPS_ELF_ADD_DYNAMIC_ENTRY (info, DT_MIPS_PLTGOT, 0))
9878 	    return FALSE;
9879 	}
9880       if (htab->is_vxworks
9881 	  && !elf_vxworks_add_dynamic_entries (output_bfd, info))
9882 	return FALSE;
9883     }
9884 
9885   return TRUE;
9886 }
9887 
9888 /* REL is a relocation in INPUT_BFD that is being copied to OUTPUT_BFD.
9889    Adjust its R_ADDEND field so that it is correct for the output file.
9890    LOCAL_SYMS and LOCAL_SECTIONS are arrays of INPUT_BFD's local symbols
9891    and sections respectively; both use symbol indexes.  */
9892 
9893 static void
9894 mips_elf_adjust_addend (bfd *output_bfd, struct bfd_link_info *info,
9895 			bfd *input_bfd, Elf_Internal_Sym *local_syms,
9896 			asection **local_sections, Elf_Internal_Rela *rel)
9897 {
9898   unsigned int r_type, r_symndx;
9899   Elf_Internal_Sym *sym;
9900   asection *sec;
9901 
9902   if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
9903     {
9904       r_type = ELF_R_TYPE (output_bfd, rel->r_info);
9905       if (gprel16_reloc_p (r_type)
9906 	  || r_type == R_MIPS_GPREL32
9907 	  || literal_reloc_p (r_type))
9908 	{
9909 	  rel->r_addend += _bfd_get_gp_value (input_bfd);
9910 	  rel->r_addend -= _bfd_get_gp_value (output_bfd);
9911 	}
9912 
9913       r_symndx = ELF_R_SYM (output_bfd, rel->r_info);
9914       sym = local_syms + r_symndx;
9915 
9916       /* Adjust REL's addend to account for section merging.  */
9917       if (!info->relocatable)
9918 	{
9919 	  sec = local_sections[r_symndx];
9920 	  _bfd_elf_rela_local_sym (output_bfd, sym, &sec, rel);
9921 	}
9922 
9923       /* This would normally be done by the rela_normal code in elflink.c.  */
9924       if (ELF_ST_TYPE (sym->st_info) == STT_SECTION)
9925 	rel->r_addend += local_sections[r_symndx]->output_offset;
9926     }
9927 }
9928 
9929 /* Handle relocations against symbols from removed linkonce sections,
9930    or sections discarded by a linker script.  We use this wrapper around
9931    RELOC_AGAINST_DISCARDED_SECTION to handle triplets of compound relocs
9932    on 64-bit ELF targets.  In this case for any relocation handled, which
9933    always be the first in a triplet, the remaining two have to be processed
9934    together with the first, even if they are R_MIPS_NONE.  It is the symbol
9935    index referred by the first reloc that applies to all the three and the
9936    remaining two never refer to an object symbol.  And it is the final
9937    relocation (the last non-null one) that determines the output field of
9938    the whole relocation so retrieve the corresponding howto structure for
9939    the relocatable field to be cleared by RELOC_AGAINST_DISCARDED_SECTION.
9940 
9941    Note that RELOC_AGAINST_DISCARDED_SECTION is a macro that uses "continue"
9942    and therefore requires to be pasted in a loop.  It also defines a block
9943    and does not protect any of its arguments, hence the extra brackets.  */
9944 
9945 static void
9946 mips_reloc_against_discarded_section (bfd *output_bfd,
9947 				      struct bfd_link_info *info,
9948 				      bfd *input_bfd, asection *input_section,
9949 				      Elf_Internal_Rela **rel,
9950 				      const Elf_Internal_Rela **relend,
9951 				      bfd_boolean rel_reloc,
9952 				      reloc_howto_type *howto,
9953 				      bfd_byte *contents)
9954 {
9955   const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
9956   int count = bed->s->int_rels_per_ext_rel;
9957   unsigned int r_type;
9958   int i;
9959 
9960   for (i = count - 1; i > 0; i--)
9961     {
9962       r_type = ELF_R_TYPE (output_bfd, (*rel)[i].r_info);
9963       if (r_type != R_MIPS_NONE)
9964 	{
9965 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
9966 	  break;
9967 	}
9968     }
9969   do
9970     {
9971        RELOC_AGAINST_DISCARDED_SECTION (info, input_bfd, input_section,
9972 					(*rel), count, (*relend),
9973 					howto, i, contents);
9974     }
9975   while (0);
9976 }
9977 
9978 /* Relocate a MIPS ELF section.  */
9979 
9980 bfd_boolean
9981 _bfd_mips_elf_relocate_section (bfd *output_bfd, struct bfd_link_info *info,
9982 				bfd *input_bfd, asection *input_section,
9983 				bfd_byte *contents, Elf_Internal_Rela *relocs,
9984 				Elf_Internal_Sym *local_syms,
9985 				asection **local_sections)
9986 {
9987   Elf_Internal_Rela *rel;
9988   const Elf_Internal_Rela *relend;
9989   bfd_vma addend = 0;
9990   bfd_boolean use_saved_addend_p = FALSE;
9991   const struct elf_backend_data *bed;
9992 
9993   bed = get_elf_backend_data (output_bfd);
9994   relend = relocs + input_section->reloc_count * bed->s->int_rels_per_ext_rel;
9995   for (rel = relocs; rel < relend; ++rel)
9996     {
9997       const char *name;
9998       bfd_vma value = 0;
9999       reloc_howto_type *howto;
10000       bfd_boolean cross_mode_jump_p = FALSE;
10001       /* TRUE if the relocation is a RELA relocation, rather than a
10002          REL relocation.  */
10003       bfd_boolean rela_relocation_p = TRUE;
10004       unsigned int r_type = ELF_R_TYPE (output_bfd, rel->r_info);
10005       const char *msg;
10006       unsigned long r_symndx;
10007       asection *sec;
10008       Elf_Internal_Shdr *symtab_hdr;
10009       struct elf_link_hash_entry *h;
10010       bfd_boolean rel_reloc;
10011 
10012       rel_reloc = (NEWABI_P (input_bfd)
10013 		   && mips_elf_rel_relocation_p (input_bfd, input_section,
10014 						 relocs, rel));
10015       /* Find the relocation howto for this relocation.  */
10016       howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, r_type, !rel_reloc);
10017 
10018       r_symndx = ELF_R_SYM (input_bfd, rel->r_info);
10019       symtab_hdr = &elf_tdata (input_bfd)->symtab_hdr;
10020       if (mips_elf_local_relocation_p (input_bfd, rel, local_sections))
10021 	{
10022 	  sec = local_sections[r_symndx];
10023 	  h = NULL;
10024 	}
10025       else
10026 	{
10027 	  unsigned long extsymoff;
10028 
10029 	  extsymoff = 0;
10030 	  if (!elf_bad_symtab (input_bfd))
10031 	    extsymoff = symtab_hdr->sh_info;
10032 	  h = elf_sym_hashes (input_bfd) [r_symndx - extsymoff];
10033 	  while (h->root.type == bfd_link_hash_indirect
10034 		 || h->root.type == bfd_link_hash_warning)
10035 	    h = (struct elf_link_hash_entry *) h->root.u.i.link;
10036 
10037 	  sec = NULL;
10038 	  if (h->root.type == bfd_link_hash_defined
10039 	      || h->root.type == bfd_link_hash_defweak)
10040 	    sec = h->root.u.def.section;
10041 	}
10042 
10043       if (sec != NULL && discarded_section (sec))
10044 	{
10045 	  mips_reloc_against_discarded_section (output_bfd, info, input_bfd,
10046 						input_section, &rel, &relend,
10047 						rel_reloc, howto, contents);
10048 	  continue;
10049 	}
10050 
10051       if (r_type == R_MIPS_64 && ! NEWABI_P (input_bfd))
10052 	{
10053 	  /* Some 32-bit code uses R_MIPS_64.  In particular, people use
10054 	     64-bit code, but make sure all their addresses are in the
10055 	     lowermost or uppermost 32-bit section of the 64-bit address
10056 	     space.  Thus, when they use an R_MIPS_64 they mean what is
10057 	     usually meant by R_MIPS_32, with the exception that the
10058 	     stored value is sign-extended to 64 bits.  */
10059 	  howto = MIPS_ELF_RTYPE_TO_HOWTO (input_bfd, R_MIPS_32, FALSE);
10060 
10061 	  /* On big-endian systems, we need to lie about the position
10062 	     of the reloc.  */
10063 	  if (bfd_big_endian (input_bfd))
10064 	    rel->r_offset += 4;
10065 	}
10066 
10067       if (!use_saved_addend_p)
10068 	{
10069 	  /* If these relocations were originally of the REL variety,
10070 	     we must pull the addend out of the field that will be
10071 	     relocated.  Otherwise, we simply use the contents of the
10072 	     RELA relocation.  */
10073 	  if (mips_elf_rel_relocation_p (input_bfd, input_section,
10074 					 relocs, rel))
10075 	    {
10076 	      rela_relocation_p = FALSE;
10077 	      addend = mips_elf_read_rel_addend (input_bfd, rel,
10078 						 howto, contents);
10079 	      if (hi16_reloc_p (r_type)
10080 		  || (got16_reloc_p (r_type)
10081 		      && mips_elf_local_relocation_p (input_bfd, rel,
10082 						      local_sections)))
10083 		{
10084 		  if (!mips_elf_add_lo16_rel_addend (input_bfd, rel, relend,
10085 						     contents, &addend))
10086 		    {
10087 		      if (h)
10088 			name = h->root.root.string;
10089 		      else
10090 			name = bfd_elf_sym_name (input_bfd, symtab_hdr,
10091 						 local_syms + r_symndx,
10092 						 sec);
10093 		      (*_bfd_error_handler)
10094 			(_("%B: Can't find matching LO16 reloc against `%s' for %s at 0x%lx in section `%A'"),
10095 			 input_bfd, input_section, name, howto->name,
10096 			 rel->r_offset);
10097 		    }
10098 		}
10099 	      else
10100 		addend <<= howto->rightshift;
10101 	    }
10102 	  else
10103 	    addend = rel->r_addend;
10104 	  mips_elf_adjust_addend (output_bfd, info, input_bfd,
10105 				  local_syms, local_sections, rel);
10106 	}
10107 
10108       if (info->relocatable)
10109 	{
10110 	  if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd)
10111 	      && bfd_big_endian (input_bfd))
10112 	    rel->r_offset -= 4;
10113 
10114 	  if (!rela_relocation_p && rel->r_addend)
10115 	    {
10116 	      addend += rel->r_addend;
10117 	      if (hi16_reloc_p (r_type) || got16_reloc_p (r_type))
10118 		addend = mips_elf_high (addend);
10119 	      else if (r_type == R_MIPS_HIGHER)
10120 		addend = mips_elf_higher (addend);
10121 	      else if (r_type == R_MIPS_HIGHEST)
10122 		addend = mips_elf_highest (addend);
10123 	      else
10124 		addend >>= howto->rightshift;
10125 
10126 	      /* We use the source mask, rather than the destination
10127 		 mask because the place to which we are writing will be
10128 		 source of the addend in the final link.  */
10129 	      addend &= howto->src_mask;
10130 
10131 	      if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10132 		/* See the comment above about using R_MIPS_64 in the 32-bit
10133 		   ABI.  Here, we need to update the addend.  It would be
10134 		   possible to get away with just using the R_MIPS_32 reloc
10135 		   but for endianness.  */
10136 		{
10137 		  bfd_vma sign_bits;
10138 		  bfd_vma low_bits;
10139 		  bfd_vma high_bits;
10140 
10141 		  if (addend & ((bfd_vma) 1 << 31))
10142 #ifdef BFD64
10143 		    sign_bits = ((bfd_vma) 1 << 32) - 1;
10144 #else
10145 		    sign_bits = -1;
10146 #endif
10147 		  else
10148 		    sign_bits = 0;
10149 
10150 		  /* If we don't know that we have a 64-bit type,
10151 		     do two separate stores.  */
10152 		  if (bfd_big_endian (input_bfd))
10153 		    {
10154 		      /* Store the sign-bits (which are most significant)
10155 			 first.  */
10156 		      low_bits = sign_bits;
10157 		      high_bits = addend;
10158 		    }
10159 		  else
10160 		    {
10161 		      low_bits = addend;
10162 		      high_bits = sign_bits;
10163 		    }
10164 		  bfd_put_32 (input_bfd, low_bits,
10165 			      contents + rel->r_offset);
10166 		  bfd_put_32 (input_bfd, high_bits,
10167 			      contents + rel->r_offset + 4);
10168 		  continue;
10169 		}
10170 
10171 	      if (! mips_elf_perform_relocation (info, howto, rel, addend,
10172 						 input_bfd, input_section,
10173 						 contents, FALSE))
10174 		return FALSE;
10175 	    }
10176 
10177 	  /* Go on to the next relocation.  */
10178 	  continue;
10179 	}
10180 
10181       /* In the N32 and 64-bit ABIs there may be multiple consecutive
10182 	 relocations for the same offset.  In that case we are
10183 	 supposed to treat the output of each relocation as the addend
10184 	 for the next.  */
10185       if (rel + 1 < relend
10186 	  && rel->r_offset == rel[1].r_offset
10187 	  && ELF_R_TYPE (input_bfd, rel[1].r_info) != R_MIPS_NONE)
10188 	use_saved_addend_p = TRUE;
10189       else
10190 	use_saved_addend_p = FALSE;
10191 
10192       /* Figure out what value we are supposed to relocate.  */
10193       switch (mips_elf_calculate_relocation (output_bfd, input_bfd,
10194 					     input_section, info, rel,
10195 					     addend, howto, local_syms,
10196 					     local_sections, &value,
10197 					     &name, &cross_mode_jump_p,
10198 					     use_saved_addend_p))
10199 	{
10200 	case bfd_reloc_continue:
10201 	  /* There's nothing to do.  */
10202 	  continue;
10203 
10204 	case bfd_reloc_undefined:
10205 	  /* mips_elf_calculate_relocation already called the
10206 	     undefined_symbol callback.  There's no real point in
10207 	     trying to perform the relocation at this point, so we
10208 	     just skip ahead to the next relocation.  */
10209 	  continue;
10210 
10211 	case bfd_reloc_notsupported:
10212 	  msg = _("internal error: unsupported relocation error");
10213 	  info->callbacks->warning
10214 	    (info, msg, name, input_bfd, input_section, rel->r_offset);
10215 	  return FALSE;
10216 
10217 	case bfd_reloc_overflow:
10218 	  if (use_saved_addend_p)
10219 	    /* Ignore overflow until we reach the last relocation for
10220 	       a given location.  */
10221 	    ;
10222 	  else
10223 	    {
10224 	      struct mips_elf_link_hash_table *htab;
10225 
10226 	      htab = mips_elf_hash_table (info);
10227 	      BFD_ASSERT (htab != NULL);
10228 	      BFD_ASSERT (name != NULL);
10229 	      if (!htab->small_data_overflow_reported
10230 		  && (gprel16_reloc_p (howto->type)
10231 		      || literal_reloc_p (howto->type)))
10232 		{
10233 		  msg = _("small-data section exceeds 64KB;"
10234 			  " lower small-data size limit (see option -G)");
10235 
10236 		  htab->small_data_overflow_reported = TRUE;
10237 		  (*info->callbacks->einfo) ("%P: %s\n", msg);
10238 		}
10239 	      if (! ((*info->callbacks->reloc_overflow)
10240 		     (info, NULL, name, howto->name, (bfd_vma) 0,
10241 		      input_bfd, input_section, rel->r_offset)))
10242 		return FALSE;
10243 	    }
10244 	  break;
10245 
10246 	case bfd_reloc_ok:
10247 	  break;
10248 
10249 	case bfd_reloc_outofrange:
10250 	  if (jal_reloc_p (howto->type))
10251 	    {
10252 	      msg = _("JALX to a non-word-aligned address");
10253 	      info->callbacks->warning
10254 		(info, msg, name, input_bfd, input_section, rel->r_offset);
10255 	      return FALSE;
10256 	    }
10257 	  if (aligned_pcrel_reloc_p (howto->type))
10258 	    {
10259 	      msg = _("PC-relative load from unaligned address");
10260 	      info->callbacks->warning
10261 		(info, msg, name, input_bfd, input_section, rel->r_offset);
10262 	      return FALSE;
10263 	    }
10264 	  /* Fall through.  */
10265 
10266 	default:
10267 	  abort ();
10268 	  break;
10269 	}
10270 
10271       /* If we've got another relocation for the address, keep going
10272 	 until we reach the last one.  */
10273       if (use_saved_addend_p)
10274 	{
10275 	  addend = value;
10276 	  continue;
10277 	}
10278 
10279       if (r_type == R_MIPS_64 && ! NEWABI_P (output_bfd))
10280 	/* See the comment above about using R_MIPS_64 in the 32-bit
10281 	   ABI.  Until now, we've been using the HOWTO for R_MIPS_32;
10282 	   that calculated the right value.  Now, however, we
10283 	   sign-extend the 32-bit result to 64-bits, and store it as a
10284 	   64-bit value.  We are especially generous here in that we
10285 	   go to extreme lengths to support this usage on systems with
10286 	   only a 32-bit VMA.  */
10287 	{
10288 	  bfd_vma sign_bits;
10289 	  bfd_vma low_bits;
10290 	  bfd_vma high_bits;
10291 
10292 	  if (value & ((bfd_vma) 1 << 31))
10293 #ifdef BFD64
10294 	    sign_bits = ((bfd_vma) 1 << 32) - 1;
10295 #else
10296 	    sign_bits = -1;
10297 #endif
10298 	  else
10299 	    sign_bits = 0;
10300 
10301 	  /* If we don't know that we have a 64-bit type,
10302 	     do two separate stores.  */
10303 	  if (bfd_big_endian (input_bfd))
10304 	    {
10305 	      /* Undo what we did above.  */
10306 	      rel->r_offset -= 4;
10307 	      /* Store the sign-bits (which are most significant)
10308 		 first.  */
10309 	      low_bits = sign_bits;
10310 	      high_bits = value;
10311 	    }
10312 	  else
10313 	    {
10314 	      low_bits = value;
10315 	      high_bits = sign_bits;
10316 	    }
10317 	  bfd_put_32 (input_bfd, low_bits,
10318 		      contents + rel->r_offset);
10319 	  bfd_put_32 (input_bfd, high_bits,
10320 		      contents + rel->r_offset + 4);
10321 	  continue;
10322 	}
10323 
10324       /* Actually perform the relocation.  */
10325       if (! mips_elf_perform_relocation (info, howto, rel, value,
10326 					 input_bfd, input_section,
10327 					 contents, cross_mode_jump_p))
10328 	return FALSE;
10329     }
10330 
10331   return TRUE;
10332 }
10333 
10334 /* A function that iterates over each entry in la25_stubs and fills
10335    in the code for each one.  DATA points to a mips_htab_traverse_info.  */
10336 
10337 static int
10338 mips_elf_create_la25_stub (void **slot, void *data)
10339 {
10340   struct mips_htab_traverse_info *hti;
10341   struct mips_elf_link_hash_table *htab;
10342   struct mips_elf_la25_stub *stub;
10343   asection *s;
10344   bfd_byte *loc;
10345   bfd_vma offset, target, target_high, target_low;
10346 
10347   stub = (struct mips_elf_la25_stub *) *slot;
10348   hti = (struct mips_htab_traverse_info *) data;
10349   htab = mips_elf_hash_table (hti->info);
10350   BFD_ASSERT (htab != NULL);
10351 
10352   /* Create the section contents, if we haven't already.  */
10353   s = stub->stub_section;
10354   loc = s->contents;
10355   if (loc == NULL)
10356     {
10357       loc = bfd_malloc (s->size);
10358       if (loc == NULL)
10359 	{
10360 	  hti->error = TRUE;
10361 	  return FALSE;
10362 	}
10363       s->contents = loc;
10364     }
10365 
10366   /* Work out where in the section this stub should go.  */
10367   offset = stub->offset;
10368 
10369   /* Work out the target address.  */
10370   target = mips_elf_get_la25_target (stub, &s);
10371   target += s->output_section->vma + s->output_offset;
10372 
10373   target_high = ((target + 0x8000) >> 16) & 0xffff;
10374   target_low = (target & 0xffff);
10375 
10376   if (stub->stub_section != htab->strampoline)
10377     {
10378       /* This is a simple LUI/ADDIU stub.  Zero out the beginning
10379 	 of the section and write the two instructions at the end.  */
10380       memset (loc, 0, offset);
10381       loc += offset;
10382       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10383 	{
10384 	  bfd_put_micromips_32 (hti->output_bfd,
10385 				LA25_LUI_MICROMIPS (target_high),
10386 				loc);
10387 	  bfd_put_micromips_32 (hti->output_bfd,
10388 				LA25_ADDIU_MICROMIPS (target_low),
10389 				loc + 4);
10390 	}
10391       else
10392 	{
10393 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10394 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 4);
10395 	}
10396     }
10397   else
10398     {
10399       /* This is trampoline.  */
10400       loc += offset;
10401       if (ELF_ST_IS_MICROMIPS (stub->h->root.other))
10402 	{
10403 	  bfd_put_micromips_32 (hti->output_bfd,
10404 				LA25_LUI_MICROMIPS (target_high), loc);
10405 	  bfd_put_micromips_32 (hti->output_bfd,
10406 				LA25_J_MICROMIPS (target), loc + 4);
10407 	  bfd_put_micromips_32 (hti->output_bfd,
10408 				LA25_ADDIU_MICROMIPS (target_low), loc + 8);
10409 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10410 	}
10411       else
10412 	{
10413 	  bfd_put_32 (hti->output_bfd, LA25_LUI (target_high), loc);
10414 	  bfd_put_32 (hti->output_bfd, LA25_J (target), loc + 4);
10415 	  bfd_put_32 (hti->output_bfd, LA25_ADDIU (target_low), loc + 8);
10416 	  bfd_put_32 (hti->output_bfd, 0, loc + 12);
10417 	}
10418     }
10419   return TRUE;
10420 }
10421 
10422 /* If NAME is one of the special IRIX6 symbols defined by the linker,
10423    adjust it appropriately now.  */
10424 
10425 static void
10426 mips_elf_irix6_finish_dynamic_symbol (bfd *abfd ATTRIBUTE_UNUSED,
10427 				      const char *name, Elf_Internal_Sym *sym)
10428 {
10429   /* The linker script takes care of providing names and values for
10430      these, but we must place them into the right sections.  */
10431   static const char* const text_section_symbols[] = {
10432     "_ftext",
10433     "_etext",
10434     "__dso_displacement",
10435     "__elf_header",
10436     "__program_header_table",
10437     NULL
10438   };
10439 
10440   static const char* const data_section_symbols[] = {
10441     "_fdata",
10442     "_edata",
10443     "_end",
10444     "_fbss",
10445     NULL
10446   };
10447 
10448   const char* const *p;
10449   int i;
10450 
10451   for (i = 0; i < 2; ++i)
10452     for (p = (i == 0) ? text_section_symbols : data_section_symbols;
10453 	 *p;
10454 	 ++p)
10455       if (strcmp (*p, name) == 0)
10456 	{
10457 	  /* All of these symbols are given type STT_SECTION by the
10458 	     IRIX6 linker.  */
10459 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10460 	  sym->st_other = STO_PROTECTED;
10461 
10462 	  /* The IRIX linker puts these symbols in special sections.  */
10463 	  if (i == 0)
10464 	    sym->st_shndx = SHN_MIPS_TEXT;
10465 	  else
10466 	    sym->st_shndx = SHN_MIPS_DATA;
10467 
10468 	  break;
10469 	}
10470 }
10471 
10472 /* Finish up dynamic symbol handling.  We set the contents of various
10473    dynamic sections here.  */
10474 
10475 bfd_boolean
10476 _bfd_mips_elf_finish_dynamic_symbol (bfd *output_bfd,
10477 				     struct bfd_link_info *info,
10478 				     struct elf_link_hash_entry *h,
10479 				     Elf_Internal_Sym *sym)
10480 {
10481   bfd *dynobj;
10482   asection *sgot;
10483   struct mips_got_info *g, *gg;
10484   const char *name;
10485   int idx;
10486   struct mips_elf_link_hash_table *htab;
10487   struct mips_elf_link_hash_entry *hmips;
10488 
10489   htab = mips_elf_hash_table (info);
10490   BFD_ASSERT (htab != NULL);
10491   dynobj = elf_hash_table (info)->dynobj;
10492   hmips = (struct mips_elf_link_hash_entry *) h;
10493 
10494   BFD_ASSERT (!htab->is_vxworks);
10495 
10496   if (h->plt.plist != NULL
10497       && (h->plt.plist->mips_offset != MINUS_ONE
10498 	  || h->plt.plist->comp_offset != MINUS_ONE))
10499     {
10500       /* We've decided to create a PLT entry for this symbol.  */
10501       bfd_byte *loc;
10502       bfd_vma header_address, got_address;
10503       bfd_vma got_address_high, got_address_low, load;
10504       bfd_vma got_index;
10505       bfd_vma isa_bit;
10506 
10507       got_index = h->plt.plist->gotplt_index;
10508 
10509       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10510       BFD_ASSERT (h->dynindx != -1);
10511       BFD_ASSERT (htab->splt != NULL);
10512       BFD_ASSERT (got_index != MINUS_ONE);
10513       BFD_ASSERT (!h->def_regular);
10514 
10515       /* Calculate the address of the PLT header.  */
10516       isa_bit = htab->plt_header_is_comp;
10517       header_address = (htab->splt->output_section->vma
10518 			+ htab->splt->output_offset + isa_bit);
10519 
10520       /* Calculate the address of the .got.plt entry.  */
10521       got_address = (htab->sgotplt->output_section->vma
10522 		     + htab->sgotplt->output_offset
10523 		     + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10524 
10525       got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
10526       got_address_low = got_address & 0xffff;
10527 
10528       /* Initially point the .got.plt entry at the PLT header.  */
10529       loc = (htab->sgotplt->contents + got_index * MIPS_ELF_GOT_SIZE (dynobj));
10530       if (ABI_64_P (output_bfd))
10531 	bfd_put_64 (output_bfd, header_address, loc);
10532       else
10533 	bfd_put_32 (output_bfd, header_address, loc);
10534 
10535       /* Now handle the PLT itself.  First the standard entry (the order
10536          does not matter, we just have to pick one).  */
10537       if (h->plt.plist->mips_offset != MINUS_ONE)
10538 	{
10539 	  const bfd_vma *plt_entry;
10540 	  bfd_vma plt_offset;
10541 
10542 	  plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10543 
10544 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10545 
10546 	  /* Find out where the .plt entry should go.  */
10547 	  loc = htab->splt->contents + plt_offset;
10548 
10549 	  /* Pick the load opcode.  */
10550 	  load = MIPS_ELF_LOAD_WORD (output_bfd);
10551 
10552 	  /* Fill in the PLT entry itself.  */
10553 
10554 	  if (MIPSR6_P (output_bfd))
10555 	    plt_entry = mipsr6_exec_plt_entry;
10556 	  else
10557 	    plt_entry = mips_exec_plt_entry;
10558 	  bfd_put_32 (output_bfd, plt_entry[0] | got_address_high, loc);
10559 	  bfd_put_32 (output_bfd, plt_entry[1] | got_address_low | load,
10560 		      loc + 4);
10561 
10562 	  if (! LOAD_INTERLOCKS_P (output_bfd))
10563 	    {
10564 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low, loc + 8);
10565 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
10566 	    }
10567 	  else
10568 	    {
10569 	      bfd_put_32 (output_bfd, plt_entry[3], loc + 8);
10570 	      bfd_put_32 (output_bfd, plt_entry[2] | got_address_low,
10571 			  loc + 12);
10572 	    }
10573 	}
10574 
10575       /* Now the compressed entry.  They come after any standard ones.  */
10576       if (h->plt.plist->comp_offset != MINUS_ONE)
10577 	{
10578 	  bfd_vma plt_offset;
10579 
10580 	  plt_offset = (htab->plt_header_size + htab->plt_mips_offset
10581 			+ h->plt.plist->comp_offset);
10582 
10583 	  BFD_ASSERT (plt_offset <= htab->splt->size);
10584 
10585 	  /* Find out where the .plt entry should go.  */
10586 	  loc = htab->splt->contents + plt_offset;
10587 
10588 	  /* Fill in the PLT entry itself.  */
10589 	  if (!MICROMIPS_P (output_bfd))
10590 	    {
10591 	      const bfd_vma *plt_entry = mips16_o32_exec_plt_entry;
10592 
10593 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10594 	      bfd_put_16 (output_bfd, plt_entry[1], loc + 2);
10595 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10596 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10597 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10598 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10599 	      bfd_put_32 (output_bfd, got_address, loc + 12);
10600 	    }
10601 	  else if (htab->insn32)
10602 	    {
10603 	      const bfd_vma *plt_entry = micromips_insn32_o32_exec_plt_entry;
10604 
10605 	      bfd_put_16 (output_bfd, plt_entry[0], loc);
10606 	      bfd_put_16 (output_bfd, got_address_high, loc + 2);
10607 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10608 	      bfd_put_16 (output_bfd, got_address_low, loc + 6);
10609 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10610 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10611 	      bfd_put_16 (output_bfd, plt_entry[6], loc + 12);
10612 	      bfd_put_16 (output_bfd, got_address_low, loc + 14);
10613 	    }
10614 	  else
10615 	    {
10616 	      const bfd_vma *plt_entry = micromips_o32_exec_plt_entry;
10617 	      bfd_signed_vma gotpc_offset;
10618 	      bfd_vma loc_address;
10619 
10620 	      BFD_ASSERT (got_address % 4 == 0);
10621 
10622 	      loc_address = (htab->splt->output_section->vma
10623 			     + htab->splt->output_offset + plt_offset);
10624 	      gotpc_offset = got_address - ((loc_address | 3) ^ 3);
10625 
10626 	      /* ADDIUPC has a span of +/-16MB, check we're in range.  */
10627 	      if (gotpc_offset + 0x1000000 >= 0x2000000)
10628 		{
10629 		  (*_bfd_error_handler)
10630 		    (_("%B: `%A' offset of %ld from `%A' "
10631 		       "beyond the range of ADDIUPC"),
10632 		     output_bfd,
10633 		     htab->sgotplt->output_section,
10634 		     htab->splt->output_section,
10635 		     (long) gotpc_offset);
10636 		  bfd_set_error (bfd_error_no_error);
10637 		  return FALSE;
10638 		}
10639 	      bfd_put_16 (output_bfd,
10640 			  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
10641 	      bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
10642 	      bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
10643 	      bfd_put_16 (output_bfd, plt_entry[3], loc + 6);
10644 	      bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
10645 	      bfd_put_16 (output_bfd, plt_entry[5], loc + 10);
10646 	    }
10647 	}
10648 
10649       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
10650       mips_elf_output_dynamic_relocation (output_bfd, htab->srelplt,
10651 					  got_index - 2, h->dynindx,
10652 					  R_MIPS_JUMP_SLOT, got_address);
10653 
10654       /* We distinguish between PLT entries and lazy-binding stubs by
10655 	 giving the former an st_other value of STO_MIPS_PLT.  Set the
10656 	 flag and leave the value if there are any relocations in the
10657 	 binary where pointer equality matters.  */
10658       sym->st_shndx = SHN_UNDEF;
10659       if (h->pointer_equality_needed)
10660 	sym->st_other = ELF_ST_SET_MIPS_PLT (sym->st_other);
10661       else
10662 	{
10663 	  sym->st_value = 0;
10664 	  sym->st_other = 0;
10665 	}
10666     }
10667 
10668   if (h->plt.plist != NULL && h->plt.plist->stub_offset != MINUS_ONE)
10669     {
10670       /* We've decided to create a lazy-binding stub.  */
10671       bfd_boolean micromips_p = MICROMIPS_P (output_bfd);
10672       unsigned int other = micromips_p ? STO_MICROMIPS : 0;
10673       bfd_vma stub_size = htab->function_stub_size;
10674       bfd_byte stub[MIPS_FUNCTION_STUB_BIG_SIZE];
10675       bfd_vma isa_bit = micromips_p;
10676       bfd_vma stub_big_size;
10677 
10678       if (!micromips_p)
10679 	stub_big_size = MIPS_FUNCTION_STUB_BIG_SIZE;
10680       else if (htab->insn32)
10681 	stub_big_size = MICROMIPS_INSN32_FUNCTION_STUB_BIG_SIZE;
10682       else
10683 	stub_big_size = MICROMIPS_FUNCTION_STUB_BIG_SIZE;
10684 
10685       /* This symbol has a stub.  Set it up.  */
10686 
10687       BFD_ASSERT (h->dynindx != -1);
10688 
10689       BFD_ASSERT (stub_size == stub_big_size || h->dynindx <= 0xffff);
10690 
10691       /* Values up to 2^31 - 1 are allowed.  Larger values would cause
10692 	 sign extension at runtime in the stub, resulting in a negative
10693 	 index value.  */
10694       if (h->dynindx & ~0x7fffffff)
10695 	return FALSE;
10696 
10697       /* Fill the stub.  */
10698       if (micromips_p)
10699 	{
10700 	  idx = 0;
10701 	  bfd_put_micromips_32 (output_bfd, STUB_LW_MICROMIPS (output_bfd),
10702 				stub + idx);
10703 	  idx += 4;
10704 	  if (htab->insn32)
10705 	    {
10706 	      bfd_put_micromips_32 (output_bfd,
10707 				    STUB_MOVE32_MICROMIPS (output_bfd),
10708 				    stub + idx);
10709 	      idx += 4;
10710 	    }
10711 	  else
10712 	    {
10713 	      bfd_put_16 (output_bfd, STUB_MOVE_MICROMIPS, stub + idx);
10714 	      idx += 2;
10715 	    }
10716 	  if (stub_size == stub_big_size)
10717 	    {
10718 	      long dynindx_hi = (h->dynindx >> 16) & 0x7fff;
10719 
10720 	      bfd_put_micromips_32 (output_bfd,
10721 				    STUB_LUI_MICROMIPS (dynindx_hi),
10722 				    stub + idx);
10723 	      idx += 4;
10724 	    }
10725 	  if (htab->insn32)
10726 	    {
10727 	      bfd_put_micromips_32 (output_bfd, STUB_JALR32_MICROMIPS,
10728 				    stub + idx);
10729 	      idx += 4;
10730 	    }
10731 	  else
10732 	    {
10733 	      bfd_put_16 (output_bfd, STUB_JALR_MICROMIPS, stub + idx);
10734 	      idx += 2;
10735 	    }
10736 
10737 	  /* If a large stub is not required and sign extension is not a
10738 	     problem, then use legacy code in the stub.  */
10739 	  if (stub_size == stub_big_size)
10740 	    bfd_put_micromips_32 (output_bfd,
10741 				  STUB_ORI_MICROMIPS (h->dynindx & 0xffff),
10742 				  stub + idx);
10743 	  else if (h->dynindx & ~0x7fff)
10744 	    bfd_put_micromips_32 (output_bfd,
10745 				  STUB_LI16U_MICROMIPS (h->dynindx & 0xffff),
10746 				  stub + idx);
10747 	  else
10748 	    bfd_put_micromips_32 (output_bfd,
10749 				  STUB_LI16S_MICROMIPS (output_bfd,
10750 							h->dynindx),
10751 				  stub + idx);
10752 	}
10753       else
10754 	{
10755 	  idx = 0;
10756 	  bfd_put_32 (output_bfd, STUB_LW (output_bfd), stub + idx);
10757 	  idx += 4;
10758 	  bfd_put_32 (output_bfd, STUB_MOVE (output_bfd), stub + idx);
10759 	  idx += 4;
10760 	  if (stub_size == stub_big_size)
10761 	    {
10762 	      bfd_put_32 (output_bfd, STUB_LUI ((h->dynindx >> 16) & 0x7fff),
10763 			  stub + idx);
10764 	      idx += 4;
10765 	    }
10766 	  bfd_put_32 (output_bfd, STUB_JALR, stub + idx);
10767 	  idx += 4;
10768 
10769 	  /* If a large stub is not required and sign extension is not a
10770 	     problem, then use legacy code in the stub.  */
10771 	  if (stub_size == stub_big_size)
10772 	    bfd_put_32 (output_bfd, STUB_ORI (h->dynindx & 0xffff),
10773 			stub + idx);
10774 	  else if (h->dynindx & ~0x7fff)
10775 	    bfd_put_32 (output_bfd, STUB_LI16U (h->dynindx & 0xffff),
10776 			stub + idx);
10777 	  else
10778 	    bfd_put_32 (output_bfd, STUB_LI16S (output_bfd, h->dynindx),
10779 			stub + idx);
10780 	}
10781 
10782       BFD_ASSERT (h->plt.plist->stub_offset <= htab->sstubs->size);
10783       memcpy (htab->sstubs->contents + h->plt.plist->stub_offset,
10784 	      stub, stub_size);
10785 
10786       /* Mark the symbol as undefined.  stub_offset != -1 occurs
10787 	 only for the referenced symbol.  */
10788       sym->st_shndx = SHN_UNDEF;
10789 
10790       /* The run-time linker uses the st_value field of the symbol
10791 	 to reset the global offset table entry for this external
10792 	 to its stub address when unlinking a shared object.  */
10793       sym->st_value = (htab->sstubs->output_section->vma
10794 		       + htab->sstubs->output_offset
10795 		       + h->plt.plist->stub_offset
10796 		       + isa_bit);
10797       sym->st_other = other;
10798     }
10799 
10800   /* If we have a MIPS16 function with a stub, the dynamic symbol must
10801      refer to the stub, since only the stub uses the standard calling
10802      conventions.  */
10803   if (h->dynindx != -1 && hmips->fn_stub != NULL)
10804     {
10805       BFD_ASSERT (hmips->need_fn_stub);
10806       sym->st_value = (hmips->fn_stub->output_section->vma
10807 		       + hmips->fn_stub->output_offset);
10808       sym->st_size = hmips->fn_stub->size;
10809       sym->st_other = ELF_ST_VISIBILITY (sym->st_other);
10810     }
10811 
10812   BFD_ASSERT (h->dynindx != -1
10813 	      || h->forced_local);
10814 
10815   sgot = htab->sgot;
10816   g = htab->got_info;
10817   BFD_ASSERT (g != NULL);
10818 
10819   /* Run through the global symbol table, creating GOT entries for all
10820      the symbols that need them.  */
10821   if (hmips->global_got_area != GGA_NONE)
10822     {
10823       bfd_vma offset;
10824       bfd_vma value;
10825 
10826       value = sym->st_value;
10827       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
10828       MIPS_ELF_PUT_WORD (output_bfd, value, sgot->contents + offset);
10829     }
10830 
10831   if (hmips->global_got_area != GGA_NONE && g->next)
10832     {
10833       struct mips_got_entry e, *p;
10834       bfd_vma entry;
10835       bfd_vma offset;
10836 
10837       gg = g;
10838 
10839       e.abfd = output_bfd;
10840       e.symndx = -1;
10841       e.d.h = hmips;
10842       e.tls_type = GOT_TLS_NONE;
10843 
10844       for (g = g->next; g->next != gg; g = g->next)
10845 	{
10846 	  if (g->got_entries
10847 	      && (p = (struct mips_got_entry *) htab_find (g->got_entries,
10848 							   &e)))
10849 	    {
10850 	      offset = p->gotidx;
10851 	      BFD_ASSERT (offset > 0 && offset < htab->sgot->size);
10852 	      if (info->shared
10853 		  || (elf_hash_table (info)->dynamic_sections_created
10854 		      && p->d.h != NULL
10855 		      && p->d.h->root.def_dynamic
10856 		      && !p->d.h->root.def_regular))
10857 		{
10858 		  /* Create an R_MIPS_REL32 relocation for this entry.  Due to
10859 		     the various compatibility problems, it's easier to mock
10860 		     up an R_MIPS_32 or R_MIPS_64 relocation and leave
10861 		     mips_elf_create_dynamic_relocation to calculate the
10862 		     appropriate addend.  */
10863 		  Elf_Internal_Rela rel[3];
10864 
10865 		  memset (rel, 0, sizeof (rel));
10866 		  if (ABI_64_P (output_bfd))
10867 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_64);
10868 		  else
10869 		    rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_32);
10870 		  rel[0].r_offset = rel[1].r_offset = rel[2].r_offset = offset;
10871 
10872 		  entry = 0;
10873 		  if (! (mips_elf_create_dynamic_relocation
10874 			 (output_bfd, info, rel,
10875 			  e.d.h, NULL, sym->st_value, &entry, sgot)))
10876 		    return FALSE;
10877 		}
10878 	      else
10879 		entry = sym->st_value;
10880 	      MIPS_ELF_PUT_WORD (output_bfd, entry, sgot->contents + offset);
10881 	    }
10882 	}
10883     }
10884 
10885   /* Mark _DYNAMIC and _GLOBAL_OFFSET_TABLE_ as absolute.  */
10886   name = h->root.root.string;
10887   if (h == elf_hash_table (info)->hdynamic
10888       || h == elf_hash_table (info)->hgot)
10889     sym->st_shndx = SHN_ABS;
10890   else if (strcmp (name, "_DYNAMIC_LINK") == 0
10891 	   || strcmp (name, "_DYNAMIC_LINKING") == 0)
10892     {
10893       sym->st_shndx = SHN_ABS;
10894       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10895       sym->st_value = 1;
10896     }
10897   else if (strcmp (name, "_gp_disp") == 0 && ! NEWABI_P (output_bfd))
10898     {
10899       sym->st_shndx = SHN_ABS;
10900       sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10901       sym->st_value = elf_gp (output_bfd);
10902     }
10903   else if (SGI_COMPAT (output_bfd))
10904     {
10905       if (strcmp (name, mips_elf_dynsym_rtproc_names[0]) == 0
10906 	  || strcmp (name, mips_elf_dynsym_rtproc_names[1]) == 0)
10907 	{
10908 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10909 	  sym->st_other = STO_PROTECTED;
10910 	  sym->st_value = 0;
10911 	  sym->st_shndx = SHN_MIPS_DATA;
10912 	}
10913       else if (strcmp (name, mips_elf_dynsym_rtproc_names[2]) == 0)
10914 	{
10915 	  sym->st_info = ELF_ST_INFO (STB_GLOBAL, STT_SECTION);
10916 	  sym->st_other = STO_PROTECTED;
10917 	  sym->st_value = mips_elf_hash_table (info)->procedure_count;
10918 	  sym->st_shndx = SHN_ABS;
10919 	}
10920       else if (sym->st_shndx != SHN_UNDEF && sym->st_shndx != SHN_ABS)
10921 	{
10922 	  if (h->type == STT_FUNC)
10923 	    sym->st_shndx = SHN_MIPS_TEXT;
10924 	  else if (h->type == STT_OBJECT)
10925 	    sym->st_shndx = SHN_MIPS_DATA;
10926 	}
10927     }
10928 
10929   /* Emit a copy reloc, if needed.  */
10930   if (h->needs_copy)
10931     {
10932       asection *s;
10933       bfd_vma symval;
10934 
10935       BFD_ASSERT (h->dynindx != -1);
10936       BFD_ASSERT (htab->use_plts_and_copy_relocs);
10937 
10938       s = mips_elf_rel_dyn_section (info, FALSE);
10939       symval = (h->root.u.def.section->output_section->vma
10940 		+ h->root.u.def.section->output_offset
10941 		+ h->root.u.def.value);
10942       mips_elf_output_dynamic_relocation (output_bfd, s, s->reloc_count++,
10943 					  h->dynindx, R_MIPS_COPY, symval);
10944     }
10945 
10946   /* Handle the IRIX6-specific symbols.  */
10947   if (IRIX_COMPAT (output_bfd) == ict_irix6)
10948     mips_elf_irix6_finish_dynamic_symbol (output_bfd, name, sym);
10949 
10950   /* Keep dynamic compressed symbols odd.  This allows the dynamic linker
10951      to treat compressed symbols like any other.  */
10952   if (ELF_ST_IS_MIPS16 (sym->st_other))
10953     {
10954       BFD_ASSERT (sym->st_value & 1);
10955       sym->st_other -= STO_MIPS16;
10956     }
10957   else if (ELF_ST_IS_MICROMIPS (sym->st_other))
10958     {
10959       BFD_ASSERT (sym->st_value & 1);
10960       sym->st_other -= STO_MICROMIPS;
10961     }
10962 
10963   return TRUE;
10964 }
10965 
10966 /* Likewise, for VxWorks.  */
10967 
10968 bfd_boolean
10969 _bfd_mips_vxworks_finish_dynamic_symbol (bfd *output_bfd,
10970 					 struct bfd_link_info *info,
10971 					 struct elf_link_hash_entry *h,
10972 					 Elf_Internal_Sym *sym)
10973 {
10974   bfd *dynobj;
10975   asection *sgot;
10976   struct mips_got_info *g;
10977   struct mips_elf_link_hash_table *htab;
10978   struct mips_elf_link_hash_entry *hmips;
10979 
10980   htab = mips_elf_hash_table (info);
10981   BFD_ASSERT (htab != NULL);
10982   dynobj = elf_hash_table (info)->dynobj;
10983   hmips = (struct mips_elf_link_hash_entry *) h;
10984 
10985   if (h->plt.plist != NULL && h->plt.plist->mips_offset != MINUS_ONE)
10986     {
10987       bfd_byte *loc;
10988       bfd_vma plt_address, got_address, got_offset, branch_offset;
10989       Elf_Internal_Rela rel;
10990       static const bfd_vma *plt_entry;
10991       bfd_vma gotplt_index;
10992       bfd_vma plt_offset;
10993 
10994       plt_offset = htab->plt_header_size + h->plt.plist->mips_offset;
10995       gotplt_index = h->plt.plist->gotplt_index;
10996 
10997       BFD_ASSERT (h->dynindx != -1);
10998       BFD_ASSERT (htab->splt != NULL);
10999       BFD_ASSERT (gotplt_index != MINUS_ONE);
11000       BFD_ASSERT (plt_offset <= htab->splt->size);
11001 
11002       /* Calculate the address of the .plt entry.  */
11003       plt_address = (htab->splt->output_section->vma
11004 		     + htab->splt->output_offset
11005 		     + plt_offset);
11006 
11007       /* Calculate the address of the .got.plt entry.  */
11008       got_address = (htab->sgotplt->output_section->vma
11009 		     + htab->sgotplt->output_offset
11010 		     + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd));
11011 
11012       /* Calculate the offset of the .got.plt entry from
11013 	 _GLOBAL_OFFSET_TABLE_.  */
11014       got_offset = mips_elf_gotplt_index (info, h);
11015 
11016       /* Calculate the offset for the branch at the start of the PLT
11017 	 entry.  The branch jumps to the beginning of .plt.  */
11018       branch_offset = -(plt_offset / 4 + 1) & 0xffff;
11019 
11020       /* Fill in the initial value of the .got.plt entry.  */
11021       bfd_put_32 (output_bfd, plt_address,
11022 		  (htab->sgotplt->contents
11023 		   + gotplt_index * MIPS_ELF_GOT_SIZE (output_bfd)));
11024 
11025       /* Find out where the .plt entry should go.  */
11026       loc = htab->splt->contents + plt_offset;
11027 
11028       if (info->shared)
11029 	{
11030 	  plt_entry = mips_vxworks_shared_plt_entry;
11031 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11032 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11033 	}
11034       else
11035 	{
11036 	  bfd_vma got_address_high, got_address_low;
11037 
11038 	  plt_entry = mips_vxworks_exec_plt_entry;
11039 	  got_address_high = ((got_address + 0x8000) >> 16) & 0xffff;
11040 	  got_address_low = got_address & 0xffff;
11041 
11042 	  bfd_put_32 (output_bfd, plt_entry[0] | branch_offset, loc);
11043 	  bfd_put_32 (output_bfd, plt_entry[1] | gotplt_index, loc + 4);
11044 	  bfd_put_32 (output_bfd, plt_entry[2] | got_address_high, loc + 8);
11045 	  bfd_put_32 (output_bfd, plt_entry[3] | got_address_low, loc + 12);
11046 	  bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11047 	  bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11048 	  bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11049 	  bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11050 
11051 	  loc = (htab->srelplt2->contents
11052 		 + (gotplt_index * 3 + 2) * sizeof (Elf32_External_Rela));
11053 
11054 	  /* Emit a relocation for the .got.plt entry.  */
11055 	  rel.r_offset = got_address;
11056 	  rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11057 	  rel.r_addend = plt_offset;
11058 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11059 
11060 	  /* Emit a relocation for the lui of %hi(<.got.plt slot>).  */
11061 	  loc += sizeof (Elf32_External_Rela);
11062 	  rel.r_offset = plt_address + 8;
11063 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11064 	  rel.r_addend = got_offset;
11065 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11066 
11067 	  /* Emit a relocation for the addiu of %lo(<.got.plt slot>).  */
11068 	  loc += sizeof (Elf32_External_Rela);
11069 	  rel.r_offset += 4;
11070 	  rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11071 	  bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11072 	}
11073 
11074       /* Emit an R_MIPS_JUMP_SLOT relocation against the .got.plt entry.  */
11075       loc = (htab->srelplt->contents
11076 	     + gotplt_index * sizeof (Elf32_External_Rela));
11077       rel.r_offset = got_address;
11078       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_JUMP_SLOT);
11079       rel.r_addend = 0;
11080       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11081 
11082       if (!h->def_regular)
11083 	sym->st_shndx = SHN_UNDEF;
11084     }
11085 
11086   BFD_ASSERT (h->dynindx != -1 || h->forced_local);
11087 
11088   sgot = htab->sgot;
11089   g = htab->got_info;
11090   BFD_ASSERT (g != NULL);
11091 
11092   /* See if this symbol has an entry in the GOT.  */
11093   if (hmips->global_got_area != GGA_NONE)
11094     {
11095       bfd_vma offset;
11096       Elf_Internal_Rela outrel;
11097       bfd_byte *loc;
11098       asection *s;
11099 
11100       /* Install the symbol value in the GOT.   */
11101       offset = mips_elf_primary_global_got_index (output_bfd, info, h);
11102       MIPS_ELF_PUT_WORD (output_bfd, sym->st_value, sgot->contents + offset);
11103 
11104       /* Add a dynamic relocation for it.  */
11105       s = mips_elf_rel_dyn_section (info, FALSE);
11106       loc = s->contents + (s->reloc_count++ * sizeof (Elf32_External_Rela));
11107       outrel.r_offset = (sgot->output_section->vma
11108 			 + sgot->output_offset
11109 			 + offset);
11110       outrel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_32);
11111       outrel.r_addend = 0;
11112       bfd_elf32_swap_reloca_out (dynobj, &outrel, loc);
11113     }
11114 
11115   /* Emit a copy reloc, if needed.  */
11116   if (h->needs_copy)
11117     {
11118       Elf_Internal_Rela rel;
11119 
11120       BFD_ASSERT (h->dynindx != -1);
11121 
11122       rel.r_offset = (h->root.u.def.section->output_section->vma
11123 		      + h->root.u.def.section->output_offset
11124 		      + h->root.u.def.value);
11125       rel.r_info = ELF32_R_INFO (h->dynindx, R_MIPS_COPY);
11126       rel.r_addend = 0;
11127       bfd_elf32_swap_reloca_out (output_bfd, &rel,
11128 				 htab->srelbss->contents
11129 				 + (htab->srelbss->reloc_count
11130 				    * sizeof (Elf32_External_Rela)));
11131       ++htab->srelbss->reloc_count;
11132     }
11133 
11134   /* If this is a mips16/microMIPS symbol, force the value to be even.  */
11135   if (ELF_ST_IS_COMPRESSED (sym->st_other))
11136     sym->st_value &= ~1;
11137 
11138   return TRUE;
11139 }
11140 
11141 /* Write out a plt0 entry to the beginning of .plt.  */
11142 
11143 static bfd_boolean
11144 mips_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11145 {
11146   bfd_byte *loc;
11147   bfd_vma gotplt_value, gotplt_value_high, gotplt_value_low;
11148   static const bfd_vma *plt_entry;
11149   struct mips_elf_link_hash_table *htab;
11150 
11151   htab = mips_elf_hash_table (info);
11152   BFD_ASSERT (htab != NULL);
11153 
11154   if (ABI_64_P (output_bfd))
11155     plt_entry = mips_n64_exec_plt0_entry;
11156   else if (ABI_N32_P (output_bfd))
11157     plt_entry = mips_n32_exec_plt0_entry;
11158   else if (!htab->plt_header_is_comp)
11159     plt_entry = mips_o32_exec_plt0_entry;
11160   else if (htab->insn32)
11161     plt_entry = micromips_insn32_o32_exec_plt0_entry;
11162   else
11163     plt_entry = micromips_o32_exec_plt0_entry;
11164 
11165   /* Calculate the value of .got.plt.  */
11166   gotplt_value = (htab->sgotplt->output_section->vma
11167 		  + htab->sgotplt->output_offset);
11168   gotplt_value_high = ((gotplt_value + 0x8000) >> 16) & 0xffff;
11169   gotplt_value_low = gotplt_value & 0xffff;
11170 
11171   /* The PLT sequence is not safe for N64 if .got.plt's address can
11172      not be loaded in two instructions.  */
11173   BFD_ASSERT ((gotplt_value & ~(bfd_vma) 0x7fffffff) == 0
11174 	      || ~(gotplt_value | 0x7fffffff) == 0);
11175 
11176   /* Install the PLT header.  */
11177   loc = htab->splt->contents;
11178   if (plt_entry == micromips_o32_exec_plt0_entry)
11179     {
11180       bfd_vma gotpc_offset;
11181       bfd_vma loc_address;
11182       size_t i;
11183 
11184       BFD_ASSERT (gotplt_value % 4 == 0);
11185 
11186       loc_address = (htab->splt->output_section->vma
11187 		     + htab->splt->output_offset);
11188       gotpc_offset = gotplt_value - ((loc_address | 3) ^ 3);
11189 
11190       /* ADDIUPC has a span of +/-16MB, check we're in range.  */
11191       if (gotpc_offset + 0x1000000 >= 0x2000000)
11192 	{
11193 	  (*_bfd_error_handler)
11194 	    (_("%B: `%A' offset of %ld from `%A' beyond the range of ADDIUPC"),
11195 	     output_bfd,
11196 	     htab->sgotplt->output_section,
11197 	     htab->splt->output_section,
11198 	     (long) gotpc_offset);
11199 	  bfd_set_error (bfd_error_no_error);
11200 	  return FALSE;
11201 	}
11202       bfd_put_16 (output_bfd,
11203 		  plt_entry[0] | ((gotpc_offset >> 18) & 0x7f), loc);
11204       bfd_put_16 (output_bfd, (gotpc_offset >> 2) & 0xffff, loc + 2);
11205       for (i = 2; i < ARRAY_SIZE (micromips_o32_exec_plt0_entry); i++)
11206 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11207     }
11208   else if (plt_entry == micromips_insn32_o32_exec_plt0_entry)
11209     {
11210       size_t i;
11211 
11212       bfd_put_16 (output_bfd, plt_entry[0], loc);
11213       bfd_put_16 (output_bfd, gotplt_value_high, loc + 2);
11214       bfd_put_16 (output_bfd, plt_entry[2], loc + 4);
11215       bfd_put_16 (output_bfd, gotplt_value_low, loc + 6);
11216       bfd_put_16 (output_bfd, plt_entry[4], loc + 8);
11217       bfd_put_16 (output_bfd, gotplt_value_low, loc + 10);
11218       for (i = 6; i < ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry); i++)
11219 	bfd_put_16 (output_bfd, plt_entry[i], loc + (i * 2));
11220     }
11221   else
11222     {
11223       bfd_put_32 (output_bfd, plt_entry[0] | gotplt_value_high, loc);
11224       bfd_put_32 (output_bfd, plt_entry[1] | gotplt_value_low, loc + 4);
11225       bfd_put_32 (output_bfd, plt_entry[2] | gotplt_value_low, loc + 8);
11226       bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11227       bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11228       bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11229       bfd_put_32 (output_bfd, plt_entry[6], loc + 24);
11230       bfd_put_32 (output_bfd, plt_entry[7], loc + 28);
11231     }
11232 
11233   return TRUE;
11234 }
11235 
11236 /* Install the PLT header for a VxWorks executable and finalize the
11237    contents of .rela.plt.unloaded.  */
11238 
11239 static void
11240 mips_vxworks_finish_exec_plt (bfd *output_bfd, struct bfd_link_info *info)
11241 {
11242   Elf_Internal_Rela rela;
11243   bfd_byte *loc;
11244   bfd_vma got_value, got_value_high, got_value_low, plt_address;
11245   static const bfd_vma *plt_entry;
11246   struct mips_elf_link_hash_table *htab;
11247 
11248   htab = mips_elf_hash_table (info);
11249   BFD_ASSERT (htab != NULL);
11250 
11251   plt_entry = mips_vxworks_exec_plt0_entry;
11252 
11253   /* Calculate the value of _GLOBAL_OFFSET_TABLE_.  */
11254   got_value = (htab->root.hgot->root.u.def.section->output_section->vma
11255 	       + htab->root.hgot->root.u.def.section->output_offset
11256 	       + htab->root.hgot->root.u.def.value);
11257 
11258   got_value_high = ((got_value + 0x8000) >> 16) & 0xffff;
11259   got_value_low = got_value & 0xffff;
11260 
11261   /* Calculate the address of the PLT header.  */
11262   plt_address = htab->splt->output_section->vma + htab->splt->output_offset;
11263 
11264   /* Install the PLT header.  */
11265   loc = htab->splt->contents;
11266   bfd_put_32 (output_bfd, plt_entry[0] | got_value_high, loc);
11267   bfd_put_32 (output_bfd, plt_entry[1] | got_value_low, loc + 4);
11268   bfd_put_32 (output_bfd, plt_entry[2], loc + 8);
11269   bfd_put_32 (output_bfd, plt_entry[3], loc + 12);
11270   bfd_put_32 (output_bfd, plt_entry[4], loc + 16);
11271   bfd_put_32 (output_bfd, plt_entry[5], loc + 20);
11272 
11273   /* Output the relocation for the lui of %hi(_GLOBAL_OFFSET_TABLE_).  */
11274   loc = htab->srelplt2->contents;
11275   rela.r_offset = plt_address;
11276   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11277   rela.r_addend = 0;
11278   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11279   loc += sizeof (Elf32_External_Rela);
11280 
11281   /* Output the relocation for the following addiu of
11282      %lo(_GLOBAL_OFFSET_TABLE_).  */
11283   rela.r_offset += 4;
11284   rela.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11285   bfd_elf32_swap_reloca_out (output_bfd, &rela, loc);
11286   loc += sizeof (Elf32_External_Rela);
11287 
11288   /* Fix up the remaining relocations.  They may have the wrong
11289      symbol index for _G_O_T_ or _P_L_T_ depending on the order
11290      in which symbols were output.  */
11291   while (loc < htab->srelplt2->contents + htab->srelplt2->size)
11292     {
11293       Elf_Internal_Rela rel;
11294 
11295       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11296       rel.r_info = ELF32_R_INFO (htab->root.hplt->indx, R_MIPS_32);
11297       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11298       loc += sizeof (Elf32_External_Rela);
11299 
11300       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11301       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_HI16);
11302       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11303       loc += sizeof (Elf32_External_Rela);
11304 
11305       bfd_elf32_swap_reloca_in (output_bfd, loc, &rel);
11306       rel.r_info = ELF32_R_INFO (htab->root.hgot->indx, R_MIPS_LO16);
11307       bfd_elf32_swap_reloca_out (output_bfd, &rel, loc);
11308       loc += sizeof (Elf32_External_Rela);
11309     }
11310 }
11311 
11312 /* Install the PLT header for a VxWorks shared library.  */
11313 
11314 static void
11315 mips_vxworks_finish_shared_plt (bfd *output_bfd, struct bfd_link_info *info)
11316 {
11317   unsigned int i;
11318   struct mips_elf_link_hash_table *htab;
11319 
11320   htab = mips_elf_hash_table (info);
11321   BFD_ASSERT (htab != NULL);
11322 
11323   /* We just need to copy the entry byte-by-byte.  */
11324   for (i = 0; i < ARRAY_SIZE (mips_vxworks_shared_plt0_entry); i++)
11325     bfd_put_32 (output_bfd, mips_vxworks_shared_plt0_entry[i],
11326 		htab->splt->contents + i * 4);
11327 }
11328 
11329 /* Finish up the dynamic sections.  */
11330 
11331 bfd_boolean
11332 _bfd_mips_elf_finish_dynamic_sections (bfd *output_bfd,
11333 				       struct bfd_link_info *info)
11334 {
11335   bfd *dynobj;
11336   asection *sdyn;
11337   asection *sgot;
11338   struct mips_got_info *gg, *g;
11339   struct mips_elf_link_hash_table *htab;
11340 
11341   htab = mips_elf_hash_table (info);
11342   BFD_ASSERT (htab != NULL);
11343 
11344   dynobj = elf_hash_table (info)->dynobj;
11345 
11346   sdyn = bfd_get_linker_section (dynobj, ".dynamic");
11347 
11348   sgot = htab->sgot;
11349   gg = htab->got_info;
11350 
11351   if (elf_hash_table (info)->dynamic_sections_created)
11352     {
11353       bfd_byte *b;
11354       int dyn_to_skip = 0, dyn_skipped = 0;
11355 
11356       BFD_ASSERT (sdyn != NULL);
11357       BFD_ASSERT (gg != NULL);
11358 
11359       g = mips_elf_bfd_got (output_bfd, FALSE);
11360       BFD_ASSERT (g != NULL);
11361 
11362       for (b = sdyn->contents;
11363 	   b < sdyn->contents + sdyn->size;
11364 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11365 	{
11366 	  Elf_Internal_Dyn dyn;
11367 	  const char *name;
11368 	  size_t elemsize;
11369 	  asection *s;
11370 	  bfd_boolean swap_out_p;
11371 
11372 	  /* Read in the current dynamic entry.  */
11373 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11374 
11375 	  /* Assume that we're going to modify it and write it out.  */
11376 	  swap_out_p = TRUE;
11377 
11378 	  switch (dyn.d_tag)
11379 	    {
11380 	    case DT_RELENT:
11381 	      dyn.d_un.d_val = MIPS_ELF_REL_SIZE (dynobj);
11382 	      break;
11383 
11384 	    case DT_RELAENT:
11385 	      BFD_ASSERT (htab->is_vxworks);
11386 	      dyn.d_un.d_val = MIPS_ELF_RELA_SIZE (dynobj);
11387 	      break;
11388 
11389 	    case DT_STRSZ:
11390 	      /* Rewrite DT_STRSZ.  */
11391 	      dyn.d_un.d_val =
11392 		_bfd_elf_strtab_size (elf_hash_table (info)->dynstr);
11393 	      break;
11394 
11395 	    case DT_PLTGOT:
11396 	      s = htab->sgot;
11397 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11398 	      break;
11399 
11400 	    case DT_MIPS_PLTGOT:
11401 	      s = htab->sgotplt;
11402 	      dyn.d_un.d_ptr = s->output_section->vma + s->output_offset;
11403 	      break;
11404 
11405 	    case DT_MIPS_RLD_VERSION:
11406 	      dyn.d_un.d_val = 1; /* XXX */
11407 	      break;
11408 
11409 	    case DT_MIPS_FLAGS:
11410 	      dyn.d_un.d_val = RHF_NOTPOT; /* XXX */
11411 	      break;
11412 
11413 	    case DT_MIPS_TIME_STAMP:
11414 	      {
11415 		time_t t;
11416 		time (&t);
11417 		dyn.d_un.d_val = t;
11418 	      }
11419 	      break;
11420 
11421 	    case DT_MIPS_ICHECKSUM:
11422 	      /* XXX FIXME: */
11423 	      swap_out_p = FALSE;
11424 	      break;
11425 
11426 	    case DT_MIPS_IVERSION:
11427 	      /* XXX FIXME: */
11428 	      swap_out_p = FALSE;
11429 	      break;
11430 
11431 	    case DT_MIPS_BASE_ADDRESS:
11432 	      s = output_bfd->sections;
11433 	      BFD_ASSERT (s != NULL);
11434 	      dyn.d_un.d_ptr = s->vma & ~(bfd_vma) 0xffff;
11435 	      break;
11436 
11437 	    case DT_MIPS_LOCAL_GOTNO:
11438 	      dyn.d_un.d_val = g->local_gotno;
11439 	      break;
11440 
11441 	    case DT_MIPS_UNREFEXTNO:
11442 	      /* The index into the dynamic symbol table which is the
11443 		 entry of the first external symbol that is not
11444 		 referenced within the same object.  */
11445 	      dyn.d_un.d_val = bfd_count_sections (output_bfd) + 1;
11446 	      break;
11447 
11448 	    case DT_MIPS_GOTSYM:
11449 	      if (htab->global_gotsym)
11450 		{
11451 		  dyn.d_un.d_val = htab->global_gotsym->dynindx;
11452 		  break;
11453 		}
11454 	      /* In case if we don't have global got symbols we default
11455 		 to setting DT_MIPS_GOTSYM to the same value as
11456 		 DT_MIPS_SYMTABNO, so we just fall through.  */
11457 
11458 	    case DT_MIPS_SYMTABNO:
11459 	      name = ".dynsym";
11460 	      elemsize = MIPS_ELF_SYM_SIZE (output_bfd);
11461 	      s = bfd_get_section_by_name (output_bfd, name);
11462 
11463 	      if (s != NULL)
11464 		dyn.d_un.d_val = s->size / elemsize;
11465 	      else
11466 		dyn.d_un.d_val = 0;
11467 	      break;
11468 
11469 	    case DT_MIPS_HIPAGENO:
11470 	      dyn.d_un.d_val = g->local_gotno - htab->reserved_gotno;
11471 	      break;
11472 
11473 	    case DT_MIPS_RLD_MAP:
11474 	      {
11475 		struct elf_link_hash_entry *h;
11476 		h = mips_elf_hash_table (info)->rld_symbol;
11477 		if (!h)
11478 		  {
11479 		    dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11480 		    swap_out_p = FALSE;
11481 		    break;
11482 		  }
11483 		s = h->root.u.def.section;
11484 		dyn.d_un.d_ptr = (s->output_section->vma + s->output_offset
11485 				  + h->root.u.def.value);
11486 	      }
11487 	      break;
11488 
11489 	    case DT_MIPS_OPTIONS:
11490 	      s = (bfd_get_section_by_name
11491 		   (output_bfd, MIPS_ELF_OPTIONS_SECTION_NAME (output_bfd)));
11492 	      dyn.d_un.d_ptr = s->vma;
11493 	      break;
11494 
11495 	    case DT_RELASZ:
11496 	      BFD_ASSERT (htab->is_vxworks);
11497 	      /* The count does not include the JUMP_SLOT relocations.  */
11498 	      if (htab->srelplt)
11499 		dyn.d_un.d_val -= htab->srelplt->size;
11500 	      break;
11501 
11502 	    case DT_PLTREL:
11503 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11504 	      if (htab->is_vxworks)
11505 		dyn.d_un.d_val = DT_RELA;
11506 	      else
11507 		dyn.d_un.d_val = DT_REL;
11508 	      break;
11509 
11510 	    case DT_PLTRELSZ:
11511 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11512 	      dyn.d_un.d_val = htab->srelplt->size;
11513 	      break;
11514 
11515 	    case DT_JMPREL:
11516 	      BFD_ASSERT (htab->use_plts_and_copy_relocs);
11517 	      dyn.d_un.d_ptr = (htab->srelplt->output_section->vma
11518 				+ htab->srelplt->output_offset);
11519 	      break;
11520 
11521 	    case DT_TEXTREL:
11522 	      /* If we didn't need any text relocations after all, delete
11523 		 the dynamic tag.  */
11524 	      if (!(info->flags & DF_TEXTREL))
11525 		{
11526 		  dyn_to_skip = MIPS_ELF_DYN_SIZE (dynobj);
11527 		  swap_out_p = FALSE;
11528 		}
11529 	      break;
11530 
11531 	    case DT_FLAGS:
11532 	      /* If we didn't need any text relocations after all, clear
11533 		 DF_TEXTREL from DT_FLAGS.  */
11534 	      if (!(info->flags & DF_TEXTREL))
11535 		dyn.d_un.d_val &= ~DF_TEXTREL;
11536 	      else
11537 		swap_out_p = FALSE;
11538 	      break;
11539 
11540 	    default:
11541 	      swap_out_p = FALSE;
11542 	      if (htab->is_vxworks
11543 		  && elf_vxworks_finish_dynamic_entry (output_bfd, &dyn))
11544 		swap_out_p = TRUE;
11545 	      break;
11546 	    }
11547 
11548 	  if (swap_out_p || dyn_skipped)
11549 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11550 	      (dynobj, &dyn, b - dyn_skipped);
11551 
11552 	  if (dyn_to_skip)
11553 	    {
11554 	      dyn_skipped += dyn_to_skip;
11555 	      dyn_to_skip = 0;
11556 	    }
11557 	}
11558 
11559       /* Wipe out any trailing entries if we shifted down a dynamic tag.  */
11560       if (dyn_skipped > 0)
11561 	memset (b - dyn_skipped, 0, dyn_skipped);
11562     }
11563 
11564   if (sgot != NULL && sgot->size > 0
11565       && !bfd_is_abs_section (sgot->output_section))
11566     {
11567       if (htab->is_vxworks)
11568 	{
11569 	  /* The first entry of the global offset table points to the
11570 	     ".dynamic" section.  The second is initialized by the
11571 	     loader and contains the shared library identifier.
11572 	     The third is also initialized by the loader and points
11573 	     to the lazy resolution stub.  */
11574 	  MIPS_ELF_PUT_WORD (output_bfd,
11575 			     sdyn->output_offset + sdyn->output_section->vma,
11576 			     sgot->contents);
11577 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11578 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11579 	  MIPS_ELF_PUT_WORD (output_bfd, 0,
11580 			     sgot->contents
11581 			     + 2 * MIPS_ELF_GOT_SIZE (output_bfd));
11582 	}
11583       else
11584 	{
11585 	  /* The first entry of the global offset table will be filled at
11586 	     runtime. The second entry will be used by some runtime loaders.
11587 	     This isn't the case of IRIX rld.  */
11588 	  MIPS_ELF_PUT_WORD (output_bfd, (bfd_vma) 0, sgot->contents);
11589 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11590 			     sgot->contents + MIPS_ELF_GOT_SIZE (output_bfd));
11591 	}
11592 
11593       elf_section_data (sgot->output_section)->this_hdr.sh_entsize
11594 	 = MIPS_ELF_GOT_SIZE (output_bfd);
11595     }
11596 
11597   /* Generate dynamic relocations for the non-primary gots.  */
11598   if (gg != NULL && gg->next)
11599     {
11600       Elf_Internal_Rela rel[3];
11601       bfd_vma addend = 0;
11602 
11603       memset (rel, 0, sizeof (rel));
11604       rel[0].r_info = ELF_R_INFO (output_bfd, 0, R_MIPS_REL32);
11605 
11606       for (g = gg->next; g->next != gg; g = g->next)
11607 	{
11608 	  bfd_vma got_index = g->next->local_gotno + g->next->global_gotno
11609 	    + g->next->tls_gotno;
11610 
11611 	  MIPS_ELF_PUT_WORD (output_bfd, 0, sgot->contents
11612 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11613 	  MIPS_ELF_PUT_WORD (output_bfd, MIPS_ELF_GNU_GOT1_MASK (output_bfd),
11614 			     sgot->contents
11615 			     + got_index++ * MIPS_ELF_GOT_SIZE (output_bfd));
11616 
11617 	  if (! info->shared)
11618 	    continue;
11619 
11620 	  for (; got_index < g->local_gotno; got_index++)
11621 	    {
11622 	      if (got_index >= g->assigned_low_gotno
11623 		  && got_index <= g->assigned_high_gotno)
11624 		continue;
11625 
11626 	      rel[0].r_offset = rel[1].r_offset = rel[2].r_offset
11627 		= got_index * MIPS_ELF_GOT_SIZE (output_bfd);
11628 	      if (!(mips_elf_create_dynamic_relocation
11629 		    (output_bfd, info, rel, NULL,
11630 		     bfd_abs_section_ptr,
11631 		     0, &addend, sgot)))
11632 		return FALSE;
11633 	      BFD_ASSERT (addend == 0);
11634 	    }
11635 	}
11636     }
11637 
11638   /* The generation of dynamic relocations for the non-primary gots
11639      adds more dynamic relocations.  We cannot count them until
11640      here.  */
11641 
11642   if (elf_hash_table (info)->dynamic_sections_created)
11643     {
11644       bfd_byte *b;
11645       bfd_boolean swap_out_p;
11646 
11647       BFD_ASSERT (sdyn != NULL);
11648 
11649       for (b = sdyn->contents;
11650 	   b < sdyn->contents + sdyn->size;
11651 	   b += MIPS_ELF_DYN_SIZE (dynobj))
11652 	{
11653 	  Elf_Internal_Dyn dyn;
11654 	  asection *s;
11655 
11656 	  /* Read in the current dynamic entry.  */
11657 	  (*get_elf_backend_data (dynobj)->s->swap_dyn_in) (dynobj, b, &dyn);
11658 
11659 	  /* Assume that we're going to modify it and write it out.  */
11660 	  swap_out_p = TRUE;
11661 
11662 	  switch (dyn.d_tag)
11663 	    {
11664 	    case DT_RELSZ:
11665 	      /* Reduce DT_RELSZ to account for any relocations we
11666 		 decided not to make.  This is for the n64 irix rld,
11667 		 which doesn't seem to apply any relocations if there
11668 		 are trailing null entries.  */
11669 	      s = mips_elf_rel_dyn_section (info, FALSE);
11670 	      dyn.d_un.d_val = (s->reloc_count
11671 				* (ABI_64_P (output_bfd)
11672 				   ? sizeof (Elf64_Mips_External_Rel)
11673 				   : sizeof (Elf32_External_Rel)));
11674 	      /* Adjust the section size too.  Tools like the prelinker
11675 		 can reasonably expect the values to the same.  */
11676 	      elf_section_data (s->output_section)->this_hdr.sh_size
11677 		= dyn.d_un.d_val;
11678 	      break;
11679 
11680 	    default:
11681 	      swap_out_p = FALSE;
11682 	      break;
11683 	    }
11684 
11685 	  if (swap_out_p)
11686 	    (*get_elf_backend_data (dynobj)->s->swap_dyn_out)
11687 	      (dynobj, &dyn, b);
11688 	}
11689     }
11690 
11691   {
11692     asection *s;
11693     Elf32_compact_rel cpt;
11694 
11695     if (SGI_COMPAT (output_bfd))
11696       {
11697 	/* Write .compact_rel section out.  */
11698 	s = bfd_get_linker_section (dynobj, ".compact_rel");
11699 	if (s != NULL)
11700 	  {
11701 	    cpt.id1 = 1;
11702 	    cpt.num = s->reloc_count;
11703 	    cpt.id2 = 2;
11704 	    cpt.offset = (s->output_section->filepos
11705 			  + sizeof (Elf32_External_compact_rel));
11706 	    cpt.reserved0 = 0;
11707 	    cpt.reserved1 = 0;
11708 	    bfd_elf32_swap_compact_rel_out (output_bfd, &cpt,
11709 					    ((Elf32_External_compact_rel *)
11710 					     s->contents));
11711 
11712 	    /* Clean up a dummy stub function entry in .text.  */
11713 	    if (htab->sstubs != NULL)
11714 	      {
11715 		file_ptr dummy_offset;
11716 
11717 		BFD_ASSERT (htab->sstubs->size >= htab->function_stub_size);
11718 		dummy_offset = htab->sstubs->size - htab->function_stub_size;
11719 		memset (htab->sstubs->contents + dummy_offset, 0,
11720 			htab->function_stub_size);
11721 	      }
11722 	  }
11723       }
11724 
11725     /* The psABI says that the dynamic relocations must be sorted in
11726        increasing order of r_symndx.  The VxWorks EABI doesn't require
11727        this, and because the code below handles REL rather than RELA
11728        relocations, using it for VxWorks would be outright harmful.  */
11729     if (!htab->is_vxworks)
11730       {
11731 	s = mips_elf_rel_dyn_section (info, FALSE);
11732 	if (s != NULL
11733 	    && s->size > (bfd_vma)2 * MIPS_ELF_REL_SIZE (output_bfd))
11734 	  {
11735 	    reldyn_sorting_bfd = output_bfd;
11736 
11737 	    if (ABI_64_P (output_bfd))
11738 	      qsort ((Elf64_External_Rel *) s->contents + 1,
11739 		     s->reloc_count - 1, sizeof (Elf64_Mips_External_Rel),
11740 		     sort_dynamic_relocs_64);
11741 	    else
11742 	      qsort ((Elf32_External_Rel *) s->contents + 1,
11743 		     s->reloc_count - 1, sizeof (Elf32_External_Rel),
11744 		     sort_dynamic_relocs);
11745 	  }
11746       }
11747   }
11748 
11749   if (htab->splt && htab->splt->size > 0)
11750     {
11751       if (htab->is_vxworks)
11752 	{
11753 	  if (info->shared)
11754 	    mips_vxworks_finish_shared_plt (output_bfd, info);
11755 	  else
11756 	    mips_vxworks_finish_exec_plt (output_bfd, info);
11757 	}
11758       else
11759 	{
11760 	  BFD_ASSERT (!info->shared);
11761 	  if (!mips_finish_exec_plt (output_bfd, info))
11762 	    return FALSE;
11763 	}
11764     }
11765   return TRUE;
11766 }
11767 
11768 
11769 /* Set ABFD's EF_MIPS_ARCH and EF_MIPS_MACH flags.  */
11770 
11771 static void
11772 mips_set_isa_flags (bfd *abfd)
11773 {
11774   flagword val;
11775 
11776   switch (bfd_get_mach (abfd))
11777     {
11778     default:
11779     case bfd_mach_mips3000:
11780       val = E_MIPS_ARCH_1;
11781       break;
11782 
11783     case bfd_mach_mips3900:
11784       val = E_MIPS_ARCH_1 | E_MIPS_MACH_3900;
11785       break;
11786 
11787     case bfd_mach_mips6000:
11788       val = E_MIPS_ARCH_2;
11789       break;
11790 
11791     case bfd_mach_mips4000:
11792     case bfd_mach_mips4300:
11793     case bfd_mach_mips4400:
11794     case bfd_mach_mips4600:
11795       val = E_MIPS_ARCH_3;
11796       break;
11797 
11798     case bfd_mach_mips4010:
11799       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4010;
11800       break;
11801 
11802     case bfd_mach_mips4100:
11803       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4100;
11804       break;
11805 
11806     case bfd_mach_mips4111:
11807       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4111;
11808       break;
11809 
11810     case bfd_mach_mips4120:
11811       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4120;
11812       break;
11813 
11814     case bfd_mach_mips4650:
11815       val = E_MIPS_ARCH_3 | E_MIPS_MACH_4650;
11816       break;
11817 
11818     case bfd_mach_mips5400:
11819       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5400;
11820       break;
11821 
11822     case bfd_mach_mips5500:
11823       val = E_MIPS_ARCH_4 | E_MIPS_MACH_5500;
11824       break;
11825 
11826     case bfd_mach_mips5900:
11827       val = E_MIPS_ARCH_3 | E_MIPS_MACH_5900;
11828       break;
11829 
11830     case bfd_mach_mips9000:
11831       val = E_MIPS_ARCH_4 | E_MIPS_MACH_9000;
11832       break;
11833 
11834     case bfd_mach_mips5000:
11835     case bfd_mach_mips7000:
11836     case bfd_mach_mips8000:
11837     case bfd_mach_mips10000:
11838     case bfd_mach_mips12000:
11839     case bfd_mach_mips14000:
11840     case bfd_mach_mips16000:
11841       val = E_MIPS_ARCH_4;
11842       break;
11843 
11844     case bfd_mach_mips5:
11845       val = E_MIPS_ARCH_5;
11846       break;
11847 
11848     case bfd_mach_mips_loongson_2e:
11849       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2E;
11850       break;
11851 
11852     case bfd_mach_mips_loongson_2f:
11853       val = E_MIPS_ARCH_3 | E_MIPS_MACH_LS2F;
11854       break;
11855 
11856     case bfd_mach_mips_sb1:
11857       val = E_MIPS_ARCH_64 | E_MIPS_MACH_SB1;
11858       break;
11859 
11860     case bfd_mach_mips_loongson_3a:
11861       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_LS3A;
11862       break;
11863 
11864     case bfd_mach_mips_octeon:
11865     case bfd_mach_mips_octeonp:
11866       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON;
11867       break;
11868 
11869     case bfd_mach_mips_octeon3:
11870       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON3;
11871       break;
11872 
11873     case bfd_mach_mips_xlr:
11874       val = E_MIPS_ARCH_64 | E_MIPS_MACH_XLR;
11875       break;
11876 
11877     case bfd_mach_mips_octeon2:
11878       val = E_MIPS_ARCH_64R2 | E_MIPS_MACH_OCTEON2;
11879       break;
11880 
11881     case bfd_mach_mipsisa32:
11882       val = E_MIPS_ARCH_32;
11883       break;
11884 
11885     case bfd_mach_mipsisa64:
11886       val = E_MIPS_ARCH_64;
11887       break;
11888 
11889     case bfd_mach_mipsisa32r2:
11890     case bfd_mach_mipsisa32r3:
11891     case bfd_mach_mipsisa32r5:
11892       val = E_MIPS_ARCH_32R2;
11893       break;
11894 
11895     case bfd_mach_mipsisa64r2:
11896     case bfd_mach_mipsisa64r3:
11897     case bfd_mach_mipsisa64r5:
11898       val = E_MIPS_ARCH_64R2;
11899       break;
11900 
11901     case bfd_mach_mipsisa32r6:
11902       val = E_MIPS_ARCH_32R6;
11903       break;
11904 
11905     case bfd_mach_mipsisa64r6:
11906       val = E_MIPS_ARCH_64R6;
11907       break;
11908     }
11909   elf_elfheader (abfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
11910   elf_elfheader (abfd)->e_flags |= val;
11911 
11912 }
11913 
11914 
11915 /* Whether to sort relocs output by ld -r or ld --emit-relocs, by r_offset.
11916    Don't do so for code sections.  We want to keep ordering of HI16/LO16
11917    as is.  On the other hand, elf-eh-frame.c processing requires .eh_frame
11918    relocs to be sorted.  */
11919 
11920 bfd_boolean
11921 _bfd_mips_elf_sort_relocs_p (asection *sec)
11922 {
11923   return (sec->flags & SEC_CODE) == 0;
11924 }
11925 
11926 
11927 /* The final processing done just before writing out a MIPS ELF object
11928    file.  This gets the MIPS architecture right based on the machine
11929    number.  This is used by both the 32-bit and the 64-bit ABI.  */
11930 
11931 void
11932 _bfd_mips_elf_final_write_processing (bfd *abfd,
11933 				      bfd_boolean linker ATTRIBUTE_UNUSED)
11934 {
11935   unsigned int i;
11936   Elf_Internal_Shdr **hdrpp;
11937   const char *name;
11938   asection *sec;
11939 
11940   /* Keep the existing EF_MIPS_MACH and EF_MIPS_ARCH flags if the former
11941      is nonzero.  This is for compatibility with old objects, which used
11942      a combination of a 32-bit EF_MIPS_ARCH and a 64-bit EF_MIPS_MACH.  */
11943   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_MACH) == 0)
11944     mips_set_isa_flags (abfd);
11945 
11946   /* Set the sh_info field for .gptab sections and other appropriate
11947      info for each special section.  */
11948   for (i = 1, hdrpp = elf_elfsections (abfd) + 1;
11949        i < elf_numsections (abfd);
11950        i++, hdrpp++)
11951     {
11952       switch ((*hdrpp)->sh_type)
11953 	{
11954 	case SHT_MIPS_MSYM:
11955 	case SHT_MIPS_LIBLIST:
11956 	  sec = bfd_get_section_by_name (abfd, ".dynstr");
11957 	  if (sec != NULL)
11958 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11959 	  break;
11960 
11961 	case SHT_MIPS_GPTAB:
11962 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11963 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11964 	  BFD_ASSERT (name != NULL
11965 		      && CONST_STRNEQ (name, ".gptab."));
11966 	  sec = bfd_get_section_by_name (abfd, name + sizeof ".gptab" - 1);
11967 	  BFD_ASSERT (sec != NULL);
11968 	  (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11969 	  break;
11970 
11971 	case SHT_MIPS_CONTENT:
11972 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11973 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11974 	  BFD_ASSERT (name != NULL
11975 		      && CONST_STRNEQ (name, ".MIPS.content"));
11976 	  sec = bfd_get_section_by_name (abfd,
11977 					 name + sizeof ".MIPS.content" - 1);
11978 	  BFD_ASSERT (sec != NULL);
11979 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11980 	  break;
11981 
11982 	case SHT_MIPS_SYMBOL_LIB:
11983 	  sec = bfd_get_section_by_name (abfd, ".dynsym");
11984 	  if (sec != NULL)
11985 	    (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
11986 	  sec = bfd_get_section_by_name (abfd, ".liblist");
11987 	  if (sec != NULL)
11988 	    (*hdrpp)->sh_info = elf_section_data (sec)->this_idx;
11989 	  break;
11990 
11991 	case SHT_MIPS_EVENTS:
11992 	  BFD_ASSERT ((*hdrpp)->bfd_section != NULL);
11993 	  name = bfd_get_section_name (abfd, (*hdrpp)->bfd_section);
11994 	  BFD_ASSERT (name != NULL);
11995 	  if (CONST_STRNEQ (name, ".MIPS.events"))
11996 	    sec = bfd_get_section_by_name (abfd,
11997 					   name + sizeof ".MIPS.events" - 1);
11998 	  else
11999 	    {
12000 	      BFD_ASSERT (CONST_STRNEQ (name, ".MIPS.post_rel"));
12001 	      sec = bfd_get_section_by_name (abfd,
12002 					     (name
12003 					      + sizeof ".MIPS.post_rel" - 1));
12004 	    }
12005 	  BFD_ASSERT (sec != NULL);
12006 	  (*hdrpp)->sh_link = elf_section_data (sec)->this_idx;
12007 	  break;
12008 
12009 	}
12010     }
12011 }
12012 
12013 /* When creating an IRIX5 executable, we need REGINFO and RTPROC
12014    segments.  */
12015 
12016 int
12017 _bfd_mips_elf_additional_program_headers (bfd *abfd,
12018 					  struct bfd_link_info *info ATTRIBUTE_UNUSED)
12019 {
12020   asection *s;
12021   int ret = 0;
12022 
12023   /* See if we need a PT_MIPS_REGINFO segment.  */
12024   s = bfd_get_section_by_name (abfd, ".reginfo");
12025   if (s && (s->flags & SEC_LOAD))
12026     ++ret;
12027 
12028   /* See if we need a PT_MIPS_ABIFLAGS segment.  */
12029   if (bfd_get_section_by_name (abfd, ".MIPS.abiflags"))
12030     ++ret;
12031 
12032   /* See if we need a PT_MIPS_OPTIONS segment.  */
12033   if (IRIX_COMPAT (abfd) == ict_irix6
12034       && bfd_get_section_by_name (abfd,
12035 				  MIPS_ELF_OPTIONS_SECTION_NAME (abfd)))
12036     ++ret;
12037 
12038   /* See if we need a PT_MIPS_RTPROC segment.  */
12039   if (IRIX_COMPAT (abfd) == ict_irix5
12040       && bfd_get_section_by_name (abfd, ".dynamic")
12041       && bfd_get_section_by_name (abfd, ".mdebug"))
12042     ++ret;
12043 
12044   /* Allocate a PT_NULL header in dynamic objects.  See
12045      _bfd_mips_elf_modify_segment_map for details.  */
12046   if (!SGI_COMPAT (abfd)
12047       && bfd_get_section_by_name (abfd, ".dynamic"))
12048     ++ret;
12049 
12050   return ret;
12051 }
12052 
12053 /* Modify the segment map for an IRIX5 executable.  */
12054 
12055 bfd_boolean
12056 _bfd_mips_elf_modify_segment_map (bfd *abfd,
12057 				  struct bfd_link_info *info)
12058 {
12059   asection *s;
12060   struct elf_segment_map *m, **pm;
12061   bfd_size_type amt;
12062 
12063   /* If there is a .reginfo section, we need a PT_MIPS_REGINFO
12064      segment.  */
12065   s = bfd_get_section_by_name (abfd, ".reginfo");
12066   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12067     {
12068       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12069 	if (m->p_type == PT_MIPS_REGINFO)
12070 	  break;
12071       if (m == NULL)
12072 	{
12073 	  amt = sizeof *m;
12074 	  m = bfd_zalloc (abfd, amt);
12075 	  if (m == NULL)
12076 	    return FALSE;
12077 
12078 	  m->p_type = PT_MIPS_REGINFO;
12079 	  m->count = 1;
12080 	  m->sections[0] = s;
12081 
12082 	  /* We want to put it after the PHDR and INTERP segments.  */
12083 	  pm = &elf_seg_map (abfd);
12084 	  while (*pm != NULL
12085 		 && ((*pm)->p_type == PT_PHDR
12086 		     || (*pm)->p_type == PT_INTERP))
12087 	    pm = &(*pm)->next;
12088 
12089 	  m->next = *pm;
12090 	  *pm = m;
12091 	}
12092     }
12093 
12094   /* If there is a .MIPS.abiflags section, we need a PT_MIPS_ABIFLAGS
12095      segment.  */
12096   s = bfd_get_section_by_name (abfd, ".MIPS.abiflags");
12097   if (s != NULL && (s->flags & SEC_LOAD) != 0)
12098     {
12099       for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12100 	if (m->p_type == PT_MIPS_ABIFLAGS)
12101 	  break;
12102       if (m == NULL)
12103 	{
12104 	  amt = sizeof *m;
12105 	  m = bfd_zalloc (abfd, amt);
12106 	  if (m == NULL)
12107 	    return FALSE;
12108 
12109 	  m->p_type = PT_MIPS_ABIFLAGS;
12110 	  m->count = 1;
12111 	  m->sections[0] = s;
12112 
12113 	  /* We want to put it after the PHDR and INTERP segments.  */
12114 	  pm = &elf_seg_map (abfd);
12115 	  while (*pm != NULL
12116 		 && ((*pm)->p_type == PT_PHDR
12117 		     || (*pm)->p_type == PT_INTERP))
12118 	    pm = &(*pm)->next;
12119 
12120 	  m->next = *pm;
12121 	  *pm = m;
12122 	}
12123     }
12124 
12125   /* For IRIX 6, we don't have .mdebug sections, nor does anything but
12126      .dynamic end up in PT_DYNAMIC.  However, we do have to insert a
12127      PT_MIPS_OPTIONS segment immediately following the program header
12128      table.  */
12129   if (NEWABI_P (abfd)
12130       /* On non-IRIX6 new abi, we'll have already created a segment
12131 	 for this section, so don't create another.  I'm not sure this
12132 	 is not also the case for IRIX 6, but I can't test it right
12133 	 now.  */
12134       && IRIX_COMPAT (abfd) == ict_irix6)
12135     {
12136       for (s = abfd->sections; s; s = s->next)
12137 	if (elf_section_data (s)->this_hdr.sh_type == SHT_MIPS_OPTIONS)
12138 	  break;
12139 
12140       if (s)
12141 	{
12142 	  struct elf_segment_map *options_segment;
12143 
12144 	  pm = &elf_seg_map (abfd);
12145 	  while (*pm != NULL
12146 		 && ((*pm)->p_type == PT_PHDR
12147 		     || (*pm)->p_type == PT_INTERP))
12148 	    pm = &(*pm)->next;
12149 
12150 	  if (*pm == NULL || (*pm)->p_type != PT_MIPS_OPTIONS)
12151 	    {
12152 	      amt = sizeof (struct elf_segment_map);
12153 	      options_segment = bfd_zalloc (abfd, amt);
12154 	      options_segment->next = *pm;
12155 	      options_segment->p_type = PT_MIPS_OPTIONS;
12156 	      options_segment->p_flags = PF_R;
12157 	      options_segment->p_flags_valid = TRUE;
12158 	      options_segment->count = 1;
12159 	      options_segment->sections[0] = s;
12160 	      *pm = options_segment;
12161 	    }
12162 	}
12163     }
12164   else
12165     {
12166       if (IRIX_COMPAT (abfd) == ict_irix5)
12167 	{
12168 	  /* If there are .dynamic and .mdebug sections, we make a room
12169 	     for the RTPROC header.  FIXME: Rewrite without section names.  */
12170 	  if (bfd_get_section_by_name (abfd, ".interp") == NULL
12171 	      && bfd_get_section_by_name (abfd, ".dynamic") != NULL
12172 	      && bfd_get_section_by_name (abfd, ".mdebug") != NULL)
12173 	    {
12174 	      for (m = elf_seg_map (abfd); m != NULL; m = m->next)
12175 		if (m->p_type == PT_MIPS_RTPROC)
12176 		  break;
12177 	      if (m == NULL)
12178 		{
12179 		  amt = sizeof *m;
12180 		  m = bfd_zalloc (abfd, amt);
12181 		  if (m == NULL)
12182 		    return FALSE;
12183 
12184 		  m->p_type = PT_MIPS_RTPROC;
12185 
12186 		  s = bfd_get_section_by_name (abfd, ".rtproc");
12187 		  if (s == NULL)
12188 		    {
12189 		      m->count = 0;
12190 		      m->p_flags = 0;
12191 		      m->p_flags_valid = 1;
12192 		    }
12193 		  else
12194 		    {
12195 		      m->count = 1;
12196 		      m->sections[0] = s;
12197 		    }
12198 
12199 		  /* We want to put it after the DYNAMIC segment.  */
12200 		  pm = &elf_seg_map (abfd);
12201 		  while (*pm != NULL && (*pm)->p_type != PT_DYNAMIC)
12202 		    pm = &(*pm)->next;
12203 		  if (*pm != NULL)
12204 		    pm = &(*pm)->next;
12205 
12206 		  m->next = *pm;
12207 		  *pm = m;
12208 		}
12209 	    }
12210 	}
12211       /* On IRIX5, the PT_DYNAMIC segment includes the .dynamic,
12212 	 .dynstr, .dynsym, and .hash sections, and everything in
12213 	 between.  */
12214       for (pm = &elf_seg_map (abfd); *pm != NULL;
12215 	   pm = &(*pm)->next)
12216 	if ((*pm)->p_type == PT_DYNAMIC)
12217 	  break;
12218       m = *pm;
12219       /* GNU/Linux binaries do not need the extended PT_DYNAMIC section.
12220 	 glibc's dynamic linker has traditionally derived the number of
12221 	 tags from the p_filesz field, and sometimes allocates stack
12222 	 arrays of that size.  An overly-big PT_DYNAMIC segment can
12223 	 be actively harmful in such cases.  Making PT_DYNAMIC contain
12224 	 other sections can also make life hard for the prelinker,
12225 	 which might move one of the other sections to a different
12226 	 PT_LOAD segment.  */
12227       if (SGI_COMPAT (abfd)
12228 	  && m != NULL
12229 	  && m->count == 1
12230 	  && strcmp (m->sections[0]->name, ".dynamic") == 0)
12231 	{
12232 	  static const char *sec_names[] =
12233 	  {
12234 	    ".dynamic", ".dynstr", ".dynsym", ".hash"
12235 	  };
12236 	  bfd_vma low, high;
12237 	  unsigned int i, c;
12238 	  struct elf_segment_map *n;
12239 
12240 	  low = ~(bfd_vma) 0;
12241 	  high = 0;
12242 	  for (i = 0; i < sizeof sec_names / sizeof sec_names[0]; i++)
12243 	    {
12244 	      s = bfd_get_section_by_name (abfd, sec_names[i]);
12245 	      if (s != NULL && (s->flags & SEC_LOAD) != 0)
12246 		{
12247 		  bfd_size_type sz;
12248 
12249 		  if (low > s->vma)
12250 		    low = s->vma;
12251 		  sz = s->size;
12252 		  if (high < s->vma + sz)
12253 		    high = s->vma + sz;
12254 		}
12255 	    }
12256 
12257 	  c = 0;
12258 	  for (s = abfd->sections; s != NULL; s = s->next)
12259 	    if ((s->flags & SEC_LOAD) != 0
12260 		&& s->vma >= low
12261 		&& s->vma + s->size <= high)
12262 	      ++c;
12263 
12264 	  amt = sizeof *n + (bfd_size_type) (c - 1) * sizeof (asection *);
12265 	  n = bfd_zalloc (abfd, amt);
12266 	  if (n == NULL)
12267 	    return FALSE;
12268 	  *n = *m;
12269 	  n->count = c;
12270 
12271 	  i = 0;
12272 	  for (s = abfd->sections; s != NULL; s = s->next)
12273 	    {
12274 	      if ((s->flags & SEC_LOAD) != 0
12275 		  && s->vma >= low
12276 		  && s->vma + s->size <= high)
12277 		{
12278 		  n->sections[i] = s;
12279 		  ++i;
12280 		}
12281 	    }
12282 
12283 	  *pm = n;
12284 	}
12285     }
12286 
12287   /* Allocate a spare program header in dynamic objects so that tools
12288      like the prelinker can add an extra PT_LOAD entry.
12289 
12290      If the prelinker needs to make room for a new PT_LOAD entry, its
12291      standard procedure is to move the first (read-only) sections into
12292      the new (writable) segment.  However, the MIPS ABI requires
12293      .dynamic to be in a read-only segment, and the section will often
12294      start within sizeof (ElfNN_Phdr) bytes of the last program header.
12295 
12296      Although the prelinker could in principle move .dynamic to a
12297      writable segment, it seems better to allocate a spare program
12298      header instead, and avoid the need to move any sections.
12299      There is a long tradition of allocating spare dynamic tags,
12300      so allocating a spare program header seems like a natural
12301      extension.
12302 
12303      If INFO is NULL, we may be copying an already prelinked binary
12304      with objcopy or strip, so do not add this header.  */
12305   if (info != NULL
12306       && !SGI_COMPAT (abfd)
12307       && bfd_get_section_by_name (abfd, ".dynamic"))
12308     {
12309       for (pm = &elf_seg_map (abfd); *pm != NULL; pm = &(*pm)->next)
12310 	if ((*pm)->p_type == PT_NULL)
12311 	  break;
12312       if (*pm == NULL)
12313 	{
12314 	  m = bfd_zalloc (abfd, sizeof (*m));
12315 	  if (m == NULL)
12316 	    return FALSE;
12317 
12318 	  m->p_type = PT_NULL;
12319 	  *pm = m;
12320 	}
12321     }
12322 
12323   return TRUE;
12324 }
12325 
12326 /* Return the section that should be marked against GC for a given
12327    relocation.  */
12328 
12329 asection *
12330 _bfd_mips_elf_gc_mark_hook (asection *sec,
12331 			    struct bfd_link_info *info,
12332 			    Elf_Internal_Rela *rel,
12333 			    struct elf_link_hash_entry *h,
12334 			    Elf_Internal_Sym *sym)
12335 {
12336   /* ??? Do mips16 stub sections need to be handled special?  */
12337 
12338   if (h != NULL)
12339     switch (ELF_R_TYPE (sec->owner, rel->r_info))
12340       {
12341       case R_MIPS_GNU_VTINHERIT:
12342       case R_MIPS_GNU_VTENTRY:
12343 	return NULL;
12344       }
12345 
12346   return _bfd_elf_gc_mark_hook (sec, info, rel, h, sym);
12347 }
12348 
12349 /* Update the got entry reference counts for the section being removed.  */
12350 
12351 bfd_boolean
12352 _bfd_mips_elf_gc_sweep_hook (bfd *abfd ATTRIBUTE_UNUSED,
12353 			     struct bfd_link_info *info ATTRIBUTE_UNUSED,
12354 			     asection *sec ATTRIBUTE_UNUSED,
12355 			     const Elf_Internal_Rela *relocs ATTRIBUTE_UNUSED)
12356 {
12357 #if 0
12358   Elf_Internal_Shdr *symtab_hdr;
12359   struct elf_link_hash_entry **sym_hashes;
12360   bfd_signed_vma *local_got_refcounts;
12361   const Elf_Internal_Rela *rel, *relend;
12362   unsigned long r_symndx;
12363   struct elf_link_hash_entry *h;
12364 
12365   if (info->relocatable)
12366     return TRUE;
12367 
12368   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12369   sym_hashes = elf_sym_hashes (abfd);
12370   local_got_refcounts = elf_local_got_refcounts (abfd);
12371 
12372   relend = relocs + sec->reloc_count;
12373   for (rel = relocs; rel < relend; rel++)
12374     switch (ELF_R_TYPE (abfd, rel->r_info))
12375       {
12376       case R_MIPS16_GOT16:
12377       case R_MIPS16_CALL16:
12378       case R_MIPS_GOT16:
12379       case R_MIPS_CALL16:
12380       case R_MIPS_CALL_HI16:
12381       case R_MIPS_CALL_LO16:
12382       case R_MIPS_GOT_HI16:
12383       case R_MIPS_GOT_LO16:
12384       case R_MIPS_GOT_DISP:
12385       case R_MIPS_GOT_PAGE:
12386       case R_MIPS_GOT_OFST:
12387       case R_MICROMIPS_GOT16:
12388       case R_MICROMIPS_CALL16:
12389       case R_MICROMIPS_CALL_HI16:
12390       case R_MICROMIPS_CALL_LO16:
12391       case R_MICROMIPS_GOT_HI16:
12392       case R_MICROMIPS_GOT_LO16:
12393       case R_MICROMIPS_GOT_DISP:
12394       case R_MICROMIPS_GOT_PAGE:
12395       case R_MICROMIPS_GOT_OFST:
12396 	/* ??? It would seem that the existing MIPS code does no sort
12397 	   of reference counting or whatnot on its GOT and PLT entries,
12398 	   so it is not possible to garbage collect them at this time.  */
12399 	break;
12400 
12401       default:
12402 	break;
12403       }
12404 #endif
12405 
12406   return TRUE;
12407 }
12408 
12409 /* Prevent .MIPS.abiflags from being discarded with --gc-sections.  */
12410 
12411 bfd_boolean
12412 _bfd_mips_elf_gc_mark_extra_sections (struct bfd_link_info *info,
12413 				      elf_gc_mark_hook_fn gc_mark_hook)
12414 {
12415   bfd *sub;
12416 
12417   _bfd_elf_gc_mark_extra_sections (info, gc_mark_hook);
12418 
12419   for (sub = info->input_bfds; sub != NULL; sub = sub->link.next)
12420     {
12421       asection *o;
12422 
12423       if (! is_mips_elf (sub))
12424 	continue;
12425 
12426       for (o = sub->sections; o != NULL; o = o->next)
12427 	if (!o->gc_mark
12428 	    && MIPS_ELF_ABIFLAGS_SECTION_NAME_P
12429 		 (bfd_get_section_name (sub, o)))
12430 	  {
12431 	    if (!_bfd_elf_gc_mark (info, o, gc_mark_hook))
12432 	      return FALSE;
12433 	  }
12434     }
12435 
12436   return TRUE;
12437 }
12438 
12439 /* Copy data from a MIPS ELF indirect symbol to its direct symbol,
12440    hiding the old indirect symbol.  Process additional relocation
12441    information.  Also called for weakdefs, in which case we just let
12442    _bfd_elf_link_hash_copy_indirect copy the flags for us.  */
12443 
12444 void
12445 _bfd_mips_elf_copy_indirect_symbol (struct bfd_link_info *info,
12446 				    struct elf_link_hash_entry *dir,
12447 				    struct elf_link_hash_entry *ind)
12448 {
12449   struct mips_elf_link_hash_entry *dirmips, *indmips;
12450 
12451   _bfd_elf_link_hash_copy_indirect (info, dir, ind);
12452 
12453   dirmips = (struct mips_elf_link_hash_entry *) dir;
12454   indmips = (struct mips_elf_link_hash_entry *) ind;
12455   /* Any absolute non-dynamic relocations against an indirect or weak
12456      definition will be against the target symbol.  */
12457   if (indmips->has_static_relocs)
12458     dirmips->has_static_relocs = TRUE;
12459 
12460   if (ind->root.type != bfd_link_hash_indirect)
12461     return;
12462 
12463   dirmips->possibly_dynamic_relocs += indmips->possibly_dynamic_relocs;
12464   if (indmips->readonly_reloc)
12465     dirmips->readonly_reloc = TRUE;
12466   if (indmips->no_fn_stub)
12467     dirmips->no_fn_stub = TRUE;
12468   if (indmips->fn_stub)
12469     {
12470       dirmips->fn_stub = indmips->fn_stub;
12471       indmips->fn_stub = NULL;
12472     }
12473   if (indmips->need_fn_stub)
12474     {
12475       dirmips->need_fn_stub = TRUE;
12476       indmips->need_fn_stub = FALSE;
12477     }
12478   if (indmips->call_stub)
12479     {
12480       dirmips->call_stub = indmips->call_stub;
12481       indmips->call_stub = NULL;
12482     }
12483   if (indmips->call_fp_stub)
12484     {
12485       dirmips->call_fp_stub = indmips->call_fp_stub;
12486       indmips->call_fp_stub = NULL;
12487     }
12488   if (indmips->global_got_area < dirmips->global_got_area)
12489     dirmips->global_got_area = indmips->global_got_area;
12490   if (indmips->global_got_area < GGA_NONE)
12491     indmips->global_got_area = GGA_NONE;
12492   if (indmips->has_nonpic_branches)
12493     dirmips->has_nonpic_branches = TRUE;
12494 }
12495 
12496 #define PDR_SIZE 32
12497 
12498 bfd_boolean
12499 _bfd_mips_elf_discard_info (bfd *abfd, struct elf_reloc_cookie *cookie,
12500 			    struct bfd_link_info *info)
12501 {
12502   asection *o;
12503   bfd_boolean ret = FALSE;
12504   unsigned char *tdata;
12505   size_t i, skip;
12506 
12507   o = bfd_get_section_by_name (abfd, ".pdr");
12508   if (! o)
12509     return FALSE;
12510   if (o->size == 0)
12511     return FALSE;
12512   if (o->size % PDR_SIZE != 0)
12513     return FALSE;
12514   if (o->output_section != NULL
12515       && bfd_is_abs_section (o->output_section))
12516     return FALSE;
12517 
12518   tdata = bfd_zmalloc (o->size / PDR_SIZE);
12519   if (! tdata)
12520     return FALSE;
12521 
12522   cookie->rels = _bfd_elf_link_read_relocs (abfd, o, NULL, NULL,
12523 					    info->keep_memory);
12524   if (!cookie->rels)
12525     {
12526       free (tdata);
12527       return FALSE;
12528     }
12529 
12530   cookie->rel = cookie->rels;
12531   cookie->relend = cookie->rels + o->reloc_count;
12532 
12533   for (i = 0, skip = 0; i < o->size / PDR_SIZE; i ++)
12534     {
12535       if (bfd_elf_reloc_symbol_deleted_p (i * PDR_SIZE, cookie))
12536 	{
12537 	  tdata[i] = 1;
12538 	  skip ++;
12539 	}
12540     }
12541 
12542   if (skip != 0)
12543     {
12544       mips_elf_section_data (o)->u.tdata = tdata;
12545       if (o->rawsize == 0)
12546 	o->rawsize = o->size;
12547       o->size -= skip * PDR_SIZE;
12548       ret = TRUE;
12549     }
12550   else
12551     free (tdata);
12552 
12553   if (! info->keep_memory)
12554     free (cookie->rels);
12555 
12556   return ret;
12557 }
12558 
12559 bfd_boolean
12560 _bfd_mips_elf_ignore_discarded_relocs (asection *sec)
12561 {
12562   if (strcmp (sec->name, ".pdr") == 0)
12563     return TRUE;
12564   return FALSE;
12565 }
12566 
12567 bfd_boolean
12568 _bfd_mips_elf_write_section (bfd *output_bfd,
12569 			     struct bfd_link_info *link_info ATTRIBUTE_UNUSED,
12570                              asection *sec, bfd_byte *contents)
12571 {
12572   bfd_byte *to, *from, *end;
12573   int i;
12574 
12575   if (strcmp (sec->name, ".pdr") != 0)
12576     return FALSE;
12577 
12578   if (mips_elf_section_data (sec)->u.tdata == NULL)
12579     return FALSE;
12580 
12581   to = contents;
12582   end = contents + sec->size;
12583   for (from = contents, i = 0;
12584        from < end;
12585        from += PDR_SIZE, i++)
12586     {
12587       if ((mips_elf_section_data (sec)->u.tdata)[i] == 1)
12588 	continue;
12589       if (to != from)
12590 	memcpy (to, from, PDR_SIZE);
12591       to += PDR_SIZE;
12592     }
12593   bfd_set_section_contents (output_bfd, sec->output_section, contents,
12594 			    sec->output_offset, sec->size);
12595   return TRUE;
12596 }
12597 
12598 /* microMIPS code retains local labels for linker relaxation.  Omit them
12599    from output by default for clarity.  */
12600 
12601 bfd_boolean
12602 _bfd_mips_elf_is_target_special_symbol (bfd *abfd, asymbol *sym)
12603 {
12604   return _bfd_elf_is_local_label_name (abfd, sym->name);
12605 }
12606 
12607 /* MIPS ELF uses a special find_nearest_line routine in order the
12608    handle the ECOFF debugging information.  */
12609 
12610 struct mips_elf_find_line
12611 {
12612   struct ecoff_debug_info d;
12613   struct ecoff_find_line i;
12614 };
12615 
12616 bfd_boolean
12617 _bfd_mips_elf_find_nearest_line (bfd *abfd, asymbol **symbols,
12618 				 asection *section, bfd_vma offset,
12619 				 const char **filename_ptr,
12620 				 const char **functionname_ptr,
12621 				 unsigned int *line_ptr,
12622 				 unsigned int *discriminator_ptr)
12623 {
12624   asection *msec;
12625 
12626   if (_bfd_dwarf2_find_nearest_line (abfd, symbols, NULL, section, offset,
12627 				     filename_ptr, functionname_ptr,
12628 				     line_ptr, discriminator_ptr,
12629 				     dwarf_debug_sections,
12630 				     ABI_64_P (abfd) ? 8 : 0,
12631 				     &elf_tdata (abfd)->dwarf2_find_line_info))
12632     return TRUE;
12633 
12634   if (_bfd_dwarf1_find_nearest_line (abfd, symbols, section, offset,
12635 				     filename_ptr, functionname_ptr,
12636 				     line_ptr))
12637     return TRUE;
12638 
12639   msec = bfd_get_section_by_name (abfd, ".mdebug");
12640   if (msec != NULL)
12641     {
12642       flagword origflags;
12643       struct mips_elf_find_line *fi;
12644       const struct ecoff_debug_swap * const swap =
12645 	get_elf_backend_data (abfd)->elf_backend_ecoff_debug_swap;
12646 
12647       /* If we are called during a link, mips_elf_final_link may have
12648 	 cleared the SEC_HAS_CONTENTS field.  We force it back on here
12649 	 if appropriate (which it normally will be).  */
12650       origflags = msec->flags;
12651       if (elf_section_data (msec)->this_hdr.sh_type != SHT_NOBITS)
12652 	msec->flags |= SEC_HAS_CONTENTS;
12653 
12654       fi = mips_elf_tdata (abfd)->find_line_info;
12655       if (fi == NULL)
12656 	{
12657 	  bfd_size_type external_fdr_size;
12658 	  char *fraw_src;
12659 	  char *fraw_end;
12660 	  struct fdr *fdr_ptr;
12661 	  bfd_size_type amt = sizeof (struct mips_elf_find_line);
12662 
12663 	  fi = bfd_zalloc (abfd, amt);
12664 	  if (fi == NULL)
12665 	    {
12666 	      msec->flags = origflags;
12667 	      return FALSE;
12668 	    }
12669 
12670 	  if (! _bfd_mips_elf_read_ecoff_info (abfd, msec, &fi->d))
12671 	    {
12672 	      msec->flags = origflags;
12673 	      return FALSE;
12674 	    }
12675 
12676 	  /* Swap in the FDR information.  */
12677 	  amt = fi->d.symbolic_header.ifdMax * sizeof (struct fdr);
12678 	  fi->d.fdr = bfd_alloc (abfd, amt);
12679 	  if (fi->d.fdr == NULL)
12680 	    {
12681 	      msec->flags = origflags;
12682 	      return FALSE;
12683 	    }
12684 	  external_fdr_size = swap->external_fdr_size;
12685 	  fdr_ptr = fi->d.fdr;
12686 	  fraw_src = (char *) fi->d.external_fdr;
12687 	  fraw_end = (fraw_src
12688 		      + fi->d.symbolic_header.ifdMax * external_fdr_size);
12689 	  for (; fraw_src < fraw_end; fraw_src += external_fdr_size, fdr_ptr++)
12690 	    (*swap->swap_fdr_in) (abfd, fraw_src, fdr_ptr);
12691 
12692 	  mips_elf_tdata (abfd)->find_line_info = fi;
12693 
12694 	  /* Note that we don't bother to ever free this information.
12695              find_nearest_line is either called all the time, as in
12696              objdump -l, so the information should be saved, or it is
12697              rarely called, as in ld error messages, so the memory
12698              wasted is unimportant.  Still, it would probably be a
12699              good idea for free_cached_info to throw it away.  */
12700 	}
12701 
12702       if (_bfd_ecoff_locate_line (abfd, section, offset, &fi->d, swap,
12703 				  &fi->i, filename_ptr, functionname_ptr,
12704 				  line_ptr))
12705 	{
12706 	  msec->flags = origflags;
12707 	  return TRUE;
12708 	}
12709 
12710       msec->flags = origflags;
12711     }
12712 
12713   /* Fall back on the generic ELF find_nearest_line routine.  */
12714 
12715   return _bfd_elf_find_nearest_line (abfd, symbols, section, offset,
12716 				     filename_ptr, functionname_ptr,
12717 				     line_ptr, discriminator_ptr);
12718 }
12719 
12720 bfd_boolean
12721 _bfd_mips_elf_find_inliner_info (bfd *abfd,
12722 				 const char **filename_ptr,
12723 				 const char **functionname_ptr,
12724 				 unsigned int *line_ptr)
12725 {
12726   bfd_boolean found;
12727   found = _bfd_dwarf2_find_inliner_info (abfd, filename_ptr,
12728 					 functionname_ptr, line_ptr,
12729 					 & elf_tdata (abfd)->dwarf2_find_line_info);
12730   return found;
12731 }
12732 
12733 
12734 /* When are writing out the .options or .MIPS.options section,
12735    remember the bytes we are writing out, so that we can install the
12736    GP value in the section_processing routine.  */
12737 
12738 bfd_boolean
12739 _bfd_mips_elf_set_section_contents (bfd *abfd, sec_ptr section,
12740 				    const void *location,
12741 				    file_ptr offset, bfd_size_type count)
12742 {
12743   if (MIPS_ELF_OPTIONS_SECTION_NAME_P (section->name))
12744     {
12745       bfd_byte *c;
12746 
12747       if (elf_section_data (section) == NULL)
12748 	{
12749 	  bfd_size_type amt = sizeof (struct bfd_elf_section_data);
12750 	  section->used_by_bfd = bfd_zalloc (abfd, amt);
12751 	  if (elf_section_data (section) == NULL)
12752 	    return FALSE;
12753 	}
12754       c = mips_elf_section_data (section)->u.tdata;
12755       if (c == NULL)
12756 	{
12757 	  c = bfd_zalloc (abfd, section->size);
12758 	  if (c == NULL)
12759 	    return FALSE;
12760 	  mips_elf_section_data (section)->u.tdata = c;
12761 	}
12762 
12763       memcpy (c + offset, location, count);
12764     }
12765 
12766   return _bfd_elf_set_section_contents (abfd, section, location, offset,
12767 					count);
12768 }
12769 
12770 /* This is almost identical to bfd_generic_get_... except that some
12771    MIPS relocations need to be handled specially.  Sigh.  */
12772 
12773 bfd_byte *
12774 _bfd_elf_mips_get_relocated_section_contents
12775   (bfd *abfd,
12776    struct bfd_link_info *link_info,
12777    struct bfd_link_order *link_order,
12778    bfd_byte *data,
12779    bfd_boolean relocatable,
12780    asymbol **symbols)
12781 {
12782   /* Get enough memory to hold the stuff */
12783   bfd *input_bfd = link_order->u.indirect.section->owner;
12784   asection *input_section = link_order->u.indirect.section;
12785   bfd_size_type sz;
12786 
12787   long reloc_size = bfd_get_reloc_upper_bound (input_bfd, input_section);
12788   arelent **reloc_vector = NULL;
12789   long reloc_count;
12790 
12791   if (reloc_size < 0)
12792     goto error_return;
12793 
12794   reloc_vector = bfd_malloc (reloc_size);
12795   if (reloc_vector == NULL && reloc_size != 0)
12796     goto error_return;
12797 
12798   /* read in the section */
12799   sz = input_section->rawsize ? input_section->rawsize : input_section->size;
12800   if (!bfd_get_section_contents (input_bfd, input_section, data, 0, sz))
12801     goto error_return;
12802 
12803   reloc_count = bfd_canonicalize_reloc (input_bfd,
12804 					input_section,
12805 					reloc_vector,
12806 					symbols);
12807   if (reloc_count < 0)
12808     goto error_return;
12809 
12810   if (reloc_count > 0)
12811     {
12812       arelent **parent;
12813       /* for mips */
12814       int gp_found;
12815       bfd_vma gp = 0x12345678;	/* initialize just to shut gcc up */
12816 
12817       {
12818 	struct bfd_hash_entry *h;
12819 	struct bfd_link_hash_entry *lh;
12820 	/* Skip all this stuff if we aren't mixing formats.  */
12821 	if (abfd && input_bfd
12822 	    && abfd->xvec == input_bfd->xvec)
12823 	  lh = 0;
12824 	else
12825 	  {
12826 	    h = bfd_hash_lookup (&link_info->hash->table, "_gp", FALSE, FALSE);
12827 	    lh = (struct bfd_link_hash_entry *) h;
12828 	  }
12829       lookup:
12830 	if (lh)
12831 	  {
12832 	    switch (lh->type)
12833 	      {
12834 	      case bfd_link_hash_undefined:
12835 	      case bfd_link_hash_undefweak:
12836 	      case bfd_link_hash_common:
12837 		gp_found = 0;
12838 		break;
12839 	      case bfd_link_hash_defined:
12840 	      case bfd_link_hash_defweak:
12841 		gp_found = 1;
12842 		gp = lh->u.def.value;
12843 		break;
12844 	      case bfd_link_hash_indirect:
12845 	      case bfd_link_hash_warning:
12846 		lh = lh->u.i.link;
12847 		/* @@FIXME  ignoring warning for now */
12848 		goto lookup;
12849 	      case bfd_link_hash_new:
12850 	      default:
12851 		abort ();
12852 	      }
12853 	  }
12854 	else
12855 	  gp_found = 0;
12856       }
12857       /* end mips */
12858       for (parent = reloc_vector; *parent != NULL; parent++)
12859 	{
12860 	  char *error_message = NULL;
12861 	  bfd_reloc_status_type r;
12862 
12863 	  /* Specific to MIPS: Deal with relocation types that require
12864 	     knowing the gp of the output bfd.  */
12865 	  asymbol *sym = *(*parent)->sym_ptr_ptr;
12866 
12867 	  /* If we've managed to find the gp and have a special
12868 	     function for the relocation then go ahead, else default
12869 	     to the generic handling.  */
12870 	  if (gp_found
12871 	      && (*parent)->howto->special_function
12872 	      == _bfd_mips_elf32_gprel16_reloc)
12873 	    r = _bfd_mips_elf_gprel16_with_gp (input_bfd, sym, *parent,
12874 					       input_section, relocatable,
12875 					       data, gp);
12876 	  else
12877 	    r = bfd_perform_relocation (input_bfd, *parent, data,
12878 					input_section,
12879 					relocatable ? abfd : NULL,
12880 					&error_message);
12881 
12882 	  if (relocatable)
12883 	    {
12884 	      asection *os = input_section->output_section;
12885 
12886 	      /* A partial link, so keep the relocs */
12887 	      os->orelocation[os->reloc_count] = *parent;
12888 	      os->reloc_count++;
12889 	    }
12890 
12891 	  if (r != bfd_reloc_ok)
12892 	    {
12893 	      switch (r)
12894 		{
12895 		case bfd_reloc_undefined:
12896 		  if (!((*link_info->callbacks->undefined_symbol)
12897 			(link_info, bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12898 			 input_bfd, input_section, (*parent)->address, TRUE)))
12899 		    goto error_return;
12900 		  break;
12901 		case bfd_reloc_dangerous:
12902 		  BFD_ASSERT (error_message != NULL);
12903 		  if (!((*link_info->callbacks->reloc_dangerous)
12904 			(link_info, error_message, input_bfd, input_section,
12905 			 (*parent)->address)))
12906 		    goto error_return;
12907 		  break;
12908 		case bfd_reloc_overflow:
12909 		  if (!((*link_info->callbacks->reloc_overflow)
12910 			(link_info, NULL,
12911 			 bfd_asymbol_name (*(*parent)->sym_ptr_ptr),
12912 			 (*parent)->howto->name, (*parent)->addend,
12913 			 input_bfd, input_section, (*parent)->address)))
12914 		    goto error_return;
12915 		  break;
12916 		case bfd_reloc_outofrange:
12917 		default:
12918 		  abort ();
12919 		  break;
12920 		}
12921 
12922 	    }
12923 	}
12924     }
12925   if (reloc_vector != NULL)
12926     free (reloc_vector);
12927   return data;
12928 
12929 error_return:
12930   if (reloc_vector != NULL)
12931     free (reloc_vector);
12932   return NULL;
12933 }
12934 
12935 static bfd_boolean
12936 mips_elf_relax_delete_bytes (bfd *abfd,
12937 			     asection *sec, bfd_vma addr, int count)
12938 {
12939   Elf_Internal_Shdr *symtab_hdr;
12940   unsigned int sec_shndx;
12941   bfd_byte *contents;
12942   Elf_Internal_Rela *irel, *irelend;
12943   Elf_Internal_Sym *isym;
12944   Elf_Internal_Sym *isymend;
12945   struct elf_link_hash_entry **sym_hashes;
12946   struct elf_link_hash_entry **end_hashes;
12947   struct elf_link_hash_entry **start_hashes;
12948   unsigned int symcount;
12949 
12950   sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec);
12951   contents = elf_section_data (sec)->this_hdr.contents;
12952 
12953   irel = elf_section_data (sec)->relocs;
12954   irelend = irel + sec->reloc_count;
12955 
12956   /* Actually delete the bytes.  */
12957   memmove (contents + addr, contents + addr + count,
12958 	   (size_t) (sec->size - addr - count));
12959   sec->size -= count;
12960 
12961   /* Adjust all the relocs.  */
12962   for (irel = elf_section_data (sec)->relocs; irel < irelend; irel++)
12963     {
12964       /* Get the new reloc address.  */
12965       if (irel->r_offset > addr)
12966 	irel->r_offset -= count;
12967     }
12968 
12969   BFD_ASSERT (addr % 2 == 0);
12970   BFD_ASSERT (count % 2 == 0);
12971 
12972   /* Adjust the local symbols defined in this section.  */
12973   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
12974   isym = (Elf_Internal_Sym *) symtab_hdr->contents;
12975   for (isymend = isym + symtab_hdr->sh_info; isym < isymend; isym++)
12976     if (isym->st_shndx == sec_shndx && isym->st_value > addr)
12977       isym->st_value -= count;
12978 
12979   /* Now adjust the global symbols defined in this section.  */
12980   symcount = (symtab_hdr->sh_size / sizeof (Elf32_External_Sym)
12981 	      - symtab_hdr->sh_info);
12982   sym_hashes = start_hashes = elf_sym_hashes (abfd);
12983   end_hashes = sym_hashes + symcount;
12984 
12985   for (; sym_hashes < end_hashes; sym_hashes++)
12986     {
12987       struct elf_link_hash_entry *sym_hash = *sym_hashes;
12988 
12989       if ((sym_hash->root.type == bfd_link_hash_defined
12990 	   || sym_hash->root.type == bfd_link_hash_defweak)
12991 	  && sym_hash->root.u.def.section == sec)
12992 	{
12993 	  bfd_vma value = sym_hash->root.u.def.value;
12994 
12995 	  if (ELF_ST_IS_MICROMIPS (sym_hash->other))
12996 	    value &= MINUS_TWO;
12997 	  if (value > addr)
12998 	    sym_hash->root.u.def.value -= count;
12999 	}
13000     }
13001 
13002   return TRUE;
13003 }
13004 
13005 
13006 /* Opcodes needed for microMIPS relaxation as found in
13007    opcodes/micromips-opc.c.  */
13008 
13009 struct opcode_descriptor {
13010   unsigned long match;
13011   unsigned long mask;
13012 };
13013 
13014 /* The $ra register aka $31.  */
13015 
13016 #define RA 31
13017 
13018 /* 32-bit instruction format register fields.  */
13019 
13020 #define OP32_SREG(opcode) (((opcode) >> 16) & 0x1f)
13021 #define OP32_TREG(opcode) (((opcode) >> 21) & 0x1f)
13022 
13023 /* Check if a 5-bit register index can be abbreviated to 3 bits.  */
13024 
13025 #define OP16_VALID_REG(r) \
13026   ((2 <= (r) && (r) <= 7) || (16 <= (r) && (r) <= 17))
13027 
13028 
13029 /* 32-bit and 16-bit branches.  */
13030 
13031 static const struct opcode_descriptor b_insns_32[] = {
13032   { /* "b",	"p",		*/ 0x40400000, 0xffff0000 }, /* bgez 0 */
13033   { /* "b",	"p",		*/ 0x94000000, 0xffff0000 }, /* beq 0, 0 */
13034   { 0, 0 }  /* End marker for find_match().  */
13035 };
13036 
13037 static const struct opcode_descriptor bc_insn_32 =
13038   { /* "bc(1|2)(ft)", "N,p",	*/ 0x42800000, 0xfec30000 };
13039 
13040 static const struct opcode_descriptor bz_insn_32 =
13041   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 };
13042 
13043 static const struct opcode_descriptor bzal_insn_32 =
13044   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 };
13045 
13046 static const struct opcode_descriptor beq_insn_32 =
13047   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 };
13048 
13049 static const struct opcode_descriptor b_insn_16 =
13050   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 };
13051 
13052 static const struct opcode_descriptor bz_insn_16 =
13053   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 };
13054 
13055 
13056 /* 32-bit and 16-bit branch EQ and NE zero.  */
13057 
13058 /* NOTE: All opcode tables have BEQ/BNE in the same order: first the
13059    eq and second the ne.  This convention is used when replacing a
13060    32-bit BEQ/BNE with the 16-bit version.  */
13061 
13062 #define BZC32_REG_FIELD(r) (((r) & 0x1f) << 16)
13063 
13064 static const struct opcode_descriptor bz_rs_insns_32[] = {
13065   { /* "beqz",	"s,p",		*/ 0x94000000, 0xffe00000 },
13066   { /* "bnez",	"s,p",		*/ 0xb4000000, 0xffe00000 },
13067   { 0, 0 }  /* End marker for find_match().  */
13068 };
13069 
13070 static const struct opcode_descriptor bz_rt_insns_32[] = {
13071   { /* "beqz",	"t,p",		*/ 0x94000000, 0xfc01f000 },
13072   { /* "bnez",	"t,p",		*/ 0xb4000000, 0xfc01f000 },
13073   { 0, 0 }  /* End marker for find_match().  */
13074 };
13075 
13076 static const struct opcode_descriptor bzc_insns_32[] = {
13077   { /* "beqzc",	"s,p",		*/ 0x40e00000, 0xffe00000 },
13078   { /* "bnezc",	"s,p",		*/ 0x40a00000, 0xffe00000 },
13079   { 0, 0 }  /* End marker for find_match().  */
13080 };
13081 
13082 static const struct opcode_descriptor bz_insns_16[] = {
13083   { /* "beqz",	"md,mE",	*/ 0x8c00,     0xfc00 },
13084   { /* "bnez",	"md,mE",	*/ 0xac00,     0xfc00 },
13085   { 0, 0 }  /* End marker for find_match().  */
13086 };
13087 
13088 /* Switch between a 5-bit register index and its 3-bit shorthand.  */
13089 
13090 #define BZ16_REG(opcode) ((((((opcode) >> 7) & 7) + 0x1e) & 0x17) + 2)
13091 #define BZ16_REG_FIELD(r) \
13092   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 7)
13093 
13094 
13095 /* 32-bit instructions with a delay slot.  */
13096 
13097 static const struct opcode_descriptor jal_insn_32_bd16 =
13098   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 };
13099 
13100 static const struct opcode_descriptor jal_insn_32_bd32 =
13101   { /* "jal",	"a",		*/ 0xf4000000, 0xfc000000 };
13102 
13103 static const struct opcode_descriptor jal_x_insn_32_bd32 =
13104   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 };
13105 
13106 static const struct opcode_descriptor j_insn_32 =
13107   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 };
13108 
13109 static const struct opcode_descriptor jalr_insn_32 =
13110   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff };
13111 
13112 /* This table can be compacted, because no opcode replacement is made.  */
13113 
13114 static const struct opcode_descriptor ds_insns_32_bd16[] = {
13115   { /* "jals",	"a",		*/ 0x74000000, 0xfc000000 },
13116 
13117   { /* "jalrs[.hb]", "t,s",	*/ 0x00004f3c, 0xfc00efff },
13118   { /* "b(ge|lt)zals", "s,p",	*/ 0x42200000, 0xffa00000 },
13119 
13120   { /* "b(g|l)(e|t)z", "s,p",	*/ 0x40000000, 0xff200000 },
13121   { /* "b(eq|ne)", "s,t,p",	*/ 0x94000000, 0xdc000000 },
13122   { /* "j",	"a",		*/ 0xd4000000, 0xfc000000 },
13123   { 0, 0 }  /* End marker for find_match().  */
13124 };
13125 
13126 /* This table can be compacted, because no opcode replacement is made.  */
13127 
13128 static const struct opcode_descriptor ds_insns_32_bd32[] = {
13129   { /* "jal[x]", "a",		*/ 0xf0000000, 0xf8000000 },
13130 
13131   { /* "jalr[.hb]", "t,s",	*/ 0x00000f3c, 0xfc00efff },
13132   { /* "b(ge|lt)zal", "s,p",	*/ 0x40200000, 0xffa00000 },
13133   { 0, 0 }  /* End marker for find_match().  */
13134 };
13135 
13136 
13137 /* 16-bit instructions with a delay slot.  */
13138 
13139 static const struct opcode_descriptor jalr_insn_16_bd16 =
13140   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 };
13141 
13142 static const struct opcode_descriptor jalr_insn_16_bd32 =
13143   { /* "jalr",	"my,mj",	*/ 0x45c0,     0xffe0 };
13144 
13145 static const struct opcode_descriptor jr_insn_16 =
13146   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 };
13147 
13148 #define JR16_REG(opcode) ((opcode) & 0x1f)
13149 
13150 /* This table can be compacted, because no opcode replacement is made.  */
13151 
13152 static const struct opcode_descriptor ds_insns_16_bd16[] = {
13153   { /* "jalrs",	"my,mj",	*/ 0x45e0,     0xffe0 },
13154 
13155   { /* "b",	"mD",		*/ 0xcc00,     0xfc00 },
13156   { /* "b(eq|ne)z", "md,mE",	*/ 0x8c00,     0xdc00 },
13157   { /* "jr",	"mj",		*/ 0x4580,     0xffe0 },
13158   { 0, 0 }  /* End marker for find_match().  */
13159 };
13160 
13161 
13162 /* LUI instruction.  */
13163 
13164 static const struct opcode_descriptor lui_insn =
13165  { /* "lui",	"s,u",		*/ 0x41a00000, 0xffe00000 };
13166 
13167 
13168 /* ADDIU instruction.  */
13169 
13170 static const struct opcode_descriptor addiu_insn =
13171   { /* "addiu",	"t,r,j",	*/ 0x30000000, 0xfc000000 };
13172 
13173 static const struct opcode_descriptor addiupc_insn =
13174   { /* "addiu",	"mb,$pc,mQ",	*/ 0x78000000, 0xfc000000 };
13175 
13176 #define ADDIUPC_REG_FIELD(r) \
13177   (((2 <= (r) && (r) <= 7) ? (r) : ((r) - 16)) << 23)
13178 
13179 
13180 /* Relaxable instructions in a JAL delay slot: MOVE.  */
13181 
13182 /* The 16-bit move has rd in 9:5 and rs in 4:0.  The 32-bit moves
13183    (ADDU, OR) have rd in 15:11 and rs in 10:16.  */
13184 #define MOVE32_RD(opcode) (((opcode) >> 11) & 0x1f)
13185 #define MOVE32_RS(opcode) (((opcode) >> 16) & 0x1f)
13186 
13187 #define MOVE16_RD_FIELD(r) (((r) & 0x1f) << 5)
13188 #define MOVE16_RS_FIELD(r) (((r) & 0x1f)     )
13189 
13190 static const struct opcode_descriptor move_insns_32[] = {
13191   { /* "move",	"d,s",		*/ 0x00000150, 0xffe007ff }, /* addu d,s,$0 */
13192   { /* "move",	"d,s",		*/ 0x00000290, 0xffe007ff }, /* or   d,s,$0 */
13193   { 0, 0 }  /* End marker for find_match().  */
13194 };
13195 
13196 static const struct opcode_descriptor move_insn_16 =
13197   { /* "move",	"mp,mj",	*/ 0x0c00,     0xfc00 };
13198 
13199 
13200 /* NOP instructions.  */
13201 
13202 static const struct opcode_descriptor nop_insn_32 =
13203   { /* "nop",	"",		*/ 0x00000000, 0xffffffff };
13204 
13205 static const struct opcode_descriptor nop_insn_16 =
13206   { /* "nop",	"",		*/ 0x0c00,     0xffff };
13207 
13208 
13209 /* Instruction match support.  */
13210 
13211 #define MATCH(opcode, insn) ((opcode & insn.mask) == insn.match)
13212 
13213 static int
13214 find_match (unsigned long opcode, const struct opcode_descriptor insn[])
13215 {
13216   unsigned long indx;
13217 
13218   for (indx = 0; insn[indx].mask != 0; indx++)
13219     if (MATCH (opcode, insn[indx]))
13220       return indx;
13221 
13222   return -1;
13223 }
13224 
13225 
13226 /* Branch and delay slot decoding support.  */
13227 
13228 /* If PTR points to what *might* be a 16-bit branch or jump, then
13229    return the minimum length of its delay slot, otherwise return 0.
13230    Non-zero results are not definitive as we might be checking against
13231    the second half of another instruction.  */
13232 
13233 static int
13234 check_br16_dslot (bfd *abfd, bfd_byte *ptr)
13235 {
13236   unsigned long opcode;
13237   int bdsize;
13238 
13239   opcode = bfd_get_16 (abfd, ptr);
13240   if (MATCH (opcode, jalr_insn_16_bd32) != 0)
13241     /* 16-bit branch/jump with a 32-bit delay slot.  */
13242     bdsize = 4;
13243   else if (MATCH (opcode, jalr_insn_16_bd16) != 0
13244 	   || find_match (opcode, ds_insns_16_bd16) >= 0)
13245     /* 16-bit branch/jump with a 16-bit delay slot.  */
13246     bdsize = 2;
13247   else
13248     /* No delay slot.  */
13249     bdsize = 0;
13250 
13251   return bdsize;
13252 }
13253 
13254 /* If PTR points to what *might* be a 32-bit branch or jump, then
13255    return the minimum length of its delay slot, otherwise return 0.
13256    Non-zero results are not definitive as we might be checking against
13257    the second half of another instruction.  */
13258 
13259 static int
13260 check_br32_dslot (bfd *abfd, bfd_byte *ptr)
13261 {
13262   unsigned long opcode;
13263   int bdsize;
13264 
13265   opcode = bfd_get_micromips_32 (abfd, ptr);
13266   if (find_match (opcode, ds_insns_32_bd32) >= 0)
13267     /* 32-bit branch/jump with a 32-bit delay slot.  */
13268     bdsize = 4;
13269   else if (find_match (opcode, ds_insns_32_bd16) >= 0)
13270     /* 32-bit branch/jump with a 16-bit delay slot.  */
13271     bdsize = 2;
13272   else
13273     /* No delay slot.  */
13274     bdsize = 0;
13275 
13276   return bdsize;
13277 }
13278 
13279 /* If PTR points to a 16-bit branch or jump with a 32-bit delay slot
13280    that doesn't fiddle with REG, then return TRUE, otherwise FALSE.  */
13281 
13282 static bfd_boolean
13283 check_br16 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13284 {
13285   unsigned long opcode;
13286 
13287   opcode = bfd_get_16 (abfd, ptr);
13288   if (MATCH (opcode, b_insn_16)
13289 						/* B16  */
13290       || (MATCH (opcode, jr_insn_16) && reg != JR16_REG (opcode))
13291 						/* JR16  */
13292       || (MATCH (opcode, bz_insn_16) && reg != BZ16_REG (opcode))
13293 						/* BEQZ16, BNEZ16  */
13294       || (MATCH (opcode, jalr_insn_16_bd32)
13295 						/* JALR16  */
13296 	  && reg != JR16_REG (opcode) && reg != RA))
13297     return TRUE;
13298 
13299   return FALSE;
13300 }
13301 
13302 /* If PTR points to a 32-bit branch or jump that doesn't fiddle with REG,
13303    then return TRUE, otherwise FALSE.  */
13304 
13305 static bfd_boolean
13306 check_br32 (bfd *abfd, bfd_byte *ptr, unsigned long reg)
13307 {
13308   unsigned long opcode;
13309 
13310   opcode = bfd_get_micromips_32 (abfd, ptr);
13311   if (MATCH (opcode, j_insn_32)
13312 						/* J  */
13313       || MATCH (opcode, bc_insn_32)
13314 						/* BC1F, BC1T, BC2F, BC2T  */
13315       || (MATCH (opcode, jal_x_insn_32_bd32) && reg != RA)
13316 						/* JAL, JALX  */
13317       || (MATCH (opcode, bz_insn_32) && reg != OP32_SREG (opcode))
13318 						/* BGEZ, BGTZ, BLEZ, BLTZ  */
13319       || (MATCH (opcode, bzal_insn_32)
13320 						/* BGEZAL, BLTZAL  */
13321 	  && reg != OP32_SREG (opcode) && reg != RA)
13322       || ((MATCH (opcode, jalr_insn_32) || MATCH (opcode, beq_insn_32))
13323 						/* JALR, JALR.HB, BEQ, BNE  */
13324 	  && reg != OP32_SREG (opcode) && reg != OP32_TREG (opcode)))
13325     return TRUE;
13326 
13327   return FALSE;
13328 }
13329 
13330 /* If the instruction encoding at PTR and relocations [INTERNAL_RELOCS,
13331    IRELEND) at OFFSET indicate that there must be a compact branch there,
13332    then return TRUE, otherwise FALSE.  */
13333 
13334 static bfd_boolean
13335 check_relocated_bzc (bfd *abfd, const bfd_byte *ptr, bfd_vma offset,
13336 		     const Elf_Internal_Rela *internal_relocs,
13337 		     const Elf_Internal_Rela *irelend)
13338 {
13339   const Elf_Internal_Rela *irel;
13340   unsigned long opcode;
13341 
13342   opcode = bfd_get_micromips_32 (abfd, ptr);
13343   if (find_match (opcode, bzc_insns_32) < 0)
13344     return FALSE;
13345 
13346   for (irel = internal_relocs; irel < irelend; irel++)
13347     if (irel->r_offset == offset
13348 	&& ELF32_R_TYPE (irel->r_info) == R_MICROMIPS_PC16_S1)
13349       return TRUE;
13350 
13351   return FALSE;
13352 }
13353 
13354 /* Bitsize checking.  */
13355 #define IS_BITSIZE(val, N)						\
13356   (((((val) & ((1ULL << (N)) - 1)) ^ (1ULL << ((N) - 1)))		\
13357     - (1ULL << ((N) - 1))) == (val))
13358 
13359 
13360 bfd_boolean
13361 _bfd_mips_elf_relax_section (bfd *abfd, asection *sec,
13362 			     struct bfd_link_info *link_info,
13363 			     bfd_boolean *again)
13364 {
13365   bfd_boolean insn32 = mips_elf_hash_table (link_info)->insn32;
13366   Elf_Internal_Shdr *symtab_hdr;
13367   Elf_Internal_Rela *internal_relocs;
13368   Elf_Internal_Rela *irel, *irelend;
13369   bfd_byte *contents = NULL;
13370   Elf_Internal_Sym *isymbuf = NULL;
13371 
13372   /* Assume nothing changes.  */
13373   *again = FALSE;
13374 
13375   /* We don't have to do anything for a relocatable link, if
13376      this section does not have relocs, or if this is not a
13377      code section.  */
13378 
13379   if (link_info->relocatable
13380       || (sec->flags & SEC_RELOC) == 0
13381       || sec->reloc_count == 0
13382       || (sec->flags & SEC_CODE) == 0)
13383     return TRUE;
13384 
13385   symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
13386 
13387   /* Get a copy of the native relocations.  */
13388   internal_relocs = (_bfd_elf_link_read_relocs
13389 		     (abfd, sec, NULL, (Elf_Internal_Rela *) NULL,
13390 		      link_info->keep_memory));
13391   if (internal_relocs == NULL)
13392     goto error_return;
13393 
13394   /* Walk through them looking for relaxing opportunities.  */
13395   irelend = internal_relocs + sec->reloc_count;
13396   for (irel = internal_relocs; irel < irelend; irel++)
13397     {
13398       unsigned long r_symndx = ELF32_R_SYM (irel->r_info);
13399       unsigned int r_type = ELF32_R_TYPE (irel->r_info);
13400       bfd_boolean target_is_micromips_code_p;
13401       unsigned long opcode;
13402       bfd_vma symval;
13403       bfd_vma pcrval;
13404       bfd_byte *ptr;
13405       int fndopc;
13406 
13407       /* The number of bytes to delete for relaxation and from where
13408          to delete these bytes starting at irel->r_offset.  */
13409       int delcnt = 0;
13410       int deloff = 0;
13411 
13412       /* If this isn't something that can be relaxed, then ignore
13413          this reloc.  */
13414       if (r_type != R_MICROMIPS_HI16
13415 	  && r_type != R_MICROMIPS_PC16_S1
13416 	  && r_type != R_MICROMIPS_26_S1)
13417 	continue;
13418 
13419       /* Get the section contents if we haven't done so already.  */
13420       if (contents == NULL)
13421 	{
13422 	  /* Get cached copy if it exists.  */
13423 	  if (elf_section_data (sec)->this_hdr.contents != NULL)
13424 	    contents = elf_section_data (sec)->this_hdr.contents;
13425 	  /* Go get them off disk.  */
13426 	  else if (!bfd_malloc_and_get_section (abfd, sec, &contents))
13427 	    goto error_return;
13428 	}
13429       ptr = contents + irel->r_offset;
13430 
13431       /* Read this BFD's local symbols if we haven't done so already.  */
13432       if (isymbuf == NULL && symtab_hdr->sh_info != 0)
13433 	{
13434 	  isymbuf = (Elf_Internal_Sym *) symtab_hdr->contents;
13435 	  if (isymbuf == NULL)
13436 	    isymbuf = bfd_elf_get_elf_syms (abfd, symtab_hdr,
13437 					    symtab_hdr->sh_info, 0,
13438 					    NULL, NULL, NULL);
13439 	  if (isymbuf == NULL)
13440 	    goto error_return;
13441 	}
13442 
13443       /* Get the value of the symbol referred to by the reloc.  */
13444       if (r_symndx < symtab_hdr->sh_info)
13445 	{
13446 	  /* A local symbol.  */
13447 	  Elf_Internal_Sym *isym;
13448 	  asection *sym_sec;
13449 
13450 	  isym = isymbuf + r_symndx;
13451 	  if (isym->st_shndx == SHN_UNDEF)
13452 	    sym_sec = bfd_und_section_ptr;
13453 	  else if (isym->st_shndx == SHN_ABS)
13454 	    sym_sec = bfd_abs_section_ptr;
13455 	  else if (isym->st_shndx == SHN_COMMON)
13456 	    sym_sec = bfd_com_section_ptr;
13457 	  else
13458 	    sym_sec = bfd_section_from_elf_index (abfd, isym->st_shndx);
13459 	  symval = (isym->st_value
13460 		    + sym_sec->output_section->vma
13461 		    + sym_sec->output_offset);
13462 	  target_is_micromips_code_p = ELF_ST_IS_MICROMIPS (isym->st_other);
13463 	}
13464       else
13465 	{
13466 	  unsigned long indx;
13467 	  struct elf_link_hash_entry *h;
13468 
13469 	  /* An external symbol.  */
13470 	  indx = r_symndx - symtab_hdr->sh_info;
13471 	  h = elf_sym_hashes (abfd)[indx];
13472 	  BFD_ASSERT (h != NULL);
13473 
13474 	  if (h->root.type != bfd_link_hash_defined
13475 	      && h->root.type != bfd_link_hash_defweak)
13476 	    /* This appears to be a reference to an undefined
13477 	       symbol.  Just ignore it -- it will be caught by the
13478 	       regular reloc processing.  */
13479 	    continue;
13480 
13481 	  symval = (h->root.u.def.value
13482 		    + h->root.u.def.section->output_section->vma
13483 		    + h->root.u.def.section->output_offset);
13484 	  target_is_micromips_code_p = (!h->needs_plt
13485 					&& ELF_ST_IS_MICROMIPS (h->other));
13486 	}
13487 
13488 
13489       /* For simplicity of coding, we are going to modify the
13490          section contents, the section relocs, and the BFD symbol
13491          table.  We must tell the rest of the code not to free up this
13492          information.  It would be possible to instead create a table
13493          of changes which have to be made, as is done in coff-mips.c;
13494          that would be more work, but would require less memory when
13495          the linker is run.  */
13496 
13497       /* Only 32-bit instructions relaxed.  */
13498       if (irel->r_offset + 4 > sec->size)
13499 	continue;
13500 
13501       opcode = bfd_get_micromips_32 (abfd, ptr);
13502 
13503       /* This is the pc-relative distance from the instruction the
13504          relocation is applied to, to the symbol referred.  */
13505       pcrval = (symval
13506 		- (sec->output_section->vma + sec->output_offset)
13507 		- irel->r_offset);
13508 
13509       /* R_MICROMIPS_HI16 / LUI relaxation to nil, performing relaxation
13510          of corresponding R_MICROMIPS_LO16 to R_MICROMIPS_HI0_LO16 or
13511          R_MICROMIPS_PC23_S2.  The R_MICROMIPS_PC23_S2 condition is
13512 
13513            (symval % 4 == 0 && IS_BITSIZE (pcrval, 25))
13514 
13515          where pcrval has first to be adjusted to apply against the LO16
13516          location (we make the adjustment later on, when we have figured
13517          out the offset).  */
13518       if (r_type == R_MICROMIPS_HI16 && MATCH (opcode, lui_insn))
13519 	{
13520 	  bfd_boolean bzc = FALSE;
13521 	  unsigned long nextopc;
13522 	  unsigned long reg;
13523 	  bfd_vma offset;
13524 
13525 	  /* Give up if the previous reloc was a HI16 against this symbol
13526 	     too.  */
13527 	  if (irel > internal_relocs
13528 	      && ELF32_R_TYPE (irel[-1].r_info) == R_MICROMIPS_HI16
13529 	      && ELF32_R_SYM (irel[-1].r_info) == r_symndx)
13530 	    continue;
13531 
13532 	  /* Or if the next reloc is not a LO16 against this symbol.  */
13533 	  if (irel + 1 >= irelend
13534 	      || ELF32_R_TYPE (irel[1].r_info) != R_MICROMIPS_LO16
13535 	      || ELF32_R_SYM (irel[1].r_info) != r_symndx)
13536 	    continue;
13537 
13538 	  /* Or if the second next reloc is a LO16 against this symbol too.  */
13539 	  if (irel + 2 >= irelend
13540 	      && ELF32_R_TYPE (irel[2].r_info) == R_MICROMIPS_LO16
13541 	      && ELF32_R_SYM (irel[2].r_info) == r_symndx)
13542 	    continue;
13543 
13544 	  /* See if the LUI instruction *might* be in a branch delay slot.
13545 	     We check whether what looks like a 16-bit branch or jump is
13546 	     actually an immediate argument to a compact branch, and let
13547 	     it through if so.  */
13548 	  if (irel->r_offset >= 2
13549 	      && check_br16_dslot (abfd, ptr - 2)
13550 	      && !(irel->r_offset >= 4
13551 		   && (bzc = check_relocated_bzc (abfd,
13552 						  ptr - 4, irel->r_offset - 4,
13553 						  internal_relocs, irelend))))
13554 	    continue;
13555 	  if (irel->r_offset >= 4
13556 	      && !bzc
13557 	      && check_br32_dslot (abfd, ptr - 4))
13558 	    continue;
13559 
13560 	  reg = OP32_SREG (opcode);
13561 
13562 	  /* We only relax adjacent instructions or ones separated with
13563 	     a branch or jump that has a delay slot.  The branch or jump
13564 	     must not fiddle with the register used to hold the address.
13565 	     Subtract 4 for the LUI itself.  */
13566 	  offset = irel[1].r_offset - irel[0].r_offset;
13567 	  switch (offset - 4)
13568 	    {
13569 	    case 0:
13570 	      break;
13571 	    case 2:
13572 	      if (check_br16 (abfd, ptr + 4, reg))
13573 		break;
13574 	      continue;
13575 	    case 4:
13576 	      if (check_br32 (abfd, ptr + 4, reg))
13577 		break;
13578 	      continue;
13579 	    default:
13580 	      continue;
13581 	    }
13582 
13583 	  nextopc = bfd_get_micromips_32 (abfd, contents + irel[1].r_offset);
13584 
13585 	  /* Give up unless the same register is used with both
13586 	     relocations.  */
13587 	  if (OP32_SREG (nextopc) != reg)
13588 	    continue;
13589 
13590 	  /* Now adjust pcrval, subtracting the offset to the LO16 reloc
13591 	     and rounding up to take masking of the two LSBs into account.  */
13592 	  pcrval = ((pcrval - offset + 3) | 3) ^ 3;
13593 
13594 	  /* R_MICROMIPS_LO16 relaxation to R_MICROMIPS_HI0_LO16.  */
13595 	  if (IS_BITSIZE (symval, 16))
13596 	    {
13597 	      /* Fix the relocation's type.  */
13598 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_HI0_LO16);
13599 
13600 	      /* Instructions using R_MICROMIPS_LO16 have the base or
13601 	         source register in bits 20:16.  This register becomes $0
13602 	         (zero) as the result of the R_MICROMIPS_HI16 being 0.  */
13603 	      nextopc &= ~0x001f0000;
13604 	      bfd_put_16 (abfd, (nextopc >> 16) & 0xffff,
13605 			  contents + irel[1].r_offset);
13606 	    }
13607 
13608 	  /* R_MICROMIPS_LO16 / ADDIU relaxation to R_MICROMIPS_PC23_S2.
13609 	     We add 4 to take LUI deletion into account while checking
13610 	     the PC-relative distance.  */
13611 	  else if (symval % 4 == 0
13612 		   && IS_BITSIZE (pcrval + 4, 25)
13613 		   && MATCH (nextopc, addiu_insn)
13614 		   && OP32_TREG (nextopc) == OP32_SREG (nextopc)
13615 		   && OP16_VALID_REG (OP32_TREG (nextopc)))
13616 	    {
13617 	      /* Fix the relocation's type.  */
13618 	      irel[1].r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC23_S2);
13619 
13620 	      /* Replace ADDIU with the ADDIUPC version.  */
13621 	      nextopc = (addiupc_insn.match
13622 			 | ADDIUPC_REG_FIELD (OP32_TREG (nextopc)));
13623 
13624 	      bfd_put_micromips_32 (abfd, nextopc,
13625 				    contents + irel[1].r_offset);
13626 	    }
13627 
13628 	  /* Can't do anything, give up, sigh...  */
13629 	  else
13630 	    continue;
13631 
13632 	  /* Fix the relocation's type.  */
13633 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MIPS_NONE);
13634 
13635 	  /* Delete the LUI instruction: 4 bytes at irel->r_offset.  */
13636 	  delcnt = 4;
13637 	  deloff = 0;
13638 	}
13639 
13640       /* Compact branch relaxation -- due to the multitude of macros
13641          employed by the compiler/assembler, compact branches are not
13642          always generated.  Obviously, this can/will be fixed elsewhere,
13643          but there is no drawback in double checking it here.  */
13644       else if (r_type == R_MICROMIPS_PC16_S1
13645 	       && irel->r_offset + 5 < sec->size
13646 	       && ((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13647 		   || (fndopc = find_match (opcode, bz_rt_insns_32)) >= 0)
13648 	       && ((!insn32
13649 		    && (delcnt = MATCH (bfd_get_16 (abfd, ptr + 4),
13650 					nop_insn_16) ? 2 : 0))
13651 		   || (irel->r_offset + 7 < sec->size
13652 		       && (delcnt = MATCH (bfd_get_micromips_32 (abfd,
13653 								 ptr + 4),
13654 					   nop_insn_32) ? 4 : 0))))
13655 	{
13656 	  unsigned long reg;
13657 
13658 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13659 
13660 	  /* Replace BEQZ/BNEZ with the compact version.  */
13661 	  opcode = (bzc_insns_32[fndopc].match
13662 		    | BZC32_REG_FIELD (reg)
13663 		    | (opcode & 0xffff));		/* Addend value.  */
13664 
13665 	  bfd_put_micromips_32 (abfd, opcode, ptr);
13666 
13667 	  /* Delete the delay slot NOP: two or four bytes from
13668 	     irel->offset + 4; delcnt has already been set above.  */
13669 	  deloff = 4;
13670 	}
13671 
13672       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC10_S1.  We need
13673          to check the distance from the next instruction, so subtract 2.  */
13674       else if (!insn32
13675 	       && r_type == R_MICROMIPS_PC16_S1
13676 	       && IS_BITSIZE (pcrval - 2, 11)
13677 	       && find_match (opcode, b_insns_32) >= 0)
13678 	{
13679 	  /* Fix the relocation's type.  */
13680 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC10_S1);
13681 
13682 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13683 	  bfd_put_16 (abfd,
13684 		      (b_insn_16.match
13685 		       | (opcode & 0x3ff)),		/* Addend value.  */
13686 		      ptr);
13687 
13688 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13689 	  delcnt = 2;
13690 	  deloff = 2;
13691 	}
13692 
13693       /* R_MICROMIPS_PC16_S1 relaxation to R_MICROMIPS_PC7_S1.  We need
13694          to check the distance from the next instruction, so subtract 2.  */
13695       else if (!insn32
13696 	       && r_type == R_MICROMIPS_PC16_S1
13697 	       && IS_BITSIZE (pcrval - 2, 8)
13698 	       && (((fndopc = find_match (opcode, bz_rs_insns_32)) >= 0
13699 		    && OP16_VALID_REG (OP32_SREG (opcode)))
13700 		   || ((fndopc = find_match (opcode, bz_rt_insns_32)) >= 0
13701 		       && OP16_VALID_REG (OP32_TREG (opcode)))))
13702 	{
13703 	  unsigned long reg;
13704 
13705 	  reg = OP32_SREG (opcode) ? OP32_SREG (opcode) : OP32_TREG (opcode);
13706 
13707 	  /* Fix the relocation's type.  */
13708 	  irel->r_info = ELF32_R_INFO (r_symndx, R_MICROMIPS_PC7_S1);
13709 
13710 	  /* Replace the 32-bit opcode with a 16-bit opcode.  */
13711 	  bfd_put_16 (abfd,
13712 		      (bz_insns_16[fndopc].match
13713 		       | BZ16_REG_FIELD (reg)
13714 		       | (opcode & 0x7f)),		/* Addend value.  */
13715 		      ptr);
13716 
13717 	  /* Delete 2 bytes from irel->r_offset + 2.  */
13718 	  delcnt = 2;
13719 	  deloff = 2;
13720 	}
13721 
13722       /* R_MICROMIPS_26_S1 -- JAL to JALS relaxation for microMIPS targets.  */
13723       else if (!insn32
13724 	       && r_type == R_MICROMIPS_26_S1
13725 	       && target_is_micromips_code_p
13726 	       && irel->r_offset + 7 < sec->size
13727 	       && MATCH (opcode, jal_insn_32_bd32))
13728 	{
13729 	  unsigned long n32opc;
13730 	  bfd_boolean relaxed = FALSE;
13731 
13732 	  n32opc = bfd_get_micromips_32 (abfd, ptr + 4);
13733 
13734 	  if (MATCH (n32opc, nop_insn_32))
13735 	    {
13736 	      /* Replace delay slot 32-bit NOP with a 16-bit NOP.  */
13737 	      bfd_put_16 (abfd, nop_insn_16.match, ptr + 4);
13738 
13739 	      relaxed = TRUE;
13740 	    }
13741 	  else if (find_match (n32opc, move_insns_32) >= 0)
13742 	    {
13743 	      /* Replace delay slot 32-bit MOVE with 16-bit MOVE.  */
13744 	      bfd_put_16 (abfd,
13745 			  (move_insn_16.match
13746 			   | MOVE16_RD_FIELD (MOVE32_RD (n32opc))
13747 			   | MOVE16_RS_FIELD (MOVE32_RS (n32opc))),
13748 			  ptr + 4);
13749 
13750 	      relaxed = TRUE;
13751 	    }
13752 	  /* Other 32-bit instructions relaxable to 16-bit
13753 	     instructions will be handled here later.  */
13754 
13755 	  if (relaxed)
13756 	    {
13757 	      /* JAL with 32-bit delay slot that is changed to a JALS
13758 	         with 16-bit delay slot.  */
13759 	      bfd_put_micromips_32 (abfd, jal_insn_32_bd16.match, ptr);
13760 
13761 	      /* Delete 2 bytes from irel->r_offset + 6.  */
13762 	      delcnt = 2;
13763 	      deloff = 6;
13764 	    }
13765 	}
13766 
13767       if (delcnt != 0)
13768 	{
13769 	  /* Note that we've changed the relocs, section contents, etc.  */
13770 	  elf_section_data (sec)->relocs = internal_relocs;
13771 	  elf_section_data (sec)->this_hdr.contents = contents;
13772 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13773 
13774 	  /* Delete bytes depending on the delcnt and deloff.  */
13775 	  if (!mips_elf_relax_delete_bytes (abfd, sec,
13776 					    irel->r_offset + deloff, delcnt))
13777 	    goto error_return;
13778 
13779 	  /* That will change things, so we should relax again.
13780 	     Note that this is not required, and it may be slow.  */
13781 	  *again = TRUE;
13782 	}
13783     }
13784 
13785   if (isymbuf != NULL
13786       && symtab_hdr->contents != (unsigned char *) isymbuf)
13787     {
13788       if (! link_info->keep_memory)
13789 	free (isymbuf);
13790       else
13791 	{
13792 	  /* Cache the symbols for elf_link_input_bfd.  */
13793 	  symtab_hdr->contents = (unsigned char *) isymbuf;
13794 	}
13795     }
13796 
13797   if (contents != NULL
13798       && elf_section_data (sec)->this_hdr.contents != contents)
13799     {
13800       if (! link_info->keep_memory)
13801 	free (contents);
13802       else
13803 	{
13804 	  /* Cache the section contents for elf_link_input_bfd.  */
13805 	  elf_section_data (sec)->this_hdr.contents = contents;
13806 	}
13807     }
13808 
13809   if (internal_relocs != NULL
13810       && elf_section_data (sec)->relocs != internal_relocs)
13811     free (internal_relocs);
13812 
13813   return TRUE;
13814 
13815  error_return:
13816   if (isymbuf != NULL
13817       && symtab_hdr->contents != (unsigned char *) isymbuf)
13818     free (isymbuf);
13819   if (contents != NULL
13820       && elf_section_data (sec)->this_hdr.contents != contents)
13821     free (contents);
13822   if (internal_relocs != NULL
13823       && elf_section_data (sec)->relocs != internal_relocs)
13824     free (internal_relocs);
13825 
13826   return FALSE;
13827 }
13828 
13829 /* Create a MIPS ELF linker hash table.  */
13830 
13831 struct bfd_link_hash_table *
13832 _bfd_mips_elf_link_hash_table_create (bfd *abfd)
13833 {
13834   struct mips_elf_link_hash_table *ret;
13835   bfd_size_type amt = sizeof (struct mips_elf_link_hash_table);
13836 
13837   ret = bfd_zmalloc (amt);
13838   if (ret == NULL)
13839     return NULL;
13840 
13841   if (!_bfd_elf_link_hash_table_init (&ret->root, abfd,
13842 				      mips_elf_link_hash_newfunc,
13843 				      sizeof (struct mips_elf_link_hash_entry),
13844 				      MIPS_ELF_DATA))
13845     {
13846       free (ret);
13847       return NULL;
13848     }
13849   ret->root.init_plt_refcount.plist = NULL;
13850   ret->root.init_plt_offset.plist = NULL;
13851 
13852   return &ret->root.root;
13853 }
13854 
13855 /* Likewise, but indicate that the target is VxWorks.  */
13856 
13857 struct bfd_link_hash_table *
13858 _bfd_mips_vxworks_link_hash_table_create (bfd *abfd)
13859 {
13860   struct bfd_link_hash_table *ret;
13861 
13862   ret = _bfd_mips_elf_link_hash_table_create (abfd);
13863   if (ret)
13864     {
13865       struct mips_elf_link_hash_table *htab;
13866 
13867       htab = (struct mips_elf_link_hash_table *) ret;
13868       htab->use_plts_and_copy_relocs = TRUE;
13869       htab->is_vxworks = TRUE;
13870     }
13871   return ret;
13872 }
13873 
13874 /* A function that the linker calls if we are allowed to use PLTs
13875    and copy relocs.  */
13876 
13877 void
13878 _bfd_mips_elf_use_plts_and_copy_relocs (struct bfd_link_info *info)
13879 {
13880   mips_elf_hash_table (info)->use_plts_and_copy_relocs = TRUE;
13881 }
13882 
13883 /* A function that the linker calls to select between all or only
13884    32-bit microMIPS instructions.  */
13885 
13886 void
13887 _bfd_mips_elf_insn32 (struct bfd_link_info *info, bfd_boolean on)
13888 {
13889   mips_elf_hash_table (info)->insn32 = on;
13890 }
13891 
13892 /* Return the .MIPS.abiflags value representing each ISA Extension.  */
13893 
13894 unsigned int
13895 bfd_mips_isa_ext (bfd *abfd)
13896 {
13897   switch (bfd_get_mach (abfd))
13898     {
13899     case bfd_mach_mips3900:
13900       return AFL_EXT_3900;
13901     case bfd_mach_mips4010:
13902       return AFL_EXT_4010;
13903     case bfd_mach_mips4100:
13904       return AFL_EXT_4100;
13905     case bfd_mach_mips4111:
13906       return AFL_EXT_4111;
13907     case bfd_mach_mips4120:
13908       return AFL_EXT_4120;
13909     case bfd_mach_mips4650:
13910       return AFL_EXT_4650;
13911     case bfd_mach_mips5400:
13912       return AFL_EXT_5400;
13913     case bfd_mach_mips5500:
13914       return AFL_EXT_5500;
13915     case bfd_mach_mips5900:
13916       return AFL_EXT_5900;
13917     case bfd_mach_mips10000:
13918       return AFL_EXT_10000;
13919     case bfd_mach_mips_loongson_2e:
13920       return AFL_EXT_LOONGSON_2E;
13921     case bfd_mach_mips_loongson_2f:
13922       return AFL_EXT_LOONGSON_2F;
13923     case bfd_mach_mips_loongson_3a:
13924       return AFL_EXT_LOONGSON_3A;
13925     case bfd_mach_mips_sb1:
13926       return AFL_EXT_SB1;
13927     case bfd_mach_mips_octeon:
13928       return AFL_EXT_OCTEON;
13929     case bfd_mach_mips_octeonp:
13930       return AFL_EXT_OCTEONP;
13931     case bfd_mach_mips_octeon3:
13932       return AFL_EXT_OCTEON3;
13933     case bfd_mach_mips_octeon2:
13934       return AFL_EXT_OCTEON2;
13935     case bfd_mach_mips_xlr:
13936       return AFL_EXT_XLR;
13937     }
13938   return 0;
13939 }
13940 
13941 /* Update the isa_level, isa_rev, isa_ext fields of abiflags.  */
13942 
13943 static void
13944 update_mips_abiflags_isa (bfd *abfd, Elf_Internal_ABIFlags_v0 *abiflags)
13945 {
13946   switch (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH)
13947     {
13948     case E_MIPS_ARCH_1:
13949       abiflags->isa_level = 1;
13950       abiflags->isa_rev = 0;
13951       break;
13952     case E_MIPS_ARCH_2:
13953       abiflags->isa_level = 2;
13954       abiflags->isa_rev = 0;
13955       break;
13956     case E_MIPS_ARCH_3:
13957       abiflags->isa_level = 3;
13958       abiflags->isa_rev = 0;
13959       break;
13960     case E_MIPS_ARCH_4:
13961       abiflags->isa_level = 4;
13962       abiflags->isa_rev = 0;
13963       break;
13964     case E_MIPS_ARCH_5:
13965       abiflags->isa_level = 5;
13966       abiflags->isa_rev = 0;
13967       break;
13968     case E_MIPS_ARCH_32:
13969       abiflags->isa_level = 32;
13970       abiflags->isa_rev = 1;
13971       break;
13972     case E_MIPS_ARCH_32R2:
13973       abiflags->isa_level = 32;
13974       /* Handle MIPS32r3 and MIPS32r5 which do not have a header flag.  */
13975       if (abiflags->isa_rev < 2)
13976 	abiflags->isa_rev = 2;
13977       break;
13978     case E_MIPS_ARCH_32R6:
13979       abiflags->isa_level = 32;
13980       abiflags->isa_rev = 6;
13981       break;
13982     case E_MIPS_ARCH_64:
13983       abiflags->isa_level = 64;
13984       abiflags->isa_rev = 1;
13985       break;
13986     case E_MIPS_ARCH_64R2:
13987       /* Handle MIPS64r3 and MIPS64r5 which do not have a header flag.  */
13988       abiflags->isa_level = 64;
13989       if (abiflags->isa_rev < 2)
13990 	abiflags->isa_rev = 2;
13991       break;
13992     case E_MIPS_ARCH_64R6:
13993       abiflags->isa_level = 64;
13994       abiflags->isa_rev = 6;
13995       break;
13996     default:
13997       (*_bfd_error_handler)
13998 	(_("%B: Unknown architecture %s"),
13999 	 abfd, bfd_printable_name (abfd));
14000     }
14001 
14002   abiflags->isa_ext = bfd_mips_isa_ext (abfd);
14003 }
14004 
14005 /* Return true if the given ELF header flags describe a 32-bit binary.  */
14006 
14007 static bfd_boolean
14008 mips_32bit_flags_p (flagword flags)
14009 {
14010   return ((flags & EF_MIPS_32BITMODE) != 0
14011 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_O32
14012 	  || (flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32
14013 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1
14014 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2
14015 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32
14016 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2
14017 	  || (flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6);
14018 }
14019 
14020 /* Infer the content of the ABI flags based on the elf header.  */
14021 
14022 static void
14023 infer_mips_abiflags (bfd *abfd, Elf_Internal_ABIFlags_v0* abiflags)
14024 {
14025   obj_attribute *in_attr;
14026 
14027   memset (abiflags, 0, sizeof (Elf_Internal_ABIFlags_v0));
14028   update_mips_abiflags_isa (abfd, abiflags);
14029 
14030   if (mips_32bit_flags_p (elf_elfheader (abfd)->e_flags))
14031     abiflags->gpr_size = AFL_REG_32;
14032   else
14033     abiflags->gpr_size = AFL_REG_64;
14034 
14035   abiflags->cpr1_size = AFL_REG_NONE;
14036 
14037   in_attr = elf_known_obj_attributes (abfd)[OBJ_ATTR_GNU];
14038   abiflags->fp_abi = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14039 
14040   if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_SINGLE
14041       || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_XX
14042       || (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14043 	  && abiflags->gpr_size == AFL_REG_32))
14044     abiflags->cpr1_size = AFL_REG_32;
14045   else if (abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_DOUBLE
14046 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64
14047 	   || abiflags->fp_abi == Val_GNU_MIPS_ABI_FP_64A)
14048     abiflags->cpr1_size = AFL_REG_64;
14049 
14050   abiflags->cpr2_size = AFL_REG_NONE;
14051 
14052   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
14053     abiflags->ases |= AFL_ASE_MDMX;
14054   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
14055     abiflags->ases |= AFL_ASE_MIPS16;
14056   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
14057     abiflags->ases |= AFL_ASE_MICROMIPS;
14058 
14059   if (abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_ANY
14060       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_SOFT
14061       && abiflags->fp_abi != Val_GNU_MIPS_ABI_FP_64A
14062       && abiflags->isa_level >= 32
14063       && abiflags->isa_ext != AFL_EXT_LOONGSON_3A)
14064     abiflags->flags1 |= AFL_FLAGS1_ODDSPREG;
14065 }
14066 
14067 /* We need to use a special link routine to handle the .reginfo and
14068    the .mdebug sections.  We need to merge all instances of these
14069    sections together, not write them all out sequentially.  */
14070 
14071 bfd_boolean
14072 _bfd_mips_elf_final_link (bfd *abfd, struct bfd_link_info *info)
14073 {
14074   asection *o;
14075   struct bfd_link_order *p;
14076   asection *reginfo_sec, *mdebug_sec, *gptab_data_sec, *gptab_bss_sec;
14077   asection *rtproc_sec, *abiflags_sec;
14078   Elf32_RegInfo reginfo;
14079   struct ecoff_debug_info debug;
14080   struct mips_htab_traverse_info hti;
14081   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
14082   const struct ecoff_debug_swap *swap = bed->elf_backend_ecoff_debug_swap;
14083   HDRR *symhdr = &debug.symbolic_header;
14084   void *mdebug_handle = NULL;
14085   asection *s;
14086   EXTR esym;
14087   unsigned int i;
14088   bfd_size_type amt;
14089   struct mips_elf_link_hash_table *htab;
14090 
14091   static const char * const secname[] =
14092   {
14093     ".text", ".init", ".fini", ".data",
14094     ".rodata", ".sdata", ".sbss", ".bss"
14095   };
14096   static const int sc[] =
14097   {
14098     scText, scInit, scFini, scData,
14099     scRData, scSData, scSBss, scBss
14100   };
14101 
14102   /* Sort the dynamic symbols so that those with GOT entries come after
14103      those without.  */
14104   htab = mips_elf_hash_table (info);
14105   BFD_ASSERT (htab != NULL);
14106 
14107   if (!mips_elf_sort_hash_table (abfd, info))
14108     return FALSE;
14109 
14110   /* Create any scheduled LA25 stubs.  */
14111   hti.info = info;
14112   hti.output_bfd = abfd;
14113   hti.error = FALSE;
14114   htab_traverse (htab->la25_stubs, mips_elf_create_la25_stub, &hti);
14115   if (hti.error)
14116     return FALSE;
14117 
14118   /* Get a value for the GP register.  */
14119   if (elf_gp (abfd) == 0)
14120     {
14121       struct bfd_link_hash_entry *h;
14122 
14123       h = bfd_link_hash_lookup (info->hash, "_gp", FALSE, FALSE, TRUE);
14124       if (h != NULL && h->type == bfd_link_hash_defined)
14125 	elf_gp (abfd) = (h->u.def.value
14126 			 + h->u.def.section->output_section->vma
14127 			 + h->u.def.section->output_offset);
14128       else if (htab->is_vxworks
14129 	       && (h = bfd_link_hash_lookup (info->hash,
14130 					     "_GLOBAL_OFFSET_TABLE_",
14131 					     FALSE, FALSE, TRUE))
14132 	       && h->type == bfd_link_hash_defined)
14133 	elf_gp (abfd) = (h->u.def.section->output_section->vma
14134 			 + h->u.def.section->output_offset
14135 			 + h->u.def.value);
14136       else if (info->relocatable)
14137 	{
14138 	  bfd_vma lo = MINUS_ONE;
14139 
14140 	  /* Find the GP-relative section with the lowest offset.  */
14141 	  for (o = abfd->sections; o != NULL; o = o->next)
14142 	    if (o->vma < lo
14143 		&& (elf_section_data (o)->this_hdr.sh_flags & SHF_MIPS_GPREL))
14144 	      lo = o->vma;
14145 
14146 	  /* And calculate GP relative to that.  */
14147 	  elf_gp (abfd) = lo + ELF_MIPS_GP_OFFSET (info);
14148 	}
14149       else
14150 	{
14151 	  /* If the relocate_section function needs to do a reloc
14152 	     involving the GP value, it should make a reloc_dangerous
14153 	     callback to warn that GP is not defined.  */
14154 	}
14155     }
14156 
14157   /* Go through the sections and collect the .reginfo and .mdebug
14158      information.  */
14159   abiflags_sec = NULL;
14160   reginfo_sec = NULL;
14161   mdebug_sec = NULL;
14162   gptab_data_sec = NULL;
14163   gptab_bss_sec = NULL;
14164   for (o = abfd->sections; o != NULL; o = o->next)
14165     {
14166       if (strcmp (o->name, ".MIPS.abiflags") == 0)
14167 	{
14168 	  /* We have found the .MIPS.abiflags section in the output file.
14169 	     Look through all the link_orders comprising it and remove them.
14170 	     The data is merged in _bfd_mips_elf_merge_private_bfd_data.  */
14171 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14172 	    {
14173 	      asection *input_section;
14174 
14175 	      if (p->type != bfd_indirect_link_order)
14176 		{
14177 		  if (p->type == bfd_data_link_order)
14178 		    continue;
14179 		  abort ();
14180 		}
14181 
14182 	      input_section = p->u.indirect.section;
14183 
14184 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14185 		 elf_link_input_bfd ignores this section.  */
14186 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14187 	    }
14188 
14189 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14190 	  BFD_ASSERT(o->size == sizeof (Elf_External_ABIFlags_v0));
14191 
14192 	  /* Skip this section later on (I don't think this currently
14193 	     matters, but someday it might).  */
14194 	  o->map_head.link_order = NULL;
14195 
14196 	  abiflags_sec = o;
14197 	}
14198 
14199       if (strcmp (o->name, ".reginfo") == 0)
14200 	{
14201 	  memset (&reginfo, 0, sizeof reginfo);
14202 
14203 	  /* We have found the .reginfo section in the output file.
14204 	     Look through all the link_orders comprising it and merge
14205 	     the information together.  */
14206 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14207 	    {
14208 	      asection *input_section;
14209 	      bfd *input_bfd;
14210 	      Elf32_External_RegInfo ext;
14211 	      Elf32_RegInfo sub;
14212 
14213 	      if (p->type != bfd_indirect_link_order)
14214 		{
14215 		  if (p->type == bfd_data_link_order)
14216 		    continue;
14217 		  abort ();
14218 		}
14219 
14220 	      input_section = p->u.indirect.section;
14221 	      input_bfd = input_section->owner;
14222 
14223 	      if (! bfd_get_section_contents (input_bfd, input_section,
14224 					      &ext, 0, sizeof ext))
14225 		return FALSE;
14226 
14227 	      bfd_mips_elf32_swap_reginfo_in (input_bfd, &ext, &sub);
14228 
14229 	      reginfo.ri_gprmask |= sub.ri_gprmask;
14230 	      reginfo.ri_cprmask[0] |= sub.ri_cprmask[0];
14231 	      reginfo.ri_cprmask[1] |= sub.ri_cprmask[1];
14232 	      reginfo.ri_cprmask[2] |= sub.ri_cprmask[2];
14233 	      reginfo.ri_cprmask[3] |= sub.ri_cprmask[3];
14234 
14235 	      /* ri_gp_value is set by the function
14236 		 mips_elf32_section_processing when the section is
14237 		 finally written out.  */
14238 
14239 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14240 		 elf_link_input_bfd ignores this section.  */
14241 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14242 	    }
14243 
14244 	  /* Size has been set in _bfd_mips_elf_always_size_sections.  */
14245 	  BFD_ASSERT(o->size == sizeof (Elf32_External_RegInfo));
14246 
14247 	  /* Skip this section later on (I don't think this currently
14248 	     matters, but someday it might).  */
14249 	  o->map_head.link_order = NULL;
14250 
14251 	  reginfo_sec = o;
14252 	}
14253 
14254       if (strcmp (o->name, ".mdebug") == 0)
14255 	{
14256 	  struct extsym_info einfo;
14257 	  bfd_vma last;
14258 
14259 	  /* We have found the .mdebug section in the output file.
14260 	     Look through all the link_orders comprising it and merge
14261 	     the information together.  */
14262 	  symhdr->magic = swap->sym_magic;
14263 	  /* FIXME: What should the version stamp be?  */
14264 	  symhdr->vstamp = 0;
14265 	  symhdr->ilineMax = 0;
14266 	  symhdr->cbLine = 0;
14267 	  symhdr->idnMax = 0;
14268 	  symhdr->ipdMax = 0;
14269 	  symhdr->isymMax = 0;
14270 	  symhdr->ioptMax = 0;
14271 	  symhdr->iauxMax = 0;
14272 	  symhdr->issMax = 0;
14273 	  symhdr->issExtMax = 0;
14274 	  symhdr->ifdMax = 0;
14275 	  symhdr->crfd = 0;
14276 	  symhdr->iextMax = 0;
14277 
14278 	  /* We accumulate the debugging information itself in the
14279 	     debug_info structure.  */
14280 	  debug.line = NULL;
14281 	  debug.external_dnr = NULL;
14282 	  debug.external_pdr = NULL;
14283 	  debug.external_sym = NULL;
14284 	  debug.external_opt = NULL;
14285 	  debug.external_aux = NULL;
14286 	  debug.ss = NULL;
14287 	  debug.ssext = debug.ssext_end = NULL;
14288 	  debug.external_fdr = NULL;
14289 	  debug.external_rfd = NULL;
14290 	  debug.external_ext = debug.external_ext_end = NULL;
14291 
14292 	  mdebug_handle = bfd_ecoff_debug_init (abfd, &debug, swap, info);
14293 	  if (mdebug_handle == NULL)
14294 	    return FALSE;
14295 
14296 	  esym.jmptbl = 0;
14297 	  esym.cobol_main = 0;
14298 	  esym.weakext = 0;
14299 	  esym.reserved = 0;
14300 	  esym.ifd = ifdNil;
14301 	  esym.asym.iss = issNil;
14302 	  esym.asym.st = stLocal;
14303 	  esym.asym.reserved = 0;
14304 	  esym.asym.index = indexNil;
14305 	  last = 0;
14306 	  for (i = 0; i < sizeof (secname) / sizeof (secname[0]); i++)
14307 	    {
14308 	      esym.asym.sc = sc[i];
14309 	      s = bfd_get_section_by_name (abfd, secname[i]);
14310 	      if (s != NULL)
14311 		{
14312 		  esym.asym.value = s->vma;
14313 		  last = s->vma + s->size;
14314 		}
14315 	      else
14316 		esym.asym.value = last;
14317 	      if (!bfd_ecoff_debug_one_external (abfd, &debug, swap,
14318 						 secname[i], &esym))
14319 		return FALSE;
14320 	    }
14321 
14322 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14323 	    {
14324 	      asection *input_section;
14325 	      bfd *input_bfd;
14326 	      const struct ecoff_debug_swap *input_swap;
14327 	      struct ecoff_debug_info input_debug;
14328 	      char *eraw_src;
14329 	      char *eraw_end;
14330 
14331 	      if (p->type != bfd_indirect_link_order)
14332 		{
14333 		  if (p->type == bfd_data_link_order)
14334 		    continue;
14335 		  abort ();
14336 		}
14337 
14338 	      input_section = p->u.indirect.section;
14339 	      input_bfd = input_section->owner;
14340 
14341 	      if (!is_mips_elf (input_bfd))
14342 		{
14343 		  /* I don't know what a non MIPS ELF bfd would be
14344 		     doing with a .mdebug section, but I don't really
14345 		     want to deal with it.  */
14346 		  continue;
14347 		}
14348 
14349 	      input_swap = (get_elf_backend_data (input_bfd)
14350 			    ->elf_backend_ecoff_debug_swap);
14351 
14352 	      BFD_ASSERT (p->size == input_section->size);
14353 
14354 	      /* The ECOFF linking code expects that we have already
14355 		 read in the debugging information and set up an
14356 		 ecoff_debug_info structure, so we do that now.  */
14357 	      if (! _bfd_mips_elf_read_ecoff_info (input_bfd, input_section,
14358 						   &input_debug))
14359 		return FALSE;
14360 
14361 	      if (! (bfd_ecoff_debug_accumulate
14362 		     (mdebug_handle, abfd, &debug, swap, input_bfd,
14363 		      &input_debug, input_swap, info)))
14364 		return FALSE;
14365 
14366 	      /* Loop through the external symbols.  For each one with
14367 		 interesting information, try to find the symbol in
14368 		 the linker global hash table and save the information
14369 		 for the output external symbols.  */
14370 	      eraw_src = input_debug.external_ext;
14371 	      eraw_end = (eraw_src
14372 			  + (input_debug.symbolic_header.iextMax
14373 			     * input_swap->external_ext_size));
14374 	      for (;
14375 		   eraw_src < eraw_end;
14376 		   eraw_src += input_swap->external_ext_size)
14377 		{
14378 		  EXTR ext;
14379 		  const char *name;
14380 		  struct mips_elf_link_hash_entry *h;
14381 
14382 		  (*input_swap->swap_ext_in) (input_bfd, eraw_src, &ext);
14383 		  if (ext.asym.sc == scNil
14384 		      || ext.asym.sc == scUndefined
14385 		      || ext.asym.sc == scSUndefined)
14386 		    continue;
14387 
14388 		  name = input_debug.ssext + ext.asym.iss;
14389 		  h = mips_elf_link_hash_lookup (mips_elf_hash_table (info),
14390 						 name, FALSE, FALSE, TRUE);
14391 		  if (h == NULL || h->esym.ifd != -2)
14392 		    continue;
14393 
14394 		  if (ext.ifd != -1)
14395 		    {
14396 		      BFD_ASSERT (ext.ifd
14397 				  < input_debug.symbolic_header.ifdMax);
14398 		      ext.ifd = input_debug.ifdmap[ext.ifd];
14399 		    }
14400 
14401 		  h->esym = ext;
14402 		}
14403 
14404 	      /* Free up the information we just read.  */
14405 	      free (input_debug.line);
14406 	      free (input_debug.external_dnr);
14407 	      free (input_debug.external_pdr);
14408 	      free (input_debug.external_sym);
14409 	      free (input_debug.external_opt);
14410 	      free (input_debug.external_aux);
14411 	      free (input_debug.ss);
14412 	      free (input_debug.ssext);
14413 	      free (input_debug.external_fdr);
14414 	      free (input_debug.external_rfd);
14415 	      free (input_debug.external_ext);
14416 
14417 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14418 		 elf_link_input_bfd ignores this section.  */
14419 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14420 	    }
14421 
14422 	  if (SGI_COMPAT (abfd) && info->shared)
14423 	    {
14424 	      /* Create .rtproc section.  */
14425 	      rtproc_sec = bfd_get_linker_section (abfd, ".rtproc");
14426 	      if (rtproc_sec == NULL)
14427 		{
14428 		  flagword flags = (SEC_HAS_CONTENTS | SEC_IN_MEMORY
14429 				    | SEC_LINKER_CREATED | SEC_READONLY);
14430 
14431 		  rtproc_sec = bfd_make_section_anyway_with_flags (abfd,
14432 								   ".rtproc",
14433 								   flags);
14434 		  if (rtproc_sec == NULL
14435 		      || ! bfd_set_section_alignment (abfd, rtproc_sec, 4))
14436 		    return FALSE;
14437 		}
14438 
14439 	      if (! mips_elf_create_procedure_table (mdebug_handle, abfd,
14440 						     info, rtproc_sec,
14441 						     &debug))
14442 		return FALSE;
14443 	    }
14444 
14445 	  /* Build the external symbol information.  */
14446 	  einfo.abfd = abfd;
14447 	  einfo.info = info;
14448 	  einfo.debug = &debug;
14449 	  einfo.swap = swap;
14450 	  einfo.failed = FALSE;
14451 	  mips_elf_link_hash_traverse (mips_elf_hash_table (info),
14452 				       mips_elf_output_extsym, &einfo);
14453 	  if (einfo.failed)
14454 	    return FALSE;
14455 
14456 	  /* Set the size of the .mdebug section.  */
14457 	  o->size = bfd_ecoff_debug_size (abfd, &debug, swap);
14458 
14459 	  /* Skip this section later on (I don't think this currently
14460 	     matters, but someday it might).  */
14461 	  o->map_head.link_order = NULL;
14462 
14463 	  mdebug_sec = o;
14464 	}
14465 
14466       if (CONST_STRNEQ (o->name, ".gptab."))
14467 	{
14468 	  const char *subname;
14469 	  unsigned int c;
14470 	  Elf32_gptab *tab;
14471 	  Elf32_External_gptab *ext_tab;
14472 	  unsigned int j;
14473 
14474 	  /* The .gptab.sdata and .gptab.sbss sections hold
14475 	     information describing how the small data area would
14476 	     change depending upon the -G switch.  These sections
14477 	     not used in executables files.  */
14478 	  if (! info->relocatable)
14479 	    {
14480 	      for (p = o->map_head.link_order; p != NULL; p = p->next)
14481 		{
14482 		  asection *input_section;
14483 
14484 		  if (p->type != bfd_indirect_link_order)
14485 		    {
14486 		      if (p->type == bfd_data_link_order)
14487 			continue;
14488 		      abort ();
14489 		    }
14490 
14491 		  input_section = p->u.indirect.section;
14492 
14493 		  /* Hack: reset the SEC_HAS_CONTENTS flag so that
14494 		     elf_link_input_bfd ignores this section.  */
14495 		  input_section->flags &= ~SEC_HAS_CONTENTS;
14496 		}
14497 
14498 	      /* Skip this section later on (I don't think this
14499 		 currently matters, but someday it might).  */
14500 	      o->map_head.link_order = NULL;
14501 
14502 	      /* Really remove the section.  */
14503 	      bfd_section_list_remove (abfd, o);
14504 	      --abfd->section_count;
14505 
14506 	      continue;
14507 	    }
14508 
14509 	  /* There is one gptab for initialized data, and one for
14510 	     uninitialized data.  */
14511 	  if (strcmp (o->name, ".gptab.sdata") == 0)
14512 	    gptab_data_sec = o;
14513 	  else if (strcmp (o->name, ".gptab.sbss") == 0)
14514 	    gptab_bss_sec = o;
14515 	  else
14516 	    {
14517 	      (*_bfd_error_handler)
14518 		(_("%s: illegal section name `%s'"),
14519 		 bfd_get_filename (abfd), o->name);
14520 	      bfd_set_error (bfd_error_nonrepresentable_section);
14521 	      return FALSE;
14522 	    }
14523 
14524 	  /* The linker script always combines .gptab.data and
14525 	     .gptab.sdata into .gptab.sdata, and likewise for
14526 	     .gptab.bss and .gptab.sbss.  It is possible that there is
14527 	     no .sdata or .sbss section in the output file, in which
14528 	     case we must change the name of the output section.  */
14529 	  subname = o->name + sizeof ".gptab" - 1;
14530 	  if (bfd_get_section_by_name (abfd, subname) == NULL)
14531 	    {
14532 	      if (o == gptab_data_sec)
14533 		o->name = ".gptab.data";
14534 	      else
14535 		o->name = ".gptab.bss";
14536 	      subname = o->name + sizeof ".gptab" - 1;
14537 	      BFD_ASSERT (bfd_get_section_by_name (abfd, subname) != NULL);
14538 	    }
14539 
14540 	  /* Set up the first entry.  */
14541 	  c = 1;
14542 	  amt = c * sizeof (Elf32_gptab);
14543 	  tab = bfd_malloc (amt);
14544 	  if (tab == NULL)
14545 	    return FALSE;
14546 	  tab[0].gt_header.gt_current_g_value = elf_gp_size (abfd);
14547 	  tab[0].gt_header.gt_unused = 0;
14548 
14549 	  /* Combine the input sections.  */
14550 	  for (p = o->map_head.link_order; p != NULL; p = p->next)
14551 	    {
14552 	      asection *input_section;
14553 	      bfd *input_bfd;
14554 	      bfd_size_type size;
14555 	      unsigned long last;
14556 	      bfd_size_type gpentry;
14557 
14558 	      if (p->type != bfd_indirect_link_order)
14559 		{
14560 		  if (p->type == bfd_data_link_order)
14561 		    continue;
14562 		  abort ();
14563 		}
14564 
14565 	      input_section = p->u.indirect.section;
14566 	      input_bfd = input_section->owner;
14567 
14568 	      /* Combine the gptab entries for this input section one
14569 		 by one.  We know that the input gptab entries are
14570 		 sorted by ascending -G value.  */
14571 	      size = input_section->size;
14572 	      last = 0;
14573 	      for (gpentry = sizeof (Elf32_External_gptab);
14574 		   gpentry < size;
14575 		   gpentry += sizeof (Elf32_External_gptab))
14576 		{
14577 		  Elf32_External_gptab ext_gptab;
14578 		  Elf32_gptab int_gptab;
14579 		  unsigned long val;
14580 		  unsigned long add;
14581 		  bfd_boolean exact;
14582 		  unsigned int look;
14583 
14584 		  if (! (bfd_get_section_contents
14585 			 (input_bfd, input_section, &ext_gptab, gpentry,
14586 			  sizeof (Elf32_External_gptab))))
14587 		    {
14588 		      free (tab);
14589 		      return FALSE;
14590 		    }
14591 
14592 		  bfd_mips_elf32_swap_gptab_in (input_bfd, &ext_gptab,
14593 						&int_gptab);
14594 		  val = int_gptab.gt_entry.gt_g_value;
14595 		  add = int_gptab.gt_entry.gt_bytes - last;
14596 
14597 		  exact = FALSE;
14598 		  for (look = 1; look < c; look++)
14599 		    {
14600 		      if (tab[look].gt_entry.gt_g_value >= val)
14601 			tab[look].gt_entry.gt_bytes += add;
14602 
14603 		      if (tab[look].gt_entry.gt_g_value == val)
14604 			exact = TRUE;
14605 		    }
14606 
14607 		  if (! exact)
14608 		    {
14609 		      Elf32_gptab *new_tab;
14610 		      unsigned int max;
14611 
14612 		      /* We need a new table entry.  */
14613 		      amt = (bfd_size_type) (c + 1) * sizeof (Elf32_gptab);
14614 		      new_tab = bfd_realloc (tab, amt);
14615 		      if (new_tab == NULL)
14616 			{
14617 			  free (tab);
14618 			  return FALSE;
14619 			}
14620 		      tab = new_tab;
14621 		      tab[c].gt_entry.gt_g_value = val;
14622 		      tab[c].gt_entry.gt_bytes = add;
14623 
14624 		      /* Merge in the size for the next smallest -G
14625 			 value, since that will be implied by this new
14626 			 value.  */
14627 		      max = 0;
14628 		      for (look = 1; look < c; look++)
14629 			{
14630 			  if (tab[look].gt_entry.gt_g_value < val
14631 			      && (max == 0
14632 				  || (tab[look].gt_entry.gt_g_value
14633 				      > tab[max].gt_entry.gt_g_value)))
14634 			    max = look;
14635 			}
14636 		      if (max != 0)
14637 			tab[c].gt_entry.gt_bytes +=
14638 			  tab[max].gt_entry.gt_bytes;
14639 
14640 		      ++c;
14641 		    }
14642 
14643 		  last = int_gptab.gt_entry.gt_bytes;
14644 		}
14645 
14646 	      /* Hack: reset the SEC_HAS_CONTENTS flag so that
14647 		 elf_link_input_bfd ignores this section.  */
14648 	      input_section->flags &= ~SEC_HAS_CONTENTS;
14649 	    }
14650 
14651 	  /* The table must be sorted by -G value.  */
14652 	  if (c > 2)
14653 	    qsort (tab + 1, c - 1, sizeof (tab[0]), gptab_compare);
14654 
14655 	  /* Swap out the table.  */
14656 	  amt = (bfd_size_type) c * sizeof (Elf32_External_gptab);
14657 	  ext_tab = bfd_alloc (abfd, amt);
14658 	  if (ext_tab == NULL)
14659 	    {
14660 	      free (tab);
14661 	      return FALSE;
14662 	    }
14663 
14664 	  for (j = 0; j < c; j++)
14665 	    bfd_mips_elf32_swap_gptab_out (abfd, tab + j, ext_tab + j);
14666 	  free (tab);
14667 
14668 	  o->size = c * sizeof (Elf32_External_gptab);
14669 	  o->contents = (bfd_byte *) ext_tab;
14670 
14671 	  /* Skip this section later on (I don't think this currently
14672 	     matters, but someday it might).  */
14673 	  o->map_head.link_order = NULL;
14674 	}
14675     }
14676 
14677   /* Invoke the regular ELF backend linker to do all the work.  */
14678   if (!bfd_elf_final_link (abfd, info))
14679     return FALSE;
14680 
14681   /* Now write out the computed sections.  */
14682 
14683   if (abiflags_sec != NULL)
14684     {
14685       Elf_External_ABIFlags_v0 ext;
14686       Elf_Internal_ABIFlags_v0 *abiflags;
14687 
14688       abiflags = &mips_elf_tdata (abfd)->abiflags;
14689 
14690       /* Set up the abiflags if no valid input sections were found.  */
14691       if (!mips_elf_tdata (abfd)->abiflags_valid)
14692 	{
14693 	  infer_mips_abiflags (abfd, abiflags);
14694 	  mips_elf_tdata (abfd)->abiflags_valid = TRUE;
14695 	}
14696       bfd_mips_elf_swap_abiflags_v0_out (abfd, abiflags, &ext);
14697       if (! bfd_set_section_contents (abfd, abiflags_sec, &ext, 0, sizeof ext))
14698 	return FALSE;
14699     }
14700 
14701   if (reginfo_sec != NULL)
14702     {
14703       Elf32_External_RegInfo ext;
14704 
14705       bfd_mips_elf32_swap_reginfo_out (abfd, &reginfo, &ext);
14706       if (! bfd_set_section_contents (abfd, reginfo_sec, &ext, 0, sizeof ext))
14707 	return FALSE;
14708     }
14709 
14710   if (mdebug_sec != NULL)
14711     {
14712       BFD_ASSERT (abfd->output_has_begun);
14713       if (! bfd_ecoff_write_accumulated_debug (mdebug_handle, abfd, &debug,
14714 					       swap, info,
14715 					       mdebug_sec->filepos))
14716 	return FALSE;
14717 
14718       bfd_ecoff_debug_free (mdebug_handle, abfd, &debug, swap, info);
14719     }
14720 
14721   if (gptab_data_sec != NULL)
14722     {
14723       if (! bfd_set_section_contents (abfd, gptab_data_sec,
14724 				      gptab_data_sec->contents,
14725 				      0, gptab_data_sec->size))
14726 	return FALSE;
14727     }
14728 
14729   if (gptab_bss_sec != NULL)
14730     {
14731       if (! bfd_set_section_contents (abfd, gptab_bss_sec,
14732 				      gptab_bss_sec->contents,
14733 				      0, gptab_bss_sec->size))
14734 	return FALSE;
14735     }
14736 
14737   if (SGI_COMPAT (abfd))
14738     {
14739       rtproc_sec = bfd_get_section_by_name (abfd, ".rtproc");
14740       if (rtproc_sec != NULL)
14741 	{
14742 	  if (! bfd_set_section_contents (abfd, rtproc_sec,
14743 					  rtproc_sec->contents,
14744 					  0, rtproc_sec->size))
14745 	    return FALSE;
14746 	}
14747     }
14748 
14749   return TRUE;
14750 }
14751 
14752 /* Structure for saying that BFD machine EXTENSION extends BASE.  */
14753 
14754 struct mips_mach_extension
14755 {
14756   unsigned long extension, base;
14757 };
14758 
14759 
14760 /* An array describing how BFD machines relate to one another.  The entries
14761    are ordered topologically with MIPS I extensions listed last.  */
14762 
14763 static const struct mips_mach_extension mips_mach_extensions[] =
14764 {
14765   /* MIPS64r2 extensions.  */
14766   { bfd_mach_mips_octeon3, bfd_mach_mips_octeon2 },
14767   { bfd_mach_mips_octeon2, bfd_mach_mips_octeonp },
14768   { bfd_mach_mips_octeonp, bfd_mach_mips_octeon },
14769   { bfd_mach_mips_octeon, bfd_mach_mipsisa64r2 },
14770   { bfd_mach_mips_loongson_3a, bfd_mach_mipsisa64r2 },
14771 
14772   /* MIPS64 extensions.  */
14773   { bfd_mach_mipsisa64r2, bfd_mach_mipsisa64 },
14774   { bfd_mach_mips_sb1, bfd_mach_mipsisa64 },
14775   { bfd_mach_mips_xlr, bfd_mach_mipsisa64 },
14776 
14777   /* MIPS V extensions.  */
14778   { bfd_mach_mipsisa64, bfd_mach_mips5 },
14779 
14780   /* R10000 extensions.  */
14781   { bfd_mach_mips12000, bfd_mach_mips10000 },
14782   { bfd_mach_mips14000, bfd_mach_mips10000 },
14783   { bfd_mach_mips16000, bfd_mach_mips10000 },
14784 
14785   /* R5000 extensions.  Note: the vr5500 ISA is an extension of the core
14786      vr5400 ISA, but doesn't include the multimedia stuff.  It seems
14787      better to allow vr5400 and vr5500 code to be merged anyway, since
14788      many libraries will just use the core ISA.  Perhaps we could add
14789      some sort of ASE flag if this ever proves a problem.  */
14790   { bfd_mach_mips5500, bfd_mach_mips5400 },
14791   { bfd_mach_mips5400, bfd_mach_mips5000 },
14792 
14793   /* MIPS IV extensions.  */
14794   { bfd_mach_mips5, bfd_mach_mips8000 },
14795   { bfd_mach_mips10000, bfd_mach_mips8000 },
14796   { bfd_mach_mips5000, bfd_mach_mips8000 },
14797   { bfd_mach_mips7000, bfd_mach_mips8000 },
14798   { bfd_mach_mips9000, bfd_mach_mips8000 },
14799 
14800   /* VR4100 extensions.  */
14801   { bfd_mach_mips4120, bfd_mach_mips4100 },
14802   { bfd_mach_mips4111, bfd_mach_mips4100 },
14803 
14804   /* MIPS III extensions.  */
14805   { bfd_mach_mips_loongson_2e, bfd_mach_mips4000 },
14806   { bfd_mach_mips_loongson_2f, bfd_mach_mips4000 },
14807   { bfd_mach_mips8000, bfd_mach_mips4000 },
14808   { bfd_mach_mips4650, bfd_mach_mips4000 },
14809   { bfd_mach_mips4600, bfd_mach_mips4000 },
14810   { bfd_mach_mips4400, bfd_mach_mips4000 },
14811   { bfd_mach_mips4300, bfd_mach_mips4000 },
14812   { bfd_mach_mips4100, bfd_mach_mips4000 },
14813   { bfd_mach_mips4010, bfd_mach_mips4000 },
14814   { bfd_mach_mips5900, bfd_mach_mips4000 },
14815 
14816   /* MIPS32 extensions.  */
14817   { bfd_mach_mipsisa32r2, bfd_mach_mipsisa32 },
14818 
14819   /* MIPS II extensions.  */
14820   { bfd_mach_mips4000, bfd_mach_mips6000 },
14821   { bfd_mach_mipsisa32, bfd_mach_mips6000 },
14822 
14823   /* MIPS I extensions.  */
14824   { bfd_mach_mips6000, bfd_mach_mips3000 },
14825   { bfd_mach_mips3900, bfd_mach_mips3000 }
14826 };
14827 
14828 
14829 /* Return true if bfd machine EXTENSION is an extension of machine BASE.  */
14830 
14831 static bfd_boolean
14832 mips_mach_extends_p (unsigned long base, unsigned long extension)
14833 {
14834   size_t i;
14835 
14836   if (extension == base)
14837     return TRUE;
14838 
14839   if (base == bfd_mach_mipsisa32
14840       && mips_mach_extends_p (bfd_mach_mipsisa64, extension))
14841     return TRUE;
14842 
14843   if (base == bfd_mach_mipsisa32r2
14844       && mips_mach_extends_p (bfd_mach_mipsisa64r2, extension))
14845     return TRUE;
14846 
14847   for (i = 0; i < ARRAY_SIZE (mips_mach_extensions); i++)
14848     if (extension == mips_mach_extensions[i].extension)
14849       {
14850 	extension = mips_mach_extensions[i].base;
14851 	if (extension == base)
14852 	  return TRUE;
14853       }
14854 
14855   return FALSE;
14856 }
14857 
14858 
14859 /* Merge object attributes from IBFD into OBFD.  Raise an error if
14860    there are conflicting attributes.  */
14861 static bfd_boolean
14862 mips_elf_merge_obj_attributes (bfd *ibfd, bfd *obfd)
14863 {
14864   obj_attribute *in_attr;
14865   obj_attribute *out_attr;
14866   bfd *abi_fp_bfd;
14867   bfd *abi_msa_bfd;
14868 
14869   abi_fp_bfd = mips_elf_tdata (obfd)->abi_fp_bfd;
14870   in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
14871   if (!abi_fp_bfd && in_attr[Tag_GNU_MIPS_ABI_FP].i != Val_GNU_MIPS_ABI_FP_ANY)
14872     mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
14873 
14874   abi_msa_bfd = mips_elf_tdata (obfd)->abi_msa_bfd;
14875   if (!abi_msa_bfd
14876       && in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
14877     mips_elf_tdata (obfd)->abi_msa_bfd = ibfd;
14878 
14879   if (!elf_known_obj_attributes_proc (obfd)[0].i)
14880     {
14881       /* This is the first object.  Copy the attributes.  */
14882       _bfd_elf_copy_obj_attributes (ibfd, obfd);
14883 
14884       /* Use the Tag_null value to indicate the attributes have been
14885 	 initialized.  */
14886       elf_known_obj_attributes_proc (obfd)[0].i = 1;
14887 
14888       return TRUE;
14889     }
14890 
14891   /* Check for conflicting Tag_GNU_MIPS_ABI_FP attributes and merge
14892      non-conflicting ones.  */
14893   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
14894   if (in_attr[Tag_GNU_MIPS_ABI_FP].i != out_attr[Tag_GNU_MIPS_ABI_FP].i)
14895     {
14896       int out_fp, in_fp;
14897 
14898       out_fp = out_attr[Tag_GNU_MIPS_ABI_FP].i;
14899       in_fp = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14900       out_attr[Tag_GNU_MIPS_ABI_FP].type = 1;
14901       if (out_fp == Val_GNU_MIPS_ABI_FP_ANY)
14902 	out_attr[Tag_GNU_MIPS_ABI_FP].i = in_fp;
14903       else if (out_fp == Val_GNU_MIPS_ABI_FP_XX
14904 	       && (in_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
14905 		   || in_fp == Val_GNU_MIPS_ABI_FP_64
14906 		   || in_fp == Val_GNU_MIPS_ABI_FP_64A))
14907 	{
14908 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
14909 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14910 	}
14911       else if (in_fp == Val_GNU_MIPS_ABI_FP_XX
14912 	       && (out_fp == Val_GNU_MIPS_ABI_FP_DOUBLE
14913 		   || out_fp == Val_GNU_MIPS_ABI_FP_64
14914 		   || out_fp == Val_GNU_MIPS_ABI_FP_64A))
14915 	/* Keep the current setting.  */;
14916       else if (out_fp == Val_GNU_MIPS_ABI_FP_64A
14917 	       && in_fp == Val_GNU_MIPS_ABI_FP_64)
14918 	{
14919 	  mips_elf_tdata (obfd)->abi_fp_bfd = ibfd;
14920 	  out_attr[Tag_GNU_MIPS_ABI_FP].i = in_attr[Tag_GNU_MIPS_ABI_FP].i;
14921 	}
14922       else if (in_fp == Val_GNU_MIPS_ABI_FP_64A
14923 	       && out_fp == Val_GNU_MIPS_ABI_FP_64)
14924 	/* Keep the current setting.  */;
14925       else if (in_fp != Val_GNU_MIPS_ABI_FP_ANY)
14926 	{
14927 	  const char *out_string, *in_string;
14928 
14929 	  out_string = _bfd_mips_fp_abi_string (out_fp);
14930 	  in_string = _bfd_mips_fp_abi_string (in_fp);
14931 	  /* First warn about cases involving unrecognised ABIs.  */
14932 	  if (!out_string && !in_string)
14933 	    _bfd_error_handler
14934 	      (_("Warning: %B uses unknown floating point ABI %d "
14935 		 "(set by %B), %B uses unknown floating point ABI %d"),
14936 	       obfd, abi_fp_bfd, ibfd, out_fp, in_fp);
14937 	  else if (!out_string)
14938 	    _bfd_error_handler
14939 	      (_("Warning: %B uses unknown floating point ABI %d "
14940 		 "(set by %B), %B uses %s"),
14941 	       obfd, abi_fp_bfd, ibfd, out_fp, in_string);
14942 	  else if (!in_string)
14943 	    _bfd_error_handler
14944 	      (_("Warning: %B uses %s (set by %B), "
14945 		 "%B uses unknown floating point ABI %d"),
14946 	       obfd, abi_fp_bfd, ibfd, out_string, in_fp);
14947 	  else
14948 	    {
14949 	      /* If one of the bfds is soft-float, the other must be
14950 		 hard-float.  The exact choice of hard-float ABI isn't
14951 		 really relevant to the error message.  */
14952 	      if (in_fp == Val_GNU_MIPS_ABI_FP_SOFT)
14953 		out_string = "-mhard-float";
14954 	      else if (out_fp == Val_GNU_MIPS_ABI_FP_SOFT)
14955 		in_string = "-mhard-float";
14956 	      _bfd_error_handler
14957 		(_("Warning: %B uses %s (set by %B), %B uses %s"),
14958 		 obfd, abi_fp_bfd, ibfd, out_string, in_string);
14959 	    }
14960 	}
14961     }
14962 
14963   /* Check for conflicting Tag_GNU_MIPS_ABI_MSA attributes and merge
14964      non-conflicting ones.  */
14965   if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != out_attr[Tag_GNU_MIPS_ABI_MSA].i)
14966     {
14967       out_attr[Tag_GNU_MIPS_ABI_MSA].type = 1;
14968       if (out_attr[Tag_GNU_MIPS_ABI_MSA].i == Val_GNU_MIPS_ABI_MSA_ANY)
14969 	out_attr[Tag_GNU_MIPS_ABI_MSA].i = in_attr[Tag_GNU_MIPS_ABI_MSA].i;
14970       else if (in_attr[Tag_GNU_MIPS_ABI_MSA].i != Val_GNU_MIPS_ABI_MSA_ANY)
14971 	switch (out_attr[Tag_GNU_MIPS_ABI_MSA].i)
14972 	  {
14973 	  case Val_GNU_MIPS_ABI_MSA_128:
14974 	    _bfd_error_handler
14975 	      (_("Warning: %B uses %s (set by %B), "
14976 		 "%B uses unknown MSA ABI %d"),
14977 	       obfd, abi_msa_bfd, ibfd,
14978 	       "-mmsa", in_attr[Tag_GNU_MIPS_ABI_MSA].i);
14979 	    break;
14980 
14981 	  default:
14982 	    switch (in_attr[Tag_GNU_MIPS_ABI_MSA].i)
14983 	      {
14984 	      case Val_GNU_MIPS_ABI_MSA_128:
14985 		_bfd_error_handler
14986 		  (_("Warning: %B uses unknown MSA ABI %d "
14987 		     "(set by %B), %B uses %s"),
14988 		     obfd, abi_msa_bfd, ibfd,
14989 		     out_attr[Tag_GNU_MIPS_ABI_MSA].i, "-mmsa");
14990 		  break;
14991 
14992 	      default:
14993 		_bfd_error_handler
14994 		  (_("Warning: %B uses unknown MSA ABI %d "
14995 		     "(set by %B), %B uses unknown MSA ABI %d"),
14996 		   obfd, abi_msa_bfd, ibfd,
14997 		   out_attr[Tag_GNU_MIPS_ABI_MSA].i,
14998 		   in_attr[Tag_GNU_MIPS_ABI_MSA].i);
14999 		break;
15000 	      }
15001 	  }
15002     }
15003 
15004   /* Merge Tag_compatibility attributes and any common GNU ones.  */
15005   _bfd_elf_merge_object_attributes (ibfd, obfd);
15006 
15007   return TRUE;
15008 }
15009 
15010 /* Merge backend specific data from an object file to the output
15011    object file when linking.  */
15012 
15013 bfd_boolean
15014 _bfd_mips_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd)
15015 {
15016   flagword old_flags;
15017   flagword new_flags;
15018   bfd_boolean ok;
15019   bfd_boolean null_input_bfd = TRUE;
15020   asection *sec;
15021   obj_attribute *out_attr;
15022 
15023   /* Check if we have the same endianness.  */
15024   if (! _bfd_generic_verify_endian_match (ibfd, obfd))
15025     {
15026       (*_bfd_error_handler)
15027 	(_("%B: endianness incompatible with that of the selected emulation"),
15028 	 ibfd);
15029       return FALSE;
15030     }
15031 
15032   if (!is_mips_elf (ibfd) || !is_mips_elf (obfd))
15033     return TRUE;
15034 
15035   if (strcmp (bfd_get_target (ibfd), bfd_get_target (obfd)) != 0)
15036     {
15037       (*_bfd_error_handler)
15038 	(_("%B: ABI is incompatible with that of the selected emulation"),
15039 	 ibfd);
15040       return FALSE;
15041     }
15042 
15043   /* Set up the FP ABI attribute from the abiflags if it is not already
15044      set.  */
15045   if (mips_elf_tdata (ibfd)->abiflags_valid)
15046     {
15047       obj_attribute *in_attr = elf_known_obj_attributes (ibfd)[OBJ_ATTR_GNU];
15048       if (in_attr[Tag_GNU_MIPS_ABI_FP].i == Val_GNU_MIPS_ABI_FP_ANY)
15049         in_attr[Tag_GNU_MIPS_ABI_FP].i =
15050 	  mips_elf_tdata (ibfd)->abiflags.fp_abi;
15051     }
15052 
15053   if (!mips_elf_merge_obj_attributes (ibfd, obfd))
15054     return FALSE;
15055 
15056   /* Check to see if the input BFD actually contains any sections.
15057      If not, its flags may not have been initialised either, but it cannot
15058      actually cause any incompatibility.  */
15059   for (sec = ibfd->sections; sec != NULL; sec = sec->next)
15060     {
15061       /* Ignore synthetic sections and empty .text, .data and .bss sections
15062 	 which are automatically generated by gas.  Also ignore fake
15063 	 (s)common sections, since merely defining a common symbol does
15064 	 not affect compatibility.  */
15065       if ((sec->flags & SEC_IS_COMMON) == 0
15066 	  && strcmp (sec->name, ".reginfo")
15067 	  && strcmp (sec->name, ".mdebug")
15068 	  && (sec->size != 0
15069 	      || (strcmp (sec->name, ".text")
15070 		  && strcmp (sec->name, ".data")
15071 		  && strcmp (sec->name, ".bss"))))
15072 	{
15073 	  null_input_bfd = FALSE;
15074 	  break;
15075 	}
15076     }
15077   if (null_input_bfd)
15078     return TRUE;
15079 
15080   /* Populate abiflags using existing information.  */
15081   if (!mips_elf_tdata (ibfd)->abiflags_valid)
15082     {
15083       infer_mips_abiflags (ibfd, &mips_elf_tdata (ibfd)->abiflags);
15084       mips_elf_tdata (ibfd)->abiflags_valid = TRUE;
15085     }
15086   else
15087     {
15088       Elf_Internal_ABIFlags_v0 abiflags;
15089       Elf_Internal_ABIFlags_v0 in_abiflags;
15090       infer_mips_abiflags (ibfd, &abiflags);
15091       in_abiflags = mips_elf_tdata (ibfd)->abiflags;
15092 
15093       /* It is not possible to infer the correct ISA revision
15094          for R3 or R5 so drop down to R2 for the checks.  */
15095       if (in_abiflags.isa_rev == 3 || in_abiflags.isa_rev == 5)
15096 	in_abiflags.isa_rev = 2;
15097 
15098       if (in_abiflags.isa_level != abiflags.isa_level
15099 	  || in_abiflags.isa_rev != abiflags.isa_rev
15100 	  || in_abiflags.isa_ext != abiflags.isa_ext)
15101 	(*_bfd_error_handler)
15102 	  (_("%B: warning: Inconsistent ISA between e_flags and "
15103 	     ".MIPS.abiflags"), ibfd);
15104       if (abiflags.fp_abi != Val_GNU_MIPS_ABI_FP_ANY
15105 	  && in_abiflags.fp_abi != abiflags.fp_abi)
15106 	(*_bfd_error_handler)
15107 	  (_("%B: warning: Inconsistent FP ABI between e_flags and "
15108 	     ".MIPS.abiflags"), ibfd);
15109       if ((in_abiflags.ases & abiflags.ases) != abiflags.ases)
15110 	(*_bfd_error_handler)
15111 	  (_("%B: warning: Inconsistent ASEs between e_flags and "
15112 	     ".MIPS.abiflags"), ibfd);
15113       if (in_abiflags.isa_ext != abiflags.isa_ext)
15114 	(*_bfd_error_handler)
15115 	  (_("%B: warning: Inconsistent ISA extensions between e_flags and "
15116 	     ".MIPS.abiflags"), ibfd);
15117       if (in_abiflags.flags2 != 0)
15118 	(*_bfd_error_handler)
15119 	  (_("%B: warning: Unexpected flag in the flags2 field of "
15120 	     ".MIPS.abiflags (0x%lx)"), ibfd,
15121 	   (unsigned long) in_abiflags.flags2);
15122     }
15123 
15124   if (!mips_elf_tdata (obfd)->abiflags_valid)
15125     {
15126       /* Copy input abiflags if output abiflags are not already valid.  */
15127       mips_elf_tdata (obfd)->abiflags = mips_elf_tdata (ibfd)->abiflags;
15128       mips_elf_tdata (obfd)->abiflags_valid = TRUE;
15129     }
15130 
15131   if (! elf_flags_init (obfd))
15132     {
15133       elf_flags_init (obfd) = TRUE;
15134       elf_elfheader (obfd)->e_flags = elf_elfheader (ibfd)->e_flags;
15135       elf_elfheader (obfd)->e_ident[EI_CLASS]
15136 	= elf_elfheader (ibfd)->e_ident[EI_CLASS];
15137 
15138       if (bfd_get_arch (obfd) == bfd_get_arch (ibfd)
15139 	  && (bfd_get_arch_info (obfd)->the_default
15140 	      || mips_mach_extends_p (bfd_get_mach (obfd),
15141 				      bfd_get_mach (ibfd))))
15142 	{
15143 	  if (! bfd_set_arch_mach (obfd, bfd_get_arch (ibfd),
15144 				   bfd_get_mach (ibfd)))
15145 	    return FALSE;
15146 
15147 	  /* Update the ABI flags isa_level, isa_rev and isa_ext fields.  */
15148 	  update_mips_abiflags_isa (obfd, &mips_elf_tdata (obfd)->abiflags);
15149 	}
15150 
15151       return TRUE;
15152     }
15153 
15154   /* Update the output abiflags fp_abi using the computed fp_abi.  */
15155   out_attr = elf_known_obj_attributes (obfd)[OBJ_ATTR_GNU];
15156   mips_elf_tdata (obfd)->abiflags.fp_abi = out_attr[Tag_GNU_MIPS_ABI_FP].i;
15157 
15158 #define max(a,b) ((a) > (b) ? (a) : (b))
15159   /* Merge abiflags.  */
15160   mips_elf_tdata (obfd)->abiflags.isa_rev
15161     = max (mips_elf_tdata (obfd)->abiflags.isa_rev,
15162 	   mips_elf_tdata (ibfd)->abiflags.isa_rev);
15163   mips_elf_tdata (obfd)->abiflags.gpr_size
15164     = max (mips_elf_tdata (obfd)->abiflags.gpr_size,
15165 	   mips_elf_tdata (ibfd)->abiflags.gpr_size);
15166   mips_elf_tdata (obfd)->abiflags.cpr1_size
15167     = max (mips_elf_tdata (obfd)->abiflags.cpr1_size,
15168 	   mips_elf_tdata (ibfd)->abiflags.cpr1_size);
15169   mips_elf_tdata (obfd)->abiflags.cpr2_size
15170     = max (mips_elf_tdata (obfd)->abiflags.cpr2_size,
15171 	   mips_elf_tdata (ibfd)->abiflags.cpr2_size);
15172 #undef max
15173   mips_elf_tdata (obfd)->abiflags.ases
15174     |= mips_elf_tdata (ibfd)->abiflags.ases;
15175   mips_elf_tdata (obfd)->abiflags.flags1
15176     |= mips_elf_tdata (ibfd)->abiflags.flags1;
15177 
15178   new_flags = elf_elfheader (ibfd)->e_flags;
15179   elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_NOREORDER;
15180   old_flags = elf_elfheader (obfd)->e_flags;
15181 
15182   /* Check flag compatibility.  */
15183 
15184   new_flags &= ~EF_MIPS_NOREORDER;
15185   old_flags &= ~EF_MIPS_NOREORDER;
15186 
15187   /* Some IRIX 6 BSD-compatibility objects have this bit set.  It
15188      doesn't seem to matter.  */
15189   new_flags &= ~EF_MIPS_XGOT;
15190   old_flags &= ~EF_MIPS_XGOT;
15191 
15192   /* MIPSpro generates ucode info in n64 objects.  Again, we should
15193      just be able to ignore this.  */
15194   new_flags &= ~EF_MIPS_UCODE;
15195   old_flags &= ~EF_MIPS_UCODE;
15196 
15197   /* DSOs should only be linked with CPIC code.  */
15198   if ((ibfd->flags & DYNAMIC) != 0)
15199     new_flags |= EF_MIPS_PIC | EF_MIPS_CPIC;
15200 
15201   if (new_flags == old_flags)
15202     return TRUE;
15203 
15204   ok = TRUE;
15205 
15206   if (((new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0)
15207       != ((old_flags & (EF_MIPS_PIC | EF_MIPS_CPIC)) != 0))
15208     {
15209       (*_bfd_error_handler)
15210 	(_("%B: warning: linking abicalls files with non-abicalls files"),
15211 	 ibfd);
15212       ok = TRUE;
15213     }
15214 
15215   if (new_flags & (EF_MIPS_PIC | EF_MIPS_CPIC))
15216     elf_elfheader (obfd)->e_flags |= EF_MIPS_CPIC;
15217   if (! (new_flags & EF_MIPS_PIC))
15218     elf_elfheader (obfd)->e_flags &= ~EF_MIPS_PIC;
15219 
15220   new_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15221   old_flags &= ~ (EF_MIPS_PIC | EF_MIPS_CPIC);
15222 
15223   /* Compare the ISAs.  */
15224   if (mips_32bit_flags_p (old_flags) != mips_32bit_flags_p (new_flags))
15225     {
15226       (*_bfd_error_handler)
15227 	(_("%B: linking 32-bit code with 64-bit code"),
15228 	 ibfd);
15229       ok = FALSE;
15230     }
15231   else if (!mips_mach_extends_p (bfd_get_mach (ibfd), bfd_get_mach (obfd)))
15232     {
15233       /* OBFD's ISA isn't the same as, or an extension of, IBFD's.  */
15234       if (mips_mach_extends_p (bfd_get_mach (obfd), bfd_get_mach (ibfd)))
15235 	{
15236 	  /* Copy the architecture info from IBFD to OBFD.  Also copy
15237 	     the 32-bit flag (if set) so that we continue to recognise
15238 	     OBFD as a 32-bit binary.  */
15239 	  bfd_set_arch_info (obfd, bfd_get_arch_info (ibfd));
15240 	  elf_elfheader (obfd)->e_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH);
15241 	  elf_elfheader (obfd)->e_flags
15242 	    |= new_flags & (EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15243 
15244 	  /* Update the ABI flags isa_level, isa_rev, isa_ext fields.  */
15245 	  update_mips_abiflags_isa (obfd, &mips_elf_tdata (obfd)->abiflags);
15246 
15247 	  /* Copy across the ABI flags if OBFD doesn't use them
15248 	     and if that was what caused us to treat IBFD as 32-bit.  */
15249 	  if ((old_flags & EF_MIPS_ABI) == 0
15250 	      && mips_32bit_flags_p (new_flags)
15251 	      && !mips_32bit_flags_p (new_flags & ~EF_MIPS_ABI))
15252 	    elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ABI;
15253 	}
15254       else
15255 	{
15256 	  /* The ISAs aren't compatible.  */
15257 	  (*_bfd_error_handler)
15258 	    (_("%B: linking %s module with previous %s modules"),
15259 	     ibfd,
15260 	     bfd_printable_name (ibfd),
15261 	     bfd_printable_name (obfd));
15262 	  ok = FALSE;
15263 	}
15264     }
15265 
15266   new_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15267   old_flags &= ~(EF_MIPS_ARCH | EF_MIPS_MACH | EF_MIPS_32BITMODE);
15268 
15269   /* Compare ABIs.  The 64-bit ABI does not use EF_MIPS_ABI.  But, it
15270      does set EI_CLASS differently from any 32-bit ABI.  */
15271   if ((new_flags & EF_MIPS_ABI) != (old_flags & EF_MIPS_ABI)
15272       || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15273 	  != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15274     {
15275       /* Only error if both are set (to different values).  */
15276       if (((new_flags & EF_MIPS_ABI) && (old_flags & EF_MIPS_ABI))
15277 	  || (elf_elfheader (ibfd)->e_ident[EI_CLASS]
15278 	      != elf_elfheader (obfd)->e_ident[EI_CLASS]))
15279 	{
15280 	  (*_bfd_error_handler)
15281 	    (_("%B: ABI mismatch: linking %s module with previous %s modules"),
15282 	     ibfd,
15283 	     elf_mips_abi_name (ibfd),
15284 	     elf_mips_abi_name (obfd));
15285 	  ok = FALSE;
15286 	}
15287       new_flags &= ~EF_MIPS_ABI;
15288       old_flags &= ~EF_MIPS_ABI;
15289     }
15290 
15291   /* Compare ASEs.  Forbid linking MIPS16 and microMIPS ASE modules together
15292      and allow arbitrary mixing of the remaining ASEs (retain the union).  */
15293   if ((new_flags & EF_MIPS_ARCH_ASE) != (old_flags & EF_MIPS_ARCH_ASE))
15294     {
15295       int old_micro = old_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15296       int new_micro = new_flags & EF_MIPS_ARCH_ASE_MICROMIPS;
15297       int old_m16 = old_flags & EF_MIPS_ARCH_ASE_M16;
15298       int new_m16 = new_flags & EF_MIPS_ARCH_ASE_M16;
15299       int micro_mis = old_m16 && new_micro;
15300       int m16_mis = old_micro && new_m16;
15301 
15302       if (m16_mis || micro_mis)
15303 	{
15304 	  (*_bfd_error_handler)
15305 	    (_("%B: ASE mismatch: linking %s module with previous %s modules"),
15306 	     ibfd,
15307 	     m16_mis ? "MIPS16" : "microMIPS",
15308 	     m16_mis ? "microMIPS" : "MIPS16");
15309 	  ok = FALSE;
15310 	}
15311 
15312       elf_elfheader (obfd)->e_flags |= new_flags & EF_MIPS_ARCH_ASE;
15313 
15314       new_flags &= ~ EF_MIPS_ARCH_ASE;
15315       old_flags &= ~ EF_MIPS_ARCH_ASE;
15316     }
15317 
15318   /* Compare NaN encodings.  */
15319   if ((new_flags & EF_MIPS_NAN2008) != (old_flags & EF_MIPS_NAN2008))
15320     {
15321       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15322 			  ibfd,
15323 			  (new_flags & EF_MIPS_NAN2008
15324 			   ? "-mnan=2008" : "-mnan=legacy"),
15325 			  (old_flags & EF_MIPS_NAN2008
15326 			   ? "-mnan=2008" : "-mnan=legacy"));
15327       ok = FALSE;
15328       new_flags &= ~EF_MIPS_NAN2008;
15329       old_flags &= ~EF_MIPS_NAN2008;
15330     }
15331 
15332   /* Compare FP64 state.  */
15333   if ((new_flags & EF_MIPS_FP64) != (old_flags & EF_MIPS_FP64))
15334     {
15335       _bfd_error_handler (_("%B: linking %s module with previous %s modules"),
15336 			  ibfd,
15337 			  (new_flags & EF_MIPS_FP64
15338 			   ? "-mfp64" : "-mfp32"),
15339 			  (old_flags & EF_MIPS_FP64
15340 			   ? "-mfp64" : "-mfp32"));
15341       ok = FALSE;
15342       new_flags &= ~EF_MIPS_FP64;
15343       old_flags &= ~EF_MIPS_FP64;
15344     }
15345 
15346   /* Warn about any other mismatches */
15347   if (new_flags != old_flags)
15348     {
15349       (*_bfd_error_handler)
15350 	(_("%B: uses different e_flags (0x%lx) fields than previous modules (0x%lx)"),
15351 	 ibfd, (unsigned long) new_flags,
15352 	 (unsigned long) old_flags);
15353       ok = FALSE;
15354     }
15355 
15356   if (! ok)
15357     {
15358       bfd_set_error (bfd_error_bad_value);
15359       return FALSE;
15360     }
15361 
15362   return TRUE;
15363 }
15364 
15365 /* Function to keep MIPS specific file flags like as EF_MIPS_PIC.  */
15366 
15367 bfd_boolean
15368 _bfd_mips_elf_set_private_flags (bfd *abfd, flagword flags)
15369 {
15370   BFD_ASSERT (!elf_flags_init (abfd)
15371 	      || elf_elfheader (abfd)->e_flags == flags);
15372 
15373   elf_elfheader (abfd)->e_flags = flags;
15374   elf_flags_init (abfd) = TRUE;
15375   return TRUE;
15376 }
15377 
15378 char *
15379 _bfd_mips_elf_get_target_dtag (bfd_vma dtag)
15380 {
15381   switch (dtag)
15382     {
15383     default: return "";
15384     case DT_MIPS_RLD_VERSION:
15385       return "MIPS_RLD_VERSION";
15386     case DT_MIPS_TIME_STAMP:
15387       return "MIPS_TIME_STAMP";
15388     case DT_MIPS_ICHECKSUM:
15389       return "MIPS_ICHECKSUM";
15390     case DT_MIPS_IVERSION:
15391       return "MIPS_IVERSION";
15392     case DT_MIPS_FLAGS:
15393       return "MIPS_FLAGS";
15394     case DT_MIPS_BASE_ADDRESS:
15395       return "MIPS_BASE_ADDRESS";
15396     case DT_MIPS_MSYM:
15397       return "MIPS_MSYM";
15398     case DT_MIPS_CONFLICT:
15399       return "MIPS_CONFLICT";
15400     case DT_MIPS_LIBLIST:
15401       return "MIPS_LIBLIST";
15402     case DT_MIPS_LOCAL_GOTNO:
15403       return "MIPS_LOCAL_GOTNO";
15404     case DT_MIPS_CONFLICTNO:
15405       return "MIPS_CONFLICTNO";
15406     case DT_MIPS_LIBLISTNO:
15407       return "MIPS_LIBLISTNO";
15408     case DT_MIPS_SYMTABNO:
15409       return "MIPS_SYMTABNO";
15410     case DT_MIPS_UNREFEXTNO:
15411       return "MIPS_UNREFEXTNO";
15412     case DT_MIPS_GOTSYM:
15413       return "MIPS_GOTSYM";
15414     case DT_MIPS_HIPAGENO:
15415       return "MIPS_HIPAGENO";
15416     case DT_MIPS_RLD_MAP:
15417       return "MIPS_RLD_MAP";
15418     case DT_MIPS_DELTA_CLASS:
15419       return "MIPS_DELTA_CLASS";
15420     case DT_MIPS_DELTA_CLASS_NO:
15421       return "MIPS_DELTA_CLASS_NO";
15422     case DT_MIPS_DELTA_INSTANCE:
15423       return "MIPS_DELTA_INSTANCE";
15424     case DT_MIPS_DELTA_INSTANCE_NO:
15425       return "MIPS_DELTA_INSTANCE_NO";
15426     case DT_MIPS_DELTA_RELOC:
15427       return "MIPS_DELTA_RELOC";
15428     case DT_MIPS_DELTA_RELOC_NO:
15429       return "MIPS_DELTA_RELOC_NO";
15430     case DT_MIPS_DELTA_SYM:
15431       return "MIPS_DELTA_SYM";
15432     case DT_MIPS_DELTA_SYM_NO:
15433       return "MIPS_DELTA_SYM_NO";
15434     case DT_MIPS_DELTA_CLASSSYM:
15435       return "MIPS_DELTA_CLASSSYM";
15436     case DT_MIPS_DELTA_CLASSSYM_NO:
15437       return "MIPS_DELTA_CLASSSYM_NO";
15438     case DT_MIPS_CXX_FLAGS:
15439       return "MIPS_CXX_FLAGS";
15440     case DT_MIPS_PIXIE_INIT:
15441       return "MIPS_PIXIE_INIT";
15442     case DT_MIPS_SYMBOL_LIB:
15443       return "MIPS_SYMBOL_LIB";
15444     case DT_MIPS_LOCALPAGE_GOTIDX:
15445       return "MIPS_LOCALPAGE_GOTIDX";
15446     case DT_MIPS_LOCAL_GOTIDX:
15447       return "MIPS_LOCAL_GOTIDX";
15448     case DT_MIPS_HIDDEN_GOTIDX:
15449       return "MIPS_HIDDEN_GOTIDX";
15450     case DT_MIPS_PROTECTED_GOTIDX:
15451       return "MIPS_PROTECTED_GOT_IDX";
15452     case DT_MIPS_OPTIONS:
15453       return "MIPS_OPTIONS";
15454     case DT_MIPS_INTERFACE:
15455       return "MIPS_INTERFACE";
15456     case DT_MIPS_DYNSTR_ALIGN:
15457       return "DT_MIPS_DYNSTR_ALIGN";
15458     case DT_MIPS_INTERFACE_SIZE:
15459       return "DT_MIPS_INTERFACE_SIZE";
15460     case DT_MIPS_RLD_TEXT_RESOLVE_ADDR:
15461       return "DT_MIPS_RLD_TEXT_RESOLVE_ADDR";
15462     case DT_MIPS_PERF_SUFFIX:
15463       return "DT_MIPS_PERF_SUFFIX";
15464     case DT_MIPS_COMPACT_SIZE:
15465       return "DT_MIPS_COMPACT_SIZE";
15466     case DT_MIPS_GP_VALUE:
15467       return "DT_MIPS_GP_VALUE";
15468     case DT_MIPS_AUX_DYNAMIC:
15469       return "DT_MIPS_AUX_DYNAMIC";
15470     case DT_MIPS_PLTGOT:
15471       return "DT_MIPS_PLTGOT";
15472     case DT_MIPS_RWPLT:
15473       return "DT_MIPS_RWPLT";
15474     }
15475 }
15476 
15477 /* Return the meaning of Tag_GNU_MIPS_ABI_FP value FP, or null if
15478    not known.  */
15479 
15480 const char *
15481 _bfd_mips_fp_abi_string (int fp)
15482 {
15483   switch (fp)
15484     {
15485       /* These strings aren't translated because they're simply
15486 	 option lists.  */
15487     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15488       return "-mdouble-float";
15489 
15490     case Val_GNU_MIPS_ABI_FP_SINGLE:
15491       return "-msingle-float";
15492 
15493     case Val_GNU_MIPS_ABI_FP_SOFT:
15494       return "-msoft-float";
15495 
15496     case Val_GNU_MIPS_ABI_FP_OLD_64:
15497       return _("-mips32r2 -mfp64 (12 callee-saved)");
15498 
15499     case Val_GNU_MIPS_ABI_FP_XX:
15500       return "-mfpxx";
15501 
15502     case Val_GNU_MIPS_ABI_FP_64:
15503       return "-mgp32 -mfp64";
15504 
15505     case Val_GNU_MIPS_ABI_FP_64A:
15506       return "-mgp32 -mfp64 -mno-odd-spreg";
15507 
15508     default:
15509       return 0;
15510     }
15511 }
15512 
15513 static void
15514 print_mips_ases (FILE *file, unsigned int mask)
15515 {
15516   if (mask & AFL_ASE_DSP)
15517     fputs ("\n\tDSP ASE", file);
15518   if (mask & AFL_ASE_DSPR2)
15519     fputs ("\n\tDSP R2 ASE", file);
15520   if (mask & AFL_ASE_EVA)
15521     fputs ("\n\tEnhanced VA Scheme", file);
15522   if (mask & AFL_ASE_MCU)
15523     fputs ("\n\tMCU (MicroController) ASE", file);
15524   if (mask & AFL_ASE_MDMX)
15525     fputs ("\n\tMDMX ASE", file);
15526   if (mask & AFL_ASE_MIPS3D)
15527     fputs ("\n\tMIPS-3D ASE", file);
15528   if (mask & AFL_ASE_MT)
15529     fputs ("\n\tMT ASE", file);
15530   if (mask & AFL_ASE_SMARTMIPS)
15531     fputs ("\n\tSmartMIPS ASE", file);
15532   if (mask & AFL_ASE_VIRT)
15533     fputs ("\n\tVZ ASE", file);
15534   if (mask & AFL_ASE_MSA)
15535     fputs ("\n\tMSA ASE", file);
15536   if (mask & AFL_ASE_MIPS16)
15537     fputs ("\n\tMIPS16 ASE", file);
15538   if (mask & AFL_ASE_MICROMIPS)
15539     fputs ("\n\tMICROMIPS ASE", file);
15540   if (mask & AFL_ASE_XPA)
15541     fputs ("\n\tXPA ASE", file);
15542   if (mask == 0)
15543     fprintf (file, "\n\t%s", _("None"));
15544   else if ((mask & ~AFL_ASE_MASK) != 0)
15545     fprintf (stdout, "\n\t%s (%x)", _("Unknown"), mask & ~AFL_ASE_MASK);
15546 }
15547 
15548 static void
15549 print_mips_isa_ext (FILE *file, unsigned int isa_ext)
15550 {
15551   switch (isa_ext)
15552     {
15553     case 0:
15554       fputs (_("None"), file);
15555       break;
15556     case AFL_EXT_XLR:
15557       fputs ("RMI XLR", file);
15558       break;
15559     case AFL_EXT_OCTEON3:
15560       fputs ("Cavium Networks Octeon3", file);
15561       break;
15562     case AFL_EXT_OCTEON2:
15563       fputs ("Cavium Networks Octeon2", file);
15564       break;
15565     case AFL_EXT_OCTEONP:
15566       fputs ("Cavium Networks OcteonP", file);
15567       break;
15568     case AFL_EXT_LOONGSON_3A:
15569       fputs ("Loongson 3A", file);
15570       break;
15571     case AFL_EXT_OCTEON:
15572       fputs ("Cavium Networks Octeon", file);
15573       break;
15574     case AFL_EXT_5900:
15575       fputs ("Toshiba R5900", file);
15576       break;
15577     case AFL_EXT_4650:
15578       fputs ("MIPS R4650", file);
15579       break;
15580     case AFL_EXT_4010:
15581       fputs ("LSI R4010", file);
15582       break;
15583     case AFL_EXT_4100:
15584       fputs ("NEC VR4100", file);
15585       break;
15586     case AFL_EXT_3900:
15587       fputs ("Toshiba R3900", file);
15588       break;
15589     case AFL_EXT_10000:
15590       fputs ("MIPS R10000", file);
15591       break;
15592     case AFL_EXT_SB1:
15593       fputs ("Broadcom SB-1", file);
15594       break;
15595     case AFL_EXT_4111:
15596       fputs ("NEC VR4111/VR4181", file);
15597       break;
15598     case AFL_EXT_4120:
15599       fputs ("NEC VR4120", file);
15600       break;
15601     case AFL_EXT_5400:
15602       fputs ("NEC VR5400", file);
15603       break;
15604     case AFL_EXT_5500:
15605       fputs ("NEC VR5500", file);
15606       break;
15607     case AFL_EXT_LOONGSON_2E:
15608       fputs ("ST Microelectronics Loongson 2E", file);
15609       break;
15610     case AFL_EXT_LOONGSON_2F:
15611       fputs ("ST Microelectronics Loongson 2F", file);
15612       break;
15613     default:
15614       fprintf (file, "%s (%d)", _("Unknown"), isa_ext);
15615       break;
15616     }
15617 }
15618 
15619 static void
15620 print_mips_fp_abi_value (FILE *file, int val)
15621 {
15622   switch (val)
15623     {
15624     case Val_GNU_MIPS_ABI_FP_ANY:
15625       fprintf (file, _("Hard or soft float\n"));
15626       break;
15627     case Val_GNU_MIPS_ABI_FP_DOUBLE:
15628       fprintf (file, _("Hard float (double precision)\n"));
15629       break;
15630     case Val_GNU_MIPS_ABI_FP_SINGLE:
15631       fprintf (file, _("Hard float (single precision)\n"));
15632       break;
15633     case Val_GNU_MIPS_ABI_FP_SOFT:
15634       fprintf (file, _("Soft float\n"));
15635       break;
15636     case Val_GNU_MIPS_ABI_FP_OLD_64:
15637       fprintf (file, _("Hard float (MIPS32r2 64-bit FPU 12 callee-saved)\n"));
15638       break;
15639     case Val_GNU_MIPS_ABI_FP_XX:
15640       fprintf (file, _("Hard float (32-bit CPU, Any FPU)\n"));
15641       break;
15642     case Val_GNU_MIPS_ABI_FP_64:
15643       fprintf (file, _("Hard float (32-bit CPU, 64-bit FPU)\n"));
15644       break;
15645     case Val_GNU_MIPS_ABI_FP_64A:
15646       fprintf (file, _("Hard float compat (32-bit CPU, 64-bit FPU)\n"));
15647       break;
15648     default:
15649       fprintf (file, "??? (%d)\n", val);
15650       break;
15651     }
15652 }
15653 
15654 static int
15655 get_mips_reg_size (int reg_size)
15656 {
15657   return (reg_size == AFL_REG_NONE) ? 0
15658 	 : (reg_size == AFL_REG_32) ? 32
15659 	 : (reg_size == AFL_REG_64) ? 64
15660 	 : (reg_size == AFL_REG_128) ? 128
15661 	 : -1;
15662 }
15663 
15664 bfd_boolean
15665 _bfd_mips_elf_print_private_bfd_data (bfd *abfd, void *ptr)
15666 {
15667   FILE *file = ptr;
15668 
15669   BFD_ASSERT (abfd != NULL && ptr != NULL);
15670 
15671   /* Print normal ELF private data.  */
15672   _bfd_elf_print_private_bfd_data (abfd, ptr);
15673 
15674   /* xgettext:c-format */
15675   fprintf (file, _("private flags = %lx:"), elf_elfheader (abfd)->e_flags);
15676 
15677   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O32)
15678     fprintf (file, _(" [abi=O32]"));
15679   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_O64)
15680     fprintf (file, _(" [abi=O64]"));
15681   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI32)
15682     fprintf (file, _(" [abi=EABI32]"));
15683   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI) == E_MIPS_ABI_EABI64)
15684     fprintf (file, _(" [abi=EABI64]"));
15685   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ABI))
15686     fprintf (file, _(" [abi unknown]"));
15687   else if (ABI_N32_P (abfd))
15688     fprintf (file, _(" [abi=N32]"));
15689   else if (ABI_64_P (abfd))
15690     fprintf (file, _(" [abi=64]"));
15691   else
15692     fprintf (file, _(" [no abi set]"));
15693 
15694   if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_1)
15695     fprintf (file, " [mips1]");
15696   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_2)
15697     fprintf (file, " [mips2]");
15698   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_3)
15699     fprintf (file, " [mips3]");
15700   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_4)
15701     fprintf (file, " [mips4]");
15702   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_5)
15703     fprintf (file, " [mips5]");
15704   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32)
15705     fprintf (file, " [mips32]");
15706   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64)
15707     fprintf (file, " [mips64]");
15708   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R2)
15709     fprintf (file, " [mips32r2]");
15710   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R2)
15711     fprintf (file, " [mips64r2]");
15712   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_32R6)
15713     fprintf (file, " [mips32r6]");
15714   else if ((elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH) == E_MIPS_ARCH_64R6)
15715     fprintf (file, " [mips64r6]");
15716   else
15717     fprintf (file, _(" [unknown ISA]"));
15718 
15719   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MDMX)
15720     fprintf (file, " [mdmx]");
15721 
15722   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_M16)
15723     fprintf (file, " [mips16]");
15724 
15725   if (elf_elfheader (abfd)->e_flags & EF_MIPS_ARCH_ASE_MICROMIPS)
15726     fprintf (file, " [micromips]");
15727 
15728   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NAN2008)
15729     fprintf (file, " [nan2008]");
15730 
15731   if (elf_elfheader (abfd)->e_flags & EF_MIPS_FP64)
15732     fprintf (file, " [old fp64]");
15733 
15734   if (elf_elfheader (abfd)->e_flags & EF_MIPS_32BITMODE)
15735     fprintf (file, " [32bitmode]");
15736   else
15737     fprintf (file, _(" [not 32bitmode]"));
15738 
15739   if (elf_elfheader (abfd)->e_flags & EF_MIPS_NOREORDER)
15740     fprintf (file, " [noreorder]");
15741 
15742   if (elf_elfheader (abfd)->e_flags & EF_MIPS_PIC)
15743     fprintf (file, " [PIC]");
15744 
15745   if (elf_elfheader (abfd)->e_flags & EF_MIPS_CPIC)
15746     fprintf (file, " [CPIC]");
15747 
15748   if (elf_elfheader (abfd)->e_flags & EF_MIPS_XGOT)
15749     fprintf (file, " [XGOT]");
15750 
15751   if (elf_elfheader (abfd)->e_flags & EF_MIPS_UCODE)
15752     fprintf (file, " [UCODE]");
15753 
15754   fputc ('\n', file);
15755 
15756   if (mips_elf_tdata (abfd)->abiflags_valid)
15757     {
15758       Elf_Internal_ABIFlags_v0 *abiflags = &mips_elf_tdata (abfd)->abiflags;
15759       fprintf (file, "\nMIPS ABI Flags Version: %d\n", abiflags->version);
15760       fprintf (file, "\nISA: MIPS%d", abiflags->isa_level);
15761       if (abiflags->isa_rev > 1)
15762 	fprintf (file, "r%d", abiflags->isa_rev);
15763       fprintf (file, "\nGPR size: %d",
15764 	       get_mips_reg_size (abiflags->gpr_size));
15765       fprintf (file, "\nCPR1 size: %d",
15766 	       get_mips_reg_size (abiflags->cpr1_size));
15767       fprintf (file, "\nCPR2 size: %d",
15768 	       get_mips_reg_size (abiflags->cpr2_size));
15769       fputs ("\nFP ABI: ", file);
15770       print_mips_fp_abi_value (file, abiflags->fp_abi);
15771       fputs ("ISA Extension: ", file);
15772       print_mips_isa_ext (file, abiflags->isa_ext);
15773       fputs ("\nASEs:", file);
15774       print_mips_ases (file, abiflags->ases);
15775       fprintf (file, "\nFLAGS 1: %8.8lx", abiflags->flags1);
15776       fprintf (file, "\nFLAGS 2: %8.8lx", abiflags->flags2);
15777       fputc ('\n', file);
15778     }
15779 
15780   return TRUE;
15781 }
15782 
15783 const struct bfd_elf_special_section _bfd_mips_elf_special_sections[] =
15784 {
15785   { STRING_COMMA_LEN (".lit4"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15786   { STRING_COMMA_LEN (".lit8"),   0, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15787   { STRING_COMMA_LEN (".mdebug"), 0, SHT_MIPS_DEBUG, 0 },
15788   { STRING_COMMA_LEN (".sbss"),  -2, SHT_NOBITS,     SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15789   { STRING_COMMA_LEN (".sdata"), -2, SHT_PROGBITS,   SHF_ALLOC + SHF_WRITE + SHF_MIPS_GPREL },
15790   { STRING_COMMA_LEN (".ucode"),  0, SHT_MIPS_UCODE, 0 },
15791   { NULL,                     0,  0, 0,              0 }
15792 };
15793 
15794 /* Merge non visibility st_other attributes.  Ensure that the
15795    STO_OPTIONAL flag is copied into h->other, even if this is not a
15796    definiton of the symbol.  */
15797 void
15798 _bfd_mips_elf_merge_symbol_attribute (struct elf_link_hash_entry *h,
15799 				      const Elf_Internal_Sym *isym,
15800 				      bfd_boolean definition,
15801 				      bfd_boolean dynamic ATTRIBUTE_UNUSED)
15802 {
15803   if ((isym->st_other & ~ELF_ST_VISIBILITY (-1)) != 0)
15804     {
15805       unsigned char other;
15806 
15807       other = (definition ? isym->st_other : h->other);
15808       other &= ~ELF_ST_VISIBILITY (-1);
15809       h->other = other | ELF_ST_VISIBILITY (h->other);
15810     }
15811 
15812   if (!definition
15813       && ELF_MIPS_IS_OPTIONAL (isym->st_other))
15814     h->other |= STO_OPTIONAL;
15815 }
15816 
15817 /* Decide whether an undefined symbol is special and can be ignored.
15818    This is the case for OPTIONAL symbols on IRIX.  */
15819 bfd_boolean
15820 _bfd_mips_elf_ignore_undef_symbol (struct elf_link_hash_entry *h)
15821 {
15822   return ELF_MIPS_IS_OPTIONAL (h->other) ? TRUE : FALSE;
15823 }
15824 
15825 bfd_boolean
15826 _bfd_mips_elf_common_definition (Elf_Internal_Sym *sym)
15827 {
15828   return (sym->st_shndx == SHN_COMMON
15829 	  || sym->st_shndx == SHN_MIPS_ACOMMON
15830 	  || sym->st_shndx == SHN_MIPS_SCOMMON);
15831 }
15832 
15833 /* Return address for Ith PLT stub in section PLT, for relocation REL
15834    or (bfd_vma) -1 if it should not be included.  */
15835 
15836 bfd_vma
15837 _bfd_mips_elf_plt_sym_val (bfd_vma i, const asection *plt,
15838 			   const arelent *rel ATTRIBUTE_UNUSED)
15839 {
15840   return (plt->vma
15841 	  + 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry)
15842 	  + i * 4 * ARRAY_SIZE (mips_exec_plt_entry));
15843 }
15844 
15845 /* Build a table of synthetic symbols to represent the PLT.  As with MIPS16
15846    and microMIPS PLT slots we may have a many-to-one mapping between .plt
15847    and .got.plt and also the slots may be of a different size each we walk
15848    the PLT manually fetching instructions and matching them against known
15849    patterns.  To make things easier standard MIPS slots, if any, always come
15850    first.  As we don't create proper ELF symbols we use the UDATA.I member
15851    of ASYMBOL to carry ISA annotation.  The encoding used is the same as
15852    with the ST_OTHER member of the ELF symbol.  */
15853 
15854 long
15855 _bfd_mips_elf_get_synthetic_symtab (bfd *abfd,
15856 				    long symcount ATTRIBUTE_UNUSED,
15857 				    asymbol **syms ATTRIBUTE_UNUSED,
15858 				    long dynsymcount, asymbol **dynsyms,
15859 				    asymbol **ret)
15860 {
15861   static const char pltname[] = "_PROCEDURE_LINKAGE_TABLE_";
15862   static const char microsuffix[] = "@micromipsplt";
15863   static const char m16suffix[] = "@mips16plt";
15864   static const char mipssuffix[] = "@plt";
15865 
15866   bfd_boolean (*slurp_relocs) (bfd *, asection *, asymbol **, bfd_boolean);
15867   const struct elf_backend_data *bed = get_elf_backend_data (abfd);
15868   bfd_boolean micromips_p = MICROMIPS_P (abfd);
15869   Elf_Internal_Shdr *hdr;
15870   bfd_byte *plt_data;
15871   bfd_vma plt_offset;
15872   unsigned int other;
15873   bfd_vma entry_size;
15874   bfd_vma plt0_size;
15875   asection *relplt;
15876   bfd_vma opcode;
15877   asection *plt;
15878   asymbol *send;
15879   size_t size;
15880   char *names;
15881   long counti;
15882   arelent *p;
15883   asymbol *s;
15884   char *nend;
15885   long count;
15886   long pi;
15887   long i;
15888   long n;
15889 
15890   *ret = NULL;
15891 
15892   if ((abfd->flags & (DYNAMIC | EXEC_P)) == 0 || dynsymcount <= 0)
15893     return 0;
15894 
15895   relplt = bfd_get_section_by_name (abfd, ".rel.plt");
15896   if (relplt == NULL)
15897     return 0;
15898 
15899   hdr = &elf_section_data (relplt)->this_hdr;
15900   if (hdr->sh_link != elf_dynsymtab (abfd) || hdr->sh_type != SHT_REL)
15901     return 0;
15902 
15903   plt = bfd_get_section_by_name (abfd, ".plt");
15904   if (plt == NULL)
15905     return 0;
15906 
15907   slurp_relocs = get_elf_backend_data (abfd)->s->slurp_reloc_table;
15908   if (!(*slurp_relocs) (abfd, relplt, dynsyms, TRUE))
15909     return -1;
15910   p = relplt->relocation;
15911 
15912   /* Calculating the exact amount of space required for symbols would
15913      require two passes over the PLT, so just pessimise assuming two
15914      PLT slots per relocation.  */
15915   count = relplt->size / hdr->sh_entsize;
15916   counti = count * bed->s->int_rels_per_ext_rel;
15917   size = 2 * count * sizeof (asymbol);
15918   size += count * (sizeof (mipssuffix) +
15919 		   (micromips_p ? sizeof (microsuffix) : sizeof (m16suffix)));
15920   for (pi = 0; pi < counti; pi += bed->s->int_rels_per_ext_rel)
15921     size += 2 * strlen ((*p[pi].sym_ptr_ptr)->name);
15922 
15923   /* Add the size of "_PROCEDURE_LINKAGE_TABLE_" too.  */
15924   size += sizeof (asymbol) + sizeof (pltname);
15925 
15926   if (!bfd_malloc_and_get_section (abfd, plt, &plt_data))
15927     return -1;
15928 
15929   if (plt->size < 16)
15930     return -1;
15931 
15932   s = *ret = bfd_malloc (size);
15933   if (s == NULL)
15934     return -1;
15935   send = s + 2 * count + 1;
15936 
15937   names = (char *) send;
15938   nend = (char *) s + size;
15939   n = 0;
15940 
15941   opcode = bfd_get_micromips_32 (abfd, plt_data + 12);
15942   if (opcode == 0x3302fffe)
15943     {
15944       if (!micromips_p)
15945 	return -1;
15946       plt0_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt0_entry);
15947       other = STO_MICROMIPS;
15948     }
15949   else if (opcode == 0x0398c1d0)
15950     {
15951       if (!micromips_p)
15952 	return -1;
15953       plt0_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt0_entry);
15954       other = STO_MICROMIPS;
15955     }
15956   else
15957     {
15958       plt0_size = 4 * ARRAY_SIZE (mips_o32_exec_plt0_entry);
15959       other = 0;
15960     }
15961 
15962   s->the_bfd = abfd;
15963   s->flags = BSF_SYNTHETIC | BSF_FUNCTION | BSF_LOCAL;
15964   s->section = plt;
15965   s->value = 0;
15966   s->name = names;
15967   s->udata.i = other;
15968   memcpy (names, pltname, sizeof (pltname));
15969   names += sizeof (pltname);
15970   ++s, ++n;
15971 
15972   pi = 0;
15973   for (plt_offset = plt0_size;
15974        plt_offset + 8 <= plt->size && s < send;
15975        plt_offset += entry_size)
15976     {
15977       bfd_vma gotplt_addr;
15978       const char *suffix;
15979       bfd_vma gotplt_hi;
15980       bfd_vma gotplt_lo;
15981       size_t suffixlen;
15982 
15983       opcode = bfd_get_micromips_32 (abfd, plt_data + plt_offset + 4);
15984 
15985       /* Check if the second word matches the expected MIPS16 instruction.  */
15986       if (opcode == 0x651aeb00)
15987 	{
15988 	  if (micromips_p)
15989 	    return -1;
15990 	  /* Truncated table???  */
15991 	  if (plt_offset + 16 > plt->size)
15992 	    break;
15993 	  gotplt_addr = bfd_get_32 (abfd, plt_data + plt_offset + 12);
15994 	  entry_size = 2 * ARRAY_SIZE (mips16_o32_exec_plt_entry);
15995 	  suffixlen = sizeof (m16suffix);
15996 	  suffix = m16suffix;
15997 	  other = STO_MIPS16;
15998 	}
15999       /* Likewise the expected microMIPS instruction (no insn32 mode).  */
16000       else if (opcode == 0xff220000)
16001 	{
16002 	  if (!micromips_p)
16003 	    return -1;
16004 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset) & 0x7f;
16005 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16006 	  gotplt_hi = ((gotplt_hi ^ 0x40) - 0x40) << 18;
16007 	  gotplt_lo <<= 2;
16008 	  gotplt_addr = gotplt_hi + gotplt_lo;
16009 	  gotplt_addr += ((plt->vma + plt_offset) | 3) ^ 3;
16010 	  entry_size = 2 * ARRAY_SIZE (micromips_o32_exec_plt_entry);
16011 	  suffixlen = sizeof (microsuffix);
16012 	  suffix = microsuffix;
16013 	  other = STO_MICROMIPS;
16014 	}
16015       /* Likewise the expected microMIPS instruction (insn32 mode).  */
16016       else if ((opcode & 0xffff0000) == 0xff2f0000)
16017 	{
16018 	  gotplt_hi = bfd_get_16 (abfd, plt_data + plt_offset + 2) & 0xffff;
16019 	  gotplt_lo = bfd_get_16 (abfd, plt_data + plt_offset + 6) & 0xffff;
16020 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16021 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16022 	  gotplt_addr = gotplt_hi + gotplt_lo;
16023 	  entry_size = 2 * ARRAY_SIZE (micromips_insn32_o32_exec_plt_entry);
16024 	  suffixlen = sizeof (microsuffix);
16025 	  suffix = microsuffix;
16026 	  other = STO_MICROMIPS;
16027 	}
16028       /* Otherwise assume standard MIPS code.  */
16029       else
16030 	{
16031 	  gotplt_hi = bfd_get_32 (abfd, plt_data + plt_offset) & 0xffff;
16032 	  gotplt_lo = bfd_get_32 (abfd, plt_data + plt_offset + 4) & 0xffff;
16033 	  gotplt_hi = ((gotplt_hi ^ 0x8000) - 0x8000) << 16;
16034 	  gotplt_lo = (gotplt_lo ^ 0x8000) - 0x8000;
16035 	  gotplt_addr = gotplt_hi + gotplt_lo;
16036 	  entry_size = 4 * ARRAY_SIZE (mips_exec_plt_entry);
16037 	  suffixlen = sizeof (mipssuffix);
16038 	  suffix = mipssuffix;
16039 	  other = 0;
16040 	}
16041       /* Truncated table???  */
16042       if (plt_offset + entry_size > plt->size)
16043 	break;
16044 
16045       for (i = 0;
16046 	   i < count && p[pi].address != gotplt_addr;
16047 	   i++, pi = (pi + bed->s->int_rels_per_ext_rel) % counti);
16048 
16049       if (i < count)
16050 	{
16051 	  size_t namelen;
16052 	  size_t len;
16053 
16054 	  *s = **p[pi].sym_ptr_ptr;
16055 	  /* Undefined syms won't have BSF_LOCAL or BSF_GLOBAL set.  Since
16056 	     we are defining a symbol, ensure one of them is set.  */
16057 	  if ((s->flags & BSF_LOCAL) == 0)
16058 	    s->flags |= BSF_GLOBAL;
16059 	  s->flags |= BSF_SYNTHETIC;
16060 	  s->section = plt;
16061 	  s->value = plt_offset;
16062 	  s->name = names;
16063 	  s->udata.i = other;
16064 
16065 	  len = strlen ((*p[pi].sym_ptr_ptr)->name);
16066 	  namelen = len + suffixlen;
16067 	  if (names + namelen > nend)
16068 	    break;
16069 
16070 	  memcpy (names, (*p[pi].sym_ptr_ptr)->name, len);
16071 	  names += len;
16072 	  memcpy (names, suffix, suffixlen);
16073 	  names += suffixlen;
16074 
16075 	  ++s, ++n;
16076 	  pi = (pi + bed->s->int_rels_per_ext_rel) % counti;
16077 	}
16078     }
16079 
16080   free (plt_data);
16081 
16082   return n;
16083 }
16084 
16085 void
16086 _bfd_mips_post_process_headers (bfd *abfd, struct bfd_link_info *link_info)
16087 {
16088   struct mips_elf_link_hash_table *htab;
16089   Elf_Internal_Ehdr *i_ehdrp;
16090 
16091   i_ehdrp = elf_elfheader (abfd);
16092   if (link_info)
16093     {
16094       htab = mips_elf_hash_table (link_info);
16095       BFD_ASSERT (htab != NULL);
16096 
16097       if (htab->use_plts_and_copy_relocs && !htab->is_vxworks)
16098 	i_ehdrp->e_ident[EI_ABIVERSION] = 1;
16099     }
16100 
16101   _bfd_elf_post_process_headers (abfd, link_info);
16102 
16103   if (mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64
16104       || mips_elf_tdata (abfd)->abiflags.fp_abi == Val_GNU_MIPS_ABI_FP_64A)
16105     i_ehdrp->e_ident[EI_ABIVERSION] = 3;
16106 }
16107