Use official ELF machine number for moxie
[external/binutils.git] / bfd / elfxx-mips.c
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 \f
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 }